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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《c语言程序设计教程》林芳易云飞版第五章循环结构例题练习题详解.docx

1、c语言程序设计教程林芳易云飞版第五章循环结构例题练习题详解例1/* 题目:计算n的阶乘! 设计:狼影 时间:2012-03-05 19:59*/* 注意!下面所求数的阶乘不能超过31,要请求更大数的阶乘!请参照第二个阶乘函数! 哈!第二个能看懂的就看啊!思想是用数组来保存数据,然后在输出数组中的数!(下面对它做了充分的解释,祝你能看懂哈!)*/*第一个函数*/# if 1# include main() int n, i; unsigned long sum = 1; /请求用户输入数据,不能超过12,所以为了避免溢出出错,在下面限制了数的大小 printf(请输入要求什么数的阶乘n); sc

2、anf(%d, &n); /限制数的大小 if(n12) printf(你输入错误!n); if(n=0 |n = 1) printf(此数的阶乘为1n); /求当n大于一时的阶乘! if(n1 & n=12) for(i = 2; i零时,说明有进位; 正确输出(要逆序输出数组,从右向左); 例如:7!= 5040 假如每位数组元素保留3位数 则在数组中7!的表示法为 40 / 5(为了方便看每位数组元素用/隔开) 由上知数组逆序输出,因为产生的进位都会加到数组的下一位; 由上可以看到 如果按上面的逆序输出得到的是540,少了一个零,为了保证零的不缺失,所以输出时 除了最高位的都要用 03d

3、%保证三位,不足三位的在左边补零 。(最高位用不到补零,如果补上的话就成了005040这样不符合我们的常规看法,当然这样也不错)*/# if 0# include main() unsigned long a10000=0; int n, i, j, k, carry, val; do /为了下一次计算的正确,必须循环一次初始化一次 val = 0; a0 = 1; /请求用户输入要求数的阶乘 printf(请输入要求阶乘的数:输入结束!n); scanf(%d, &n); /判断输入的值是不是合法 n必须大于等于0 if(n0) printf(输入错误!n); continue; /当n等于

4、一或等于0时 0 1的阶乘都为1,当用户输入0时,输出0的阶乘,并退出dowhie(n!=0)循环; else if(n=1 | n=0) printf(%d!=1n ,n); /当n大于一的情况 else for(i = 2; i=n; i+)/此循环来控制从2乘到n for(j = 0; j=val; j+)/此循环来控制数组中的每个元素都乘以2-n aj *= i; for(k = 0; k0)/如果产生的进位大于零,就是有进位,就把下标加一 val+; /将数组逆序输出 printf(%5d, aval); aval = 0;/为了保证下次的计算,数组元素要清零 for(k = val

5、-1; k=0; k-) printf(%05d, ak);/%05d是为了保证数组元素是一个5位数,并且0 保证了不丢失数组元素中左边的零 ak = 0;/每输出一位, 每一位数组元素就清零 printf(n); while(n != 0); # endif/*根据上面所求的100和1000的阶乘结果*请输入要求阶乘的数:输入结束!100 933262154439441526816992388562667004907159682643816214685929638952175999932299156*9761565182862536979208272237582511852109168640

6、00000000000000000000000请输入要求阶乘的数:输入结束!1000 402387260077093773543702433923003985719374864210714632543799910429938512398629020*7424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463

7、075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365

8、024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921

9、510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540

10、265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929

11、023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024

12、186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889

13、086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

14、000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000请输入要求阶乘的数:输入结束!00!=1 1Press any key to continue*/例2/* 题目:将键盘输入的一串字符显示在屏幕上,遇到字符*时终止(用while循环来实现) 设计;狼影 时间:2012-03-05 23:48*/* 哈! 在下面还有另一种实现方法,感兴趣的可以看看啊!(当然还有其他方法,在这就不

15、一一介绍啦,可以自己去发掘啊!)*/*第一种方法 用while来实现*/# if 0# include main() char ch; printf(请输入字符n); ch = getchar(); while(ch != *) printf(%c, ch);/* 1 ch = getchar();/* 2 printf(n);# endif/* *当把1放在2的上面的时候输出的结果如下*请输入字符sdssdssddd*sdddPress any key to continue/*当把1放在2的下面的时候输出结果如下*请输入字符sdsddsdsdsff*sdsff*Press any key

16、to continue*/*第二中方法*# if 1# include main() int ch; printf(请输入字符n);loop: /用goto语句实现循环 ch = getchar(); if(ch != *) printf(%c, ch); goto loop; # endif/* 请输入字符sfsesfseererssfd/*ssfd/Press any key to continue/*/例3 /* 题目:输入某门课程的若干名同学的成绩,以-1作为结束输入的标志,计算该门课程的平均成绩。 设计:狼影 时间:2012-03-06 10:10*/*先分析下课本上的例题, 哈!这

17、题有问题啊! 可以看下面改的代码,虽用while也能改,但用惯了dowhile()*/*可以自己尝试用while来改啊!*/# if 1# include main() int n = 0; float score, sum = 0; /要求用户输入成绩! printf(请输入成绩按-1结束n); scanf(%f, &score); /判断取值是不是合法,可惜只能判断一次 if (score=-1 | score0)/只能判断第一次输入的值,而不能在判断第二次,因此运算时会产生错误 while(score != -1)/问题:当在循环时,用户输入不是-1的负数时,会产生怎样的结果? 由下面的

18、第二部分可知;明显是错误的结果; sum += score; n+; scanf(%f, &score); /输出平均值,没有学生个数,总分,即使错了,用户也很难发觉 printf(平均值为%gn, sum/n); # endif/*第一部分*请输入成绩按-1结束23453456-1平均值为39.5Press any key to continue/*第二部分*请输入成绩按-1结束12 -4 -1平均值为4Press any key to continue*/*分析* 1 由上面的输出结果首先的问题是没有好的人机交互方式, 显得比较生硬; 2 由上面的第二部分看出,明显输出的是错误结果,当用户

19、误输入时,不会有提醒,直接算出错误结果;*/*下面是改的代码,大家给我找错误,告诉我啊 感激不尽!只有不断发现错误,才会进步的*/# if 0# include main() float score, average, sum = 0; int n = 0; /dowhile()来控制循环直到输入-1结束循环 do printf(请输入学生的成绩 按-1结束n); scanf(%f, &score); if(score-1 & score0)/判断用户输入值是不是合法 printf(你输入错误n); continue; else if(score = -1) printf(结束输入n); else sum += score;/计算总分 n+;/计数器,记载输入学生的个数 while(score != -1); /对总分。平均分的输出 if(n != 0)/如果n为0说明没有输入学生数据(或正确的学生数据),就不执行下面的语句 printf(你输入数据的个数为%dn, n); printf(你输入的成绩的总分为%gn,

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

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