




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、習(xí)題 1.1查看所用的編譯器文檔,了解它所用的文件命名規(guī)范。編譯并運(yùn)行本節(jié)的main程序。【解答】一般而言,C+編譯器要求待編譯的程序保存在文件中。C+程序中一般涉及兩類文件:頭文件和源文件。大多數(shù)系統(tǒng)中,文件的名字由文件名和文件后綴(又稱擴(kuò)展名)組成。文件后綴通常表明文件的類型,如頭文件的后綴可以是.h或.hpp 等;源文件的后綴可以是.cc 或.cpp 等,具體的后綴與使用的編譯器有關(guān)。通??梢酝ㄟ^(guò)編譯器所提供的聯(lián)機(jī)幫助文檔了解其文件命名規(guī)范。習(xí)題1.2修改程序使其返回-1。返回值-1 通常作為程序運(yùn)行失敗的指示器。然而,系統(tǒng)不同,如何(甚至是否)報(bào)告main 函數(shù)運(yùn)行失敗也不同。重新編譯
2、并再次運(yùn)行程序,看看你的系統(tǒng)如何處理main 函數(shù)的運(yùn)行失敗指示器?!窘獯稹抗P者所使用的Windows操作系統(tǒng)并不報(bào)告main 函數(shù)的運(yùn)行失敗,因此,程序返回-1 或返回0 在運(yùn)行效果上沒(méi)有什么區(qū)別。但是,如果在DOS 命令提示符方式下運(yùn)行程序,然后再鍵入echo %ERRORLEVEL%命令,則系統(tǒng)會(huì)顯示返回值-1。習(xí)題1.3編一個(gè)程序,在標(biāo)準(zhǔn)輸出上打印“Hello, World”。#include <iostream>#include "windows.h"using namespace std;int main()system("CLS"
3、;);cout<<"Hello,World!"<<endl;return 0;習(xí)題1.4我們的程序利用內(nèi)置的加法操作符“+”來(lái)產(chǎn)生兩個(gè)數(shù)的和。編寫(xiě)程序,使用乘法操作符“*”產(chǎn)生兩個(gè)數(shù)的積。#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");cout<<"Enter two numbers:"<<endl;int v1,v2;cin>>
4、;v1>>v2;cout<<"The product of "<<v1<<" and "<<v2<<" is "<<v1*v2<<endl;return 0;習(xí)題1.5我們的程序使用了一條較長(zhǎng)的輸出語(yǔ)句。重寫(xiě)程序,使用單獨(dú)的語(yǔ)句打印每一個(gè)操作數(shù)。#include <iostream>#include "windows.h"using namespace std;int main()system("C
5、LS");cout << "Enter two numbers:" << endl;int v1, v2;cin >> v1 >> v2;cout << "The sum of "cout << v1;cout << " and "cout << v2;cout << " is "cout << v1 + v2 ;cout << endl;return 0;習(xí)題1.6解釋下面
6、的程序段:std:cout << "The sum of " << v1;<< " and " << v2;<< " is " << v1 + v2<< std:endl;這段代碼合法嗎?如果合法,為什么?如果不合法,又為什么?【解答】這段代碼不合法。注意,第1、2、4 行的末尾有分號(hào),表示這段代碼包含三條語(yǔ)句,即第1、2 行各為一個(gè)語(yǔ)句,第3、4 行構(gòu)成一個(gè)語(yǔ)句?!?lt;<”為二元操作符,在第2、3 兩條語(yǔ)句中,第一個(gè)“<<”缺少
7、左操作數(shù),因此不合法。在第2、3 行的開(kāi)頭加上“std:cout”,即可更正。習(xí)題1.7編譯有不正確嵌套注釋的程序?!窘獯稹坑勺⑨寣?duì)嵌套導(dǎo)致的編譯器錯(cuò)誤信息通常令人迷惑。例如,在筆者所用的編譯器中編譯1.3 節(jié)中給出的帶有不正確嵌套注釋的程序:#include <iostream>/* comment pairs /* */ cannot nest.* "cannot nest" is considered source code,* as is the rest of the program*/int main()return 0;編譯器會(huì)給出如下錯(cuò)誤信息:e
8、rror C2143: syntax error : missing '' before '<'error C2501: 'include' : missing storage-class or type specifierswarning C4138: '*/' found outside of comment (第6 行)error C2143: syntax error : missing '' before '' (第8 行)error C2447: '' : miss
9、ing function header (old-style formal list?)(第8 行)習(xí)題1.8指出下列輸出語(yǔ)句哪些(如果有)是合法的。std:cout << "/*"std:cout << "*/"std:cout << /* "*/" */;預(yù)測(cè)結(jié)果,然后編譯包含上述三條語(yǔ)句的程序,檢查你的答案。糾正所遇到的錯(cuò)誤。【解答】第一條和第二條語(yǔ)句合法。第三條語(yǔ)句中<<操作符之后至第二個(gè)雙引號(hào)之前的部分被注釋掉了,導(dǎo)致<<操作符的右操作數(shù)不是一個(gè)完整的字符串,所以不
10、合法。在分號(hào)之前加上一個(gè)雙引號(hào)即可更正。習(xí)題1.9下列循環(huán)做什么? sum 的最終值是多少?int sum = 0;for (int i = -100; i <= 100; +i)sum += i;【解答】該循環(huán)求-100100 之間所有整數(shù)的和(包括-100 和100)。sum 的最終值是0。習(xí)題1.10用for 循環(huán)編程,求從50100 的所有自然數(shù)的和。然后用while 循環(huán)重寫(xiě)該程序?!窘獯稹坑胒or 循環(huán)編寫(xiě)的程序如下:#include <iostream>#include "windows.h"int main()int sum = 0;sys
11、tem("CLS");for (int i = 50; i <= 100; +i)sum += i;std:cout << "Sum of 50 to 100 inclusive is "<< sum << std:endl;return 0;用while 循環(huán)編寫(xiě)的程序如下:#include <iostream>#include "windows.h"using namespace std;int main()int sum=0, i=50;system("CLS&qu
12、ot;);while(i<=100)sum+=i;i+;cout<<"Sum of 50 to 100 inclusive is "<< sum <<endl;return 0;習(xí)題1.11用while 循環(huán)編程,輸出100 遞減的自然數(shù)。然后用for 循環(huán)重寫(xiě)該程序。【解答】用while 循環(huán)編寫(xiě)的程序如下:#include <iostream>#include "windows.h"using namespace std;int main()int i=10;system("CLS&qu
13、ot;);while(i>=0)cout<<i<<" "i-;cout<<endl;return 0;用for 循環(huán)編寫(xiě)的程序如下:#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");for (int i=10;i>=0;i-)cout<<i<<" "cout<<endl;return 0;習(xí)題1.12對(duì)比前
14、面兩個(gè)習(xí)題中所寫(xiě)的循環(huán)。兩種形式各有何優(yōu)缺點(diǎn)?【解答】在for 循環(huán)中,循環(huán)控制變量的初始化和修改都放在語(yǔ)句頭部分,形式較簡(jiǎn)潔,且特別適用于循環(huán)次數(shù)已知的情況。在while 循環(huán)中,循環(huán)控制變量的初始化一般放在while 語(yǔ)句之前,循環(huán)控制變量的修改一般放在循環(huán)體中,形式上不如for 語(yǔ)句簡(jiǎn)潔,但它比較適用于循環(huán)次數(shù)不易預(yù)知的情況(用某一條件控制循環(huán))。兩種形式各有優(yōu)點(diǎn),但它們?cè)诠δ苌鲜堑葍r(jià)的,可以相互轉(zhuǎn)換。習(xí)題1.13編譯器不同,理解其診斷內(nèi)容的難易程度也不同。編寫(xiě)一些程序,包含本小節(jié)“再談編譯”部分討論的那些常見(jiàn)錯(cuò)誤。研究編譯器產(chǎn)生的信息,這樣你在編譯更復(fù)雜的程序遇到這些信息時(shí)不會(huì)陌生。【
15、解答】對(duì)于程序中出現(xiàn)的錯(cuò)誤,編譯器通常會(huì)給出簡(jiǎn)略的提示信息,包括錯(cuò)誤出現(xiàn)的文件及代碼行、錯(cuò)誤代碼、錯(cuò)誤性質(zhì)的描述。如果要獲得關(guān)于該錯(cuò)誤的詳細(xì)信息,一般可以根據(jù)編譯器給出的錯(cuò)誤代碼在其聯(lián)機(jī)幫助文檔中查找。習(xí)題1.14如果輸入值相等,本節(jié)展示的程序?qū)a(chǎn)生什么問(wèn)題?【解答】sum 的值即為輸入值。因?yàn)檩斎氲膙1 和v2 值相等(假設(shè)為x),所以lower 和upper 相等,均為x。for 循環(huán)中的循環(huán)變量val 初始化為lower,從而val<=upper為真,循環(huán)體執(zhí)行一次,sum 的值為val(即輸入值x);然后val 加1,val 的值就大于upper,循環(huán)執(zhí)行結(jié)束。習(xí)題1.15用兩個(gè)
16、相等的值作為輸入編譯并運(yùn)行本節(jié)中的程序。將實(shí)際輸出與你在習(xí)題1.14 中所做的預(yù)測(cè)相比較,解釋實(shí)際結(jié)果和你預(yù)計(jì)的結(jié)果間的不相符之處?!窘獯稹窟\(yùn)行1.4.3 節(jié)中給出的程序,輸入兩個(gè)相等的值(例如3,3),則程序輸出為:Sum of 3 to 3 inclusive is 3與習(xí)題1.14 中給出的預(yù)測(cè)一致。習(xí)題1.16編寫(xiě)程序,輸出用戶輸入的兩個(gè)數(shù)中的較大者。#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");cout<&l
17、t;"Enter two numbers: "<<endl;int v1,v2;cin>>v1>>v2;if(v1>=v2)cout<<"The bigger number is :"<<v1<<endl;elsecout<<"The bigger number is :"<<v2<<endl;return 0;習(xí)題1.17編寫(xiě)程序,要求用戶輸入一組數(shù)。輸出信息說(shuō)明其中有多少個(gè)負(fù)數(shù)。#include <iostrea
18、m>#include "windows.h"using namespace std;int main()int amount = 0, value;system("CLS");/ 讀入數(shù)據(jù)直到遇見(jiàn)文件結(jié)束符,計(jì)算所讀入的負(fù)數(shù)的個(gè)數(shù)while (cin >> value)if (value <= 0)+amount;cout << "Amount of all negative values read is"<< amount << std:endl;return 0;習(xí)題1.
19、18編寫(xiě)程序,提示用戶輸入兩個(gè)數(shù)并將這兩個(gè)數(shù)范圍內(nèi)的每個(gè)數(shù)寫(xiě)到標(biāo)準(zhǔn)輸出。#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");cout<<"Enter two numbers :"<<endl;int v1,v2;cin>>v1>>v2;int lower,upper;lower=v1;upper=v2;if(v1>=v2)upper=v1;lower=v2;
20、cout<<"Values of " << lower << " to "<< upper << " inclusive are: " <<endl;for(;lower<=upper;lower+)cout<<lower<<" "cout<<endl;return 0;習(xí)題1.19如果上題給定數(shù)1000 和2000,程序?qū)a(chǎn)生什么結(jié)果?修改程序,使每一行輸出不超過(guò)10 個(gè)數(shù)?!窘獯稹克袛?shù)的輸出連在一
21、起,不便于閱讀。程序修改如下:#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");cout<<"Enter two numbers :"<<endl;int v1,v2;cin>>v1>>v2;int lower,upper;lower=v1;upper=v2;if(v1>=v2)upper=v1;lower=v2;cout<<"Val
22、ues of " << lower << " to "<< upper << " inclusive are: " <<endl;for(int count=1;lower<=upper;lower+,count+)cout<<lower<<" "if(count%10=0)cout<<endl;cout<<endl;return 0;習(xí)題1.20編寫(xiě)程序,求用戶指定范圍內(nèi)的數(shù)的和,省略設(shè)置上界和下界的if 測(cè)試
23、。假定輸入數(shù)是7 和3,按照這個(gè)順序,預(yù)測(cè)程序運(yùn)行結(jié)果。然后按照給定的數(shù)是7 和3 運(yùn)行程序,看結(jié)果是否與你預(yù)測(cè)的相符。如果不相符,反復(fù)研究關(guān)于for 和while 循環(huán)的討論直到弄清楚其中的原因。#include <iostream>#include "windows.h"using namespace std;int main()system("CLS");cout<<"Enter two numbers :"<<endl;int v1,v2,sum=0;cin>>v1>>
24、;v2;for(int val=v1;val<=v2;val+)sum+=val;cout<<"Sum of " << v1<< " to " << v2<< " inclusive is "<< sum << endl;return 0;如果輸入數(shù)據(jù)為7 和3,則v1 值為7,v2 值為3。for 語(yǔ)句頭中將val 的初始值設(shè)為7,第一次測(cè)試表達(dá)式val <= v2 時(shí),該表達(dá)式的值為false,for 語(yǔ)句的循環(huán)體一次也不執(zhí)行,所以求和
25、結(jié)果sum 為0。習(xí)題1.21本書(shū)配套網(wǎng)站()的第1 章的代碼目錄下有Sales_ item.h 源文件。復(fù)制該文件到你的工作目錄。編寫(xiě)程序,循環(huán)遍歷一組書(shū)的銷(xiāo)售交易,讀入每筆交易并將交易寫(xiě)至標(biāo)準(zhǔn)輸出。#include <iostream>#include "Sales_item.h"#include "windows.h"using namespace std;int main()Sales_item book;system("CLS");cout << "Enter transactions:&q
26、uot; <<endl;while (cin >> book) / 輸出ISBN,售出書(shū)的本數(shù),總收入,平均價(jià)格cout << "ISBN, number of copies sold, "<< "total revenue, and average price are: "<<endl;cout << book <<endl;return 0;習(xí)題1.22編寫(xiě)程序,讀入兩個(gè)具有相同ISBN 的Sales_item 對(duì)象并產(chǎn)生它們的和。#include <iostr
27、eam>#include "Sales_item.h"#include "windows.h"using namespace std;int main()Sales_item trans1, trans2;/ 讀入交易system("CLS");cout << "Enter two transactions:" <<endl;cin >> trans1 >> trans2;if (trans1.same_isbn(trans2)cout << &qu
28、ot;The total information: " <<endl<< "ISBN, number of copies sold, "<< "total revenue, and average price are:"<< endl << trans1 + trans2;elsecout << "The two transactions have different ISBN."<<endl;return 0;習(xí)題1.23編寫(xiě)程序,讀入幾個(gè)
29、具有相同ISBN 的交易,輸出所有讀入交易的和。#include <iostream>#include "Sales_item.h"#include "windows.h"using namespace std;int main()Sales_item total, trans;system("CLS");cout << "Enter transactions:" <<endl;if (cin >> total) while (cin >> trans)i
30、f (total.same_isbn(trans) / ISBN 相同total = total + trans;else/ ISBN 不同cout << "Different ISBN." <<endl;return -1;/ 輸出交易之和cout << "The total information: " <<endl<< "ISBN, number of copies sold, "<< "total revenue, and average pri
31、ce are:"<<endl << total;elsecout << "No data?!" <<endl;return -1;return 0;習(xí)題1.24編寫(xiě)程序,讀入幾筆不同的交易。對(duì)于每筆新讀入的交易,要確定它的ISBN 是否和以前的交易的ISBN 一樣,并且記下每一個(gè)ISBN 的交易的總數(shù)。通過(guò)給定多筆不同的交易來(lái)測(cè)試程序。這些交易必須代表多個(gè)不同的ISBN,但是每個(gè)ISBN的記錄應(yīng)分在同一組。#include <iostream>#include "Sales_item.h&quo
32、t;#include "windows.h"using namespace std;int main()Sales_item trans1, trans2;int amount;system("CLS");cout << "Enter transactions:" <<endl;cin >> trans1;amount=1;while (cin >> trans2)if (trans1.same_isbn(trans2)+amount;elsecout << "Tr
33、ansaction amount of previous ISBN: "<< amount <<endl;trans1 = trans2;amount=1;cout << "Transaction amount of the last ISBN: "<< amount <<endl;return 0;/*習(xí)題1.25使用源自本書(shū)配套網(wǎng)站的Sales_item.h 頭文件,編譯并執(zhí)行1.6 節(jié)給出的書(shū)店程序。*/習(xí)題1.26在書(shū)店程序中,我們使用了加法操作符而不是復(fù)合賦值操作符將trans 加到total
34、中,為什么我們不使用復(fù)合賦值操作符?【解答】因?yàn)樵?.5.1 節(jié)中提及的Sales_item 對(duì)象上的操作中只包含了+和=,沒(méi)有包含+=操作。(但事實(shí)上,使用Sales_item.h 文件,已經(jīng)可以用+=操作符取代=和+操作符的復(fù)合使用。)習(xí)題2.1int、long 和short 類型之間有什么差別?【解答】它們的最小存儲(chǔ)空間不同,分別為16 位、32 位和16 位。一般而言,short 類型為半個(gè)機(jī)器字(word)長(zhǎng),int 類型為一個(gè)機(jī)器字長(zhǎng),而long 類型為一個(gè)或兩個(gè)機(jī)器字長(zhǎng)(在32 位機(jī)器中,int 類型和long 類型的字長(zhǎng)通常是相同的)。因此,它們的表示范圍不同。習(xí)題2.2uns
35、igned 和signed 類型有什么差別?【解答】前者為無(wú)符號(hào)類型,只能表示大于或等于0 的數(shù)。后者為帶符號(hào)類型,可以表示正數(shù)、負(fù)數(shù)和0。習(xí)題2.3如果在某機(jī)器上short 類型占16 位,那么可以賦給short 類型的最大數(shù)是什么?unsigned short 類型的最大數(shù)又是什么?【解答】若在某機(jī)器上short 類型占16 位,那么可以賦給short 類型的最大數(shù)是215-1,即32767;而unsigned short 類型的最大數(shù)為216-1,即65535。習(xí)題2.4當(dāng)給16 位的unsigned short 對(duì)象賦值100000 時(shí),賦的值是什么?【解答】34464。100000
36、超過(guò)了16 位的unsigned short 類型的表示范圍,編譯器對(duì)其二進(jìn)制表示截取低16 位,相當(dāng)于對(duì)65536 求余(求模,%),得34464。習(xí)題2.5float 類型和double 類型有什么差別?【解答】二者的存儲(chǔ)位數(shù)不同(一般而言,float 類型為32 個(gè)二進(jìn)制位,double 類型為64 個(gè)二進(jìn)制位),因而取值范圍不同,精度也不同(float 類型只能保證6 位有效數(shù)字,而double 類型至少能保證10 位有效數(shù)字)。習(xí)題2.6要計(jì)算抵押貸款的償還金額,利率、本金和付款額應(yīng)分別選用哪種類型?解釋你選擇的理由?!窘獯稹坷士梢赃x擇float 類型,因?yàn)槔释ǔ榘俜种畮住R话?/p>
37、只保留到小數(shù)點(diǎn)后兩位,所以6 位有效數(shù)字就足以表示了。本金可以選擇long 類型,因?yàn)楸窘鹜ǔ檎麛?shù)。long 類型可表示的最大整數(shù)一般為231-1(即2147483647),應(yīng)該足以表示了。付款額一般為實(shí)數(shù),可以選擇double 類型,因?yàn)閒loat 類型的6 位有效數(shù)字可能不足以表示。習(xí)題2.7解釋下列字面值常量的不同之處。(a) 'a',L'a',"a",L"a"(b) 10,10u,10L,10uL,012,0xC(c) 3.14,3.14f,3.14L【解答】'a',L'a',&q
38、uot;a",L"a"'a'為char 型字面值,L'a'為wchar_t 型字面值,"a"為字符串字面值,L"a"為寬字符串字面值。(b) 10,10u,10L,10uL,012,0xC10 為int 型字面值,10u 為unsigned 型字面值,10L 為long 型字面值,10uL為unsigned long 型字面值,012 為八進(jìn)制表示的int 型字面值,0xC 為十六進(jìn)制表示的int 型字面值。(c) 3.14,3.14f,3.14L3.14 為double 型字面值,3.14f
39、 為float 型字面值,3.14L 為long double 型字面值。習(xí)題2.8確定下列字面值常量的類型:(a) 10 (b) -10u (c) -10. (d) -10e-2【解答】(a) int 型(b) unsigned int 型(c) double 型(d) double 型習(xí)題2.9下列哪些(如果有)是非法的?(a) "Who goes with F145rgus?012"(b) 3.14e1L (c) "two" L"some"(d) 1024f (e) 3.14UL(f) "multiple lineco
40、mment"【解答】(c) 非法。因?yàn)樽址置嬷蹬c寬字符串字面值的連接是未定義的。(d) 非法。因?yàn)檎麛?shù)1024 后面不能帶后綴f。(e) 非法。因?yàn)楦↑c(diǎn)字面值不能帶后綴U。(f) 非法。因?yàn)榉謨尚袝?shū)寫(xiě)的字符串字面值必須在第一行的末尾加上反斜線。習(xí)題2.10使用轉(zhuǎn)義字符編寫(xiě)一段程序,輸出2M,然后換行。修改程序,輸出2,跟著一個(gè)制表符,然后是M,最后是換行符?!窘獯稹枯敵?M、然后換行的程序段:/ 輸出"2M"和換行字符std:cout << "2M" << 'n'修改后的程序段:/ 輸出'2&
41、#39;, 't', 'M'和換行字符std:cout << '2' << 't' << 'M' << 'n'習(xí)題2.11編寫(xiě)程序,要求用戶輸入兩個(gè)數(shù)底數(shù)(base)和指數(shù)(exponent),輸出底數(shù)的指數(shù)次方的結(jié)果。#include <iostream>#include "windows.h"using namespace std;int main()int base,exponent;long result=1;s
42、ystem("CLS");cout<<"Enter base and exponent :"<<endl;cin>>base>>exponent;if(exponent<0)cout<<"Exponent can't be smaller than 0"<<endl;return -1;if(exponent>0)for(int cnt=1;cnt<=exponent;cnt+)result*=base;cout<<base&
43、lt;<" raised to the power of "<<exponent<<": "<<result<<endl;return 0;習(xí)題2.12區(qū)分左值和右值,并舉例說(shuō)明。【解答】左值(lvalue)就是變量的地址,或者是一個(gè)代表“對(duì)象在內(nèi)存中的位置”的表達(dá)式。右值(rvalue)就是變量的值,見(jiàn)2.3.1 節(jié)。變量名出現(xiàn)在賦值運(yùn)算符的左邊,就是一個(gè)左值;而出現(xiàn)在賦值運(yùn)算符右邊的變量名或字面常量就是一個(gè)右值。例如:val1=val2/8這里的val1 是個(gè)左值,而val2 和8 都是右值。習(xí)題
44、2.13舉出一個(gè)需要左值的例子?!窘獯稹抠x值運(yùn)算符的左邊(被賦值的對(duì)象)需要左值,見(jiàn)習(xí)題2.12。習(xí)題2.14下面哪些(如果有)名字是非法的?更正每個(gè)非法的標(biāo)識(shí)符名字。(a) int double = 3.14159; (b) char _;(c) bool catch-22; (d) char 1_or_2 ='1'(e) float Float = 3.14f;【解答】(a) double 是C+語(yǔ)言中的關(guān)鍵字,不能用作用戶標(biāo)識(shí)符,所以非法。此語(yǔ)句可改為:double dval = 3.14159;。(c) 名字catch-22 中包含在字母、數(shù)字和下劃線之外的字符“-”,
45、所以非法??蓪⑵涓臑椋篶atch_22;。(d) 名字1_or_2 非法,因?yàn)闃?biāo)識(shí)符必須以字母或下劃線開(kāi)頭,不能以數(shù)字開(kāi)頭。可將其改為:one_or_two;。習(xí)題2.15下面兩個(gè)定義是否不同?有何不同?int month = 9, day = 7;int month =09, day = 07;如果上述定義有錯(cuò)的話,那么應(yīng)該怎樣改正呢?【解答】這兩個(gè)定義不同。前者定義了兩個(gè)int 型變量,初值分別為9 和7;后者也定義了兩個(gè)int 型變量,其中day 被初始化為八進(jìn)制值7;而month 的初始化有錯(cuò):試圖將month 初始化為八進(jìn)制值09,但八進(jìn)制數(shù)字范圍為07,所以出錯(cuò)??蓪⒌诙€(gè)定義改為
46、:int month =011, day = 07;習(xí)題2.16假設(shè)calc 是一個(gè)返回double 對(duì)象的函數(shù)。下面哪些是非法定義?改正所有的非法定義。(a) int car = 1024, auto = 2048;(b) int ival = ival;(c) std:cin >> int input_value;(d) double salary = wage = 9999.99;(e) double calc = calc();【解答】(a) 非法:auto 是關(guān)鍵字,不能用作變量名。使用另一變量名,如aut 即可更正。(c) 非法:>>運(yùn)算符后面不能進(jìn)行變量定
47、義。改為:int input_value;std:cin >> input_value;(d) 非法:同一定義語(yǔ)句中不同變量的初始化應(yīng)分別進(jìn)行。改為:double salary = 9999.99, wage = 9999.99;注意,(b)雖然語(yǔ)法上沒(méi)有錯(cuò)誤,但這個(gè)初始化沒(méi)有實(shí)際意義,ival 仍是未初始化的。習(xí)題2.17下列變量的初始值(如果有)是什么?std:string global_str;int global_int;int main()int local_int;std:string local_str;/ .return 0;【解答】global_str 和loca
48、l_str 的初始值均為空字符串,global_int 的初始值為0,local_int 沒(méi)有初始值。習(xí)題2.18解釋下列例子中name 的意義:extern std:string name;std:string name("exercise 3.5a");extern std:string name("exercise 3.5a");【解答】第一條語(yǔ)句是一個(gè)聲明,說(shuō)明std:string 變量name 在程序的其他地方定義。第二條語(yǔ)句是一個(gè)定義,定義了std:string 變量name,并將name 初始化為"exercise 3.5a&qu
49、ot;。第三條語(yǔ)句也是一個(gè)定義,定義了std:string 變量name,并將name 初始化為"exercise 3.5a",但這個(gè)語(yǔ)句只能出現(xiàn)在函數(shù)外部(即,name 是一個(gè)全局變量)。習(xí)題2.19下列程序中j 的值是多少?int i = 42;int main()int i = 100;int j = i;/ .【解答】j 的值是100。j 的賦值所使用到的i 應(yīng)該是main 函數(shù)中定義的局部變量i,因?yàn)榫植孔兞康亩x會(huì)屏蔽全局變量的定義。習(xí)題2.20下列程序段將會(huì)輸出什么?int i = 100, sum = 0;for (int i = 0; i != 10; +
50、i)sum += i;std:cout << i << " " << sum << std:endl;【解答】輸出為:100 45for 語(yǔ)句中定義的變量i,其作用域僅限于for 語(yǔ)句內(nèi)部。輸出的i 值是for 語(yǔ)句之前所定義的變量i 的值。習(xí)題2.21下列程序合法嗎?int sum = 0;for (int i = 0; i != 10; +i)sum += i;std:cout << "Sum from 0 to " << i<< " is " &
51、lt;< sum << std:endl;【解答】不合法。因?yàn)樽兞縤 具有語(yǔ)句作用域,只能在for 語(yǔ)句中使用,輸出語(yǔ)句中使用i 屬非法。習(xí)題2.22下列程序段雖然合法,但是風(fēng)格很糟糕。有什么問(wèn)題呢?怎樣改善?for (int i = 0; i < 100; +i)/ process i【解答】問(wèn)題主要在于使用了具體值100 作為循環(huán)上界:100 的意義在上下文中沒(méi)有體現(xiàn)出來(lái),導(dǎo)致程序的可讀性差;若100 這個(gè)值在程序中出現(xiàn)多次,則當(dāng)程序的需求發(fā)生變化(如將100 改變?yōu)?00)時(shí),對(duì)程序代碼的修改復(fù)雜且易出錯(cuò),導(dǎo)致程序的可維護(hù)性差。改善方法:設(shè)置一個(gè)const 變量(
52、常量)取代100 作為循環(huán)上界使用,并為該變量選擇有意義的名字。習(xí)題2.23下列哪些語(yǔ)句合法?對(duì)于那些不合法的使用,解釋原因。(a) const int buf;(b) int cnt = 0;const int sz = cnt;(c) cnt+; sz+;【解答】(a) 不合法。因?yàn)槎xconst 變量(常量)時(shí)必須進(jìn)行初始化,而buf 沒(méi)有初始化。(b) 合法。(c) 不合法。因?yàn)樾薷牧薱onst變量sz 的值。習(xí)題2.24下列哪些定義是非法的?為什么?如何改正?(a) int ival = 1.01; (b) int &rval1 = 1.01;(c) int &rva
53、l2 = ival; (d) const int &rval3 = 1;【解答】(b)非法。因?yàn)閞val1 是一個(gè)非const引用,非const 引用不能綁定到右值,而1.01 是一個(gè)右值。可改正為:int &rval1 = ival;(假設(shè)ival 是一個(gè)已定義的int 變量)。習(xí)題2.25在習(xí)題2.24 給出的定義下,下列哪些賦值是非法的?如果賦值合法,解釋賦值的作用。(a) rval2 = 3.14159; (b) rval2 = rval3;(c) ival = rval3; (d) rval3 = ival;【解答】(d)非法。因?yàn)閞val3 是一個(gè)const引用,不
54、能進(jìn)行賦值。合法賦值的作用:(a)將一個(gè)double 型字面值賦給int 型變量ival,發(fā)生隱式類型轉(zhuǎn)換,ival 得到的值為3。(b)將int 值1 賦給變量ival。(c)將int 值1 賦給變量ival。習(xí)題2.26(a)中的定義和(b)中的賦值存在哪些不同?哪些是非法的?(a) int ival = 0; (b) ival = ri;const int &ri = 0; ri = ival;【解答】int ival = 0; 定義ival 為int 變量,并將其初始化為0。const int &ri = 0; 定義ri 為const 引用,并將其綁定到右值0。ival
55、 = ri; 將0 值賦給ival。ri = ival; 試圖對(duì)ri 賦值,這是非法的,因?yàn)閞i 是const 引用,不能賦值。習(xí)題2.27下列代碼輸出什么?int i, &ri = i;i = 5; ri =10;std:cout << i << " " << ri << std:endl;【解答】輸出:10 10ri 是i 的引用,對(duì)ri 進(jìn)行賦值,實(shí)際上相當(dāng)于對(duì)i 進(jìn)行賦值,所以輸出i 和ri 的值均為10。習(xí)題2.28編譯以下程序,確定你的編譯器是否會(huì)警告遺漏了類定義后面的分號(hào)。class Foo / empt
56、y / Note: no semicolonint main()return 0;如果編譯器的診斷結(jié)果難以理解,記住這些信息以備后用。【解答】在筆者所用的編譯器中編譯上述程序,編譯器會(huì)給出如下錯(cuò)誤信息:error C2628: 'Foo' followed by 'int' is illegal (did you forget a ''?)(第4 行)warning C4326: return type of 'main' should be 'int or void' instead of'Foo'
57、; (第5 行)error C2440: 'return' : cannot convert from 'int' to 'Foo' (第6 行)也就是說(shuō),該編譯器會(huì)對(duì)遺漏了類定義后面的分號(hào)給出提示。習(xí)題2.29區(qū)分類中的public 部分和private 部分。【解答】類中public 部分定義的成員在程序的任何部分都可以訪問(wèn)。通常在public 部分放置操作,以便程序中的其他部分可以執(zhí)行這些操作。類中private 部分定義的成員只能被作為類的組成部分的代碼(以及該類的友元)訪問(wèn)。通常在private 部分放置數(shù)據(jù),以對(duì)對(duì)象的內(nèi)部數(shù)據(jù)進(jìn)行隱藏
58、。習(xí)題2.30定義表示下列類型的類的數(shù)據(jù)成員:(a) 電話號(hào)碼 (b) 地址(c) 員工或公司 (d) 某大學(xué)的學(xué)生【解答】(a) 電話號(hào)碼class Tel_number public:/.對(duì)象上的操作private:std:string country_number;std:string city_number;std:string phone_number;(b) 地址class Address public:/.對(duì)象上的操作private:std:string country;std:string city;std:string street;std:string number;(c)
59、 員工或公司class Employee public:/ .對(duì)象上的操作private:std:string ID;std:string name;char sex;Address addr;Tel_number tel;class Company public:/ .對(duì)象上的操作private:std:string name;Address addr;Tel_number tel;(d) 某大學(xué)的學(xué)生class Student public:/ .對(duì)象上的操作private:std:string ID;std:string name;char sex;std:string dept; /
60、所在系std:string major;Address home_addr;Tel_number tel;注意,在不同的具體應(yīng)用中,類的設(shè)計(jì)會(huì)有所不同,這里給出的只是一般性的簡(jiǎn)單例子。習(xí)題2.31判別下列語(yǔ)句哪些是聲明,哪些是定義,請(qǐng)解釋原因。(a) extern int ix = 1024 ;(b) int iy ;(c) extern int iz ;(d) extern const int &ri ;【解答】(a)是定義,因?yàn)閑xtern 聲明進(jìn)行了初始化。(b)是定義,變量定義的常規(guī)形式。(c)是聲明,extern 聲明的常規(guī)形式。(d)是聲明,聲明了一個(gè)const 引用。習(xí)題
61、2.32下列聲明和定義哪些應(yīng)該放在頭文件中?哪些應(yīng)該放在源文件中?請(qǐng)解釋原因。(a) int var ;(b) const double pi = 3.1416;(c) extern int total = 255 ;(d) const double sq2 = squt (2.0) ;【解答】(a)、(c)、(d)應(yīng)放在源文件中,因?yàn)?a)和(c)是變量定義,定義通常應(yīng)放在源文件中。(d)中的const 變量sq2 不是用常量表達(dá)式初始化的,所以也應(yīng)該放在源文件中。(b)中的const 變量pi 是用常量表達(dá)式初始化的,應(yīng)該放在頭文件中。參見(jiàn)2.9.1 節(jié)。習(xí)題2.33確定你的編譯器提供了哪些提高警告級(jí)別的選項(xiàng)。使用這些選項(xiàng)重新編譯以前選擇的程序,查看是否會(huì)報(bào)告新的問(wèn)題?!窘獯稹吭诠P者所用的編譯器(Microsoft Visual C+ .NET 2003)中,在Project 菜單中選擇Properties 菜單項(xiàng),在C
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)部年終工作總結(jié)
- 福建廈門(mén)圖書(shū)館招聘試題帶答案分析2024年
- 2023年度“安全生產(chǎn)事故隱患排查”知識(shí)競(jìng)賽考前沖刺練習(xí)題及完整答案詳解
- 2025秋統(tǒng)編版語(yǔ)文四年級(jí)上冊(cè)《習(xí)作:記一次游戲》教學(xué)設(shè)計(jì)
- 《高中語(yǔ)文單元整體教學(xué)的探索和實(shí)踐》
- 國(guó)開(kāi)電大程序設(shè)計(jì)基礎(chǔ)形考任務(wù)1234答案
- 1月保育師習(xí)題+答案
- 寓教于樂(lè)初探小學(xué)音樂(lè)課堂“游戲教學(xué)”策略運(yùn)用
- 2025年靜療試題+答案
- 胎兒護(hù)理 CT 檢查相關(guān)試卷
- 高中英語(yǔ)-Click for a friend教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- (完整版)勞動(dòng)力保證措施
- 廣東省深圳市龍華區(qū)清湖小學(xué)2022-2023學(xué)年小學(xué)六年級(jí)第二學(xué)期小升初數(shù)學(xué)試卷含答案
- 大學(xué)生創(chuàng)新創(chuàng)業(yè)教育完整全套課件
- 國(guó)際貿(mào)易實(shí)務(wù)教程課件-冷柏軍主編
- Unit2 What time is it?A Lets learn(說(shuō)課稿)-2022-2023學(xué)年英語(yǔ)四年級(jí)下冊(cè)
- 上海科學(xué)院事業(yè)單位工作人員招考聘用筆試參考題庫(kù)附答案解析
- MRI檢查技術(shù)規(guī)范
- 肺部小結(jié)節(jié)的術(shù)中定位
- 孕期非產(chǎn)科手術(shù)麻醉-半小時(shí)版
- 并行體系結(jié)構(gòu)(陳國(guó)良版)課后答案
評(píng)論
0/150
提交評(píng)論