版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第一章 C+基礎(chǔ)知識習(xí)題 1第一章 C+基礎(chǔ)知識習(xí)題1.1 判斷下列標(biāo)識符的合法性。sin book 5arry _name Example2.1 main$1 class_cpp a3 x*y my name答:合法的:sin book _name main class_cpp a3非法的:5arry Example2.1 $1 x*y my name1.2 假定有下列變量:int a=3,b=5,c=0;float x=2.5,y=8.2,z=1.4;char ch1=a,ch2=5,ch3=0,ch4;求下列表達(dá)式的值,以及運算后表達(dá)式所涉及的各變量的值。x+(int)y%a x=z*b
2、+,b=b*x,b+ ch4=ch3-ch2+ch1int(y/z)+(int)y/(int)z !(a>b)&&c&&(x*=y)&&b+ch3|(b+=a*c)|c+ z=(a<<2)/(b>>1)答:x+(int)y%a 表達(dá)式值為:4.5,運算后x、y、a的值不變,仍分別為2.5、8.2、3。提示:運算時取出y變量的數(shù)值強制轉(zhuǎn)化為整型數(shù)放入寄存器參加運算,但內(nèi)存中y本身的數(shù)值不變化。只有賦值運算和自增、自減運算才改變變量本身的值x=z*b+,b=b*x,b+ 表達(dá)式值為:42,運算后x為7.0,b為43。提示
3、:逗號表達(dá)式,依次運算,表達(dá)式的值是最后一次運算的值。后+是變量先參加運算然后變量自身加1,所以第1步x等于1.4*5,即7.0,然后b增為6;第2步b賦值為42;第3步,表達(dá)式的值是上一步后b的值42,但隨后b的值自增1,成為43。ch4=ch3-ch2+ch1 表達(dá)式值為:,字符外斜杠。運算后ch1、ch2、ch3值不變。提示:字符型的變量實質(zhì)是范圍很小的整型量。int(y/z)+(int)y/(int)z 表達(dá)式值為:13。y和z自身的值不變。提示:int(y/z)是完成實數(shù)除法后,商強制轉(zhuǎn)化為整型,(int)y/(int)z則是數(shù)值先轉(zhuǎn)換,完成的是整除。!(a>b)&&a
4、mp;c&&(x*=y)&&b+ 表達(dá)式值為:0。運算后x仍為2.5,b仍為5提示:只要出現(xiàn)一個false右邊的不再做,因為c為0,即false,所以其右的所有運算不再做。ch3|(b+=a*c)|c+ 表達(dá)式值為:1。運算后b為5,c為0,均不變。提示:只要出現(xiàn)一個true,右邊不再做。ch3的值為48。z=(a<<2)/(b>>1) 表達(dá)式值為:6。運算后a與b的值不變?nèi)詾?和5。提示:a的數(shù)值為(00000011)2,左移2位為(00001100)2即12,相當(dāng)整數(shù)2兩次,而b的數(shù)值為(00000101)2,右移1位為(000000
5、10)2,即2,相當(dāng)于整除2。1.3 判斷下列哪些是常量,哪些是變量。"China" const int n=10; int m=5; 'a' char ch='a'int array5=1,2,3,4,5; char s="Hello"答:"China" 文字常量const int n=10; 常變量int m=5; 變量'a' 文字常量 1第一章 C+基礎(chǔ)知識習(xí)題2char ch='a' 變量int array5=1,2,3,4,5; 變量char s="H
6、ello" 變量1.4 將下列算式或敘述用C+表達(dá)式描述。(1) 22)(arcsin2cx+p(2) (x+y)/(x-y)*ay)(3) 位于原點為圓心,a, b為半徑的圓環(huán)中的點坐標(biāo)。(4) 。 cba¹¹(5) 并且字符ch不為'0'。 20£k答: pi/2+sqrt(asin(x)*asin(x)+c*c)(x+y)/(x-y)*pow(a,y)(x*x+y*y)>=a*a)&&(x*x+y*y)<=b*b)(a!=b)&&(a!=c)&&(b!=c)(k<=2
7、0)&&(ch!='0')1.6 設(shè)有語句:int a, b;float x,y;char ch1,ch2,ch3;cin>>a>>b>>x>>y>>ch1;ch2=cin.get();cin>>ch3;若從鍵盤輸入:3 2 1.8 7 a b c執(zhí)行后各變量取值如何?注意abc三字符兩兩間有空格。答:a是3,b是2,x是1.8,y是7,ch1是a,ch2是空格,ch3是b。1.7 設(shè)有語句:int a,b,c,d;cin>>oct>>a>>b>&g
8、t;hex>>c>>dec>>d;若從鍵盤輸入:23 23 23 23執(zhí)行后各變量的值用十進(jìn)制表示各是多少?答:a:19,b:19,c:35,d:231.8 對于習(xí)題1.7,若執(zhí)行:cout<<a<<t<<hex<<b<<t<<oct<<c<<endl;顯示結(jié)果是什么?答:19 0x13 0432第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題一基本概念與基礎(chǔ)知識自測題3.1 程序閱讀題3.1.1 設(shè)有說明:int a=3, b=100;下面的循環(huán)語句執(zhí)行 (1) 次,執(zhí)行后a、
9、b的值分別為 (2) 、 (3) 。while(b/a>5) if(b-a>25) a+; else b/=a; 解答: 本題檢查學(xué)生整除的概念。跟蹤:a3b100b/a33循環(huán)次數(shù)1b-a9741002529651002039515100613851610061484171005停(1)14(2)17(3)1003.1.2 設(shè)有說明:int n,x,k,y;n下面程序段的功能是備選答案中的 (1) ,當(dāng)n=10,x=10 打印結(jié)果是 (2) 。cin>>x>>n;k=0; do x/=2; k+;while(k<n);y=1+x; k=0; do y
10、=y*y; k+;while(k<n);cout<<y<<endl;備選答案:A. y = (1 + x ) nnB. y = (1 +x ) 2n2 nC. y = (1 +x ) n2 nD. y = (1 +x ) 22 n +1第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題2解答:第一個循環(huán)使 x 成為: x2 n(1)B;y 成為:1 + x2 n;第一個循環(huán)使 y 成為: (1 +x ) 2n ;2 n考慮整除, x2 n(2)1連除 4 次以后為零,所以:3.1.3 請看如下程序段:if(num=1)cout<<”Alpha”;else if(num=
11、2)cout<<”Bata”;else if(num=3)cout<<”Gamma”;else cout<<”Delta”;當(dāng)num的值分別為 1、2、3 時,上面程序段的輸出分別為(1) 、(2) 、(3) 。 解答:檢查條件語句與字符串輸出概念:(1)Alpha(2)Bata(3)Gamma3.1.4 執(zhí)行下面程序段后,m和k的值分別為 (1) 、 (2) 。int m,k; for(k=1,m=0;k<=50;k+) if(m>=10) break; if(m%2=0)m+=5;continue;m-=3;解答:注意 continue 語句
12、的使用初值m=1k=0第 1 次循環(huán)后m=5k=1第 2 次循環(huán)m=2k=2第 3 次循環(huán)m=7k=3第 4 次循環(huán)m=4k=4第 5 次循環(huán)m=9k=5第 6 次循環(huán)m=6k=6第 7 次循環(huán)m=11結(jié)束,k+未做(1)11(2)6二編程與綜合練習(xí)題3.2 編程求一元二次方程 ax2+bx+c=0 的根。包括以下判斷和結(jié)果:若輸入 a=0,給出提示;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題3若>0,輸出兩個不等實根;若=0,輸出兩個相等實根;若<0,輸出兩個復(fù)數(shù)根。解:本題以一個絕對值極小的數(shù)作為實數(shù) 0。#include <iostream.h>#include <m
13、ath.h>#include <stdlib.h>void main()double a,b,c;double delta,x1,x2;const double zero=1e-9; /定義一個很小的常數(shù)int sign;cout<<"輸入三個系數(shù)a(a!=0), b, c:"<<endl;cin>>a>>b>>c;if(fabs(a)<zero) cout<<"二次項系數(shù)為0,方程根是-c/b" exit(0); cout<<"a=&q
14、uot;<<a<<'t'<<"b="<<b<<'t'<<"c="<<c<<endl; delta=b*b-4*a*c; if(fabs(delta)<zero)/絕對值很小的數(shù)即被認(rèn)為是0cout<<"方程有兩個相同實根:"cout<<"x1=x2="<<-b/(2*a)<<endl;else if(delta>0)sign=1;
15、elsesign=0; delta=sqrt(fabs(delta); x1=-b/(2*a); x2=delta/(2*a);if(sign) cout<<"方程有兩個不同實根:" cout<<"x1="<<x1+x2<<'t'<<"x2="<<x1-x2<<endl;else/delta<0 cout<<"方程無實根!有兩個不同復(fù)數(shù)根:" cout<<"x1="&
16、lt;<x1<<"+i"<<x2<<'t'<<"x2="<<x1<<"-i"<<x2<<endl;3.3 設(shè)計程序?qū)⑤斎氲陌俜种瞥煽冝D(zhuǎn)換為五分制輸出,90 分以上為 5 分,8089 分為 4 分,7079 分為 3 分,6069 分為 2 分,60 分以下為 1 分。 解:10 分一檔用 10 進(jìn)行整除獲得,轉(zhuǎn)換用開關(guān)語句實行。第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題4#include <iostream.h>v
17、oid main()int mark,result;/mark是百分制成績,result是5分制cout<<"請輸入百分制成績:"<<endl;cin>>mark;if(mark<0) cout<<"缺考!"<<endl; return;switch (mark/10) case 9: case 10: result=5;cout<<"輸出五分制成績:"<<result<<endl;break;case 8: result=4; co
18、ut<<"輸出五分制成績:"<<result<<endl; break;case 7: result=3; cout<<"輸出五分制成績:"<<result<<endl; break;case 6: result=2; cout<<"輸出五分制成績:"<<result<<endl; break;case 5:case 4:case 3:case 2:case 1:case 0: result=1; cout<<&qu
19、ot;輸出五分制成績:"<<result<<endl; break;default:cout<<"輸入錯誤!"<<endl;3.4 編程打印如下圖形:*解:難點在三角形左邊的空格的控制,嵌套一個循環(huán)語句完成此任務(wù)。第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題5#include <iostream.h>void main()int i,j;for (i=1;i<=4;i+)for(j=4-i;j>0;j-)/三角形每行前部的空格cout<<""for(j=1;j<=2*
20、i-1;j+)cout<<" *"cout<<endl;for(i=1;i<=3;i+)cout<<"* * *n"3.5 編程輸出下列圖形,中間一行英文字母由輸入得到。ABBBCCCCCDDD D D DD CCCCCBBB A解:分上三角和下三角兩部分分別處理左邊的空格。#include <iostream.h>void main() char in; int i,j; docout<<"輸入一個字母:"cin>>in;if(in>=97)&
21、;&(in<=122) in-=32;/小寫改大寫while(in<65)|(in>90);int line=in-'A'for (i=0;i<=line;i+)/上三角for(j=line-i;j>0;j-)cout<<""/前方空格for(j=1;j<=2*i+1;j+)cout<<' '<<char(i+'A');cout<<endl;for (i=line;i>0;i-)/下三角(少一行)for(j=0;j<=lin
22、e-i;j+)cout<<""for(j=1;j<=2*i-1;j+)cout<<' '<<char(i-1+'A');第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題6cout<<endl;3.6 輸入 n,求 1!+2!+3!+n!解:通常求和作為外循環(huán),階乘作為內(nèi)循環(huán)。這里考慮到:n!=n*(n-1)!,利用遞推法運算 速度大大提高,同時兩者可合并為一個循環(huán)。本程序考慮了輸入的健壯性。#include <iostream.h>#include <stdlib.h>void m
23、ain()int n;double result=0;/result是結(jié)果cin>>n;if(n<1)cout<<"輸入錯誤!"<<endl;/return;exit(0);result=1;for(int i=2,jch=1;i<=n;i+)jch*=i;/jch是i的階乘,注意n!=n*(n-1)!這樣可少一層循環(huán)result+=jch;cout<<result<<endl;3.7 猴子吃桃問題:猴子摘下若干個桃子,第一天吃了桃子的一半多一個,以后每天吃了前一天剩下的一半多一個,到第十天吃以前發(fā)現(xiàn)只
24、剩下一個桃子,問猴子共摘了幾個桃子。 解:采用遞推法。從最后一天逆推到第一天,9 次循環(huán)。#include <iostream.h>const int day=10;void main()int i,x=1;/最后一天只有一個for(i=1;i<day;i+)/從一天前推到九天前x=(x+1)*2;cout<<"開始共有桃子"<<x<<"個。n"3.8 從鍵盤輸入一組非 0 整數(shù),以輸入 0 標(biāo)志結(jié)束,求這組整數(shù)的平均值,并統(tǒng)計其中的個 數(shù)。 解:將這組整數(shù)放在整型數(shù)組中,一邊輸入一邊求和及統(tǒng)計正數(shù)和
25、負(fù)數(shù)的個數(shù),平均數(shù)由和 除以整數(shù)數(shù)量取得。第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題7#include <fstream.h>#include <iostream.h>void main()int stem256,sum=0,pnum=0,nnum=0,i=0; cout<<"從鍵盤輸入一組非0整數(shù),以輸入0標(biāo)志結(jié)束:"<<endl; cin>>stemi;while(stemi!=0) sum+=stemi;/求和 if(stemi>0) pnum+;/正數(shù)數(shù)量 else nnum+;/負(fù)數(shù)數(shù)量i+;cin>&
26、gt;stemi;if(!i) cout<<"0個數(shù)"<<endl;else cout<<"平均值"<<(double)sum/(pnum+nnum)<<endl;/平均值習(xí)慣不用整數(shù) cout<<"正數(shù)個數(shù)"<<pnum<<endl;cout<<"負(fù)數(shù)個數(shù)"<<nnum<<endl;3.9 編程找出 1500 之中滿足除以 3 余 2,除以 5 余 3,除以 7 余 2 的整數(shù)。解:
27、中國古代數(shù)學(xué)問題(韓信點兵),采用窮舉法。注意三個條件同時成立用&&。#include <iostream.h>void main() int i; for(i=1;i<=500;i+)if(i%3=2)&&(i%5=3)&&(i%7=2)cout<<i<<endl;3.10 編程求 1000 之內(nèi)的所有完全數(shù)。所謂完全數(shù)指的是一個數(shù)恰好等于它的所有因子和。 例如 6=1+2+3,就是一個完全數(shù)。解:采用窮舉法。兩重循環(huán),外層是從 1 到 999 依次處理,內(nèi)層是求該數(shù)的所有因子的和, 并判斷是否等于該數(shù)
28、。#include <iostream.h>void main()int i,a,sum_yz;/sum_yz是a的因子和for(a=1;a<1000;a+) sum_yz=0; for(i=1;i<a;i+)if (a%i=0) sum_yz+=i;if (a=sum_yz)cout<<a<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題83.11 將 100 元換成用 10 元、5 元和 1 元的組合,共有多少種組合方法。 解:采用窮舉法??紤] 10 元最多 10 張,5 元最多 20 張,余下是 1 元。#include <iostrea
29、m.h>void main()for(int i=0,j,k,count=0;i<=10;i+)/i是10元張數(shù),j是5元張數(shù),k是1元張數(shù)for(j=0;j<=20;j+) k=100-10*i-5*j; if(k>=0)cout<<i<<'t'<<j<<'t'<<k<<endl;count+;cout<<count<<endl;3.12 利用反正切展開計算的近似值,要求誤差 10-5,公式如下:357arctg ( x) x x + x x
30、 + L357令 x=1,可計算出/4 的近似值。 解:采用遞推法。初看每一項的遞推通式不易寫出,但每一項全看作奇數(shù)項,而偶數(shù)項全為 零,則很容易寫出:第 1 項為 x,第 3 項為第 1 項乘以 x 的平方除以項序號 3 乘以-1,其余 類推。同時和的誤差小于最后一項的絕對值。#include<iostream.h>#include<math.h>const double e=1e-6;void main()double x,a,sum; int i=3; cout<<"請輸入弧度值:"<<endl; cin>>
31、x;a=x; sum=x; doa*=x*x*(-1); sum+=a/i; i+=2;while(fabs(a/i)>e);cout<<"arctg("<<x<<")="<<sum<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題93.13 用迭代法求方程x2+10cosx=0 的根,誤差限為 10-5。迭代公式如下:x 2 10( x sin x + cos x )x=nnnnn +12 xn 10 sin xn解:迭代法也是用循環(huán)語句實現(xiàn),數(shù)學(xué)上#include<iostream.
32、h>#include<math.h> const double e=1e-5; void main()float x0,x1; int n=0; cout<<"輸入初始近似值:"<<endl; cin>>x1;dox0=x1;x1=(x0*x0-10*(x0*sin(x0)+cos(x0)/(2*x0-10*sin(x0);/x0是上次算出的結(jié)果,x1用作保存新算出的結(jié)果n+;while(fabs(x1-x0) >e)&&(n<=1e5);if(n>1e5)cout<<&qu
33、ot;超出迭代1e5次n"else cout<<"方程x*x+10*cos(x)=0的一個根為:"<<x1<<endl;cout<<"方程誤差為:"<<x1*x1+10*cos(x1)<<endl;3.14 兩隊選手每隊 5 人進(jìn)行一對一的比賽,甲隊為 A、B、C、D、E,乙隊為 J、K、L、M、N,經(jīng)過抽簽決定比賽配對名單。規(guī)定 A 不和 J 比賽,M 不和 D 及 E 比賽。列出所有可能 的比賽名單。解:這是一個組合問題,使用窮舉法。共有 5 個位置,設(shè)甲隊 5 名隊員
34、位置不變,乙隊改變 隊員位置,進(jìn)行配對。注意第 1 個位置可在 5 個隊員中任選一個,以后的位置必須扣除已選 過的隊員。并扣除不能配對的情況,即得所有可能的比賽名單。#include<iostream.h>void main()char st15='A','B','C','D','E',st25='J','K','L','M','N'int i=0,j,k,l,m,n;for(j=0;j<5;j+)/0號位if(j=0
35、) continue;/A不與J比賽,即st10不與st20比賽for(k=0;k<5;k+)/1號位 if(k=j) continue; for(l=0;l<5;l+)/2號位if(l=j|l=k) continue;for(m=0;m<5;m+)/3號位if(m=j|m=k|m=l) continue;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題10if(m=3) continue;/M不與D比賽,即st13不與st23比賽for(n=0;n<5;n+)/4號位if(n=3) continue;/M不與E比賽,即st14不與st23比賽if(n=j|n=k|n=l|n=m) c
36、ontinue;cout<<st10<<'-'<<st2j<<'t'<<st11<<'-'<<st2k<<'t'cout<<st12<<'-'<<st2l<<'t'<<st13<<'-'<<st2m<<'t'cout<<st14<<'-'&
37、lt;<st2n<<endl;i+;cout<<i<<endl;3.15 編程模擬選舉過程。假定四位候選人:zhang、wang、li、zhao,代號分別為 1、2、3、4。選舉人直接鍵入候選人代號,14 之外的整數(shù)視為棄權(quán)票,-1 為終止標(biāo)志。打印各位候 選人的得票以及當(dāng)選者(得票數(shù)超過選票總數(shù)一半)名單。解:用 5 個元素的整型數(shù)組,分別放棄權(quán)票和各候選人的得票,然后用開關(guān)語句打印。#include<iostream.h>#include<iomanip.h>void main()enum candidatefeipiao,
38、zhang,wang,li,zhaocand;int vote5=0,i,k=0,n;cin>>n;while(n!=-1)k+;if(n>=1&&n<=4) voten+;else vote0+;cin>>n;for(i=0;i<5;i+) cand=(candidate)i; switch(cand)case feipiao:cout<<setw(10)<<"feipiao"<<'t'<<votecand<<endl;break;case
39、 zhang:cout<<setw(10)<<"zhang"<<'t'<<votecand;if(votecand>k/2) cout<<"當(dāng)選"<<endl;else cout<<endl;break;case wang:cout<<setw(10)<<"wang"<<'t'<<votecand;if(votecand>k/2) cout<<&qu
40、ot;當(dāng)選"<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題11else cout<<endl;break;case li:cout<<setw(10)<<"li"<<'t'<<votecand; if(votecand>k/2) cout<<"當(dāng)選"<<endl; else cout<<endl;break;case zhao:cout<<setw(10)<<"zhao"&
41、lt;<'t'<<votecand;if(votecand>k/2) cout<<"當(dāng)選"<<endl;else cout<<endl;break;3.16 改造【例 3.11】,將運行結(jié)果(Fibonacii 數(shù)列的前 20 項)存入文件。解:采用 3 步法。首先建立或打開一個輸出文件,并與磁盤文件聯(lián)系:ofstream ofile("myfile3_16.txt"); 再按一定格式存入數(shù)據(jù):ofile<<setw(15)<<fib0<<se
42、tw(15)<<fib1;等 然后關(guān)閉文件:ofile.close(); 如要讀出數(shù)據(jù),則用輸入文件打開,并與同一磁盤文件聯(lián)系:ifstream ifile("myfile3_16.txt"); 再按同一格式讀入數(shù)據(jù):ifile>>i>>j>>k>>l;等,并輸出 最后關(guān)閉文件:file.close();#include<fstream.h>#include<iomanip.h>const int m=20;void main()int fib0=0,fib1=1,fib2,i,j,k,l;
43、char ch,a256;ofstream ofile("myfile3_16.txt"); ofile<<setw(15)<<fib0<<setw(15)<<fib1; for(int n=3;n<=m;n+)fib2=fib0+fib1;ofile<<setw(15)<<fib2;if(n%5=0)ofile<<endl;/控制每行5個數(shù)據(jù)fib0=fib1;fib1=fib2; ofile.close(); cout<<"是否要將文件輸出?Y或N"
44、<<endl; cin>>ch;if(ch='y'|ch='Y')ifstream ifile("myfile3_16.txt");while(1)ifile>>i>>j>>k>>l;/由文件讀入第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題12if(ifile.eof()!=0) break;cout<<setw(15)<<i<<setw(15)<<j<<setw(15)<<k<<setw(15)&l
45、t;<l<<endl;/屏幕顯示ifile.close();3.17 改造【例 3.16】,將運行結(jié)果(100 以內(nèi)素數(shù))存入文件。解:采用 4 步法。首先定義一個輸出文件:ofstream ofile; 再打開該文件并與并與磁盤文件聯(lián)系:ofile.open("myfile3_17.txt"); 按一定格式把數(shù)據(jù)存入文件。最后關(guān)閉文件。效果與 3 步法相同。 讀文件同樣可用 3 步法或 4 步法。#include<fstream.h>#include<iomanip.h>#include<math.h> const i
46、nt n=100; void main()int an,i,j; char ch,b256; ofstream ofile; ifstream ifile;for(i=0;i<n;i+) ai=1+i;/用數(shù)組保存整數(shù)1-100 a0=0;/1不是素數(shù),置0 for(i=0;i<n;i+)if(ai=0)continue;/該數(shù)已經(jīng)置0,判斷下一個數(shù)for(j=i+1;j<n;j+) if(aj%ai=0) aj=0; /是ai倍數(shù)的元素置0; ofile.open("myfile3_17.txt"); int count=0;ofile<<&
47、quot;1-"<<n<<"之間的素數(shù):"<<endl;for(i=0;i<n;i+)/輸出所有素數(shù)if(ai!=0) ofile<<setw(6)<<ai; count+;if(count%10=0)ofile<<endl;/每行10個數(shù)據(jù) ofile.close(); cout<<"是否要將文件輸出?Y或N"<<endl; cin>>ch;if(ch='y'|ch='Y') ifile.open(
48、"myfile3_17.txt"); i=0;while(ifile.get(bi)/不可用>>,它不能讀白字符,第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題13if(bi='n') break;i+;bi='0' cout<<b<<endl; count=0; while(1)ifile>>i;/由文件讀入 cout<<setw(6)<<i;/屏幕顯示 count+;if(count%10=0)cout<<endl;/每行10個數(shù)if(ifile.eof()!=0) b
49、reak;/這里與例3.20不同,最后一個數(shù)據(jù)后面可能沒有回車,直接為文件結(jié)束 ifile.close(); cout<<endl;3.18 改造【例 3.10】,文本由文本文件輸入。解:文本文件讀入要用成員函數(shù):ifile.get(),而不可用插入運算符<<,否則會丟失空白字 符。#include<fstream.h>void main()char ch;int nline=0,nword=0,nch=0;int isword=0;ifstream ifile("ep3_18.cpp"); cout<<"讀入ep3
50、_18.cpp"<<endl; doch=ifile.get();if(ch='n')nline+; /遇換行符行數(shù)+1 if(ch!=' '&&ch!='t'&&ch!='n'&&ch!=EOF)/讀到非間隔符if(!isword)nword+;/在單詞的起始處給單詞數(shù)+1 nch+;/字符數(shù)加+1isword=1;elseisword=0;/讀到間隔符while(ch!=EOF);/讀到文本結(jié)束符為止ifile.close(); cout<<&q
51、uot;行數(shù):"<<nline<<endl; cout<<"單詞數(shù):"<<nword<<endl; cout<<"字符數(shù):"<<nch<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計習(xí)題14第三章 函數(shù)習(xí)題 1第三章函數(shù)習(xí)題一基本概念與基礎(chǔ)知識自測題3.1 填空題3.1.1 被定義為形參的是在函數(shù)中起(1) 作用的變量,形參只能用(2) 表示。實參的作用是(3) ,實參可以用 (4) 、 (5) 、 (6) 表示。答案:(1)自變量(2)變量名(3)將實際
52、參數(shù)的值傳遞給形參(4)具有值的變量(5)常量(6)表達(dá)式3.1.2 局部域包括(1) 、 (2) 和 (3) 。使用局部變量的意義在于 (4) 。答案:(1)塊域(2)函數(shù)域(3)函數(shù)原型域(4)局部變量具有局部作用域使得程序在不同塊中可以使用同名變量3.1.3 靜態(tài)局部變量存儲在(1) 區(qū),在 (2) 時候建立,生存期為(3) ,如定義時未顯式初始化,則其初值為(4) 。答案:(1)全局?jǐn)?shù)據(jù)區(qū)(2)編譯(3)全局生存期(4)全03.1.4局部變量存儲在(1) 區(qū),在 (2) 時候建立,生存期為(3) ,如定義時未顯式初始化,則其初值為(4) 。答案:(1)棧(2)在函數(shù)或塊開始執(zhí)行時(3)
53、函數(shù)或塊的執(zhí)行期(4)隨機值3.1.5 編譯預(yù)處理的作用是(1) ,預(yù)處理指令的標(biāo)志是(2) 。多文件系統(tǒng)中,程序由(3) 來管理,用戶自定義頭文件中通常定義一些(4) 。答案:(1)將源程序文件進(jìn)行處理,生成一個中間文件,編譯系統(tǒng)對此中間文件進(jìn)行編譯并生成目標(biāo)代碼(2)#(3)工程文件第三章 函數(shù)習(xí)題 2(4)用戶構(gòu)造的數(shù)據(jù)類型(如枚舉類型),外部變量,外部函數(shù)、常量和內(nèi)聯(lián)函數(shù)等具有一定通用性或常用的量3.1.6 設(shè)有函數(shù)說明如下:int f(int x, int y) return x%y+1; 假定a=10,b=4,c=5,下列語句的執(zhí)行結(jié)果分別是(1) 和 (2) 。(1) cout&
54、lt;<f(a,b)+f(a,c); (2) cout<<f(f(a+c,b),f(b,c);解答:(1)答案:4 411035abcf(a,b)f(a,c)main()f(a,b)f(a,c)410xy510xyreturn x%y+1;return x%y+1;(2)答案:53.1.7下列程序的輸出結(jié)果分別為(1) 和 (2) 。(1)#include<iostream>using namespace std;int a,b;void f(int j)第三章 函數(shù)習(xí)題 3static int i=a; /注意靜態(tài)局部變量int m,n;m=i+j; i+; j
55、+; n=i*j; a+;cout<<"i="<<i<<'t'<<"j="<<j<<'t'cout<<"m="<<m<<'t'<<"n="<<n<<endl;int main()a=1; b=2;f(b); f(a);cout<<"a="<<a<<'t'&
56、lt;<"b="<<b<<endl;return 0;解: 21abmain()f(b)f(a)ji+j=2+2=4i*j=3*3=9nmf()321i3232j32i+j=1+2=3i*j=2*3=6nm答案:i=2 j=3 m=3 n=6 (對應(yīng)藍(lán)色)i=3 j=3 m=4 n=9 (對應(yīng)綠色)a=3 b=2(2)#include<iostream>using namespace std;float sqr(float a)return a*a;float p(float x,int n)cout<<"in
57、-process:"<<"x="<<x<<'t'<<"n="<<n<<endl;if(n=0) return 1;else if(n%2!=0) return x*sqr(p(x,n/2);else return sqr(p(x,n/2);int main()cout<<p(2.0,13)<<endl;return 0;第三章 函數(shù)習(xí)題 4圖解遞歸,共五層,返回值是回歸時產(chǎn)生: 13nmain()1()p(2.0,13)81922.0
58、xp(2.0,6)646n2()2.0xp(2.0,3)83n3()2.0xp(2.0,1)21n4()2.0xp(2.0,0)10n5()2.0xx*sqr(p(x,n/2)x*sqr(p(x,n/2)x*sqr(p(x,n/2)sqr(p(x,n/2)答案:in-process:x=2 n=13in-process:x=2 n=6in-process:x=2 n=3in-process:x=2 n=1in-process:x=2 n=081923.2 簡答題3.2.1 函數(shù)的實參和形參怎樣對應(yīng)?實參和形參數(shù)目必須一致嗎?什么情況下可以不同?答:實參和形參的個數(shù)和排列順序應(yīng)一一對應(yīng),并且對應(yīng)
59、參數(shù)應(yīng)類型匹配(賦值兼容),當(dāng)有缺省參數(shù)時可以不同。3.2.2 函數(shù)和內(nèi)聯(lián)函數(shù)的執(zhí)行機制有何不同?定義內(nèi)聯(lián)函數(shù)有何意義?又有何要求?答:內(nèi)聯(lián)函數(shù)的調(diào)用機制與一般函數(shù)不同,編譯器在編譯過程中遇到inline時,為該函數(shù)建立一段代碼,而后在每次調(diào)用時直接將該段代碼嵌入到調(diào)用函數(shù)中,從而將函數(shù)調(diào)用方式變?yōu)轫樞驁?zhí)行方式,這一過程稱為內(nèi)聯(lián)函數(shù)的擴展或內(nèi)聯(lián)。內(nèi)聯(lián)函數(shù)的實質(zhì)是犧牲空間來換取時間。因inline指示符對編譯器而言只是一個建議,編譯器也可以選擇忽略該建議,內(nèi)聯(lián)函數(shù)只適用于功能簡單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語句,如switch、復(fù)雜if嵌套、while語句等,以及無法
60、內(nèi)聯(lián)展開的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。3.2.3 全局變量和全局靜態(tài)變量的區(qū)別在哪里?為什么提倡盡量使用局部變量?答:有static修飾的全局變量只能在定義它的文件中可見,在其他文件中不可見,而非靜態(tài)的全局變量則可以被其他程序文件訪問,但使用前必須用extern說明。第三章 函數(shù)習(xí)題 5局部變量具有局部作用域使得程序在不同塊中可以使用同名變量。這些同名變量各自在自己的作用域中可見,在其它地方不可見。所以提倡盡量使用局部變量3.2.4 函數(shù)重載的作用是什么?滿足什么條件的函數(shù)才可以成為重載函數(shù)?重載函數(shù)在調(diào)用時是怎樣進(jìn)行對應(yīng)的?答:函數(shù)重載可以定義幾個功能
61、相似,而參數(shù)類型不同使用相同的函數(shù)名的函數(shù),以適應(yīng)不同情況下自動選用不同函數(shù)進(jìn)行操作。函數(shù)重載的好處在于,可以用相同的函數(shù)名來定義一組功能相同或類似的函數(shù),程序的可讀性增強。在定義重載函數(shù)時必須保證參數(shù)類型不同,僅僅返回值類型不同是不行的。當(dāng)某個函數(shù)中調(diào)用到重載函數(shù)時,編譯器會根據(jù)實參的類型去對應(yīng)地調(diào)用相應(yīng)的函數(shù)。匹配過程按如下步驟進(jìn)行:(1)如果有嚴(yán)格匹配的函數(shù),就調(diào)用該函數(shù);(2)參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù);(3)通過用戶定義的轉(zhuǎn)換尋求匹配。3.2.5 多文件結(jié)構(gòu)的程序是如何進(jìn)行管理并運行的?采用多文件結(jié)構(gòu)有什么好處?答:多文件結(jié)構(gòu)通過工程進(jìn)行管理,在工程中建立若干用戶定義的頭文件
62、.h和源程序文件.cpp。頭文件中定義用戶自定義的數(shù)據(jù)類型,所有的程序?qū)崿F(xiàn)則放在不同的源程序文件中。編譯時每個源程序文件單獨編譯,如果源程序文件中有編譯預(yù)處理指令,則首先經(jīng)過編譯預(yù)處理生成臨時文件存放在內(nèi)存,之后對臨時文件進(jìn)行編譯生成目標(biāo)文件.obj,編譯后臨時文件撤銷。所有的目標(biāo)文件經(jīng)連接器連接最終生成一個完整的可執(zhí)行文件.exe。多文件結(jié)構(gòu)管理程序的好處是十分明顯的。首先,可以避免重復(fù)性的編譯,如果修改了個別函數(shù),那么只需將這些函數(shù)所在的文件重新編譯即可;其次,將程序進(jìn)行合理的功能劃分后,更容易設(shè)計、調(diào)試和維護(hù);另外,通常把相關(guān)函數(shù)放在一個文件中,這樣形成一系列按照功能分類的文件,便于為其
63、他程序文件使用。3.2.6 宏定義與常量定義從作用及效果上看是一樣的,二者是否完全相同?答:完全不同。不帶參宏定義與const說明符定義常量從效果上看是一樣的,但它們的機制不同。首先宏定義是在預(yù)處理階段完成,而const定義則是在編譯階段實現(xiàn)。其次宏定義只是一種簡單的字符串替代,不會為字符串分配內(nèi)存單元,替代過程也不作語法檢查,即使指令中的常量字符串不符合常量要求,預(yù)處理的替代過程也照樣按指令給出的格式進(jìn)行。而const定義則是象定義一個變量一樣定義一個常量標(biāo)識符,系統(tǒng)要按照類型要求為該標(biāo)識符分配內(nèi)存單元,同時在將常量放入單元時進(jìn)行類型檢查,如果類型不匹配,類型相容的會進(jìn)行系統(tǒng)的類型轉(zhuǎn)換,不相
64、容的則要提示錯誤。二編程與綜合練習(xí)題3.3 設(shè)計函數(shù),將小寫英文字符變?yōu)閷?yīng)的大寫字符。解:小寫字母比大寫字母ASCII碼值大32,或?qū)懽鱟h=ch-a+A;#include<iostream>using namespace std;char capitalize(char ch)if(ch>='a'&&ch<='z') return ch-'a'+'A'else return ch;第三章 函數(shù)習(xí)題 6int main()int i=0;char cp30;cout<<"請輸入包含小寫字母的句子:"<<endl;cin.getline(cp,30);while(cpi!='0') cou
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工廠轉(zhuǎn)讓的合同
- 充分利用資源的聯(lián)營合同
- 2024年多功能地?zé)峋谘b置項目合作計劃書
- 單價施工合同范本
- 2024年高性能氣敏傳感器項目建議書
- 室內(nèi)粉刷維修合同范本
- 財務(wù)外包協(xié)議合同范本
- 如何保障生產(chǎn)按時交付計劃
- 多元文化視角下的生物教學(xué)計劃
- 推動疫苗接種工作的實施方案計劃
- 2024-2030年智慧環(huán)保行業(yè)市場發(fā)展分析及競爭形勢與投資發(fā)展前景研究報告
- 部編版語文四年級上冊習(xí)作《記一次游戲》精美課件
- 2025年高考作文備考之作文審題強化訓(xùn)練(6)(客觀題+主觀題)
- 《算法設(shè)計與分析基礎(chǔ)》(Python語言描述) 課件 第4章分治法2
- 2024-2025學(xué)年蘇教版小學(xué)三年級上學(xué)期期中數(shù)學(xué)試卷與參考答案
- 旅游行業(yè)人才培養(yǎng)需求分析
- 2024年中國海油秋季校園招聘高頻難、易錯點500題模擬試題附帶答案詳解
- 2024年消防宣傳月知識競賽考試題庫200題(含答案)
- 五年級口算題卡每天100題帶答案
- 期中核心素質(zhì)卷(試題)-2024-2025學(xué)年數(shù)學(xué)五年級上冊北師大版
- 11.2 樹立正確的人生目標(biāo) (同步課件)-2024-2025學(xué)年統(tǒng)編版道德與法治七年級上冊
評論
0/150
提交評論