基本控制结构程序设计习题.docx
- 文档编号:27005572
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:23
- 大小:38.05KB
基本控制结构程序设计习题.docx
《基本控制结构程序设计习题.docx》由会员分享,可在线阅读,更多相关《基本控制结构程序设计习题.docx(23页珍藏版)》请在冰豆网上搜索。
基本控制结构程序设计习题
一.基本概念与基础知识自测题
3.1程序阅读题
3.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
3.1.2设有说明:
intn,x,k,y。
下面程序段的功能是备选答案中的
(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 考虑整除, 连除4次以后为零,所以: (2)1 3.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 3.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=1 k=0 第1次循环后 m=5 k=1 第2次循环 m=2 k=2 第3次循环 m=7 k=3 第4次循环 m=4 k=4 第5次循环 m=9 k=5 第6次循环 m=6 k=6 第7次循环 m=11 结束,k++未做 (1)11 (2)6 二.编程与综合练习题 3.2编程求一元二次方程ax2+bx+c=0的根。 包括以下判断和结果: 若输入a=0,给出提示;若∆>0,输出两个不等实根;若∆=0,输出两个相等实根;若∆<0,输出两个复数根。 解: 本题以一个绝对值极小的数作为实数0。 #include #include #include voidmain(){ doublea,b,c。 doubledelta,x1,x2。 constdoublezero=1e-9。 //定义一个很小的常数 intsign。 cout<<"输入三个系数a(a! =0),b,c: "< cin>>a>>b>>c。 if(fabs(a) cout<<"二次项系数为0,方程根是-c/b"。 exit(0)。 } cout<<"a="< delta=b*b-4*a*c。 if(fabs(delta) cout<<"方程有两个相同实根: "。 cout<<"x1=x2="<<-b/(2*a)< } else{ if(delta>0) sign=1。 else sign=0。 delta=sqrt(fabs(delta))。 x1=-b/(2*a)。 x2=delta/(2*a)。 if(sign){ cout<<"方程有两个不同实根: "。 cout<<"x1="< } else{//delta<0 cout<<"方程无实根! 有两个不同复数根: "。 cout<<"x1="< } } } 3.3设计程序将输入的百分制成绩转换为五分制输出,90分以上为5分,80~89分为4分,70~79分为3分,60~69分为2分,60分以下为1分。 解: 10分一档用10进行整除获得,转换用开关语句实行。 #include voidmain(){ intmark,result。 //mark是百分制成绩,result是5分制 cout<<"请输入百分制成绩: "< cin>>mark。 if(mark<0){ cout<<"缺考! "< return。 } 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<<"输入错误! "< } } 3.4编程打印如下图形: * *** ***** ******* *** *** *** 解: 难点在三角形左边的空格的控制,嵌套一个循环语句完成此任务。 #include voidmain(){ 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"。 } 3.5编程输出下列图形,中间一行英文字母由输入得到。 A BBB CCCCC DDDDDDD CCCCC BBB A 解: 分上三角和下三角两部分分别处理左边的空格。 #include voidmain(){ 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< } } 3.6输入n,求1! +2! +3! +…+n! 解: 通常求和作为外循环,阶乘作为内循环。 这里考虑到: n! =n*(n-1)! ,利用递推法运算速度大大提高,同时两者可合并为一个循环。 本程序考虑了输入的健壮性。 #include #include voidmain(){ intn。 doubleresult=0。 //result是结果 cin>>n。 if(n<1) { cout<<"输入错误! "< //return。 exit(0)。 } result=1。 for(inti=2,jch=1。 i<=n。 i++) { jch*=i。 //jch是i的阶乘,注意n! =n*(n-1)! 这样可少一层循环 result+=jch。 } cout< } 3.7猴子吃桃问题: 猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子共摘了几个桃子。 解: 采用递推法。 从最后一天逆推到第一天,9次循环。 #include constintday=10。 voidmain(){ inti,x=1。 //最后一天只有一个 for(i=1。 i i++)//从一天前推到九天前 x=(x+1)*2。 cout<<"开始共有桃子"< \n"。 } 3.8从键盘输入一组非0整数,以输入0标志结束,求这组整数的平均值,并统计其中的个数。 解: 将这组整数放在整型数组中,一边输入一边求和及统计正数和负数的个数,平均数由和除以整数数量取得。 #include #include voidmain(){ 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<<"负数个数="< } } 3.9编程找出1~500之中满足除以3余2,除以5余3,除以7余2的整数。 解: 中国古代数学问题(韩信点兵),采用穷举法。 注意三个条件同时成立用&&。 #include voidmain(){ inti。 for(i=1。 i<=500。 i++) if((i%3==2)&&(i%5==3)&&(i%7==2)) cout< } 3.10编程求1000之内的所有完全数。 所谓完全数指的是一个数恰好等于它的所有因子和。 例如6=1+2+3,就是一个完全数。 解: 采用穷举法。 两重循环,外层是从1到999依次处理,内层是求该数的所有因子的和,并判断是否等于该数。 #include voidmain(){ inti,a,sum_yz。 //sum_yz是a的因子和 for(a=1。 a<1000。 a++){ sum_yz=0。 for(i=1。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 控制 结构 程序设计 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)