c语言程序设计第03章.ppt

上传人:hyn****60 文档编号:70758390 上传时间:2023-01-27 格式:PPT 页数:38 大小:390KB
返回 下载 相关 举报
c语言程序设计第03章.ppt_第1页
第1页 / 共38页
c语言程序设计第03章.ppt_第2页
第2页 / 共38页
点击查看更多>>
资源描述

《c语言程序设计第03章.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计第03章.ppt(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第三三章章 循环结构循环结构3.1 *while 语句语句3.2 do-while 语句语句3.3 *for 语句语句3.4 三种循环的比较三种循环的比较3.5 循环嵌套循环嵌套3.6 break,continue语句语句3.7 goto 语句语句3.1 while 语句语句一般形式:while(表达式)语句循环体表达式语句假(0)真(非0)说明说明说明说明1.循环体也可以是复合语句。2.循环体中应有使循环趋于结束的语句(也可在表达式中实现)。3.如果表达式的值一开始就为0(假),则循环体将一次也不执行。迭代 不断用新的值取代变量的旧值,或由旧值递推出变量的新值的过程。迭代与下列因素有关:初

2、值;(如:i=1 sum=0)迭代公式;(如:sum=sum+i;i+;)迭代条件:(如:i=100)例 利用whilewhile语句,计算1+2+3+100的值,并显示出来。例 利用whilewhile语句,计算1+2+3+100的值,并显示出来。main()int i=1,sum=0;while(i=100)sum+=i;i+=1;printf(sum=%dn,sum);使循环趋于结束i=100sum=sum+ii+假(0)真(非0)开始结束sum=0i=1输出summain()int i=2;float sum=1.0;while(i=50)sum+=1/(float)i;i+=2;pr

3、intf(sum=%fn,sum);例 计算1+1/2+1/4+1/6+1/50的值,并显示出来。使循环趋于结束i=50sum=sum+1/ii=i+2假(0)真(非0)开始结束sum=1i=2输出sumdo 循环体语句while(表达式);分号该语句先执行循环体,再判断表达式的值。因此,循环体语句至少被执行一次。3.2 do-while 语句语句表达式语句假(0)真(非0)例 利用do-while语句,计算 n!,设n 为 20。#define N 20main()int i=1;long t=1;do t*=i;i+;while(i=N);printf(”%d!=%ldn,N,t);使循环

4、趋于结束i=20t=t*ii+假(0)真(非0)开始结束t=1,i=1输出 t1!=1 n!=1*2*(n-1)*n例 从键盘上输入一个十进制整数,求该整数的每一位数字之和。如:设输入2347 输出 16 (2+3+4+7)main()int s=0,a;printf(请输入一个整数:);scanf(%d,&a);do s+=a%10;a=a/10;while(a!=0);printf(“s=%d”,s);a!=0s=s+a%10a=a/10假(0)真(非0)开始结束s=0输出 s输入a for(表达式1;表达式2;表达式3)循环体语句 注意 “表达式1”仅在循环开始前,执行一次。3.3 fo

5、r 语句语句表达式2循环体假(0)真(非0)表达式1表达式3forforforfor语句最简单、最易理解的形式语句最简单、最易理解的形式for(循环变量赋初值;循环条件;循环变量增值)循环体语句 例如:求1+2+3+4+100main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(“sum=%d”,sum);printf(“i=%d”,i);i=100sum+=i假(0)真(非0)i=1i+Sum=5050 i=101注意循环次数说明说明说明说明1.for语句中的三个表达式都可以省略,但其中的分号一定要保留。l省略表达式1,应在for 语句之前给

6、循环变量赋初值;i=1;for(;i=100)break;l省略表达式3,应在循环体内设置使循环趋于结束的语句。for(i=1;i=100;)sum=sum+i;i+;l三个表达式均省略,产生死循环。for(;)sum=sum+i;i+;说明说明说明说明2.表达式1和表达式3可以是一个简单表达式或逗号表达式。空语句main()int i,sum;for(i=1,sum=0;i=100;sum+=i,i+);printf(“sum=%d”,sum);i=100;假(0)真(非0)i=1,sum=0sum+=i,i+whilewhiledo whiledo whileforfor3.4 三种循环的

7、比较三种循环的比较表达式2循环体假(0)真(非0)表达式1表达式3表达式语句假(0)真(非0)表达式语句假(0)真(非0)3.5 多重循环多重循环(循循环嵌套)一个循环内包含另一个完整的循环结构,称为循环嵌套。(1)内层循环必须完全包含在外层循环中,不得交叉。并列情况下允许for(i=0;)for(i=0;)(2)内、外层循环不能使用相同的循环变量。for(i=0;)for(i=0;)错误 do for(;;)while(e);for(;;)while(e)(用 while语句实现)main()int i=1,sum=0;while(i=100)sum=sum+i i+;printf(“sum

8、=%d”,sum);(用 for语句实现)main()int i,sum;for(i=1,sum=0;i=100;i+)sum=sum+i;printf(“sum=%d”,sum);(用do-while语句实现)main()int i=1,sum=0;do sum=sum+i;i+;while(i100)break;注 break语句跳出的不是 if语句,而是跳出包含此跳出包含此if语句的循环语句的循环体或体或switch语句语句。3.6 break语句和语句和continue语句语句说明说明说明说明在switch或循环语句嵌套使用的情况下,break 只能终止它所在switch或循环语句,而

9、不能直接跳出(或终止)多层循环,如:break;for()for()if()break;例 从键盘上连续输入字符,并统计其中大写字母的个数直到输入“换行”字符时结束。#include stdio.hmain()char ch;int sum=0;while(1)/*无限循环*/ch=getchar();if(ch=n)/*输入回车符,终止循环*/break;if(ch=A&ch=Z)sum+;printf(Sum=%d,sum);l continue一般形式:continue;功能:终止当前这一轮这一轮循环,即跳过循环体中位于coutinue 后面的语句,而立即进行下一次是否执行循环的判定。w

10、hile()if()continue;for(;)if()continue;例 6.5 把100至200之间的不能被3整除的数输出。main()int i;for(i=100;i=200;i+)if(i%3=0)continue;printf(“%5d”,i);一般形式:goto 标号;功能:将执行流程转到以该标号为前缀的语句去执行。C语言允许在任何语句前添加标号,以作为goto语句的转向目标。标号:语句;其中:标号的命名规则与变量完全相同。3.7goto 语句语句例 计算 1+2+3+100 的值。main()int i=1,sum=0;loop:if(i=100)sum+=i;i+;got

11、o loop;printf(”sum=%d n,sum);用if -goto构成循环说明说明说明说明1.goto语句只在本函数段内有效;2.从多重循环或多重开关中退出时,用goto语句简洁、高效;3.不允许用goto从循环体外转移到循环体内。4.应该尽量少用或不用goto语句。while()L1:x=x+1;goto L1 ;不正确例 从键盘任意输入10个数,找出其中第1个正数。main()int i=1,a;label2:if(i0)printf(%dn,a);goto label1;i+;goto label2;printf(not foundn);label1:;/*空语句*/用if -

12、goto构成循环 程序举例程序举例例 求 Fibonacci(意大利数学家)数列的前40项。Fibonacci数列为:1,1,2,3,5,8,。其特点是,前两个数是1、1,自第三个数开始,每个数都是其前两个数之和。算法:i=1 f 1=1 i=2 f 2=1 i=3 f i=fi-1+f i-2 序号123456数量112358源程序 main()long f1=1,f2=1;int i;for(i=1;i=20;i+)printf(“%16ld%16ld”,f1,f2);if(i%2=0)printf(“n”);f1=f1+f2;f2=f2+f1;以新换旧在第一次循环时求出的是f3,f4的值

13、例 从键盘输入一个大于2的整数m,判断m是不是素数(只能被1和它本身整除的数是素数)。【算法】判断m是否素数,可以让m除以2到m的平方根之间的每一个数,如果m能被2到m的平方根之间的某个数整除,则说明m不是素数,否则,m一定是素数。#include math.h main()int k,m,i;do scanf(%d,&m);while(m=2);k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)break;/*不是素数*/if(i=k)printf(%d is not a prime numbern,m);else printf(%d is a prime numbern,

14、m);穷举 对问题的所有可能状态一一测试,直到找到解或全部可能的状态都测试过为止。循环控制有两种办法:计数法:要先确定循环次数,然后逐次测试,完成测试后循环结束。标志法:达到某一目标后,循环结束。【百钱百鸡】我国古代数学家张丘建在算经中出了一道题“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?设X、Y、Z分别为鸡翁、母、雏的只数。得联立方程:X+Y+Z=1005X+3Y+Z/3=100 三个末知数,只有二个方程式,所以X、Y、Z有多组解。X:0 20 Y:0 33 Z:0 100源程序 main()int x,y,z;for(x=1;x=20;x+)for(

15、y=1;y=33;y+)z=100-x-y;if(15*x+9*y+z=300)printf(”x=%d y=%d z=%dn,x,y,z);X+Y+Z=1005X+3Y+Z/3=100z=100-x-y15X+9Y+Z=300例 输入20个整数,编一程序,统计正数之和及正数个数。main()int a,sum=0,i,count=0;for(i=1;i=20;i+)scanf(%d,&a);if(a=0)continue;+count;sum+=a;printf(sum=%dn,sum);printf(count%dn,count);习题一球从100m高度自由落下,每次落地后反跳回原高度的一

16、半,再落下。求它在第10次落地时,共经过多少m?第10次反弹多高?100+2*100/2+2*50+/2 +2*25/2 +设:共经过 S 反跳高度 h 次数 n初值:s=100 h=s/2 n=1 迭代公式:s=s+2*h h=h/2 n+迭代条件:n0源程序 main()int day,x1,x2;x2=1;day=10;while(-day0)x1=(x2+1)*2;/*以旧推新*/x2=x1;/*以新代旧*/printf(桃子总数为%d个n,x2);合并:x2=(x2+1)*2;习题 打印输出以下菱形图案*#include conio.hmain()int i,j,k;clrscr()

17、;for(i=1;i=4;i+)for(j=1;j=(4-i);j+)printf();for(k=1;k=(2*i-1);k+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;j=i;j+)printf();for(k=1;k=7-2*i;k+)printf(*);printf(n);例 编写一个程序,使得从终端输入的正数各位数字都颠倒一下。例如,输入3456,输出6543。【算法】1.x%10取余,得个位 如:3456%10=6 输出:该数 2.x=x/10取整,得商 如:3456/10=345 如此反复执行1、2步骤,直到商为零。main()int numb,right_digit;printf(Please input a number:n);scanf(%d,&numb);while(numb!=0)right_digit=numb%10;printf(%d,right_digit);numb=numb/10;printf(n);使循环趋于结束

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁