C++Primer中文版習(xí)題及詳細(xì)分析_第1頁
C++Primer中文版習(xí)題及詳細(xì)分析_第2頁
C++Primer中文版習(xí)題及詳細(xì)分析_第3頁
C++Primer中文版習(xí)題及詳細(xì)分析_第4頁
C++Primer中文版習(xí)題及詳細(xì)分析_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余13頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

習(xí)題查看所用的編譯器文檔,了解它所用的文件命名規(guī)范。編譯并運(yùn)行本節(jié)的main程序?!窘獯稹恳话愣?,C+魏譯器要求待編譯的程序保存在文件中。C+附序中一般涉及兩類文件:頭文件和源文件。大多數(shù)系統(tǒng)中,文件的名字由文件名和文件后綴(又稱擴(kuò)展名)組成。文件后綴通常表明文件的類型,如頭文件的后綴可以是.h或.hpp等;源文件的后綴可以是.cc或.cpp等,具體的后綴與使用的編譯器有關(guān)。通??梢酝ㄟ^編譯器所提供的聯(lián)機(jī)幫助文檔了解其文件命名規(guī)范。習(xí)題修改程序使其返回-1。返回值-1通常作為程序運(yùn)行失敗的指示器。然而,系統(tǒng)不同,如何(甚至是否)報(bào)告main函數(shù)運(yùn)行失敗也不同。重新編譯并再次運(yùn)行程序,看看你的系統(tǒng)如何處理main函數(shù)的運(yùn)行失敗指示器?!窘獯稹抗P者所使用的Window^作系統(tǒng)并不報(bào)告main函數(shù)的運(yùn)行失敗,因此,程序返回-1或返回0在運(yùn)行效果上沒有什么區(qū)別。但是,如果在DOS命令提示符方式下運(yùn)行程序,然后再鍵入echo%ERRORLEVEW,則系統(tǒng)會(huì)顯示返回值-1。習(xí)題編一個(gè)程序,在標(biāo)準(zhǔn)輸出上打印“Hello,World”。#include<iostream>#include""usingnamespacestd;intmain(){system("CLS");cout<<"Hello,World!"<<endl;return0;}習(xí)題我們的程序利用內(nèi)置的加法操作符“十”來產(chǎn)生兩個(gè)數(shù)的和。編寫程序,使用乘法操作符產(chǎn)生兩個(gè)數(shù)的積。#include<iostream>#include""usingnamespacestd;intmain(){system("CLS");cout<<"Entertwonumbers:"<<endl;intv1,v2;cin>>v1>>v2;cout<<"Theproductof"<<v1<<"and"<<v2<<"is"<<v1*v2<<endl;return0;}習(xí)題我們的程序使用了一條較長(zhǎng)的輸出語句。重寫程序,使用單獨(dú)的語句打印每一個(gè)操作數(shù)。#include<iostream>#include""usingnamespacestd;intmain()(system("CLS");cout<<"Entertwonumbers:"<<endl;intv1,v2;cin>>v1>>v2;cout<<"Thesumof";cout<<v1;cout<<"and";cout<<v2;cout<<"is";cout<<v1+v2;cout<<endl;return0;}習(xí)題解釋下面的程序段:std::cout<<"Thesumof"<<v1;<"and"<<v2;<"is"<<v1+v2<std::endl;這段代碼合法嗎?如果合法,為什么?如果不合法,又為什么?【解答】這段代碼不合法。注意,第1、2、4行的末尾有分號(hào),表示這段代碼包含三條語句,即第1、2行各為一個(gè)語句,第3、4行構(gòu)成一個(gè)語句。“<<”為二元操彳^符,在第2、3兩條語句中,第一個(gè)“<<”缺少左操作數(shù),因此不合法。在第2、3行的開頭加上“std::cout,即可更正。習(xí)題編譯有不正確嵌套注釋的程序?!窘獯稹坑勺⑨寣?duì)嵌套導(dǎo)致的編譯器錯(cuò)誤信息通常令人迷惑。例如,在筆者所用的編譯器中編譯節(jié)中給出的帶有不正確嵌套注釋的程序:#include<iostream>/*commentpairs/**/cannotnest."cannotnest"isconsideredsourcecode,asistherestoftheprogram*/intmain()(return0;)編譯器會(huì)給出如下錯(cuò)誤信息:errorC2143:syntaxerror:missing';'before'<'errorC2501:'include':missingstorage-classortypespecifierswarningC4138:'*/'foundoutsideofcomment(第6行)errorC2143:syntaxerror:missing';'before'{'(第8行)errorC2447:'{':missingfunctionheader(old-styleformallist?)(第8行)習(xí)題指出下列輸出語句哪些(如果有)是合法的。std::cout<<"/*";std::cout<<"*/";std::cout<</*"*/"*/;預(yù)測(cè)結(jié)果,然后編譯包含上述三條語句的程序,檢查你的答案。糾正所遇到的錯(cuò)誤?!窘獯稹康谝粭l和第二條語句合法。第三條語句中<<操作符之后至第二個(gè)雙引號(hào)之前的部分被注釋掉了,導(dǎo)致<<操作符的右操作數(shù)不是一個(gè)完整的字符串,所以不合法。在分號(hào)之前加上一個(gè)雙引號(hào)即可更正。習(xí)題下列循環(huán)做什么?sum的最終值是多少?intsum=0;for(inti=-100;i<=100;++i)sum+=i;【解答】該循環(huán)求-100?100之間所有整數(shù)的和(包括-100和100)。sum的最終值是0o習(xí)題用for循環(huán)編程,求從50?100的所有自然數(shù)的和。然后用while循環(huán)重寫該程序?!窘獯稹坑胒or循環(huán)編寫的程序如下:#include<iostream>#include""intmain(){intsum=0;system("CLS");for(inti=50;i<=100;++i)sum+=i;std::cout<<"Sumof50to100inclusiveis"<<sum<<std::endl;return0;)用while循環(huán)編寫的程序如下:#include<iostream>#include""usingnamespacestd;intmain(){intsum=0,i=50;system("CLS");while(i<=100){sum+=i;i++;)cout<<"Sumof50to100inclusiveis"<<sum<<endl;return0;)習(xí)題用while循環(huán)編程,輸出10~0遞減的自然數(shù)。然后用for循環(huán)重寫該程序【解答】用while循環(huán)編寫的程序如下:#include<iostream>#include""usingnamespacestd;intmain(){inti=10;system("CLS");while(i>=0){cout<<i<<"";i--;)cout<<endl;return0;)用for循環(huán)編寫的程序如下:#include<iostream>#include""usingnamespacestd;intmain(){system("CLS");for(inti=10;i>=0;i--){)cout<<endl;return0;)習(xí)題對(duì)比前面兩個(gè)習(xí)題中所寫的循環(huán)。兩種形式各有何優(yōu)缺點(diǎn)?【解答】在for循環(huán)中,循環(huán)控制變量的初始化和修改都放在語句頭部分,形式較簡(jiǎn)潔,且特別適用于循環(huán)次數(shù)已知的情況。在while循環(huán)中,循環(huán)控制變量的初始化一般放在while語句之前,循環(huán)控制變量的修改一般放在循環(huán)體中,形式上不如for語句簡(jiǎn)潔,但它比較適用于循環(huán)次數(shù)不易預(yù)知的情況(用某一條件控制循環(huán))。兩種形式各有優(yōu)點(diǎn),但它們?cè)诠δ苌鲜堑葍r(jià)的,可以相互轉(zhuǎn)換。習(xí)題編譯器不同,理解其診斷內(nèi)容的難易程度也不同。編寫一些程序,包含本小節(jié)“再談編譯”部分討論的那些常見錯(cuò)誤。研究編譯器產(chǎn)生的信息,這樣你在編譯更復(fù)雜的程序遇到這些信息時(shí)不會(huì)陌生?!窘獯稹繉?duì)于程序中出現(xiàn)的錯(cuò)誤,編譯器通常會(huì)給出簡(jiǎn)略的提示信息,包括錯(cuò)誤出現(xiàn)的文件及代碼行、錯(cuò)誤代碼、錯(cuò)誤性質(zhì)的描述。如果要獲得關(guān)于該錯(cuò)誤的詳細(xì)信息,一般可以根據(jù)編譯器給出的錯(cuò)誤代碼在其聯(lián)機(jī)幫助文檔中查找。習(xí)題如果輸入值相等,本節(jié)展示的程序?qū)a(chǎ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í)題用兩個(gè)相等的值作為輸入編譯并運(yùn)行本節(jié)中的程序。將實(shí)際輸出與你在習(xí)題中所做的預(yù)測(cè)相比較,解釋實(shí)際結(jié)果和你預(yù)計(jì)的結(jié)果間的不相符之處。【解答】運(yùn)行節(jié)中給出的程序,輸入兩個(gè)相等的值(例如3,3),則程序輸出為:Sumof3to3inclusiveis3與習(xí)題中給出的預(yù)測(cè)一致。習(xí)題編寫程序,輸出用戶輸入的兩個(gè)數(shù)中的較大者。#include<iostream>#include""usingnamespacestd;intmain(){system("CLS");cout<<"Entertwonumbers:"<<endl;intv1,v2;cin>>v1>>v2;if(v1>=v2)cout<<"Thebiggernumberis:"<<v1<<endl;elsecout<<"Thebiggernumberis:"<<v2<<endl;return0;}習(xí)題編寫程序,要求用戶輸入一組數(shù)。輸出信息說明其中有多少個(gè)負(fù)數(shù)。#include<iostream>#include""usingnamespacestd;intmain(){intamount=0,value;system("CLS");<<endl;return0;}習(xí)題編寫程序,讀入幾個(gè)具有相同ISBN的交易,輸出所有讀入交易的和#include<iostream>#include""#include""usingnamespacestd;intmain(){Sales_itemtotal,trans;system("CLS");cout<<"Entertransactions:"<<endl;if(cin>>total){while(cin>>trans)if(trans))<<endl;return-1;}(d)-10e-2【解答】int型unsignedint型double型double型習(xí)題下列哪些(如果有)是非法的?"WhogoeswithF\145rgus?\012"(c)"two"L"some"(d)1024f(e)(f)"multiplelinecomment"【解答】(c)非法。因?yàn)樽址米置嬷蹬c寬字符串字面值的連接是未定義的。(d)非法。因?yàn)檎麛?shù)1024后面不能帶后綴f。(e)非法。因?yàn)楦↑c(diǎn)字面值不能帶后綴UU(f)非法。因?yàn)榉謨尚袝鴮懙淖址置嬷当仨氃诘谝恍械哪┪布由戏葱本€。習(xí)題使用轉(zhuǎn)義字符編寫一段程序,輸出2M然后換行。修改程序,輸出2,跟著個(gè)制表符,然后是M最后是換行符?!窘獯稹枯敵?M然后換行的程序段:return0;}【解答】global_str和local_str的初始值均為空字符串,global_int的初始值為0,local_int沒有初始值。習(xí)題解釋下列例子中name的意義:externstd::stringname;std::stringname("exercise");externstd::stringname("exercise");【解答】第一條語句是一個(gè)聲明,說明std::string變量name在程序的其他地方定義。第二條語句是一個(gè)定義,定義了std::string變量name并將name初始化為"exercise"。第三條語句也是一個(gè)定義,定義了std::string變量name并將name初始化為"exercise",但這個(gè)語句只能出現(xiàn)在函數(shù)外部(即,name是一個(gè)全局變量)。習(xí)題下列程序中j的值是多少?inti=42;intmain()(inti=100;intj=i;■)【解答】j的值是100。j的賦值所使用到的i應(yīng)該是main函數(shù)中定義的局部變量i,因?yàn)榫植孔兞康亩x會(huì)屏蔽全局變量的定義。習(xí)題下列程序段將會(huì)輸出什么?inti=100,sum=0;for(inti=0;i!=10;++i)sum+=i;std::cout<<i<<""<<sum<<std::endl;【解答】輸出為:10045for語句中定義的變量i,其作用域僅限于for語句內(nèi)部。輸出的i值是for語旬之前所定義的變量i的值。習(xí)題下列程序合法嗎?intsum=0;for(inti=0;i!=10;++i)sum+=i;std::cout<<"Sumfrom0to"<<i<<"is"<<sum<<std::endl;【解答】不合法。因?yàn)樽兞縤具有語句作用域,只能在for語句中使用,輸出語句中使用i屬非法。習(xí)題下列程序段雖然合法,但是風(fēng)格很糟糕。有什么問題呢?怎樣改善?for(inti=0;i<100;++i).對(duì)象上的操作private:std::stringcountry_number;std::stringcity_number;std::stringphone_number;);一(b)地址classAddress{public:對(duì)象上的操作private:std::stringcountry;std::stringcity;std::stringstreet;std::stringnumber;);(c)員工或公司classEmployee{public:.對(duì)象上的操作private:std::stringID;std::stringname;charsex;Addressaddr;Tel_numbertel;};一classCompany{public:.對(duì)象上的操作private:std::stringname;Addressaddr;Tel_numbertel;};(d)某大學(xué)的學(xué)生classStudent{public:.對(duì)象上的操作private:std::stringID;std::stringname;charsex;std::stringdept;ET2003)中,在Project菜單中選擇Properties菜單項(xiàng),在ConfigurationProperties-C/C++^General-WarningLevel中可以選擇警告級(jí)別。習(xí)題用適當(dāng)?shù)膗sing聲明,而不用std::前綴,訪問標(biāo)準(zhǔn)庫中的名字,重新編寫節(jié)的程序,計(jì)算一給定數(shù)的給定次幕的結(jié)果。#include<iostream>#include""usingnamespacestd;intmain(){intbase,exponent;longresult=1;system("CLS");cout<<"Enterbaseandexponent:"<<endl;cin>>base>>exponent;if(exponent<0){cout<<"Exponentcan'tbesmallerthan0"<<endl;return-1;}if(exponent>0){for(intcnt=1;cnt<=exponent;cnt++)result*=base;}cout<<base<<"raisedtothepowerof"<<exponent<<":"<<result<<endl;return0;}習(xí)題什么是默認(rèn)構(gòu)造函數(shù)?【解答】默認(rèn)構(gòu)造函數(shù)(defaultconstructor)就是在沒有顯式提供初始化式時(shí)調(diào)用的構(gòu)造函數(shù)。它由不帶參數(shù)的構(gòu)造函數(shù),或者為所有形參提供默認(rèn)實(shí)參的構(gòu)造函數(shù)定義。如果定義某個(gè)類的變量時(shí)沒有提供初始化式,就會(huì)使用默認(rèn)構(gòu)造函數(shù)。如果用戶定義的類中沒有顯式定義任何構(gòu)造函數(shù),編譯器就會(huì)自動(dòng)為該類生成默認(rèn)構(gòu)造函數(shù),稱為合成的默認(rèn)構(gòu)造函數(shù)(synthesizeddefaultconstructor)習(xí)題列舉出三種初始化string對(duì)象的方法?!窘獯稹?1)不帶初始化式,使用默認(rèn)構(gòu)造函數(shù)初始化string對(duì)象。⑵使用一個(gè)已存在的string對(duì)象作為初始化式,將新創(chuàng)建的string對(duì)象初始化為已存在對(duì)象的副本。(3)使用字符用字面值作為初始化式,將新創(chuàng)建的string對(duì)象初始化為字符串字面值的副本。習(xí)題s和s2的值分別是什么?strings;intmain(){strings2;}【解答】s和s2的值均為空字符串。習(xí)題編寫程序?qū)崿F(xiàn)從標(biāo)準(zhǔn)輸入每次讀入一行文本。然后改寫程序,每次讀入一個(gè)單詞。#include<iostream>#include<string>#include""usingnamespacestd;intmain()(stringline;system("CLS");while(getline(cin,line))cout<<line<<endl;return0;}修改后程序如下:<<endl;elseif(s1>s2)cout<<"\""<<s1<<"\"isbiggerthan"<"\""<<s2<<"\""<<endl;elsecout<<"\""<<s2<<"\"isbiggerthan"<"\""<<s1<<"\""<<endl;return0;}測(cè)試兩個(gè)string對(duì)象的長(zhǎng)度是否相等的程序:#include<iostream>#include<string>usingnamespacestd;intmain()(strings1,s2;cout<<"Entertwostrings:"<<endl;cin>>s1>>s2;string二size_typelen1,len2;len1=();len2=();if(len1==len2)cout<<"Theyhavesamelength."<<endl;elseif(len1>len2)cout<<"\""<<s1<<"\"islongerthan"<"\""<<s2<<"\""<<endl;elsecout<<"\""<<s2<<"\"islongerthan"<"\""<<si<<"\""<<endl;return0;)習(xí)題編一個(gè)程序,從標(biāo)準(zhǔn)輸入讀取多個(gè)string對(duì)象,把它們連接起來存放到一個(gè)更大的string對(duì)象中,并輸出連接后的string對(duì)象。接著,改寫程序,將連接后相鄰string對(duì)象以空格隔開?!窘獯稹?include<iostream>#include<string>usingnamespacestd;intmain()(stringresult_str,str;cout<<"Enterstrings(Ctrl+Ztoend):"<<endl;while(cin>>str)result_str=result_str+str;cout<<"Stringequaltotheconcatenationofthesestringsis:"<endl<<result_str<<endl;return0;)改寫后的程序:#include<iostream>#include<string>usingnamespacestd;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論