《C语言程序设计第四版PPT 谭浩强.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第四版PPT 谭浩强.ppt(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5 5章章循环结构循环结构一个电话本程序的主菜单一个电话本程序的主菜单 问题:在完成一次操作后,如何问题:在完成一次操作后,如何重新出现菜单?重新出现菜单?教材教材114页,处理成批数据问题。页,处理成批数据问题。引例:引例:语句组语句组Y循环结构流程循环结构流程条件条件NN语句组语句组条件条件Y循环结构的构成循环结构的构成循环体循环体重复执行的操作重复执行的操作循环控制条件循环控制条件重复执行操作的条重复执行操作的条件或结束重复执行操作的条件件或结束重复执行操作的条件需要注意:初始状态,循环条件,每次需要注意:初始状态,循环条件,每次循环后的变化循环后的变化例例1:求:求whilewhi
2、le语句语句表达式表达式假假(0)语句语句真真(非非0)while (表达式表达式)语句语句表达式表达式语句语句N-S图图流程图流程图whilewhile语句语句例例1:求:求 int i=1,sum=0;while(i=100)sum=sum+i;/*也可写为也可写为sum+=i*/i+;printf(1+2+.+100=%dn,sum);do-whiledo-while语句语句假假(0)表达式表达式语句语句真真(非非0)do 语句语句while (表达式表达式)表达式表达式语句语句N-S图图流程图流程图do-whiledo-while语句语句例例1:求:求int i=1,sum=0;do
3、sum=sum+i;i+;while(i=100);printf(1+2+.+100=%dn,sum);例例1:求:求练习练习1:输入:输入10个数求和个数求和练习练习2:求:求 n!=1*2*n计算机最擅长的工作之一:累加求和计算机最擅长的工作之一:累加求和forfor语句的基本格式语句的基本格式for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句表达式表达式2假假(0)语句语句真真(非非0)表达式表达式1表达式表达式3forfor语句的常用形式语句的常用形式for(循环变量赋初值循环变量赋初值;循环条件循环条件;循环变量增循环变量增值值)语句语句条件条件假假(0)语句语句真真(
4、非非0)循环变量循环变量=初值初值循环变量增值循环变量增值forfor语句语句例例1:求:求int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(1+2+.+100=%dn,sum);forfor语句语句例例1:求:求问题的扩展:问题的扩展:(1)求求 1 100 间奇数的和间奇数的和(2)任意输入一组任意输入一组10个数,求它们的和个数,求它们的和(3)任意输入一个正整数任意输入一个正整数n,求,求1+2+n(4)任意输入一个正整数任意输入一个正整数n,求,求n!forfor语句语句例例1:求:求问题的扩展:问题的扩展:(1)求求 1 100 间奇数的和
5、间奇数的和int i,sum=0;for(i=1;i=100;i=i+2)sum=sum+i;printf(1+3+.+99=%dn,sum);int i,sum=0;for(i=1;i=100;i+)if(i%2=1)sum=sum+i;printf(1+3+.+99=%dn,sum);forfor语句语句例例1:求:求问题的扩展:问题的扩展:(2)任意输入一组任意输入一组10个数,求它们的和个数,求它们的和int i;float x,sum=0;for(i=1;i=5;i+)scanf(%f,&x);sum=sum+x;printf(sum=%fn,sum);forfor语句语句例例1:求
6、:求问题的扩展:问题的扩展:(3)任意输入一个正整数任意输入一个正整数n,求,求1+2+nint i,n,sum=0;printf(n=);scanf(%d,&n);for(i=1;i=n;i+)sum=sum+i;printf(1+.+%d=%dn,n,sum);forfor语句语句例例1:求:求问题的扩展:问题的扩展:(4)任意输入一个正整数任意输入一个正整数n,求,求n!int i,n;double fac=1;printf(n=);scanf(%d,&n);for(i=1;i=n;i+)fac=fac*i;printf(%d!=%.0fn,n,fac);考虑到阶乘值的范围,需要双精度才
7、能够保存。但同时应注意,双精度类型的有效位数是15位,当n值较大时,其计算结果还是有误差的。forfor语句语句例例2:输入:输入10个成绩,求最大值。个成绩,求最大值。int i,x,max;max=0;for(i=1;imax)max=x;printf(max=%dn,max);考虑:考虑:求最小值求最小值forfor语句语句例例2:输入:输入10个成绩,求最大值。个成绩,求最大值。#include#include#include int main()int i,x,max;srand(unsigned)time(NULL);max=0;for(i=1;imax)max=x;printf(
8、max=%dn,max);return 0;为方便调试为方便调试程序,引入程序,引入随机函数,随机函数,减少输入数减少输入数据的繁琐。据的繁琐。参见补充阅参见补充阅读材料。读材料。循环嵌套循环嵌套例例3:显示:显示1!,!,2!,!,.,10!int i,n,fac;for(n=1;n=10;n+)fac=1;for(i=1;i=n;i+)fac=fac*i;printf(%d!=%ldn,n,fac);循环嵌套循环嵌套例例4:求:求int i,n,fac,sum=0;for(n=1;n=10;n+)fac=1;for(i=1;i=n;i+)fac=fac*i;sum=sum+fac;prin
9、tf(1!+2!+.+10!=%ldn,sum);循环嵌套循环嵌套例例4:求:求int n,fac,sum=0;for(fac=1,n=1;n1),只需要一层循环。例例5:显示九九乘法表:显示九九乘法表int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%d*%d=%2d ,i,j,i*j);printf(n);改变循环状态改变循环状态break语句语句退出循环退出循环通常与选择结构配合通常与选择结构配合改变循环状态改变循环状态continue语句语句 结束本次循环结束本次循环通常与选择结构配合通常与选择结构配合概念:素数(质数)是只能被概念:素数(质数)
10、是只能被1和本身整和本身整除的正整数除的正整数算法:对于正整数算法:对于正整数m(m2),用,用2m-1中中的每一个正整数的每一个正整数i去除去除m,只要有一个能,只要有一个能够整除,就不是素数够整除,就不是素数例例2.5是算法分析;例是算法分析;例2.10是不好的流程图;例是不好的流程图;例2.15是其改进,以及是其改进,以及N-S图。图。例例5.9的流程图与例的流程图与例2.15有一点儿不同。有一点儿不同。教材教材例例5.9 输入正整数,判断是否素数输入正整数,判断是否素数算法改进:用算法改进:用2m去除去除m,提高效率,提高效率例例5.9 输入一个正整数,判断是否素数输入一个正整数,判断
11、是否素数扩展:扩展:例例5.10 显示区间显示区间 100,200 内的所有内的所有素数素数解:解:R=(F-2H)/2C=H-RC+R=H2C+4R=F人的解决方法人的解决方法列方程求解列方程求解设有鸡设有鸡C只,兔只,兔R只只例例6:鸡兔问题:鸡兔问题笼中有鸡、兔,笼中有鸡、兔,头共头共H个,脚共个,脚共F只。问有鸡、兔各只。问有鸡、兔各几只?几只?例例6:鸡兔问题:鸡兔问题 计算机的解决方法计算机的解决方法将各种可能情将各种可能情况逐个试算,找到符合要求的结果况逐个试算,找到符合要求的结果设鸡设鸡C只只(0CH)若兔若兔0只只,则脚有则脚有.只只 若兔若兔1只只,则脚有则脚有.只只 若兔
12、若兔2只只,则脚有则脚有.只只 .若兔若兔H只只,则脚有则脚有.只只例例6:鸡兔问题:鸡兔问题 计算机的解决方法计算机的解决方法将各种可能情将各种可能情况逐个试算,找到符合要求的结果况逐个试算,找到符合要求的结果鸡鸡0只只,兔兔H只只,则脚有则脚有.只只F鸡鸡1只只,兔兔H-1只只,则脚有则脚有.只只F鸡鸡2只只,兔兔H-2只只,则脚有则脚有.只只 F.鸡鸡C只只,兔兔H-C只只,则脚有则脚有.只只=F,显示结,显示结果果.鸡鸡H只只,兔兔0只只,则脚有则脚有.只只 F例例6:鸡兔问题:鸡兔问题 计算机的解决方法计算机的解决方法将各种可能情将各种可能情况逐个试算,找到符合要求的结果况逐个试算,
13、找到符合要求的结果鸡鸡0只只,兔兔H只只,则脚有则脚有.只只F鸡鸡1只只,兔兔H-1只只,则脚有则脚有.只只F鸡鸡2只只,兔兔H-2只只,则脚有则脚有.只只 F.鸡鸡C只只,兔兔H-C只只,则脚有则脚有.只只=F,显示,显示,结,结束束.鸡鸡H只只,兔兔0只只,则脚有则脚有.只只 F例例6:鸡兔问题:鸡兔问题int heads,feet,chicken,rabbit;printf(heads=);scanf(%d,&heads);printf(feet=);scanf(%d,&feet);if(heads0|feet0|feet4*heads|feet%2!=0)printf(Input error!);else for(chicken=0;chicken0;value/=2)printf(%3d,value);int value;value=36;for(;value0;value/=2)printf(%3d,value);int value;for(value=36;value0;)printf(%3d,value);value/=2;int value;value=36;for(;)if(value=0)break;printf(%3d,value);value/=2;
限制150内