自己動手做習題,加深理解。
這些都是自己做的,如果有不對或不妥的地方,請指出,謝謝。 習題
1.3編乙個程式,在標準輸出上列印
「hello world」。
解答:
#include
int main()
習題1.4
我們的程式利用內建的加法操作符
「+」來產生兩個數的和。編寫程式,使用乘法操作符
「*」產生兩個數的積。
解答:#include
int main()
習題1.5
我們的程式使用了一條較長的輸出語句。重寫程式,使用單獨的語句列印每乙個運算元。
解答:見習題
1.4
程式。
習題1.6
解釋下面的程式段:
std::cout << "the sum of " << v1;
<< " and " << v2;
<< " is " << v1 + v2
<< std::endl;
這段**合法嗎?如果合法,為什麼?如果不合法,又為什麼?
解答:這段**是不合法的,由於第一行的結尾有乙個分號
; ,導致後面幾行沒有左運算元。去掉第一行和第二行的分號,**就合法了。 習題
1.8指出下列輸出語句哪些
(如果有
)是合法的。
std::cout << " /* ";
std::cout << " */";
std::cout << /* " */ " */;
**結果,然後編譯包含上述三條語句的程式,檢查你的答案。糾正所遇到的錯誤。
解答:第一和第二行的語句是合法的,因為
/* 和
*/都被包含在
" "裡,當作字串處理。而第三行第乙個
"被注釋掉,相當於
std::cout << " */ ;
這條語句顯然是不合法的。 習題
1.9下列迴圈做什麼?
sum
的最終值是多少?
int sum = 0;
for ( int i = -100; i <= 100; ++i)
sum += i;
解答:此程式的功能是求從-
100到
100之間整數的和,結果是
0;自己可編寫此程式驗證一下。 習題
1.10
用for
迴圈程式設計,求從
50 到
100
的所有自然數的和。然後用
while
迴圈重寫該程式。
解答: 用
for
迴圈實現**:
#include
int main()
用while
迴圈實現**:
#include
int main()
std::cout << "the sum of 50 to 100 inclusive is " << sum << std::endl;
return 0; }
在以後的習題中將省略
#include
main() 習題
1.11
用while
迴圈程式設計,輸出
10 到
0 遞減的自然數。然後用
for
迴圈重寫該程式。
解答:while
迴圈實現方法:
int i = 10;
while ( i >= 0 )
for
迴圈實現方法:
for ( int i = 10; i >= 0; -- i ) 習題
1.12
對比前面兩個習題中所寫的迴圈。兩種形式各有何優缺點?
解答:對於
while
迴圈,初始化變數的定義要在迴圈的外部,迴圈結束之後仍可以對該變數進行訪問;對於
for
迴圈,變數的初始化定義在語句頭
(當然也可以在外部定義
),在語句頭定義的變數,只能在迴圈內部使用,迴圈結束之後不可訪問。在大多數情況下,
while
迴圈和for
迴圈都可以使用,如果確定迴圈的次數,一般使用
for
迴圈,**相對簡潔;而對於迴圈次數不確定的情況,應該考慮使用
while
迴圈,就像書中
1.4.4
節 讀入未知數目的輸入 示例。 習題
1.14
如果輸入值相等,本節展示的程式將產生什麼問題?
解答:如果輸入的兩個值相等,即程式中
lower == upper,
迴圈體內的語句執行一次,
sum值等於使用者的輸入值,而不是兩個值的和。 習題
1.16
編寫程式,輸出使用者輸入的兩個數中的較大者。
解答:std::cout << "please enter two numbers:" << std::endl;
int v1,v2;
std::cin >> v1 >> v2;
int upper;
if ( v1 >= v2 )
else
std::cout << "the greater of " << v1 << " and " << v2 << " is " << upper << std::endl; 習題
1.17
編寫程式,要求使用者輸入一組數。輸出資訊說明其中有多少個負數。
解答:std::cout << "please enter some numbers:" << std::endl;
int negative = 0;
int val;
while ( std::cin.peek() != '/n' && std::cin >> val) }
std::cout << "there are " << negative << " negative numbers."
<< std::endl;
習題1.18
編寫程式,提示使用者輸入兩個數並將這兩個數範圍內的每個數寫到標準輸出。
解答:std::cout << "please enter two numbers:" << std::endl;
int val1, val2;
std::cin >> val1 >> val2;
int lower, upper;
if ( val1 >= val2 )
else
std::cout << "there are the numbers between "
<< lower << " and "
<< upper << " :"
<< std::endl;
for ( int i = lower; i <= upper; ++ i ) 習題
1.19
如果上題給定數
1000
和 2000
,程式將產生什麼結果?修改程式,使每一行輸出不超過
10個數。
解答:修改上題程式如下:
std::cout << "please enter two numbers:" << std::endl;
int val1, val2;
std::cin >> val1 >> val2;
int lower, upper;
if ( val1 >= val2 )
else
std::cout << "there are the numbers between "
<< lower << " and "
<< upper << " :"
<< std::endl;
for ( int i = lower, j = 0; i <= upper; ++ i ) }
習題 1.20 編寫程式,求使用者指定範圍內的數的和,省略設定上界和下界的if測試。假定輸入數是7和3,按照這個順序,**程式執行結果。然後按照給定的數是7和3執行程式,看結果是否與你**的相符。如果不相符,反覆研究關於for和while迴圈的討論直到弄清楚其中的原因。
解答:如果省略設定上界和下界的if測試,按照7和3的順序輸入數值,那麼for或者while迴圈體不會被執行,因為條件不成立。我們關心的是,如何不用if測試上界和下界,怎麼完成這個功能?再擴充套件一下,考慮這樣乙個問題:不用if、switch等條件語句,怎麼判斷兩個數的大小?計算機中儲存資料是用二進位制儲存的,最高位為0代表正數,最高位為1表示負數。如果我們把這兩個數用位運算分別向右位移一定的位數,都用最高位填充。那麼,正數字移的結果就是0,負數字移的結果是-1。有了這個思路,**就好寫了:
std::cout << "please enter two numbers:"
<< std::endl;
int val1, val2;
std::cin >> val1 >> val2;
int n[2] = ;
int temp = ( val1 - val2) >> 16;
int lower, upper;
// 如果val1 >= val2,temp 就等於0, lower = n[1],upper = n[0]
lower = n[temp + 1];
upper = n[(temp + 2) % 2];
std::cout << "there are the numbers between "
<< lower << " and "
<< upper << " :"
<< std::endl;
for ( int i = lower, j = 0; i <= upper; ++ i ) }
c primer第一章習題
以下程式全在vs.net 2003編譯,執行通過 習題1.3 編乙個程式,在標準輸出上列印 hello,world 答 include int main return 0 int main return 0 習題1.11 用while迴圈程式設計,輸出10到0遞減的自然數.然後用for迴圈重寫該程式...
程式設計珠璣 第一章習題解答
4.生成 0,n 的之間k個不重複的隨機整數。include include include include using namespace std const int n 10000000 const int k 10000000 int randint int l,int r int a n i...
C Primer 課後習題第一章
重新開始 要加油,加油,加油啊!黃鵬宇.我一定會找到工作的.fight!本門部分答案參考於 c primer 習題集 visual studio 官方文件如下 c 程式 字尾 cpp c程式 字尾 c 標頭檔案 h includeint main void 不合法 的前面沒有表示式 修改方法之一 只...