C Primer 習題解答 第一章

2021-04-18 20:23:24 字數 4810 閱讀 5409

自己動手做習題,加深理解。

這些都是自己做的,如果有不對或不妥的地方,請指出,謝謝。 習題

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 不合法 的前面沒有表示式 修改方法之一 只...