版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 C+基礎(chǔ)知識(shí)習(xí)題 1第一章 C+基礎(chǔ)知識(shí)習(xí)題1.1 判斷下列標(biāo)識(shí)符的合法性。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á)式的值,以及運(yùn)算后表達(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,運(yùn)算后x、y、a的值不變,仍分別為2.5、8.2、3。提示:運(yùn)算時(shí)取出y變量的數(shù)值強(qiáng)制轉(zhuǎn)化為整型數(shù)放入寄存器參加運(yùn)算,但內(nèi)存中y本身的數(shù)值不變化。只有賦值運(yùn)算和自增、自減運(yùn)算才改變變量本身的值x=z*b+,b=b*x,b+ 表達(dá)式值為:42,運(yùn)算后x為7.0,b為43。提示
3、:逗號(hào)表達(dá)式,依次運(yùn)算,表達(dá)式的值是最后一次運(yùn)算的值。后+是變量先參加運(yùn)算然后變量自身加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á)式值為:,字符外斜杠。運(yùn)算后ch1、ch2、ch3值不變。提示:字符型的變量實(shí)質(zhì)是范圍很小的整型量。int(y/z)+(int)y/(int)z 表達(dá)式值為:13。y和z自身的值不變。提示:int(y/z)是完成實(shí)數(shù)除法后,商強(qiáng)制轉(zhuǎn)化為整型,(int)y/(int)z則是數(shù)值先轉(zhuǎn)換,完成的是整除。!(a>b)&&a
4、mp;c&&(x*=y)&&b+ 表達(dá)式值為:0。運(yùn)算后x仍為2.5,b仍為5提示:只要出現(xiàn)一個(gè)false右邊的不再做,因?yàn)閏為0,即false,所以其右的所有運(yùn)算不再做。ch3|(b+=a*c)|c+ 表達(dá)式值為:1。運(yùn)算后b為5,c為0,均不變。提示:只要出現(xiàn)一個(gè)true,右邊不再做。ch3的值為48。z=(a<<2)/(b>>1) 表達(dá)式值為:6。運(yùn)算后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ǔ)知識(shí)習(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) 位于原點(diǎn)為圓心,a, b為半徑的圓環(huán)中的點(diǎ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è)有語(yǔ)句:int a, b;float x,y;char ch1,ch2,ch3;cin>>a>>b>>x>>y>>ch1;ch2=cin.get();cin>>ch3;若從鍵盤(pán)輸入: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è)有語(yǔ)句:int a,b,c,d;cin>>oct>>a>>b>&g
8、t;hex>>c>>dec>>d;若從鍵盤(pán)輸入:23 23 23 23執(zhí)行后各變量的值用十進(jìn)制表示各是多少?答:a:19,b:19,c:35,d:231.8 對(duì)于習(xí)題1.7,若執(zhí)行:cout<<a<<t<<hex<<b<<t<<oct<<c<<endl;顯示結(jié)果是什么?答:19 0x13 0432第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題一基本概念與基礎(chǔ)知識(shí)自測(cè)題3.1 程序閱讀題3.1.1 設(shè)有說(shuō)明:int a=3, b=100;下面的循環(huán)語(yǔ)句執(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è)有說(shuō)明: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 ) 22 nC. y = (1 +x ) n2 nD. y = (1 +x ) 22 n +1第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題2解答:第一個(gè)循環(huán)使 x 成為: x2 n(1)B;y 成為:1 + x2 n;第一個(gè)循環(huán)使 y 成為: (1 +x ) 2;2 n考慮整除, x2 n(2)1連除 4 次以后為零,所以:3.1.3 請(qǐng)看如下程序段:if(num=1)cout<<”Alpha”;else if(num=2)c
11、out<<”Bata”;else if(num=3)cout<<”Gamma”;else cout<<”Delta”;當(dāng)num的值分別為 1、2、3 時(shí),上面程序段的輸出分別為(1) 、(2) 、(3) 。 解答:檢查條件語(yǔ)句與字符串輸出概念:(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 語(yǔ)句的使用
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è)計(jì)習(xí)題3若>0,輸出兩個(gè)不等實(shí)根;若=0,輸出兩個(gè)相等實(shí)根;若<0,輸出兩個(gè)復(fù)數(shù)根。解:本題以一個(gè)絕對(duì)值極小的數(shù)作為實(shí)數(shù) 0。#include <iostream.h>#include <math
13、.h>#include <stdlib.h>void main()double a,b,c;double delta,x1,x2;const double zero=1e-9; /定義一個(gè)很小的常數(shù)int sign;cout<<"輸入三個(gè)系數(shù)a(a!=0), b, c:"<<endl;cin>>a>>b>>c;if(fabs(a)<zero) cout<<"二次項(xiàng)系數(shù)為0,方程根是-c/b" exit(0); cout<<"a="
14、;<<a<<'t'<<"b="<<b<<'t'<<"c="<<c<<endl; delta=b*b-4*a*c; if(fabs(delta)<zero)/絕對(duì)值很小的數(shù)即被認(rèn)為是0cout<<"方程有兩個(gè)相同實(shí)根:"cout<<"x1=x2="<<-b/(2*a)<<endl;else if(delta>0)sign=1;els
15、esign=0; delta=sqrt(fabs(delta); x1=-b/(2*a); x2=delta/(2*a);if(sign) cout<<"方程有兩個(gè)不同實(shí)根:" cout<<"x1="<<x1+x2<<'t'<<"x2="<<x1-x2<<endl;else/delta<0 cout<<"方程無(wú)實(shí)根!有兩個(gè)不同復(fù)數(shù)根:" cout<<"x1="<
16、<x1<<"+i"<<x2<<'t'<<"x2="<<x1<<"-i"<<x2<<endl;3.3 設(shè)計(jì)程序?qū)⑤斎氲陌俜种瞥煽?jī)轉(zhuǎn)換為五分制輸出,90 分以上為 5 分,8089 分為 4 分,7079 分為 3 分,6069 分為 2 分,60 分以下為 1 分。 解:10 分一檔用 10 進(jìn)行整除獲得,轉(zhuǎn)換用開(kāi)關(guān)語(yǔ)句實(shí)行。第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題4#include <iostream.h>void
17、 main()int mark,result;/mark是百分制成績(jī),result是5分制cout<<"請(qǐng)輸入百分制成績(jī):"<<endl;cin>>mark;if(mark<0) cout<<"缺考!"<<endl; return;switch (mark/10) case 9: case 10: result=5;cout<<"輸出五分制成績(jī):"<<result<<endl;break;case 8: result=4; cout&
18、lt;<"輸出五分制成績(jī):"<<result<<endl; break;case 7: result=3; cout<<"輸出五分制成績(jī):"<<result<<endl; break;case 6: result=2; cout<<"輸出五分制成績(jī):"<<result<<endl; break;case 5:case 4:case 3:case 2:case 1:case 0: result=1; cout<<"
19、輸出五分制成績(jī):"<<result<<endl; break;default:cout<<"輸入錯(cuò)誤!"<<endl;3.4 編程打印如下圖形:*解:難點(diǎn)在三角形左邊的空格的控制,嵌套一個(gè)循環(huán)語(yǔ)句完成此任務(wù)。第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(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*i-1
20、;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<<"輸入一個(gè)字母:"cin>>in;if(in>=97)&&a
21、mp;(in<=122) in-=32;/小寫(xiě)改大寫(xiě)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<=line-i
22、;j+)cout<<""for(j=1;j<=2*i-1;j+)cout<<' '<<char(i-1+'A');第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題6cout<<endl;3.6 輸入 n,求 1!+2!+3!+n!解:通常求和作為外循環(huán),階乘作為內(nèi)循環(huán)。這里考慮到:n!=n*(n-1)!,利用遞推法運(yùn)算 速度大大提高,同時(shí)兩者可合并為一個(gè)循環(huán)。本程序考慮了輸入的健壯性。#include <iostream.h>#include <stdlib.h>void main
23、()int n;double result=0;/result是結(jié)果cin>>n;if(n<1)cout<<"輸入錯(cuò)誤!"<<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 猴子吃桃問(wèn)題:猴子摘下若干個(gè)桃子,第一天吃了桃子的一半多一個(gè),以后每天吃了前一天剩下的一半多一個(gè),到第十天吃以前發(fā)現(xiàn)只剩下一
24、個(gè)桃子,問(wèn)猴子共摘了幾個(gè)桃子。 解:采用遞推法。從最后一天逆推到第一天,9 次循環(huán)。#include <iostream.h>const int day=10;void main()int i,x=1;/最后一天只有一個(gè)for(i=1;i<day;i+)/從一天前推到九天前x=(x+1)*2;cout<<"開(kāi)始共有桃子"<<x<<"個(gè)。n"3.8 從鍵盤(pán)輸入一組非 0 整數(shù),以輸入 0 標(biāo)志結(jié)束,求這組整數(shù)的平均值,并統(tǒng)計(jì)其中的個(gè) 數(shù)。 解:將這組整數(shù)放在整型數(shù)組中,一邊輸入一邊求和及統(tǒng)計(jì)正數(shù)和負(fù)數(shù)的
25、個(gè)數(shù),平均數(shù)由和 除以整數(shù)數(shù)量取得。第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題7#include <fstream.h>#include <iostream.h>void main()int stem256,sum=0,pnum=0,nnum=0,i=0; cout<<"從鍵盤(pán)輸入一組非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、stemi;if(!i) cout<<"0個(gè)數(shù)"<<endl;else cout<<"平均值"<<(double)sum/(pnum+nnum)<<endl;/平均值習(xí)慣不用整數(shù) cout<<"正數(shù)個(gè)數(shù)"<<pnum<<endl;cout<<"負(fù)數(shù)個(gè)數(shù)"<<nnum<<endl;3.9 編程找出 1500 之中滿(mǎn)足除以 3 余 2,除以 5 余 3,除以 7 余 2 的整數(shù)。解:中國(guó)古
27、代數(shù)學(xué)問(wèn)題(韓信點(diǎn)兵),采用窮舉法。注意三個(gè)條件同時(shí)成立用&&。#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ù)指的是一個(gè)數(shù)恰好等于它的所有因子和。 例如 6=1+2+3,就是一個(gè)完全數(shù)。解:采用窮舉法。兩重循環(huán),外層是從 1 到 999 依次處理,內(nèi)層是求該數(shù)的所有因子的和, 并判斷是否等于該數(shù)。#i
28、nclude <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è)計(jì)習(xí)題83.11 將 100 元換成用 10 元、5 元和 1 元的組合,共有多少種組合方法。 解:采用窮舉法??紤] 10 元最多 10 張,5 元最多 20 張,余下是 1 元。#include <iostream.h
29、>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 利用反正切展開(kāi)計(jì)算的近似值,要求誤差 10-5,公式如下:357arctg ( x) x x + x x +
30、L357令 x=1,可計(jì)算出/4 的近似值。 解:采用遞推法。初看每一項(xiàng)的遞推通式不易寫(xiě)出,但每一項(xiàng)全看作奇數(shù)項(xiàng),而偶數(shù)項(xiàng)全為 零,則很容易寫(xiě)出:第 1 項(xiàng)為 x,第 3 項(xiàng)為第 1 項(xiàng)乘以 x 的平方除以項(xiàng)序號(hào) 3 乘以-1,其余 類(lèi)推。同時(shí)和的誤差小于最后一項(xiàng)的絕對(duì)值。#include<iostream.h>#include<math.h>const double e=1e-6;void main()double x,a,sum; int i=3; cout<<"請(qǐng)輸入弧度值:"<<endl; cin>>x;a
31、=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è)計(jì)習(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)語(yǔ)句實(shí)現(xiàn),數(shù)學(xué)上#include<iostream.h&g
32、t;#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<<"
33、超出迭代1e5次n"else cout<<"方程x*x+10*cos(x)=0的一個(gè)根為:"<<x1<<endl;cout<<"方程誤差為:"<<x1*x1+10*cos(x1)<<endl;3.14 兩隊(duì)選手每隊(duì) 5 人進(jìn)行一對(duì)一的比賽,甲隊(duì)為 A、B、C、D、E,乙隊(duì)為 J、K、L、M、N,經(jīng)過(guò)抽簽決定比賽配對(duì)名單。規(guī)定 A 不和 J 比賽,M 不和 D 及 E 比賽。列出所有可能 的比賽名單。解:這是一個(gè)組合問(wèn)題,使用窮舉法。共有 5 個(gè)位置,設(shè)甲隊(duì) 5 名隊(duì)員位置不
34、變,乙隊(duì)改變 隊(duì)員位置,進(jìn)行配對(duì)。注意第 1 個(gè)位置可在 5 個(gè)隊(duì)員中任選一個(gè),以后的位置必須扣除已選 過(guò)的隊(duì)員。并扣除不能配對(duì)的情況,即得所有可能的比賽名單。#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號(hào)位if(j=0) c
35、ontinue;/A不與J比賽,即st10不與st20比賽for(k=0;k<5;k+)/1號(hào)位 if(k=j) continue; for(l=0;l<5;l+)/2號(hào)位if(l=j|l=k) continue;for(m=0;m<5;m+)/3號(hào)位if(m=j|m=k|m=l) continue;第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題10if(m=3) continue;/M不與D比賽,即st13不與st23比賽for(n=0;n<5;n+)/4號(hào)位if(n=3) continue;/M不與E比賽,即st14不與st23比賽if(n=j|n=k|n=l|n=m) cont
36、inue;cout<<st10<<'-'<<st2j<<'t'<<st11<<'-'<<st2k<<'t'cout<<st12<<'-'<<st2l<<'t'<<st13<<'-'<<st2m<<'t'cout<<st14<<'-'<
37、<st2n<<endl;i+;cout<<i<<endl;3.15 編程模擬選舉過(guò)程。假定四位候選人:zhang、wang、li、zhao,代號(hào)分別為 1、2、3、4。選舉人直接鍵入候選人代號(hào),14 之外的整數(shù)視為棄權(quán)票,-1 為終止標(biāo)志。打印各位候 選人的得票以及當(dāng)選者(得票數(shù)超過(guò)選票總數(shù)一半)名單。解:用 5 個(gè)元素的整型數(shù)組,分別放棄權(quán)票和各候選人的得票,然后用開(kāi)關(guān)語(yǔ)句打印。#include<iostream.h>#include<iomanip.h>void main()enum candidatefeipiao,zha
38、ng,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 zh
39、ang: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<<"
40、當(dāng)選"<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(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、<'t'<<votecand;if(votecand>k/2) cout<<"當(dāng)選"<<endl;else cout<<endl;break;3.16 改造【例 3.11】,將運(yùn)行結(jié)果(Fibonacii 數(shù)列的前 20 項(xiàng))存入文件。解:采用 3 步法。首先建立或打開(kāi)一個(gè)輸出文件,并與磁盤(pán)文件聯(lián)系:ofstream ofile("myfile3_16.txt"); 再按一定格式存入數(shù)據(jù):ofile<<setw(15)<<fib0<<setw(
42、15)<<fib1;等 然后關(guān)閉文件:ofile.close(); 如要讀出數(shù)據(jù),則用輸入文件打開(kāi),并與同一磁盤(pán)文件聯(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;cha
43、r 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個(gè)數(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è)計(jì)習(xí)題12if(ifile.eof()!=0) break;cout<<setw(15)<<i<<setw(15)<<j<<setw(15)<<k<<setw(15)<&
45、lt;l<<endl;/屏幕顯示ifile.close();3.17 改造【例 3.16】,將運(yùn)行結(jié)果(100 以?xún)?nèi)素?cái)?shù))存入文件。解:采用 4 步法。首先定義一個(gè)輸出文件:ofstream ofile; 再打開(kāi)該文件并與并與磁盤(pán)文件聯(lián)系:ofile.open("myfile3_17.txt"); 按一定格式把數(shù)據(jù)存入文件。最后關(guān)閉文件。效果與 3 步法相同。 讀文件同樣可用 3 步法或 4 步法。#include<fstream.h>#include<iomanip.h>#include<math.h> const int
46、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不是素?cái)?shù),置0 for(i=0;i<n;i+)if(ai=0)continue;/該數(shù)已經(jīng)置0,判斷下一個(gè)數(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<<&quo
47、t;1-"<<n<<"之間的素?cái)?shù):"<<endl;for(i=0;i<n;i+)/輸出所有素?cái)?shù)if(ai!=0) ofile<<setw(6)<<ai; count+;if(count%10=0)ofile<<endl;/每行10個(gè)數(shù)據(jù) ofile.close(); cout<<"是否要將文件輸出?Y或N"<<endl; cin>>ch;if(ch='y'|ch='Y') ifile.open(&qu
48、ot;myfile3_17.txt"); i=0;while(ifile.get(bi)/不可用>>,它不能讀白字符,第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(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個(gè)數(shù)if(ifile.eof()!=0) brea
49、k;/這里與例3.20不同,最后一個(gè)數(shù)據(jù)后面可能沒(méi)有回車(chē),直接為文件結(jié)束 ifile.close(); cout<<endl;3.18 改造【例 3.10】,文本由文本文件輸入。解:文本文件讀入要用成員函數(shù):ifile.get(),而不可用插入運(yùn)算符<<,否則會(huì)丟失空白字 符。#include<fstream.h>void main()char ch;int nline=0,nword=0,nch=0;int isword=0;ifstream ifile("ep3_18.cpp"); cout<<"讀入ep3_18
50、.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<<"
51、;行數(shù):"<<nline<<endl; cout<<"單詞數(shù):"<<nword<<endl; cout<<"字符數(shù):"<<nch<<endl;第二章 基本控制結(jié)構(gòu)程序設(shè)計(jì)習(xí)題14第三章 函數(shù)習(xí)題 1第三章函數(shù)習(xí)題一基本概念與基礎(chǔ)知識(shí)自測(cè)題3.1 填空題3.1.1 被定義為形參的是在函數(shù)中起(1) 作用的變量,形參只能用(2) 表示。實(shí)參的作用是(3) ,實(shí)參可以用 (4) 、 (5) 、 (6) 表示。答案:(1)自變量(2)變量名(3)將實(shí)際參數(shù)的
52、值傳遞給形參(4)具有值的變量(5)常量(6)表達(dá)式3.1.2 局部域包括(1) 、 (2) 和 (3) 。使用局部變量的意義在于 (4) 。答案:(1)塊域(2)函數(shù)域(3)函數(shù)原型域(4)局部變量具有局部作用域使得程序在不同塊中可以使用同名變量3.1.3 靜態(tài)局部變量存儲(chǔ)在(1) 區(qū),在 (2) 時(shí)候建立,生存期為(3) ,如定義時(shí)未顯式初始化,則其初值為(4) 。答案:(1)全局?jǐn)?shù)據(jù)區(qū)(2)編譯(3)全局生存期(4)全03.1.4局部變量存儲(chǔ)在(1) 區(qū),在 (2) 時(shí)候建立,生存期為(3) ,如定義時(shí)未顯式初始化,則其初值為(4) 。答案:(1)棧(2)在函數(shù)或塊開(kāi)始執(zhí)行時(shí)(3)函數(shù)或
53、塊的執(zhí)行期(4)隨機(jī)值3.1.5 編譯預(yù)處理的作用是(1) ,預(yù)處理指令的標(biāo)志是(2) 。多文件系統(tǒng)中,程序由(3) 來(lái)管理,用戶(hù)自定義頭文件中通常定義一些(4) 。答案:(1)將源程序文件進(jìn)行處理,生成一個(gè)中間文件,編譯系統(tǒng)對(duì)此中間文件進(jìn)行編譯并生成目標(biāo)代碼(2)#(3)工程文件第三章 函數(shù)習(xí)題 2(4)用戶(hù)構(gòu)造的數(shù)據(jù)類(lèi)型(如枚舉類(lèi)型),外部變量,外部函數(shù)、常量和內(nèi)聯(lián)函數(shù)等具有一定通用性或常用的量3.1.6 設(shè)有函數(shù)說(shuō)明如下:int f(int x, int y) return x%y+1; 假定a=10,b=4,c=5,下列語(yǔ)句的執(zhí)行結(jié)果分別是(1) 和 (2) 。(1) cout<
54、<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、<"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 (對(duì)應(yīng)藍(lán)色)i=3 j=3 m=4 n=9 (對(duì)應(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-pr
57、ocess:"<<"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圖解遞歸,共五層,返回值是回歸時(shí)產(chǎn)生: 13nmain()1()p(2.0,13)81922.0xp(
58、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 簡(jiǎn)答題3.2.1 函數(shù)的實(shí)參和形參怎樣對(duì)應(yīng)?實(shí)參和形參數(shù)目必須一致嗎?什么情況下可以不同?答:實(shí)參和形參的個(gè)數(shù)和排列順序應(yīng)一一對(duì)應(yīng),并且對(duì)應(yīng)參數(shù)應(yīng)
59、類(lèi)型匹配(賦值兼容),當(dāng)有缺省參數(shù)時(shí)可以不同。3.2.2 函數(shù)和內(nèi)聯(lián)函數(shù)的執(zhí)行機(jī)制有何不同?定義內(nèi)聯(lián)函數(shù)有何意義?又有何要求?答:內(nèi)聯(lián)函數(shù)的調(diào)用機(jī)制與一般函數(shù)不同,編譯器在編譯過(guò)程中遇到inline時(shí),為該函數(shù)建立一段代碼,而后在每次調(diào)用時(shí)直接將該段代碼嵌入到調(diào)用函數(shù)中,從而將函數(shù)調(diào)用方式變?yōu)轫樞驁?zhí)行方式,這一過(guò)程稱(chēng)為內(nèi)聯(lián)函數(shù)的擴(kuò)展或內(nèi)聯(lián)。內(nèi)聯(lián)函數(shù)的實(shí)質(zhì)是犧牲空間來(lái)?yè)Q取時(shí)間。因inline指示符對(duì)編譯器而言只是一個(gè)建議,編譯器也可以選擇忽略該建議,內(nèi)聯(lián)函數(shù)只適用于功能簡(jiǎn)單,代碼短小而又被重復(fù)使用的函數(shù)。函數(shù)體中包含復(fù)雜結(jié)構(gòu)控制語(yǔ)句,如switch、復(fù)雜if嵌套、while語(yǔ)句等,以及無(wú)法內(nèi)聯(lián)展
60、開(kāi)的遞歸函數(shù),都不能定義為內(nèi)聯(lián)函數(shù),即使定義,系統(tǒng)也將作為一般函數(shù)處理。3.2.3 全局變量和全局靜態(tài)變量的區(qū)別在哪里?為什么提倡盡量使用局部變量?答:有static修飾的全局變量只能在定義它的文件中可見(jiàn),在其他文件中不可見(jiàn),而非靜態(tài)的全局變量則可以被其他程序文件訪(fǎng)問(wèn),但使用前必須用extern說(shuō)明。第三章 函數(shù)習(xí)題 5局部變量具有局部作用域使得程序在不同塊中可以使用同名變量。這些同名變量各自在自己的作用域中可見(jiàn),在其它地方不可見(jiàn)。所以提倡盡量使用局部變量3.2.4 函數(shù)重載的作用是什么?滿(mǎn)足什么條件的函數(shù)才可以成為重載函數(shù)?重載函數(shù)在調(diào)用時(shí)是怎樣進(jìn)行對(duì)應(yīng)的?答:函數(shù)重載可以定義幾個(gè)功能相似,
61、而參數(shù)類(lèi)型不同使用相同的函數(shù)名的函數(shù),以適應(yīng)不同情況下自動(dòng)選用不同函數(shù)進(jìn)行操作。函數(shù)重載的好處在于,可以用相同的函數(shù)名來(lái)定義一組功能相同或類(lèi)似的函數(shù),程序的可讀性增強(qiáng)。在定義重載函數(shù)時(shí)必須保證參數(shù)類(lèi)型不同,僅僅返回值類(lèi)型不同是不行的。當(dāng)某個(gè)函數(shù)中調(diào)用到重載函數(shù)時(shí),編譯器會(huì)根據(jù)實(shí)參的類(lèi)型去對(duì)應(yīng)地調(diào)用相應(yīng)的函數(shù)。匹配過(guò)程按如下步驟進(jìn)行:(1)如果有嚴(yán)格匹配的函數(shù),就調(diào)用該函數(shù);(2)參數(shù)內(nèi)部轉(zhuǎn)換后如果匹配,調(diào)用該函數(shù);(3)通過(guò)用戶(hù)定義的轉(zhuǎn)換尋求匹配。3.2.5 多文件結(jié)構(gòu)的程序是如何進(jìn)行管理并運(yùn)行的?采用多文件結(jié)構(gòu)有什么好處?答:多文件結(jié)構(gòu)通過(guò)工程進(jìn)行管理,在工程中建立若干用戶(hù)定義的頭文件.h和
62、源程序文件.cpp。頭文件中定義用戶(hù)自定義的數(shù)據(jù)類(lèi)型,所有的程序?qū)崿F(xiàn)則放在不同的源程序文件中。編譯時(shí)每個(gè)源程序文件單獨(dú)編譯,如果源程序文件中有編譯預(yù)處理指令,則首先經(jīng)過(guò)編譯預(yù)處理生成臨時(shí)文件存放在內(nèi)存,之后對(duì)臨時(shí)文件進(jìn)行編譯生成目標(biāo)文件.obj,編譯后臨時(shí)文件撤銷(xiāo)。所有的目標(biāo)文件經(jīng)連接器連接最終生成一個(gè)完整的可執(zhí)行文件.exe。多文件結(jié)構(gòu)管理程序的好處是十分明顯的。首先,可以避免重復(fù)性的編譯,如果修改了個(gè)別函數(shù),那么只需將這些函數(shù)所在的文件重新編譯即可;其次,將程序進(jìn)行合理的功能劃分后,更容易設(shè)計(jì)、調(diào)試和維護(hù);另外,通常把相關(guān)函數(shù)放在一個(gè)文件中,這樣形成一系列按照功能分類(lèi)的文件,便于為其他程序
63、文件使用。3.2.6 宏定義與常量定義從作用及效果上看是一樣的,二者是否完全相同?答:完全不同。不帶參宏定義與const說(shuō)明符定義常量從效果上看是一樣的,但它們的機(jī)制不同。首先宏定義是在預(yù)處理階段完成,而const定義則是在編譯階段實(shí)現(xiàn)。其次宏定義只是一種簡(jiǎn)單的字符串替代,不會(huì)為字符串分配內(nèi)存單元,替代過(guò)程也不作語(yǔ)法檢查,即使指令中的常量字符串不符合常量要求,預(yù)處理的替代過(guò)程也照樣按指令給出的格式進(jìn)行。而const定義則是象定義一個(gè)變量一樣定義一個(gè)常量標(biāo)識(shí)符,系統(tǒng)要按照類(lèi)型要求為該標(biāo)識(shí)符分配內(nèi)存單元,同時(shí)在將常量放入單元時(shí)進(jìn)行類(lèi)型檢查,如果類(lèi)型不匹配,類(lèi)型相容的會(huì)進(jìn)行系統(tǒng)的類(lèi)型轉(zhuǎn)換,不相容的則
64、要提示錯(cuò)誤。二編程與綜合練習(xí)題3.3 設(shè)計(jì)函數(shù),將小寫(xiě)英文字符變?yōu)閷?duì)應(yīng)的大寫(xiě)字符。解:小寫(xiě)字母比大寫(xiě)字母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<<"請(qǐng)
65、輸入包含小寫(xiě)字母的句子:"<<endl;cin.getline(cp,30);while(cpi!='0') cout<<capitalize(cpi+);cout<<endl;return 0;3.4 設(shè)計(jì)兩個(gè)函數(shù),分別求兩個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。解:可用窮舉法求最大公約數(shù)(從大到小找到的第1個(gè)公約數(shù))和最小公倍數(shù)(從小到大找到的第1個(gè)公倍數(shù))。#include<iostream>using namespace std;MaxCommonDevisor(int n,int m)int i;for( i=n;i>=1;i-)if(n%
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)計(jì)師事務(wù)所兼職合同范本:工作職責(zé)與權(quán)益保障
- 2024解除勞動(dòng)合同的問(wèn)題
- 國(guó)家級(jí)代理授權(quán)經(jīng)營(yíng)合同范本
- 2024新版廣告合同格式
- 醫(yī)院與社區(qū)合作協(xié)議
- 2024年度別墅電梯定制安裝合同
- 2024建筑材料的購(gòu)銷(xiāo)合同范本
- 2024年專(zhuān)用電纜采購(gòu)合同
- 2024苗圃土地承包合同模板
- 工程項(xiàng)目協(xié)作股權(quán)協(xié)議范例
- 2015-2024北京中考真題語(yǔ)文匯編:記敘文閱讀
- 2024年湖南土建中級(jí)職稱(chēng)-建筑工程《法律法規(guī)及技術(shù)標(biāo)準(zhǔn)》考試題庫(kù)(含答案)
- 旅游景區(qū)消防安全培訓(xùn)
- 《創(chuàng)意改善生活》課件 2024-2025學(xué)年湘美版(2024)初中美術(shù)七年級(jí)上冊(cè)
- 2024-2025學(xué)年 浙教版七年級(jí)數(shù)學(xué)上冊(cè)期中(第1-4章)培優(yōu)試卷
- 個(gè)人簡(jiǎn)歷模板(5套完整版)
- CHT 1027-2012 數(shù)字正射影像圖質(zhì)量檢驗(yàn)技術(shù)規(guī)程(正式版)
- 文藝復(fù)興經(jīng)典名著選讀智慧樹(shù)知到期末考試答案章節(jié)答案2024年北京大學(xué)
- 勞務(wù)派遣勞務(wù)外包服務(wù)方案(技術(shù)方案)
- 排球正面下手發(fā)球教學(xué)設(shè)計(jì)
- 給4S店精品銷(xiāo)售的幾點(diǎn)建議
評(píng)論
0/150
提交評(píng)論