C++第二章习题解答.docx
- 文档编号:19658074
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:26
- 大小:41.78KB
C++第二章习题解答.docx
《C++第二章习题解答.docx》由会员分享,可在线阅读,更多相关《C++第二章习题解答.docx(26页珍藏版)》请在冰豆网上搜索。
C++第二章习题解答
第二章基本控制结构程序设计习题
一.基本概念与基础知识自测题
2.1程序阅读题
2.1.1设有说明:
inta=3,b=100;
下面的循环语句执行
(1)次,执行后a、b的值分别为
(2)、(3)。
while(b/a>5){
if(b-a>25)a++;
elseb/=a;
}
解答:
本题检查学生整除的概念。
跟踪:
a
b
b/a
循环次数
b-a
3
100
33
1
97
4
100
25
2
96
5
100
20
3
95
…
…
…
…
…
15
100
6
13
85
16
100
6
14
84
17
100
5
停
(1)14
(2)17
(3)100
2.1.2设有说明:
intx,y,n,k;
下面程序段的功能是备选答案中的
(1),当n=10,x=10打印结果是
(2)。
cin>>x>>n;
k=0;
do{
x/=2;
k++;
}while(k y=1+x; k=0; do{ y=y*y; k++; }while(k cout< 备选答案: A. B. C. D. 解答: 第一个循环使x成为: ;y成为: ;第二个循环使y成为: ; (1)B 考虑整除,当x连除4次2以后即为0,所以: 为0 (2)1 2.1.3请看如下程序段: if(num==1)cout<<”Alpha”; elseif(num==2)cout<<”Bata”; elseif(num==3)cout<<”Gamma”; elsecout<<”Delta”; 当num的值分别为1、2、3时,上面程序段的输出分别为 (1)、 (2)、(3)。 解答: 检查条件语句与字符串输出概念: (1)Alpha (2)Bata (3)Gamma 2.1.4执行下面程序段后,m和k的值分别为 (1)、 (2)。 intm,k; for(k=1,m=0;k<=50;k++){ if(m>=10)break; if(m%2==0){ m+=5; continue; } m-=3; } 解答: 注意continue语句的使用 初值 m=0 k=1 第1次循环后 m=5 k=2 第2次循环后 m=2 k=3 第3次循环后 m=7 k=4 第4次循环后 m=4 k=5 第5次循环后 m=9 k=6 第6次循环后 m=6 k=7 第7次循环后 m=11 k=8 第8次循环 m=11结束 k=8,k++未做 (1)11 (2)8 二.编程与综合练习题 2.2有一个函数: 编写程序,输入x,输出y。 解: #include usingnamespacestd; intmain(){ doublex,y; cout<<"输入x="; cin>>x; if(x<1)y=x; elseif(x<10)y=2*x-1; elsey=3*x-11; cout<<"y="< return0; } 2.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,8089分为4分,7079分为3分,6069分为2分,60分以下为1分。 解: 10分一档用10进行整除获得,转换用开关语句实行。 #include usingnamespacestd; intmain(){ intmark,result;//mark是百分制成绩,result是5分制 cout<<"请输入百分制成绩: "< cin>>mark; if(mark<0){ cout<<"缺考! "< return0; } switch(mark/10){ case9: case10: result=5; cout<<"输出五分制成绩: "< break; case8: result=4; cout<<"输出五分制成绩: "< break; case7: result=3; cout<<"输出五分制成绩: "< break; case6: result=2; cout<<"输出五分制成绩: "< break; case5: case4: case3: case2: case1: case0: result=1; cout<<"输出五分制成绩: "< break; default: cout<<"输入错误! "< } return0; } 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 usingnamespacestd; intmain(){ doubleincome,tax=0; intk; cout<<"请输入个人月收入: "< cin>>income; if(income<=1200){ cout<<"免征个人所得税"< return0; } elseincome-=1200; if(income>20000){ k=income/20000; switch(k){ default: tax+=(income-100000)*0.45;income=100000; case4: tax+=(income-80000)*0.40;income=80000; case3: tax+=(income-60000)*0.35;income=60000; case2: tax+=(income-40000)*0.30;income=40000; case1: tax+=(income-20000)*0.25;income=20000; } } if(income>5000){ tax+=(income-5000)*0.20; income=5000; } if(income>2000){ tax+=(income-2000)*0.15; income=2000; } if(income>500){ tax+=(income-500)*0.10; income=500; } tax+=income*0.05; cout<<"应征所得税: "< return0; } 2.5编程打印如下图形: * *** ***** ******* *** *** *** 解: 难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。 #include usingnamespacestd; intmain(){ inti,j; for(i=1;i<=4;i++){ for(j=4-i;j>0;j--)cout<<"";//三角形每行前部的空格 for(j=1;j<=2*i-1;j++)cout<<"*"; cout< } for(i=1;i<=3;i++)cout<<"***\n"; return0; } 2.6编程输出下列图形,中间一行英文字母由输入得到。 A BBB CCCCC DDDDDDD CCCCC BBB A 解: 分上三角和下三角两部分分别处理左边的空格。 #include usingnamespacestd; intmain(){ charin; inti,j; do{ cout<<"输入一个字母: "; cin>>in; if((in>=97)&&(in<=122))in-=32;//小写改大写 }while((in<65)||(in>90)); intline=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<<''< cout< } for(i=line;i>0;i--){//下三角(少一行) for(j=0;j<=line-i;j++)cout<<""; for(j=1;j<=2*i-1;j++)cout<<''< cout< } return0; } 2.7输入n,求1! +2! +3! +…+n! 解: 通常求和作为外循环,阶乘作为内循环。 这里考虑到: n! =n*(n-1)! ,利用递推法运算速度大大提高,同时两者可合并为一个循环。 本程序考虑了输入的健壮性。 #include #include usingnamespacestd; intmain(){ intn,i,jch=1; doubleresult=0;//result是结果 cout<<"请输入正整数n: "< cin>>n; if(n<1){ cout<<"输入错误! "< return1; } result=1; for(i=2;i<=n;i++){ jch*=i;//jch是i的阶乘,注意n! =n*(n-1)! 这样可少一层循环 result+=jch; } cout< return0; } 2.8猴子吃桃问题: 猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 解: 采用递推法。 从最后一天逆推到第一天,9次循环。 #include usingnamespacestd; constintday=10; intmain(){ inti,x=1;//最后一天只有一个 for(i=1;i cout<<"开始共有桃子"< \n"; return0; } 2.9从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中正数和负数的个数。 解: 将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include #include usingnamespacestd; intmain(){ intstem[256],sum=0,pnum=0,nnum=0,i=0; cout<<"从键盘输入一组非0整数,以输入0标志结束: "< cin>>stem[i]; while(stem[i]! =0){ sum+=stem[i];//求和 if(stem[i]>0)pnum++;//正数数量 elsennum++;//负数数量 i++; cin>>stem[i]; } if(! i)cout<<"0个数"< else{ cout<<"平均值="<<(double)sum/(pnum+nnum)< cout<<"正数个数="< cout<<"负数个数="< } return0; } 法二 #include usingnamespacestd; intmain() { intn; intsum=0; intnum1=0,num2=0; inti=0; while (1) { cin>>n; if(n==0)break; i++; sum=sum+n; if(n>0)num1++; elsenum2++; } cout<<"平均数"< cout<<"正数"< cout<<"负数"< return0; } 2.10编程找出1500之中满足除以3余2,除以5余3,除以7余2的整数。 解: 中国古代数学问题(韩信点兵),采用穷举法。 注意三个条件同时成立用&&。 #include usingnamespacestd; intmain(){ inti; for(i=1;i<=500;i++) if((i%3==2)&&(i%5==3)&&(i%7==2))cout< return0; } 2.11编程求1000之内的所有完全数。 所谓完全数指的是一个数恰好等于它的所有因子和。 例如6=1+2+3,就是一个完全数。 解: 采用穷举法。 两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。 #include usingnamespacestd; intmain(){ inti,a,sum_yz;//sum_yz是a的因子和 for(a=1;a<1000;a++){ sum_yz=0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 第二 习题 解答