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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言程序设计第3版何钦铭 颜 晖 第4章 循环结构.docx

1、C语言程序设计第3版何钦铭 颜 晖 第4章 循环结构第4章 循环结构【练习 4-1】在例 4-1 程序中,如果对 item 赋初值 0,运行结果是什么?为什么?如果将精度改为 10-3,运行结果有变化吗?为什么?解答:如果对 item 赋初值 0,则程序运行结果是 pi=0,因为 item 为 0 时不满足 while 循环的执行条件,即不执行循环,故 pi 值为 0。如果将精度改为 10-3,运行结果会有变化,因为精度改变意味着 while 循环的条件改变,精度变大使得 while 循环次数减少,必然影响到的值。【练习 4-2】 运行例 4-2 程序时,如果将最后一个输入数据改为-2,运行结

2、果有变化吗?如果第一个输入数据是 -1,运行结果是什么?为什么?解答:如果将最后一个输入数据改为-2,运行结果没有变化,因为最后一个负数是一结束标志,不进行统计,故任意一个负数都可以。如果第一个输入数据是-1,运行结果是:Grade averageis 0,因为第一个输入就是-1,则 while 循环条件不成立,不执行循环体。【练习 4-3】序列求和(1-1/4+1/7-1/10+1/13-1/16+):输入一个正实数 eps,计算序列1-1/4+1/7-1/10+1/13-1/16+的值,精确到最后一项的绝对值小于eps(保留6位小数)。试编写相应程序。解答:#include #includ

3、e int main(void) int denominator, flag; double item, s,eps;printf(“Input eps:”);scanf(“%lf”,&eps);flag = 1; denominator = 1 ;item = 1.0; s = 0; while(fabs (item) = eps) item = flag * 1.0 / denominator; s = s + item; flag = -flag; denominator = denominator +3; printf ( “s = %fn”, s); return 0;【练习 4-4

4、】如果将例 4-3 程序中的 do-while 语句改为下列 while 语句,会影响程序的功能吗?为什么?再增加一条什么语句,就可以实现同样的功能?while(number != 0) number = number / 10; count +;解答:会有影响,因为当输入数据 number 为 0 时,上述 while 循环将不执行,count 值仍为 0,故输出为 0,不符合题目要求。可增加一条 if 语句来解决上面的问题,在 while 循环前加上语句“if ( number=0) count=1; ”。【练习 4-5】例 4-4 程序中的第 915 行可以用下列 for 语句替代吗?为

5、什么?for( i = 2; i = m/2; i+) if( m%i = 0 ) printf(No!n); else printf(%d is prime number!n,m);解答:不能代替,因为只用一个数来除不足以判断该数是否是素数。【练习4-6】猜数字游戏:先输入2个不超过100的正整数,分别是被猜数mynumber和允许猜测的最大次数n,再输入你所猜的数yournumber,与被猜数mynumber进行比较,若相等,显示猜中,;若不等,显示与被猜数的大小关系,最多允许猜n次。如果1次就猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3

6、次但不超过n次猜到该数,则提示“Good Guess!”;如果超过n次都没有猜到,则提示“Game Over”;如果在到达n次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。试编写相应程序。解答:#includeint main(void) int mynumber,n,yournumber,i; printf(Input mynumber:); scanf(%d,&mynumber); printf(Input n:); scanf(%d,&n); for(i=1;i3&i=n)&yournumber=mynumber) printf(Good Guess!);break

7、; if(i=n&mynumber!=yournumber)|mynumber0|yournumber0) printf(Game Over!);break; return 0; 【练习 4-7】求e的值:输入 1 个正整数 n,计算下式求出 e 的值(保留 2 位小数),要求使用嵌套循环。试编写相应程序。e = 1 + 1/1!+1/ 2!+1/ 3!+1/n!解答:#includeint main(void) int i, j, n;double e, t;printf(Input n: );scanf(%d, &n);e = 1;for (i = 1; i = n; i+)t=1;for

8、(j=1;j=i;j+) t = t * j;e = e + 1.0/t; printf(e = %0.2fn, e);return 0;【练习 4-8】运行例 4-8 的源程序 1 时,如果先输入 0,即输入数据个数 n=0,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入数据个数 n0 时,由于在 for 循环外首先得输入一个成绩,故程序仍将等待输入第一个人的成绩,这与输入个数 n0 矛盾,可修改如下:#include int main(void) int i, mark, max, n; printf(Enter n: ); scanf (%d, &n);

9、if (n0) printf(Enter %d marks: , n);scanf (%d, &mark); /* 读入第一个成绩 */max = mark; /* 假设第一个成绩是最高分 */for (i = 1; i n; i+ ) scanf (%d, &mark); if (max mark)max = mark; printf(Max = %dn, max); return 0;【练习 4-9】运行例 4-8 的源程序 2 时,如果输入的第一个数就是负数,表示不再输入任何成绩,运行结果是什么?如何修改程序以应对这种情况?解答:当输入的第一个数就是负数时,将不执行 while 循环,程

10、序运行结果就是输出所输入的负数。【练习 4-10】找出最小的值:输入一个正整数 n, 再输入 n 个整数,输出最小值。试编写相应程序。解答:#include int main(void) int i , min, n, x; printf(inputr n: );scanf(%d, &n); printf(input numbers: );scanf(%d, &x);min = x;for (i = 1; i x) min = x; printf(min = %dn, min);return 0;【练习 4-11】统计素数并求和:输入2个正整数m和n(1mn500),统计并输出m和n之间素数的

11、个数以及这些素数的和。素数就是只能被 1 和自身整除的正整数,1 不是素数,2 是素数。试编写相应程序。解答:#include#include int main(void) int i,m,n,j,count; double sum; printf(Enter m:); scanf(%d,&m); printf(Enter n:); scanf(%d,&n); count=0; sum=0; for(;m=n;m+) j=sqrt(m); for(i=2;ij&m!=1) sum=sum+m; count+; printf(count=%dnsum=%.0lf,count,sum); retu

12、rn 0;习题4一选择题1C 语言中 while 和 do-while 循环的主要区别是 A 。Ado-while 的循环体至少无条件执行一次Bwhile 的循环控制条件比 do-while 的循环控制条件严格Cdo-while 允许从外部转到循环体内Ddo-while 的循环体不能是复合语句2下列叙述中正确的是 C 。Abreak语句只能用于switch语句体中Bcontinue语句的作用是使程序的执行流程跳出包含它的所有循环Cbreak语句只能用在循环体内和switch语句体内D在循环体内使用break语句和continue语句的作用相同3下列叙述中正确的是 D 。Ado-while语句构

13、成的循环不能用其它语句构成的循环来代替。Bdo-while语句构成的循环只能用 break 语句退出。C用do-while语句构成的循环,在 while 后的表达式为非零时结束循环。D用do-while语句构成的循环,在 while 后的表达式为零时结束循环。4执行 x=-1; do x=x*x; while (!x); 循环时,下列说法正确的是 A 。A循环体将执行一次C循环体将执行无限次B循环体将执行两次D系统将提示有语法错误5假设变量 s、a、b、c 均已定义为整型变量,且 a、c 均已赋值(c 大于 0),则与以下程序段 s=a; for(b=1;b=c;b+) s=s+1; 功能等价

14、的赋值语句是 B 。As=a+b; Bs=a+c; Cs=s+c; Ds=b+c;6以下程序段的输出结果是 B 。int main(void) int num=0,s=0; while(num=2) num+; s+=num; printf(%dn,s); return 0;A10 B6 C3 D17运行以下程序后,如果从键盘上输入 65 14,则输出结果为 C 。int main(void) int m, n;printf(Enter m,n;); scanf(%d%d, &m,&n): while (m!=n) while (mn) m=m-n; while (nm) n=n-m; pri

15、ntf(m=%dn,m); return 0;Am=3 Bm=2 Cm=1 D.m=0 8下列程序段的输出结果是 A 。int main(viod) int i; for(int i=1;i6;i+) if(i%2!=0) printf(#); continue; printf(*); printf(n); return 0;A#*#*# B# C* D*#*#*二、填空题1若 s0,执行循环语句for(i=1; i=10; i=i+3) s=s+i; 后,i 的值为 13 。2下列程序段的输出结果是 * 。int x=2;do printf(“*”); x-; while (!x=0);3下

16、列程序段的功能是计算:s=1+12+123+1234+12345。则划线处应填 t*10 。int t=0,s=0,i;for(i=1;i=5;i+) t=i+_ ; s=s+t; printf(s=%dn,s); 4以下程序的输出结果是 12 。int main(void) int num=0;while(num6) num+;if(num=3) break;printf(%d,num); return 0;5阅读下列程序并回答问题。int main(void) int i, j, k=0, m=0; for(i=0; i2; i+) ; /*第 5 行*/ for(j=0; j3; j+)

17、 k+; m+; /*第 9 行*/ printf(k=%d, m=%dn, k, m); (1)程序的输出是 k=6,m=2 。(2)将第8行改为 m=m+k; ,程序的输出是 k=6,m=9 。(3)将第5行改为k=0; ,将第8行改为 m=m+k; ,程序的输出是k=3,m=6 。6.下列程序运行时输入62pay!,则结果是62ufd!。int main(void) char c; int i; for(i=1;i=a&c=v&c=z) c=a+c-v; putchar(c); return 0;三程序设计题1求奇数和:输入一批正整数(以零或负数为结束标志),求其中的奇数和。试编写相应程

18、序。解答:#include int main(void) int x, sum; printf(Input integers: );scanf(%d, &x);sum = 0; while(x0)if(x%2!=0) sum = sum + x;scanf(%d, &x);printf(The sum of the odd numbers is %dn, sum);return 0;2展开式求和:输入1个实数x,计算并输出下式的值,直到最后一项的绝对值小于0.00001,计算结果保留2位小数。要求定义和调用函数 fact(n)计算n的阶乘,可以调用 pow( )函数求幂。试编写相应程序。 s=

19、x+x/2!+x/3!+x4/4!+解答:#include#includedouble fact(int n);int main(void) int i; double x,s,item; printf(Input x:); scanf(%lf,&x); s=0; item=1.0; i=1; while(fabs(item)=1e-5) item=pow(x,i)/fact(i); s=s+item; i+; printf(s=%.2lf,s); return 0; double fact(int n) int i; double result; for(result=1,i=1;i=n;i

20、+) result=result*i; return result; 3.求序列和:输入一个正整数 n,输出2/1+3/2+5/3+8/5 +的前 n 项之和,保留 2 位小数。该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。试编写相应程序。解答:#includeint main(void) int n,i,s1=2,s2=3,s,p1=1,p2=2,p; double sum,item; printf(Input n:); scanf(%d,&n); if(n=3) for(i=1;i=n-2;i+) s=s1+s2; p=p1+p2; item=1.0*s/p;

21、sum+=item; s1=s2;s2=s; p1=p2;p2=p; else if(n=1)sum=2; else if(n=2)sum=3.5; printf(sum=%.2lfn,sum); return 0; 4.求序列和:输入 2 个正整数a和n,求 a+aa+aaa+aaa(n个a)之和。例如,输入2和3,输出246(2+22+222)。试编写相应程序。解答:#includeint main(void) int a,n,i; double sum,temp; printf(Input a,n:); scanf(%d%d,&a,&n); sum=temp=0; for(i=1;i=n

22、;i+) temp=temp*10+a; sum=sum+temp; printf(sum=%.0lf,sum); return 0;5换硬币。将一笔零钱(大于8分,小于1元,精确到分)换成5分、2分和1分的硬币,每种硬币至少有一枚。输入金额,问有哪几种换法?针对每一种换法,输出各种面额硬币的数量和硬币的总数量。试编写相应程序。解答:#includeint main(void) int money,money1,money2,sum; printf(Input money:); scanf(%d,&money); sum=0; for(money1=1;money1=8;money1+) fo

23、r(money2=1;money2money1)printf(money5=1,money1=%d,money2=%dnsum=%dn,money1,money2,sum);elseprintf(money5=1,money2=%d,money1=%dnsum=%dn,money2,money1,sum); return 0;6输出水仙花数。输入一个正整数n(3n7)输出所有n位水仙花数。水仙花数是指一个n位正整数,它各位数字的n次幂之和等于它本身。例如 153 的各位数字的立方和是 :1+5+3=153。试编写相应程序。解答:#include#includeint main(void) in

24、t n,i,t,m,sum,j,k; printf(Input n:); scanf(%d,&n); for(j=0,i=1;i=n;i+) j=j*10+9; for(k=1,i=1;in;i+) k=k*10; for(;k=j;k+) t=k; sum=0; while(k!=0) m=k; k=k%10; sum=sum+pow(k,n); k=m/10; k=t; if(sum=t) printf(%dn,t); return 0;7求最大公约数和最小公倍数。输入两个正整数m和n(m1000,n1000),求其最大公约数和最小公倍数。试编写相应程序。解答:#includeint ma

25、in(void) int m,n,j,k; do printf(Input m:); scanf(%d,&m); printf(Input n:); scanf(%d,&n); while(m0|n0); j=m; while(j%n!=0) j=j+m; k=(m*n)/j; printf(最小公倍数是%d,最大公约数是%dn,j,k); return 0;8高空坠球。皮球从height(米)高度自由落下,触地后反弹到原高度的一半,再落下,再反弹如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?输出保留1位小数。试编写相应程序。解答:#includeint main(void) int n,i; double height,distance,height1,height2; printf(Input height:); scanf(%lf,&height); printf(Input n:); scanf(%d,&n); if(n=1) distance=height; else if(n1) height2=height; for(distance=0,i=2;i=n;i+) height=height/2; distance=distance+height*2; height1=height;

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

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