循环结构程序设计习习题及答案_第1页
循环结构程序设计习习题及答案_第2页
循环结构程序设计习习题及答案_第3页
循环结构程序设计习习题及答案_第4页
循环结构程序设计习习题及答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 仔细阅读下面的程序,指出程序的运行结果.#include<

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

3、i<3); i+; printf("a=%d,i=%d",a,i); 答:a=3,i=7 思考:在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)pr

4、intf(“n”);”语句的作用是什么没有此语句将会是什么状况6-5输入一行字符(以$结束),统计其中的数字字符、空格字符出现的次数。解: #include<> void main() char c; int d=0,s=0; printf("请输入字符(当输入$时结束):"); while (c=getchar()!='$') if(c>='0'&&c<='9')s+; if(c=' ') d+ ; printf("数字字符出现的次数为%dn",d)

5、; 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;i<1000;i+) if(i%2=0) n=n+i; else m=m+i; printf("奇数之和为%ldn",m); printf("偶数之和为%l

6、dn",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=1/n; pi=pi*4;printf("pi=%fn",pi);运行结果:

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

8、ot;%d ",i);p=p+1; if(p%10=0)printf("n"); printf("n");运行结果:请输入两个整数m,n(m<n):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(m<n):"); scanf("%d,%d&qu

9、ot;,&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<=9;j+) n=i+j*100+j*10+i/1000;printf("%d",n); printf("n"); 运行结果:1001 1111 1221 1331 1441 1551 1661 1771 1881 1

10、991 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 5885 59956006 6116 6226 6336 6446 6556 6666 6776 6886 6996 7007 7117 7227 7337 7447 7557 7667 7777 7887 79

11、978008 8118 8228 8338 8448 8558 8668 8888 8888 89989009 9119 9229 9339 9449 9559 9669 9999 9999 9999 思考:在此题中,内、外循环各起什么作用是否可以交换如果用if语句设计程序,数据的各位数(个位、十位、百位、千位)应该如何分离-11编写程序,判断某一个整数是否为完数。完数是指其因子之和等于自身的整数,如6=1+2+3请进一步考虑,求任意两个整数之间的所有完数。解:#include<>void main() int n, i,k=0;printf("请输入整数: "

12、);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+)”中的判断式”i<n”可否改为”i<=n/2”注:1000以内的完数有6=1+2+3,28=1+2+4+7+14,496=1+2+4+8+16+31+62+124+248.6-12

13、编写程序,以上三角形式输出九九乘法表。解:#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

14、30 35 40 45 6 36 42 48 547 49 56 638 64 729 81思考:如果希望输出下三角形式的九九乘法表,程序应如何改动* 1 2 3 4 5 6 7 8 91 12 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

15、sum=0,t=1; int n, i;printf("请输入整数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(sum<1000); printf(“项数为%dn”,n-

16、1);运行结果:项数为6思考:此题为何要选用do-while循环结构最后输出变量的值为何要减1另请改为while循环实现。6-15 某门课程有n个同学参加考试,编写程序计算这门课程的最高分、最低分及平均分。 解 :#include<> void main() float aver ,max,min,a ; int n ,i ; printf("请输入学生的人数n的值:"); scanf("%d",&n) ; aver=max=0 ; min = 100 ; for(i=0;i<n;i+) printf("请输入第%d位

17、同学的成绩:",i+1); scanf("%f",&a); aver+=a ; 猴子第一天摘下若干个桃子,当即吃了一半,不过瘾,还多吃了一个。以后每天如此,至第十天,只剩下一个桃子。编写程序计算第一天猴子摘得桃子个数。 解 : #include<> void main() int day ,n1,n2 ; day = 9 ; n2 = 1 ; while(day>0) n1=(n2+1)*2 ; /*第一天的桃子数是第二天桃子数加1后的2倍*/ n2=n1 ; day-;printf("第一天摘的桃子数为%dn",n1

18、) ;运行结果:第一天摘的桃子数为1534思考 :此题可假设第一天共摘桃子x颗,可否用递归算法求解(只描述计算过程)6-19 百鸡问题。百元买百鸡,公鸡8元钱1只,母鸡6元钱1只,鸡仔2元钱4只。编写程序,计算百元所买的公鸡,母鸡,鸡仔数。 解 :#include<> void main() int x,y,z,j ; for(x=0;x<=12;x+) for(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

19、,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表示五角的/*/*枚数,z表示一角的枚数*/ for(x=0;x<=10;x+) for(y=0;y<=20;y+) z=40-x-y ; if(1

20、0*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说他不和X,Z比。编写程序,找出三队赛手名单。 解 :#include<> voi

21、d 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 阶梯问题。有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论