C语言程序设计PPT课件第6章.ppt

上传人:sccc 文档编号:5371198 上传时间:2023-06-30 格式:PPT 页数:37 大小:288.01KB
返回 下载 相关 举报
C语言程序设计PPT课件第6章.ppt_第1页
第1页 / 共37页
C语言程序设计PPT课件第6章.ppt_第2页
第2页 / 共37页
C语言程序设计PPT课件第6章.ppt_第3页
第3页 / 共37页
C语言程序设计PPT课件第6章.ppt_第4页
第4页 / 共37页
C语言程序设计PPT课件第6章.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《C语言程序设计PPT课件第6章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第6章.ppt(37页珍藏版)》请在三一办公上搜索。

1、第六章 循环控制,goto语句 while语句 do-while语句 for语句 break语句 continue语句 练习,6.1 概述,循环:反复执行称为“循环体”的程序段。循环控制常用于数学迭代、对象遍历等问题的求解,几乎所有实用程序都包含循环。C语言中用如下语句实现循环:1、用goto语句和if语句构成循环。2、用while语句。3、用do-while语句。4、用for语句。,6.2 goto语句,一般形式:goto 语句标号 作 用:无条件转向“语句标号”处执行。“语句标号”是一个标识符,它表示程序指令的地址。结构化程序设计方法主张限制使用goto语句。goto语句有两种用途,一是与

2、if语句一起构成循环结构,另一是从循环体中跳转到循环体外。,例6.1 用if语句和goto语句构成循环,求。,main()int i,sum=0;i=1;loop:if(i=100)/*标号表示程序指令的地址,当i100时,执行加法*/sum=sum+i;i+;goto loop;/*无条件转向标号loop处的指令*/printf(%d,sum);,6.3 while语句,一般形式:while(表达式)语句作用:实现“当型”循环。当“表达式”非0(真)时,执行while语句中的内嵌“语句”。“语句”是被循环执行的程序,称为“循环体”。特点:先判“表达式(条件)”,后执行语句。循环体如果包含一个

3、以上的语句,应该以复合语句形式出现.在循环体中应有使循环趋向于结束的语句。,例6.2 流程图:,main()int i,sum=0;/*为循环赋初值*/i=1;whie(i=100)/*“当型”循环*/sum=sum+i;i+;/*使循环趋于结束*/printf(%d,sum);,例6.3从任意 n 个实数中选出最大数和最小数,main()int n,i=1;float max,min,x;printf(“input n,x:”);scanf(“%d%f”,例6.4任意输入两个正整数,求它们的最大公约数。,main()long m,n,r,a,b;printf(“input m,n:”);sc

4、anf(“%ld%ld”,main()long m,n,r,a,b;printf(“input m,n:”);scanf(“%ld%ld”,6.4 do-while语句,一般形式:do 语句 while(表达式)特点:“直到型”循环结构。先执行一次“语句”,后判“表达式”,当“表达式”非0,再执行“语句”,直到“表达式”为0,循环结束。,例6.5 用do-while语句求。main()int i,sum=0;i=1;do sum=sum+i;i+;while(i100”,这两者是等同的。2、一般情况下,同一个问题,既可以用while循环处理,也可以用do-while循环处理。,例6.6从键盘上

5、输入一个整数,判断其是几位数。,main()long m,a;int n=0;printf(“请输入一个正整数:”);scanf(“%ld”,求e的近似值。,直到某一项的值小于或等于10-7为止。,main()int n;float sum,t,m;n=1;sum=1;m=1;do t=1/m;sum+=t;n+;m=m*n;while(t1e-7);printf(“e=%f n”,sum);getch();,例6.7,6.5 for语句,for语句常用于循环次数已知的循环控制;也可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:for(表达式1;表达式

6、2;表达式3)语句执行过程:(1)求表达式1;(2)求表达式2,若为“真”,执行“语句”;若为假,转第(5)步。(3)求表达式3。(4)转第(2)步。(5)执行for语句下面的语句。,循环初始条件,判别循环条件,修改循环条件,for(i=1;i=100;i+)sum=sum+i;这里,循环条件由变量i设定,变量i称为“循环变量”。这是for语句的典型用法:已知循环次数。(本例100次)。,“表达式1”,循环初始条件(i=1)。,“表达式2”,循环条件(i=100)。,“表达式3”,修改循环条件(i+)。,注:for循环中,表达式1仅求解一次;执行循环体后才求解表达式3。先判断后执行。例、用fo

7、r语句,main()int i,sum=0;for(i=1;i=100;i+)sum=sum+i;printf(%dn,sum);,上述for语句也可以用如下while语句表示:i=1;while(i=100)sum=sum+i;i+;,几点说明for语句中的表达式1:可以给循环变量赋初值,亦可以是与循环变量无关的其它表达式,甚至表达式1可以省略。若省略,则应在for语句前对循环变量赋初值。注意,表达式1省略时,其后的分号不能省略。此处的分号不是语句的一部分,而是表达式的分隔符。在for语句中的表达式中可以使用逗号表达式,故不用逗号分隔表达式。,例:sum=0;for(i=1;i=100;i+

8、)sum+=i;或:i=1;for(sum=0;i=100;i+)sum+=i;或:for(i=1,sum=0;i=100;i+)sum+=i;或:i=1;sum=0;for(;i=100;i+)sum+=i;,2.关于表达式3:可以用来改变循环变量的值,也可以是与循环变量的无关的其它表达式,甚至可将循环体中的语句放在表达式3的位置上。表达式3也可以省略,程序设计者必 须保证循环能正常结束。例:i=0;for(sum=0;i100;sum+=i)i+;或:sum=0;for(i=1;i=100;sum+=i,i+);或:sum=0;for(i=1;i=100;)sum+=i;i+;,3.表达式

9、1与表达式3可以同时省略,只有表达 式2,即只给出循环条件。,例、s=1;i=1;for(;i=10;)s=s*i;i+;,s=1;i=1;while(i=10)s*=i;i+;,在这种情况下,for与while语句完全相同。可见,for语句比while语句功能强大。,4.关于表达式2:作为循环的判断条件,一 般为关系表达式或逻辑表达式,但亦可以 是数值表达式或字符表达式。例、sum=0;for(i=1;i=100;i+)sum+=i;或:sum=0;for(i=100;i;i-)sum+=i;,5.表达式2也可以省略,此时,系统不再判断循 环条件,认为表达式2的值始终为真。即循环 条件始终成

10、立。循环将出现死循环,程序设 计者必须设法保证循环能正常结束。例、sum=0;for(i=1;i+)sum+=i;或:sum=0;i=1;for(;)sum+=i;此为死循环。,i=1;sum=0;for(;)sum+=i;i+;if(i100)break;,例6.8求s=1!+2!+3!+n!,其中n小于30。,main()long s,t;int i,n;printf(input n:);scanf(%d,例6.9求Fibonacci数列的前40项。每行输出4项。,main()long t1,t2,t3;int i;t1=t2=1;printf(%10ld%10ld,t1,t2);for(

11、i=3;i=40;i+)t3=t1+t2;printf(%10ld,t3);if(i%4=0)printf(n);t1=t2;t2=t3;getch();,例6.10求Fibonacci数列的前40项。每行输出4项。,main()long t1,t2;int i;t1=t2=1;for(i=1;i=20;i+)printf(%10ld%10ld,t1,t2);if(i%2=0)printf(n);t1=t1+t2;t2=t1+t2;getch();,6.6 循环的嵌套,循环嵌套:一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌

12、套的层数理论上无限制)。三种循环(while循环、do-while循环、for循环)可以互相嵌套。例:(1)(2)while()do.while();,嵌套,while(),dowhile(),(3)(4)for(;)while()(5)(6)for(;)do while();,嵌套,嵌套,嵌套,嵌套,for(;),do while(),for(;),while(),例6.11打印九九乘法表。,main()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);getch();,例6.12将1元钱兑换

13、成1分、2分、5分的硬币,若 每种面值的硬币都不得少于一个,问有几 种不同的兑换方法?,main()int i,j,n=0;for(i=1;i0)n+;printf(n=%dn,n);getch();,6.8 break语句和continue语句,一、break语句作用:跳出所在的多分支switch语句,跳出所在的while do-while for循环语句(提前结束循环)。例、#define PI 3.14main()int r;float area;for(r=1;r 100)break;printf(%d,%6.2fn,r,area);printf(%d,%6.2fn,r,area);,

14、当r=6时,area100,执行break语句,提前结束循环,不再计算r=710的area。,运行结果:1 3.14 2 12.57 3 28.27 4 50.27 5 78.54 6 113.10 7 153.94 8 201.06 9 254.47 10 314.16,二、continue语句作用:提前结束本次循环体的执行,接着进行下一次循环条件的判别。例6.13 把100200之间不能被3整除的数输出。main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);,当n能被3整除时,执行continue语句,结束执行本次循环的

15、循环体,即跳过printf语句。,三、break语句和continue语句的区别while(表达式1)while(表达式1)if(表达式2)break;if(表达式2)continue;break语句跳出循环 continue语句结束本次 循环体的执行,进入 下一次循环,6.9 程序举例,例6.13 用以下公式计算的值,直到最后一项的绝对值小于1E-6为止。算法分析:1、每项的分母,等于前一项分母加2,用n=n+2实现,n的初值为1。2、每项的符号交替变化,用 s=-s实现,s的初值为+1(第一项为正)。3、根据1和2,每一项的值 t=s/n,第一项的值为1。,#include math.h

16、main()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)=1E-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);运行结果:pi=3.141594,练习:1.猴子吃桃问题。猴子摘了一堆桃,第一天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个,以后每天如此,到第10天,只剩下一个桃子了。问最初有多少个桃子?2.古印度国王要褒奖他的聪明能干的宰相达依尔(国际象棋的发明者)。问他要什么,达依尔回答:“陛下只要在棋盘的第一个格子中放1粒麦子,在第二个格子中放2粒麦子

17、。在第三个格子中放4粒麦子,以后每个格子中的麦粒数都是前一格的2倍。如此放满64格,我就心满意足了。”国王想,这不难办到,但是将全印度的麦子都用完了,还是不够。计算应需多少麦子。1立方米麦子约为1.42108粒,3.编写程序求出具有下列性质的四位数:前两位数与后两位数相加,所得和的平方刚好等于原来的四位数。例如:3025=(30+25)24.编写程序求出所有的水仙花数。所谓水仙花数是这样的三位数,它的各位数字的立方和就等于该数本身。例如;153=13+53+335.用 公式,求 的近似值。直到最后一项的绝对值小于10-6为止。6.判断一个正整数m是否是素数。7.求100200之间的所有素数,要求每行输出8个素数。,8.用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。迭代公式为:,n=0,1,2,3,直到 为止。,9.用二分法求方程2x3-4x2+3x-6=0在区间-10,10之间的根。10.用迭代法求,求平方根的迭代公式为:要求前后两次求出的x的差的绝对值小于10-5。,11.编一程序。其功能是对输入表达式中的左、右圆括号能否正确匹配进行检查。假定表达式不存在其它的语法错误,表达式以回车符作为结束标志。12.从键盘输入若干行文字,统计输入正文中的行数、单词数和字符个数。这里的单词是指不含空格、换行符和制表符的字符串。以Ctrl+Z作为输入结束标志。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号