




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、譚浩強 C+ 課后習(xí)題答案1請根據(jù)你的了解,敘述 C+ 的特點。 C+ 對 C有哪些發(fā)展?【解】 略。2一個 C+的程序是由哪幾部分構(gòu)成的?其中的每一部分起什么作用?【解】 略。3從拿到一個任務(wù)到得到最終結(jié)果,一般要經(jīng)過幾個步驟?【解】 略。4請說明編輯、編譯、連接的作用。在編譯后得到的目標(biāo)文件為什么不能直接 運行?【解】 編譯是以源程序文件為單位進行的,而一個完整的程序可能包含若干個程序 文件,在分別對它們編譯之后,得到若干個目標(biāo)文件(后綴一般為 .obj ),然后要將它 們連接為一個整體。此外,還需要與編譯系統(tǒng)提供的標(biāo)準(zhǔn)庫相連接,才能生成一個可執(zhí) 行文件(后綴為 .exe )。不能直接運行
2、后綴為 .obj 的目標(biāo)文件,只能運行后綴為 .exe 的可執(zhí)行文件。5分析下面程序運行的結(jié)果。#include <iostream>using namespace std;int main( )cout<< " This "<<" is "cout<< " a "<<" C+ "cout<< " program. " << endl;return 0;【解】 輸出的結(jié)果為ThisisaC+program.6分析
3、下面程序運行的結(jié)果。#include <iostream> using namespace std; int main( )int a,b,c;a=10;b=23; c=a+b;cout<< " a+b=" ; cout<<c; cout<<endl;return 0;【解】 前兩個 cout 語句在輸出數(shù)據(jù)后不換行,第 3 個 cout 語句輸出一個換行,因 此輸出的結(jié)果為a+b=337分析下面程序運行的結(jié)果。請先閱讀程序?qū)懗龀绦蜻\行時應(yīng)輸出的結(jié)果,然后上機運行程序,驗證自己分析的結(jié)果是否正確。以下各題同。#include
4、<iostream> using namespace std; int main( )int a,b,c;int f(int x,int y,int z); cin>>a>>b>>c; c=f(a,b,c); cout<<c<<endl; return 0;int f(int x,int y,int z)int m;if (x<y) m=x;else m=y;if (z<m) m=z; return(m);【解】 程序的作用是:輸入 3 個整數(shù),然后輸出其中值最小的數(shù)。在主函數(shù)中輸入3 個整數(shù),然后調(diào)用 f 函
5、數(shù),在 f 函數(shù)中實現(xiàn)找最小的整數(shù),用 if 語句比較兩個數(shù),將小者存放在變量m中,經(jīng)過兩個 if 語句的比較, m中存放的是 3 個整數(shù)中最小的數(shù)。運行情況如下:1 5 3 (輸入 3個整數(shù) )1(輸出其中最小的數(shù) )8在你所用的 C+系統(tǒng)上,輸入以下程序, 進行編譯, 觀察編譯情況, 如果有錯誤,請修改程序,再進行編譯,直到?jīng)]有錯誤,然后進行連接和運行,分析運行結(jié)果。int main( );int a,b;c=a+b;cout >> " a+b=" >> a+b;【解】 上機編譯出錯,編譯出錯信息告知在第 2 行出錯,經(jīng)檢查,發(fā)現(xiàn)第 1 行的末
6、尾多了一個分號,編譯系統(tǒng)無法理解第 2 行的花括號,導(dǎo)致報告第 2行出錯。將第 1 行 的末尾的分號去掉,重新編譯,編譯出錯信息告知在第 5 行和第 6行出錯。第 5 行出錯 原因是 cout 未經(jīng)聲明,因為 cout 不是 C+語言提供的系統(tǒng)的關(guān)鍵字,而是輸出流的對 象,必須使用頭文件 iostream 。第 6 行出錯原因是 main 是 int 型函數(shù),應(yīng)返回一個整 型值。將程序改為#include <iostream>int main( )int a,b;c=a+b;cout >> " a+b=" >> a+b;return 0;
7、重新編譯。 編譯出錯信息告知在第 5行和第 6行出錯。第 5行出錯原因是變量 c 未定義, 第 6 行出錯原因是 cout 未經(jīng)聲明,說明 #include <iostream> 命令行未能起作用,原因 是未指明命名空間。將程序改為#include <iostream>using namespace std;int main( )int a,b,c;c=a+b;cout>> " a+b=" >>a+b;return 0;重新編譯。編譯出錯信息告知在第 7 行出錯,經(jīng)檢查,是“ >>”用得不當(dāng),“ >>”
8、是提 取運算符,應(yīng)與 cin 聯(lián)合使用,用來從輸入流中提取數(shù)據(jù), 輸出時應(yīng)該用插入運算符 “ <<”。 把兩處“>>”都改為“ <<”,再重新編譯,發(fā)現(xiàn)沒有 error 錯誤,但有兩個警告(warning ), 原因是定義了 a和 b,但未對它們賦值。應(yīng)增加賦值語句或輸入語句,使a和 b獲得值,將程序改為#include <iostream>using namespace std;int main( )int a,b,c;cin>>a>>b;c=a+b;cout>> " a+b=" >
9、>a+b;return 0;重新編譯,沒有編譯錯誤,能通過編譯和連接,可以正常運行,在Visual C+ 6.0環(huán)境下運行時屏幕顯示如下:5 9a+b=14Press any key to continue顯然這樣的輸出不理想,“ Press any key to continue”是 Visual C+ 系統(tǒng)在輸出了運行結(jié)果后自動顯示的一個信息, 告訴用戶 “如果想繼續(xù)工作, 請按任何一個鍵” 。 當(dāng)用戶按任何一個鍵后, 顯示運行結(jié)果的窗口消失, 屏幕顯示回到 Visual C+的主窗口, 顯示出源程序和編譯信息。為了解決以上輸出不理想的情況,可以在最后一個輸出語句中增加輸出一個換行
10、符。最后的程序如下:#include <iostream>using namespace std;int main( )int a,b,c;cin>>a>>b;c=a+b;cout<< " a+b=" <<a+b<<endl;return 0;運行時屏幕顯示如下:5 9a+b=14Press any key to continue這就完成了程序的調(diào)試。這里對本題的調(diào)試過程作了比較詳細的分析,以便使讀者對如何調(diào)試程序有比較具 體而清晰的了解。需要說明:(1)編譯系統(tǒng)給出的編譯出錯信息,只是提示性的,引導(dǎo)用
11、戶去檢查錯誤,用戶必 須根據(jù)程序的上下文和編譯出錯信息,全面考慮,找出真正出錯之處。例如編譯出錯信 息通知第 2 行出錯,其實可能是第 1 行出錯。( 2)有時,有的錯誤開始時未被檢查出來并告知用戶(例如未定義變量c),由于其他錯誤未解決,掩蓋了這個錯誤。當(dāng)解決了其他錯誤后,這個錯誤會被檢查出來。有 時在調(diào)試過程中會不斷檢查出新的錯誤,這是不奇怪的。一一處理,問題會迎刃而解。(3)為了說明調(diào)試過程,這里全部依靠計算機系統(tǒng)來檢查錯誤,其實有些明顯的錯 誤,完全可以由人工查出,這樣可以提高調(diào)試效率。由人工在紙面或屏幕上檢查錯誤, 稱為靜態(tài)查錯,用計算機編譯系統(tǒng)檢查錯誤,稱為動態(tài)查錯。建議盡量先用靜
12、態(tài)查錯的 方法排除錯誤,只有人工檢查不出來的錯誤才讓計算機檢查。9輸入以下程序,進行編譯,觀察編譯情況,如果有錯誤,請修改程序,再進行 編譯,直到?jīng)]有錯誤,然后進行連接和運行,分析運行結(jié)果。#include <iostream>using namespace std;int main( )int a,b;c=add(a,b)cout<< " a+b=" <<c<<endl;return 0;int add(int x,int y);z=x+y;retrun(z);【解】 發(fā)現(xiàn) 7 個錯誤:(1)對 add函數(shù)未聲明就調(diào)用,應(yīng)在
13、 main 函數(shù)中對 add函數(shù)進行聲明。(2)定義 add 函數(shù)時,函數(shù)首行末尾不應(yīng)有分號。( 3)變量 c 未經(jīng)定義。( 4) add 函數(shù)中的變量 z 未經(jīng)定義。( 5)第 6 行末尾少了一個分號。(6)add 函數(shù)中的 retrun 拼寫錯誤,應(yīng)為 return 。編譯系統(tǒng)把 retrun 作為未聲明的標(biāo)識符而報錯,因為 retrun (z)會被認為是函數(shù)調(diào)用的形式。7)變量 a 和 b 未被賦值。改正后的程序如下:#include <iostream> using namespace std; int main( ) int add(int x,int y); int a
14、,b,c; cin >> a >> b; c=add(a,b); cout << " a+b= " << c <<endl; return 0;int add(int x,int y)int z;z=x+y; return(z);運行情況如下:5 81310輸入以下程序,編譯并運行,分析運行結(jié)果。#include <iostream> using namespace std;int main( ) void sort(int x,int y,int z);int x,y,z;cin >> x
15、 >> y >> z;sort(x,y,z);return 0;void sort(int x, int y, int z)int temp;x和 y的值互換if (x>y) temp=x;x=y;y=temp; / 內(nèi) 3 個語句的作用是將if (z<x) cout << z << ' , ' << x << ' ,' << y << endl; else if (z<y) cout << x <<' ,'
16、<< z << ' ,' << y << endl;else cout << x <<' , ' << y << ' ,' << z << endl;請分析此程序的作用。 sort 函數(shù)中的 if 語句是一個嵌套的 if 語句。 運行時先后輸入以下幾組數(shù)據(jù),觀察并分析運行結(jié)果。 3 6 10 6 3 10 10 6 3 10 , 6,3【解】 程序的作用是對輸入的 3 個整數(shù)按由小到大的順序進行排序。 sort 函數(shù)中的 第 1
17、 個 if 語句的作用是先將 x 和 y 排序,使 x 小于或等于 y 。第 2 個 if 語句是一個嵌 套的 if 語句,先比較 z 和 x,如果 z<x ,顯然由小到大的順序應(yīng)當(dāng)是 z,x,y ,按此順序 輸出;如果 z 不小于 x,而小于 y ,顯然由小到大的順序應(yīng)當(dāng)是 x,z,y ,按此順序輸出; 如果 z 既不小于 x,又不小于 y ,顯然由小到大的順序應(yīng)當(dāng)是 x,y,z ,按此順序輸出。按題目要求分別輸入以下幾組數(shù)據(jù),運行結(jié)果如下: 3 6 10 3,6,106 3103,6,10106 33,6,1010 ,6,3-858993460 , -858993460 ,10以上是
18、在 Visual C+ 6.0 環(huán)境下運行的情況,前 3 次運行正常,表明當(dāng)輸入不同 的數(shù)據(jù)時,程序能實現(xiàn)由小到大的排序功能。第 4 次運行的結(jié)果顯然不正常,這是由于 輸入數(shù)據(jù)時出了問題,本來要求在輸入數(shù)據(jù)時,數(shù)據(jù)之間以空格或換行相隔,而現(xiàn)在卻 以逗號相隔,只有第一個整數(shù)能正常賦給變量x,第二和第三個數(shù)據(jù)均無法正常賦給變量 y 和 z, y 和 z 的值來自輸入流中相應(yīng)字節(jié)的內(nèi)容。11求 2個或 3 個正整數(shù)中的最大數(shù),用帶有默認參數(shù)的函數(shù)實現(xiàn)?!窘狻?可以編寫出以下程序:#include <iostream>using namespace std;int main( )int m
19、ax(int a,int b,int c=0);int a,b,c;cin >> a >> b >> c;cout << " max(a,b,c)= " << max(a,b,c) << endl;cout << " max(a,b)= " <<max(a,b) << endl;return 0;int max(int a,int b,int c)if(b>a) a=b;if(c>a) a=c; return a;運行情況如下:13 5
20、 76 max(a, b, c)=76(從 3 個數(shù)中找最大者)max(a, b)=13(從前 2 個數(shù)中找最大者)如果想從 3 個數(shù)中找大者,可以在調(diào)用時寫成“ max(a,b,c) ”形式,如果只想 從 2 個數(shù)中找大者,則在調(diào)用時寫成“ max(a,b) ”形式,此時 c 自動取默認值 0, 由于 0比任何正整數(shù)都小,因此從14,5, 0中選最大者和從 14,5 中選大者的結(jié)果是一樣的。12輸入兩個整數(shù),將它們按由大到小的順序輸出。要求使用變量的引用。【解】 可以編寫出以下程序:#include<iostream>using namespace std;int main( )
21、 void change(int &,int &);int a,b;cin>>a>>b;if(a<b) change(a,b); /如果 a<b,使 a 和 b 的值互換cout<< " max=" <<a<<" min= " <<b<<endl;return 0;void change(int &r1,int &r2) / 函數(shù)的作用是使 r1 與 r2 互換 int temp;temp=r1;r1=r2;r2=temp;運行
22、情況如下:12 67max=67 min=1213對 3 個變量按由小到大順序排序,要求使用變量的引用。【解】 可以編寫出以下程序:#include <iostream>using namespace std;int main( )void sort(int &,int &,int &);int a,b,c,a1,b1,c1;cout<< " Please enter 3 integers:"cin>>a>>b>>c; a1=a;b1=b;c1=c;sort(a1,b1,c1);cout&l
23、t;<a<< " " <<b<<" " <<c<<" in sorted order is"cout<<a1<< " " <<b1<<" " <<c1<<endl;return 0;void sort(int &i,int &j,int &k) void change(int &,int &);if (i>j) c
24、hange(i, j);if (i>k) change(i, k); if (j>k) change(j, k);void change(int &x,int &y) int temp;temp=x;x=y;y=temp;運行情況如下:Please enter 3 integers:23 67 -55 23 67 55 in sorted order is 55 23 67這個程序很容易理解,不易出錯。由于在調(diào)用 sort 函數(shù)時虛實結(jié)合使形參 i,j,k 成為實參 a1,b1,c1 的引用(別名),因此通過調(diào)用函數(shù)sort ( a1,b1,c1 )既實現(xiàn)了對i,j
25、,k 排序,也就同時實現(xiàn)了對 a1,b1,c1 排序。同樣,執(zhí)行 change( i,j )函數(shù),可以 實現(xiàn)對實參 i 和 j 的互換。14編一程序 , 將兩個字符串連接起來 , 結(jié)果取代第一個字符串。要求用 string 方 法?!窘狻?可以編寫出以下程序:#include <iostream>#include <string>/ 程序中若使用字符串變量,必須包含頭文件 stringusing namespace std;int main( ) string s1= " week " ,s2= " end "cout <&
26、lt; " s1= " << s1 << endl;cout << "s2=" << s2 << endl; s1=s1+s2;cout<< " The new string is: " <<s1<<endl; return 0;運行情況如下:s1=weeks2=endThe new string is: weekend15輸入一個字符串,把其中的字符按逆序輸出。如輸入 求用 string 方法。LIGHT,輸出 THGIL。要解】 可以編
27、寫出以下程序:#include <iostream>#include <string>using namespace std;int main( ) string str;int i,n;char temp; /cout<< " please input a string:" ;cin>>str;n=str.size( );for(i=0;i<n/2;i+)temp=stri;stri=strn-i-1;strn-i-1=temp; cout << str << endl;return 0;運行情
28、況如下:please input a string:LIGHTTHGIL注意:輸入的字符串中不能含有空格。/ 定義字符串變量 str定義字符變量 temp/ 輸入一個字符串賦給字符串變量 str / 測量 str 的長度 n/ 使 str 中的字符對稱互換16有 5 個字符串,要求將它們按由小到大的順序排列,用 解】 可以編寫出以下程序:string 方法。#include <iostream> #include <string> using namespace std; int main( ) int i;string str5= " BASIC"
29、 , " C", " FORTRA"N, " C+", "PASCA"L; void sort(string );sort(str); / 對字符串排序 cout<< " the sorted strings :" <<endl;for(i=0;i<5;i+)cout<<stri<< " " / 按已排好的順序輸出字符串 cout<<endl;return 0;void sort(string s )int i
30、, j;string t;for (j=0; j<5; j+) for(i=0; i<5-j; i+)if (si>si+1) t=si;si=si+1;si+1=t;運行結(jié)果如下:the sorted strings :BASIC C C+ FORTRAN PASCAL17編一個程序,用同一個函數(shù)名對n 個數(shù)據(jù)進行從小到大排序,數(shù)據(jù)類型可以是整型、單精度型、雙精度型。用重載函數(shù)實現(xiàn)?!窘狻?可以編寫出以下兩個程序:3個(1)建立 3 個函數(shù),分別用于處理整型、單精度型、雙精度型數(shù)據(jù)的排序,在 函數(shù)中都采用選擇法排序方法。#include <iostream>#i
31、nclude <string>using namespace std;int main( )long a5=10100,-123567, 1198783,-165654, 3456;int b5=1,9,0,23,-45;float c5=2.4, 7.6, 5.5, 6.6, -2.3 ;void sort(long );void sort(int );void sort(float );sort(a);sort(b);sort(c);return 0;void sort(long a )int i, j;long t;for (j=0; j<5; j+)for(i=0;i
32、<5-j;i+)if (ai>ai+1)t=ai;ai=ai+1;ai+1=t; cout<< " the sorted numbers :" <<endl;for(i=0;i<5;i+)cout<<ai<< " " cout<<endl<<endl;void sort(int a )int i, j, t;for (j=0; j<5; j+)for(i=0;i<5-j;i+)if (ai>ai+1)t=ai;ai=ai+1;ai+1=t; cou
33、t<< " the sorted numbers :" <<endl;for(i=0;i<5;i+)cout<<ai<< " " cout<<endl<<endl;void sort(float a )int i, j;float t;for (j=0;j<5;j+)for(i=0;i<5-j;i+)if (ai>ai+1)t=ai;ai=ai+1;ai+1=t; cout<< " the sorted numbers :" &
34、lt;<endl;for(i=0;i<5;i+)cout<<ai<< " " cout<<endl<<endl;運行結(jié)果如下:the sorted numbers :長整型數(shù)據(jù)排序)-123567 -165654 10100 3456 1198783the sorted numbers :-45 0 1 9 23整型數(shù)據(jù)排序)the sorted numbers : -2.3 2.4 5.5 6.6 7.6單精度型數(shù)據(jù)排序)( 2)在第 1 種方法中, 3 個函數(shù)的函數(shù)體基本上是相同的,都是采用選擇法排序, 在下面
35、的程序中, 3 個函數(shù)的函數(shù)體不全相同,前兩個函數(shù)采用選擇法排序,最后一個 函數(shù)采用起泡法排序。#include <iostream>#include <string> using namespace std; int main( ) long a5= 10100,-123567, 1198783,-165654, 3456; int b5=1,9,0,23,-45;float c5=2.4, 7.6, 5.5, 6.6, -2.3 ; void sort(int ); void sort(float ); void sort(long );sort(a); sort(
36、b); sort(c); return 0;/對長整型數(shù)據(jù)排序 對整型數(shù)據(jù)排序 對單精度型數(shù)據(jù)排序void sort(long a )int i,j,min;long t;for(i=0;i<5;i+)min=i;for (j=i+1;j<5;j+) if(amin>aj) min=j;t=ai; ai=amin;cout<< " the sorted numbers :/對長整型數(shù)據(jù)用選擇法排序的函數(shù)amin=t; " <<endl;for(i=0;i<5;i+) cout<<ai<< "
37、" cout<<endl<<endl;void sort(int a ) int i, j, t;/對整型數(shù)據(jù)用選擇法排序的函數(shù)for (j=0; j<5; j+)for(i=0;i<5-j;i+)if (ai>ai+1)t=ai;ai=ai+1;ai+1=t;cout<< " the sorted numbers :" <<endl;for(i=0;i<5;i+)cout<<ai<< " " cout<<endl<<endl;void sort(float a )/int i, j; float t;for (j=0;j<5;j+) for(i=0;i<5-j;i+)if (ai>ai+1) t=ai;ai=ai+
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 住房公積金借貸合同范本
- 孵化器企業(yè)入駐合同范本
- 單位攝影勞務(wù)合同范例
- 合同詐騙合同范本
- 十五房子買賣合同范本
- 合同范本環(huán)氧樹脂地坪
- 產(chǎn)品獨家運營合同范本
- 廠房樓房出售合同范本
- 同城肥豬出售合同范本
- 制作門窗就合同范本
- 美麗鄉(xiāng)村規(guī)劃設(shè)計技術(shù)導(dǎo)則
- 課題成果要報格式和要求
- 經(jīng)銷商準(zhǔn)入及評定表格vr
- SF-36量表(簡明健康狀況調(diào)查表)
- 主要河流南、北方河流的不同特征主要湖泊
- 上崗證WORD模板
- 寺院管理框架結(jié)構(gòu)圖PPT課件
- 2019第五版新版PFMEA 注塑實例
- 職業(yè)技能鑒定質(zhì)量督導(dǎo)報告
- 鈑金k因子和折彎扣除參照表
- 海圖圖標(biāo)說明(共13頁)
評論
0/150
提交評論