ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:21.76KB ,
资源ID:23748013      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23748013.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(循环结构程序设计习题及答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

循环结构程序设计习题及答案.docx

1、循环结构程序设计习题及答案第6章 循环结构程序设计6-1比较while语句、dowhile语句和for语句的异同。答:(1)while语句、do-while语句用于条件循环,for语句用于计数循环。 (2)while语句、for语句是先判断循环条件,后执行循环体,如果循环条件一开始就不成立,则循环体一次也不被执行;而do-while语句是是先执行循环体,后判断循环条件,所以循环体至少被执行一次。(3)知道循环的次数可选用for语句实现循环,不知道循环的次数可选用while语句或do-while语句实现循环. (4)一般而言,三种循环语句可等价实现. 6-2 仔细阅读下面的程序,指出程序的运行结

2、果.#includevoid main() int i; for(i=0;+i;i5) if(i=3) printf(%dn,+i); break; printf(%dn,+i); 答:2 4思考:语句“for(“i=0;+i;i5”)在编译时为何会给出语法警告错误当将其改为“for(i=0;i5;+i)”时,运行结果又将如何 6-3 仔细阅读下面的语的程序,指出程序的运行结果。 #include void main() int i, a=0;for(i=1;i=5;i+) do i+; a+; while(i3); i+; printf(a=%d,i=%d,a,i); 答:a=3,i=7 思

3、考:在for循环中嵌套着do-while循环,那么do-while循环中对i的修改会对for循环产生影响吗6-4编写程序,用1000个单词”computer”填充屏幕,每行60个 . 解:#include void main() int i; for(i=1;i=1000;i+) printf(computer.); if(i%60=0)printf(n); 思考:在for循环中,”if(i%60=0)printf(“n”);”语句的作用是什么没有此语句将会是什么状况6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。解: #include void main() char

4、 c; int d=0,s=0; printf(请输入字符(当输入$时结束):); while (c=getchar()!=$) if(c=0&c=9)s+; if(c= ) d+ ; printf(数字字符出现的次数为%dn,d); printf(空格字符出现的次数为%dn,s); 若输入字符:12 345 abcd 678 xyz$ 则运行结果为:数字字符出现的次数为8 空格字符出现的次数为4思考:此题中的循环次数是如何控制的有何特点6-6编写程序,求1000以内的奇数之和及偶数之和。 解:#include void main() long n=0,m=0; int i; for(i=1;

5、i1000;i+) if(i%2=0) n=n+i; else m=m+i; printf(奇数之和为%ldn,m); printf(偶数之和为%ldn,n); 运行结果:奇数之和为250000偶数之和为249500思考:在此题中为何选用for循环进行控制用while循环或do-while循环是否也可以6-7 计算,计算公式/4=1-1/3+1/5-1/7+直到最后一项的绝对值小于为止。解:#include #include void main() int s=1; float n=,t=1,pi=0; while(fabs(t)1e-6) pi=pi+t*s; n=n+2; s=-s; t=

6、1/n; pi=pi*4;printf(pi=%fn,pi); 运行结果:pi= 思考:在此题中为何不选用for循环进行控制,而选用while循环呢6-8编写程序,求任意两个整数之间的所有素数。解:#include #include void main() int n,m,i,j,k,p=0; printf(请输入两个整数m,n(mn):); scanf(%d,%d,&m,&n); for(i=m;i=n;i+); k=sqrt(n); for(j=2;j=k+1) printf(%d ,i);p=p+1; if(p%10=0)printf(n); printf(n); 运行结果:请输入两个整

7、数m,n(mn):10,20 11 13 17 19 思考:此题中若输入的两个整数m,n分别为13,100时,13这个素数是否被输出,为什么 6-9 编写程序,求任意两个整数之间的所有能被3、4、5同时整除的数。 解:#include void main() int n,m,i; printf(请输入两个整数m,n(mn):); scanf(%d,%d,&m,&n); for(i=m;i=n;i+)if(i%3=0)&(i%4=0)&(i%5=0) 解:#include void main() int n, i,j; for(i=1000;i=9999;i=i+1000) for(j=0;j=

8、9;j+) n=i+j*100+j*10+i/1000; printf(%d,n); printf(n); 运行结果:1001 1111 1221 1331 1441 1551 1661 1771 1881 1991 2002 2112 2222 2332 2442 2552 2662 2772 2882 2992 3003 3113 3223 3333 3443 3553 3663 3773 3883 3993 4004 4114 4224 4334 4444 4554 4664 4774 4884 4994 5005 5115 5225 5335 5445 5555 5665 5775 5

9、885 5995 6006 6116 6226 6336 6446 6556 6666 6776 6886 6996 7007 7117 7227 7337 7447 7557 7667 7777 7887 79978008 8118 8228 8338 8448 8558 8668 8888 8888 89989009 9119 9229 9339 9449 9559 9669 9999 9999 9999 思考:在此题中,内、外循环各起什么作用是否可以交换如果用if语句设计程序,数据的各位数(个位、十位、百位、千位)应该如何分离-11编写程序,判断某一个整数是否为完数。完数是指其因子之和等

10、于自身的整数,如6=1+2+3请进一步考虑,求任意两个整数之间的所有完数。解:#includevoid main() int n, i,k=0; printf(请输入整数: ); scanf(%d, &n); for(i=1;i=n;i+) if(n%i=0)k=k+i; if(n=k)printf(%d是完数n,n); else printf(%d不是完数n,n);运行结果:请输入整数:28 28是完数思考:变量k在此题中起什么作用初值为何要被赋0循环语句“for(i=1;i=n;i+)”中的判断式”in”可否改为”i=n/2”注:1000以内的完数有6=1+2+3,28=1+2+4+7+1

11、4,496=1+2+4+8+16+31+62+124+248.6-12 编写程序,以上三角形式输出九九乘法表。 解:#include void main() int j, i; printf(%4c, *);for(i=1;i=9;i+) for(j=1;j=9;j+) printf(%4d,i*j); printf(n); 运行结果:* 1 2 3 4 5 6 7 8 91 1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 9 12 15 18 21 24 274 16 20 24 28 32 36 5 25 30 35 40 45 6 36 42 48 54

12、7 49 56 638 64 729 81思考:如果希望输出下三角形式的九九乘法表,程序应如何改动 * 1 2 3 4 5 6 7 8 9 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 64 9 9 18 27 36 45 54 63 72 816-13编写程序,计算1!+2!+3!+n!的值,n从键盘输入。 解:#include void main() long sum=0,t=1; int n, i;printf(请输入

13、整数n:);scanf(%d, &n); for(i=1;i=n;i+) t=t*i; sum=sum+t ; printf(总和=%ldn,sum); 6-14 编写程序,求1!+2!+n!小于1000的项数n。解:#include void main() int sum=0,t=1;int n=0;do n=n+1; t=t*n; sum=sum+t; while(sum1000); printf(“项数为%dn”,n-1);运行结果:项数为6思考:此题为何要选用do-while循环结构最后输出变量的值为何要减1另请改为while循环实现。6-15 某门课程有n个同学参加考试,编写程序计算

14、这门课程的最高分、最低分及平均分。 解 :#include void main() float aver ,max,min,a ; int n ,i ; printf(请输入学生的人数n的值:); scanf(%d,&n) ; aver=max=0 ; min = 100 ; for(i=0;in;i+) printf(请输入第%d位同学的成绩:,i+1); scanf(%f,&a); aver+=a ; 猴子第一天摘下若干个桃子,当即吃了一半,不过瘾,还多吃了一个。以后每天如此,至第十天,只剩下一个桃子。编写程序计算第一天猴子摘得桃子个数。 解 : #include void main()

15、int day ,n1,n2 ; day = 9 ; n2 = 1 ; while(day0) n1=(n2+1)*2 ; /*第一天的桃子数是第二天桃子数加1后的2倍*/ n2=n1 ; day-;printf(第一天摘的桃子数为%dn,n1) ; 运行结果:第一天摘的桃子数为1534思考 :此题可假设第一天共摘桃子x颗,可否用递归算法求解(只描述计算过程)6-19 百鸡问题。百元买百鸡,公鸡8元钱1只,母鸡6元钱1只,鸡仔2元钱4只。编写程序,计算百元所买的公鸡,母鸡,鸡仔数。 解 :#include void main() int x,y,z,j ; for(x=0;x=12;x+) f

16、or(y=0;y=16;y+) z=100-x-y ; if(8*x+6*y+z*=100) printf(%2d:cock=%-2d hen=%-2d chicken=%-2dn,+j,x,y,z) ; 运行结果: 1 :cock=8 hen=11 chicken=81 2 :cock=11 hen=4 chicken=84 思考 :如何理解条件式x=12 ,y=16 与计算式z=100-x-y的含义 。6-20 将十元钱兑换成一元,五角,一角的硬币,共计40枚,计算有多少种兑换方法。解 : #include void main() int x,y,z,j=0 ; /*x表示一元的枚数,y表

17、示五角的/*/*枚数,z表示一角的枚数*/ for(x=0;x=10;x+) for(y=0;y=20;y+) z=40-x-y ; if(10*x+5*y+z=100) j = j+1 ;printf(第%d种兑换方法:1元%d枚,5角%d枚,1角%d枚n,j,x,y,z) ;printf(共有%d种兑换方法n,j) ; 思考 :对于任意数额的钱数,有100元、50元、20元、10元、5元、2元、1元、5角、2角、1角、5分、2分、1分等面额,如何找出张钱最少的组合 6-21 两个乒乓球队进行比赛,各出三人。甲队为A,B,C三人,乙队为X,Y,Z三人。有人打听比赛对阵安排,A说他不和X比,C

18、说他不和X,Z比。编写程序,找出三队赛手名单。 解 :#include void main() char i,j,k;/*i是A的对手;j是B对手;K是C的对手*/ for(i=X;i=Z;i+) for(j=X;j=Z;j+) if(i!=j) for(k=K;k=Z;k+) if(i!=k&j!=k) if(i!= X&k!= X&k!= Z) printf(顺序为:nA-%CtB-%Cn,i,j,k) ; 运行结果:顺序为: AZ BX CY思考 :此题为何要用 for(i=X;i=Z;i+) for(j=X;j=Z;j+)两层的X到Z的循环 6-22 阶梯问题。有一阶梯,若每步跨2阶,

19、最后余1阶; 若每步跨3阶,最后余2阶; 若每步跨5阶,最后余4阶; 若每步跨6阶,最后余5阶; 若每步跨7阶,刚好到达阶梯顶部。编写程序,求最后的阶梯数。 解 :#include void main() int i=7 ; doif(i%2=1)&(i%3=2)&(i%5=4)&(i%6=5)&(i%7=0) break ; i=i+7 ;while(1);printf(N=%dn,i) ;运行结果 :N=119 思考 : 循环结构“do-while(1);”这种形式具有什么特性此题中的“break;”语句起什么作用6-23 编写程序,用牛顿迭代法求算法提示:牛顿迭代公式为 可用两次结果之差的绝对值小于某个很小的数作为循环控制条件,而用此时的结果值作为近似值。 解 :#include #include void main() float a,x1,x2 ; scanf(%f,&a) ; x1=a/2 ; x2=(x1+a/x1)/2 ; do x1=x2 ; x2=(x1+a/x1)/2 ;while(fabs(x1-x2)1e-5);printf(%5.2f的平方根=%8.5fn,a,x2) ; 运行结果 : 2 2的平方根=思考 : 迭代算法是一个重要的算法,一般根据起精度要求进行循环控制,此题哪个表达式起精度循环控制作用如果出现迭代不收敛的情况,应如何再进行迭代次数的控制

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1