




已阅读5页,还剩187页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章C+基础知识习题1.1 判断下列标识符的合法性。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;求下列表达式的值,以及运算后表达式所涉及的各变量的值。x+(int)y%a x=z*b+,b=b*x,b+ ch4=ch3-ch2+ch1int(y/z)+(int)y/(int)z !(ab)&c&(x*=y)&b+ch3|(b+=a*c)|c+ z=(a1) 答:x+(int)y%a值为:4.5 x=z*b+,b=b*x,b+值为:42,x为7,b为43ch4=ch3-ch2+ch1值为:int(y/z)+(int)y/(int)z值为:13!(ab)&c&(x*=y)&b+值为:0,b为5 注:只要出现一个false右边的不再做。ch3|(b+=a*c)|c+值为:1,c为0 注:只要出现一个true,右边不再做。z=(a1)值为:6 1.3判断下列哪些是常量,哪些是变量。China const int n=10; int m=5; a char ch=aint array5=1,2,3,4,5; char s=Hello; 答:China 文字常量const int n=10;常变量int m=5;变量a 文字常量char ch=a变量int array5=1,2,3,4,5;变量char s=Hello;变量1.4将下列算式或叙述用C+表达式描述。(1) (2) (x+y)/(x-y)*ay)(3)位于原点为圆心,a, b为半径的圆环中的点坐标。(4) 。(5) 并且字符ch不为0。 答: 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)(kabxych1;ch2=cin.get();cinch3;若从键盘输入:3 2 1.8 7 a b c执行后各变量取值如何?注意abc三字符两两间有空格。 答:a是3,b是2,x是1.8,y是7,ch1是a,ch2是空格,ch3是b。1.7设有语句:int a,b,c,d;cinoctabhexcdecd;若从键盘输入:23 23 23 23执行后各变量的值用十进制表示各是多少?答:a:19,b:19,c:35,d:231.8对于习题1.7,若执行:coutathexbtoctc5)if(b-a25) a+;elseb/=a;解答:本题检查学生整除的概念。跟踪:abb/a循环次数b-a31003319741002529651002039515100613851610061484171005停 (1)14(2)17(3)100 2.1.2设有说明:int x,y,n,k;下面程序段的功能是备选答案中的 (1) ,当n=10,x=10打印结果是 (2) 。cinxn;k=0;dox/=2;k+;while(kn);y=1+x;k=0;doy=y*y;k+;while(kn);coutyendl;备选答案:A. B. C. D. 解答:第一个循环使x成为:;y成为:;第二个循环使y成为:;(1)B考虑整除,当x连除4次2以后即为0,所以:为0(2)1 2.1.3请看如下程序段:if(num=1) cout”Alpha”;else if(num=2) cout”Bata”;else if(num=3) cout”Gamma”;else cout”Delta”;当num的值分别为1、2、3时,上面程序段的输出分别为(1)、(2)、(3)。 解答:检查条件语句与字符串输出概念:(1)Alpha(2)Bata(3)Gamma 2.1.4执行下面程序段后,m和k的值分别为 (1) 、 (2) 。int m,k;for(k=1,m=0;k=10) break;if(m%2=0)m+=5;continue;m-=3; 解答:注意continue语句的使用初值m=0k=1第1次循环后m=5k=2第2次循环后m=2k=3第3次循环后m=7k=4第4次循环后m=4k=5第5次循环后m=9k=6第6次循环后m=6k=7第7次循环后m=11k=8第8次循环m=11结束k=8,k+未做(1)11(2)8 二编程与综合练习题2.2有一个函数:编写程序,输入x,输出y。解:#include using namespace std;int main() double x,y; coutx; if(x1) y=x; else if(x10) y=2*x-1; else y=3*x-11; couty=yendl; return 0; 2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,8089分为4分,7079分为3分,6069分为2分,60分以下为1分。解:10分一档用10进行整除获得,转换用开关语句实行。#include using namespace std;int main() int mark,result; /mark是百分制成绩,result是5分制 cout请输入百分制成绩:mark; if(mark0) cout缺考!endl; return 0; switch (mark/10) case 9: case 10: result=5; cout输出五分制成绩:resultendl; break; case 8: result=4; cout输出五分制成绩:resultendl; break; case 7: result=3; cout输出五分制成绩:resultendl; break; case 6: result=2; cout输出五分制成绩:resultendl; break; case 5:case 4:case 3:case 2:case 1:case 0: result=1; cout输出五分制成绩:resultendl; break; default: cout输入错误!endl; return 0; 2.4编程计算个人所得税。个人所得税率表如下:月收入1200元起征,超过起征点500元以内部分税率5%,超过500元到2,000元部分税率10%,超过2,000元到5,000元部分税率15%,超过5,000元到20,000元部分税率20%,超过20,000元到40,000元部分税率25%,超过40,000元到60,000元部分税率30%,超过60,000元到80,000元部分税率35%,超过80,000元到100,000元部分税率40%,超过100,000元部分税率45%。解:应该从最高税率段开始计算,分段叠加。先算两万元以上各段,每两万为一档,采用switch语句,注意没有使用break语句。后面各低收入段,用if语句,也没有使用else,这两种方法是对应的。第二要注意计算的入口处,收入减去该段的下限,进行计算,以后各段都是完整的段,计算十分简单。#include using namespace std;int main() double income,tax=0; int k; cout请输入个人月收入:income; if(income=1200) cout免征个人所得税20000) k=income/20000; switch(k) default: tax+=(income-100000)*0.45;income=100000; case 4: tax+=(income-80000)*0.40;income=80000; case 3: tax+=(income-60000)*0.35;income=60000; case 2: tax+=(income-40000)*0.30;income=40000; case 1: tax+=(income-20000)*0.25;income=20000; if(income5000) tax+=(income-5000)*0.20; income=5000; if(income2000) tax+=(income-2000)*0.15; income=2000; if(income500) tax+=(income-500)*0.10; income=500; tax+=income*0.05; cout应征所得税:taxendl; return 0;2.5编程打印如下图形: * * * * * * * * * * * * * * * * * * * * * * * * *解:难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。#include using namespace std;int main() int i,j; for (i=1;i0;j-) cout ;/三角形每行前部的空格 for(j=1;j=2*i-1;j+) cout *; coutendl; for(i=1;i=3;i+) cout * * *n; return 0; 2.6编程输出下列图形,中间一行英文字母由输入得到。AB B BC C C C C D D D D D D D C C C C C B B B A解:分上三角和下三角两部分分别处理左边的空格。#include using namespace std;int main() char in; int i,j; do coutin; if(in=97)&(in=122) in-=32;/小写改大写 while(in90); int line=in-A; for (i=0;i0;j-) cout ;/前方空格 for(j=1;j=2*i+1;j+) cout char(i+A); cout0;i-)/下三角(少一行) for(j=0;j=line-i;j+) cout ; for(j=1;j=2*i-1;j+) cout char(i-1+A); coutendl; return 0; 2.7输入n,求1!+2!+3!+n!解:通常求和作为外循环,阶乘作为内循环。这里考虑到:n!=n*(n-1)!,利用递推法运算速度大大提高,同时两者可合并为一个循环。本程序考虑了输入的健壮性。#include #include using namespace std;int main() int n,i,jch=1; double result=0; /result是结果 cout请输入正整数n:n; if(n1) cout输入错误!endl; return 1; result=1; for(i=2;i=n;i+) jch*=i; /jch是i的阶乘,注意n!=n*(n-1)!这样可少一层循环 result+=jch; coutresultendl; return 0; 2.8猴子吃桃问题:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。解:采用递推法。从最后一天逆推到第一天,9次循环。#include using namespace std;const int day=10;int main() int i,x=1;/最后一天只有一个 for(i=1;iday;i+) x=(x+1)*2; /从一天前推到九天前 cout开始共有桃子x个。n; return 0; 2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。解:将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。#include #include using namespace std;int main() int stem256,sum=0,pnum=0,nnum=0,i=0; cout从键盘输入一组非0整数,以输入0标志结束:stemi; while(stemi!=0) sum+=stemi;/求和 if(stemi0) pnum+;/正数数量 else nnum+;/负数数量 i+; cinstemi; if(!i) cout0个数endl; else cout平均值(double)sum/(pnum+nnum)endl;/平均值习惯不用整数 cout正数个数pnumendl; cout负数个数nnumendl; return 0; 2.10编程找出1500之中满足除以3余2,除以5余3,除以7余2的整数。解:中国古代数学问题(韩信点兵),采用穷举法。注意三个条件同时成立用&。#include using namespace std;int main() int i; for(i=1;i=500;i+) if(i%3=2)&(i%5=3)&(i%7=2) coutiendl; return 0; 2.11编程求1000之内的所有完全数。所谓完全数指的是一个数恰好等于它的所有因子和。例如6=1+2+3,就是一个完全数。解:采用穷举法。两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。#include using namespace std;int main() int i,a,sum_yz; /sum_yz是a的因子和 for(a=1;a1000;a+) sum_yz=0; for(i=1;ia;i+) if (a%i=0) sum_yz+=i;/求因子运算未改变循环控制变量a的值,否则要用另一个变量b来代替a来参加运算 if (a=sum_yz) coutaendl; return 0;2.12将100元换成用10元、5元和1元的组合,共有多少种组合方法。解:采用穷举法。考虑10元最多10张,5元最多20张,余下是1元。#include using namespace std;int main() int i,j,k,count=0; for(i=0;i=10;i+)/i是10元张数,j是5元张数,k是1元张数 for(j=0;j=0) coutitjtkendl; count+; coutcountendl; return 0;2.13利用反正切展开计算p的近似值,要求误差10-5,公式如下:令x=1,可计算出p/4的近似值。解:采用递推法。初看每一项的递推通式不易写出,但每一项全看作奇数项,而偶数项全为零,则很容易写出:第1项为x,第3项为第1项乘以x的平方除以项序号3乘以-1,其余类推。同时和的误差小于最后一项的绝对值。#include#includeusing namespace std;const double e=1e-5;int main() double x,a,sum; int i=3; cout请输入正切值:x; a=x; sum=x; do a*=x*x*(-1); sum+=a/i; i+=2; while(fabs(a/i)e); coutarctg(x)=sumendl; return 0;2.14用迭代法求方程x2+10cosx=0的根,误差限为10-5。迭代公式如下:解:迭代法也是用循环语句实现,数学上迭代法可能收敛,也可能发散,解答中加了最大迭代次数的限制。#include#includeusing namespace std;const double e=1e-5;int main() double x0,x1; int n=0; cout输入初始近似值:x1; do x0=x1; x1=(x0*x0-10*(x0*sin(x0)+cos(x0)/(2*x0-10*sin(x0); /x0是上次算出的结果,x1用作保存新算出的结果 n+; while (fabs(x1-x0) e)&(n1e5) cout超出迭代1e5次n; else cout方程x*x+10*cos(x)=0的一个根为:x1endl; cout方程误差为:x1*x1+10*cos(x1)endl; return 0; 2.15两队选手每队5人进行一对一的比赛,甲队为A、B、C、D、E,乙队为J、K、L、M、N,经过抽签决定比赛配对名单。规定A不和J比赛,M不和D及E比赛。列出所有可能的比赛名单。解:这是一个组合问题,使用穷举法。共有5个位置,设甲队5名队员位置不变,乙队改变队员位置,进行配对。注意第1个位置可在5个队员中任选一个,以后的位置必须扣除已选过的队员。并扣除不能配对的情况,即得所有可能的比赛名单。#includeusing namespace std;int 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;j5;j+)/0号位 if(j=0) continue;/A选手不与选手J比赛,即st10不与st20比赛 for(k=0;k5;k+)/1号位 if(k=j) continue;/剔除乙队占据0号位的选手 for(l=0;l5;l+)/2号位 if(l=j|l=k) continue;/剔除乙队占据0、1号位的选手 for(m=0;m5;m+)/3号位 if(m=j|m=k|m=l) continue;/剔除乙队占据0、1、2号位的选手 if(m=3) continue;/st13不与st23比赛,即D不与M比赛 for(n=0;n5;n+)/4号位 if(n=j|n=k|n=l|n=m) continue;/剔除乙队占据0、1、2、3号位的选手 if(n=3) continue;/st14不与st23比赛,即E不与M比赛 coutst10-st2jtst11-st2kt; coutst12-st2ltst13-st2mt; coutst14-st2nendl; i+; coutiendl; return 0;2.16编程模拟选举过程。假定四位候选人:zhang、wang、li、zhao,代号分别为1、2、3、4。选举人直接键入候选人代号,14之外的整数视为弃权票,-1为终止标志。打印各位候选人的得票以及当选者(得票数超过选票总数一半)名单。解:用5个元素的整型数组,分别放弃权票和各候选人的得票,然后用开关语句打印。#include#includeusing namespace std;int main() enum candidatefeipiao,zhang,wang,li,zhaocand; int vote5=0,i,k=0,n; cinn; while(n!=-1) k+; if(n=1&nn; for(i=0;i5;i+) cand=(candidate)i; switch(cand) case feipiao: coutsetw(10)feipiaotvotecandendl;break; case zhang:coutsetw(10)zhangtk/2) cout 当选endl; else coutendl; break; case wang:coutsetw(10)wangtk/2) cout 当选endl; else coutendl; break; case li:coutsetw(10)litk/2) cout 当选endl; else coutendl; break; case zhao:coutsetw(10)zhaotk/2) cout 当选endl; else coutendl; break; return 0;2.17改造【例2.14】,将运行结果(Fibonacii数列的前20项)存入文件。解:采用3步法。所谓3步法,是将书上的第1和第2步合并,格式如下:首先建立或打开一个输出文件,并与磁盘文件联系:ofstream ofile(myfile2_17.txt);再按一定格式存入数据:ofilesetw(15)fib0setw(15)ijkl;等,并输出最后关闭文件:file.close();#include#include#includeusing namespace std;const int m=20;int main() int fib0=0,fib1=1,fib2,i,j,k,l,n; char ch; ofstream ofile(myfile2_17.txt); ofilesetw(15)fib0setw(15)fib1; for(n=3;n=m;n+) fib2=fib0+fib1; ofilesetw(15)fib2; if(n%5=0) ofileendl; /控制每行5个数据 fib0=fib1; fib1=fib2; ofile.close(); cout是否要将文件输出?Y或Nch; if(ch=y|ch=Y) ifstream ifile(myfile2_17.txt); while(1) ifileijkln;/由文件读入 if(ifile.eof()!=0) break; coutsetw(15)isetw(15)jsetw(15)ksetw(15)lsetw(15)nendl;/显示 ifile.close(); return 0; 2.18改造【例2.19】,将运行结果(100以内素数)存入文件。解:采用4步法。首先定义一个输出文件:ofstream ofile;再打开该文件并与并与磁盘文件联系:ofile.open(myfile2_18.txt);按一定格式把数据存入文件。最后关闭文件。效果与3步法相同。读文件同样可用3步法或4步法。#include#include#include#includeusing namespace std;const int n=100;int main() int an,i,j; char ch,b256; ofstream ofile; ifstream ifile; for(i=0;in;i+) ai=1+i; /用数组保存整数1-100 a0=0; /1不是素数,置0 for(i=0;in;i+) if(ai=0) continue; /该数已经置0,判断下一个数 for(j=i+1;jn;j+) if(aj%ai=0) aj=0; /是ai倍数的元素置0; ofile.open(myfile2_18.txt); int count=0; ofile1-n之间的素数:endl; for(i=0;in;i+) /输出所有素数 if(ai!=0) ofilesetw(6)ai; count+; if(count%10=0) ofileendl; /每行10个数据 ofile.close(); cout是否要将文件输出?Y或Nch; if(ch=y|ch=Y) ifile.open(myfile2_18.txt); i=0; while(ifile.get(bi)/不可用,它不能读白字符, if(bi=n) break; i+; bi=0; coutbi;/由文件读入 coutsetw(6)i;/屏幕显示 count+; if(count%10=0) coutendl; /每行10个数 if(ifile.eof()!=0) break;/最后一个数据后面可能没有回车,直接为文件结束 ifile.close(); coutendl; return 0;2.19改造【例2.13】,文本由文本文件输入。解:文本文件读入要用成员函数: ifile.get(),而不可用插入运算符,否则会丢失空白字符。#include#includeusing namespace std;int main() char ch; int nline=0,nword=0,nch=0; int isword=0; ifstream ifile(ep2_19.cpp); cout读入ep2_19.cppendl; do ch=ifile.get(); if(ch=n) nline+; /遇换行符行数+1 if(ch!= &ch!=t&ch!=n&ch!=EOF) /读到非间隔符 if(!isword) nword+; /在单词的起始处给单词数+1 nch+; /字符数加+1 isword=1; else isword=0; /读到间隔符 while(ch!=EOF); /读到文本结束符为止 ifile.close(); cout行数:nlineendl; cout单词数:nwordendl; cout字符数:nchendl; return 0;第三章函数习题一基本概念与基础知识自测题3.1填空题3.1.1被定义为形参的是在函数中起 (1)作用的变量,形参只能用 (2)表示。实参的作用是 (3),实参可以用 (4)、 (5)、 (6)表示。答案:(1)自
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国庆节慰问信
- 2025年核探测元器件项目发展计划
- 2025年韶山事业单位真题
- 2025北京市公安局东城分局招聘勤务辅警122人模拟试卷及参考答案详解
- 2025广西百色市平果市人力资源和社会保障局城镇公益性岗位人员招聘1人考前自测高频考点模拟试题有完整答案详解
- 2025湖南湘潭湘乡市教育局公开招聘公益性岗位人员2人模拟试卷及答案详解(考点梳理)
- 2025安徽合肥滨投文化创意发展有限公司招聘3人模拟试卷附答案详解(考试直接用)
- 2025年山东工程技师学院公开招聘人员(9名)模拟试卷参考答案详解
- 2025第十三届人才博览会贵阳市公共卫生救治中心引进高层次人才18人考前自测高频考点模拟试题及参考答案详解一套
- 商铺店面租赁合同
- 2025年度火锅店合伙人合作协议书:特色火锅底料配方保密协议
- 岗位化验员述职报告
- 2023年价格鉴证师考试《价格鉴证案例分析》试题真题及答案二
- 2025年中信保诚人寿保险有限公司招聘笔试参考题库含答案解析
- 我的家乡沧州
- 两人合伙经营网吧协议
- 【课件】纪念长津湖吾辈当自强!课件 -2024年12.24纪念抗美援朝主题班会
- 2023-2024届高考语文复习小说专题训练(含答案)-李存葆《高山下的花环》
- 门式钢结构安装施工方案
- (完整版)个人简历模板大全(60种)
- 2024-2025学年高一英语初高中衔接:音标+衡水体书写 教学设计
评论
0/150
提交评论