哈工大c语言教学PPT6循环控制结构.ppt

上传人:牧羊曲112 文档编号:6184004 上传时间:2023-10-03 格式:PPT 页数:75 大小:1.24MB
返回 下载 相关 举报
哈工大c语言教学PPT6循环控制结构.ppt_第1页
第1页 / 共75页
哈工大c语言教学PPT6循环控制结构.ppt_第2页
第2页 / 共75页
哈工大c语言教学PPT6循环控制结构.ppt_第3页
第3页 / 共75页
哈工大c语言教学PPT6循环控制结构.ppt_第4页
第4页 / 共75页
哈工大c语言教学PPT6循环控制结构.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《哈工大c语言教学PPT6循环控制结构.ppt》由会员分享,可在线阅读,更多相关《哈工大c语言教学PPT6循环控制结构.ppt(75页珍藏版)》请在三一办公上搜索。

1、第6章 循环控制结构,本章学习内容,计数控制的循环 条件控制的循环 for语句,while语句,do-while语句 continue语句,break语句 嵌套循环 程序调试与排错,Example:,如何确定程序的输入和输出呢?,Draw a flowchart for the following problem:读入5个整数,计算并显示它们的和.,Input:5 个整数n1,n2,n3,n4,n5 Output:n1,n2,n3,n4,n5的和Input example:2 3 4 5 6Output example:20,问题的提出,Input n1,Input n2,Input n3,i

2、nput n4,input n5,output sum,sum n1+n2+n3+n4+n5,Assume input example:2 3 4 5 6,end,使用了6个不同的变量,start,问题的提出,读入1000个整数,计算并显示它们的和.?,6.1循环控制结构与循环语句,如何对循环进行控制呢?,counter 1,sum 0,counter6,sum sum+n,false,true,counter+,output sum,input n,1,counter,sum,0,1 6true,2,n,0+2,2,2,2 6true,3,2+3,5,3,3 6true,4,5+4,9,4,

3、4 6true,5,9+5,14,5,5 6true,6,14+6,20,6,6 6false,counter-controlled,计数器每次增1,使用了3个变量,Assume input example:2 3 4 5 6,6.2计数控制的循环,end,6.2计数控制的循环,counter initialValue,test counter,Step n,Step x,false,true,Update counter,循环体(Body of Loop),当型循环Condition is tested first 计数控制Loop is controlled by a counterSyn

4、taxfor(initial value;condition;update counter)statement;Orfor(initial value;condition;update counter)statement;statement;,for循环语句,循环起始条件,循环结束条件,循环变量增值,i 0,sum 0,i 5,sumsum+n,false,true,i+,output sum,input n,int i,sum,n;sum=0;for(i=0;i 5;i+)scanf(“%d”,printf(“%d”,sum);,for循环语句,A,条 件P,直到型循环,假,真,6.3条件控

5、制的循环,A,当型循环,真,假,假,条 件P,当型循环Condition is tested first 条件或计数控制 Loop is controlled by condition or a counter 语法while(condition)statement;Orwhile(condition)statement;statement;,No semicolon!,while循环语句,直到型循环Statements in the loop are executed first(at least once),and condition is tested last条件或计数控制 Loop

6、is controlled by condition or a counter 语法do statement;statement;while(condition);statement;,do-while循环语句,【例6.1】计算并输出1+2+3+n的值,循环次数已知,计数控制的循环,循环次数已知,计数控制的循环,【例6.1】计算并输出1+2+3+n的值,循环次数已知,计数控制的循环,【例6.1】计算并输出1+2+3+n的值,循环条件第一次就为假(如输入-1)时会怎样?,【例6.1】计算并输出1+2+3+n的值,A,当型循环,真,假,假,条 件P,假,条 件P,Testing Condition

7、 First,【例6.1】计算并输出1+2+3+n的值,条 件P,直到型循环,A,假,真,条 件P,A,假,Testing condition last,【例6.1】计算并输出1+2+3+n的值,注意,在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容空语句表示循环体内什么都不做 while(i 100);i+;死循环 for(i=0;i 100;i+);printf(%d,i);用于延时,注意!,如何减少循环的次数?,【例6.1】计算并输出1+2+3+n的值,【例6.1】计算并输出1+2+3+n的值,逗号运算符(Comma Operator),多数情况下,并不使用整个

8、逗号表达式的值,更常见的情况是要分别得到各表达式的值主要用在循环语句中,同时对多个变量赋初值等 for(i=1,j=100;i j;i+,j-),【例6.3】计算并输出n!=1 2 3 n,【例6.4】计算并输出1!,2!,3!,n!,若用户不慎输入了非法字符,那么先清除输入缓冲区中的内容,然后提示用户重新输入数据直到输入正确为止,【例6.5】输入两个整型数,计算并输出两个整数的最大值,循环次数未知,标记控制的循环,标记值(Sentinel Value),【例6.2】输入数据,显示每次累加的结果,直到输入0时为止,循环次数未知,标记控制的循环,【例6.2】输入数据,显示每次累加的结果,直到输入

9、0时为止,选择三种循环的一般原则,如果循环次数已知,计数控制的循环用for如果循环次数未知,条件控制的循环用while如果循环体至少要执行一次用do-while这只是“一般”原则,不是“原则”,转移控制语句goto语句、break和continue语句,break语句的作用:循环体中使用break语句可以提前结束整个循环。,Continue语句的作用:循环体中使用continue语句可以提前结束本次循环。,return语句 标准库函数exit(),6.5流程的转移控制,break语句 和 continue语句对for、while、do-while循环进行内部手术,Break?退出一层循环或sw

10、itch,Continue?中断此次循环,开始下一次,6.5流程的转移控制,n,?,10,Please enter n:10n=10Please enter n:-10Program is over!,【例6.14】演示break与continue,-10,#include main()int i,n;for(i=1;i=5;i+)printf(Please enter n:);scanf(%d,n,?,10,Please enter n:10n=10Please enter n:-10Please enter n:20n=20Please enter n:-20Please enter n:

11、30n=30Program is over!,【例6.14】演示break与continue,-10,20,-20,30,#include main()int i,n;for(i=1;i=5;i+)printf(Please enter n:);scanf(%d,语句标号(Label)举例error:goto语句举例goto error;一般形式,goto语句与语句标号,用if goto构成循环,结构形式:,语句标号:if(表达式)语句/语句组 goto 语句标号;,kk:if(ab)a=a-2;goto kk;,此结构构成的是“当型”循环。,功能:无条件转去执行语句标号所指语句行。,Exit

12、()函数,exit(0)作用是终止整个程序的执行,强制返回操作系统 调用该函数需要嵌入头文件,【例6.9】输入n值,计算并输出 1!+2!+3!+n!,利用前项计算后项,【例6.9】输入n值,计算并输出 1!+2!+3!+n!,每次单独计算累加项,使用嵌套循环的注意事项,使用复合语句,以保证逻辑上的正确性即用一对花括号将各层循环体语句括起来内层和外层循环控制变量不能同名,以免造成混乱 采用右缩进格式书写,以保证层次的清晰性,注意!,例:输出图形1.编程实现输出四行“*”号,每行输出5个“*”号main()int i,j;for(i=1;i=4;i+)for(j=1;j=5;j+)printf(

13、“*”);printf(“n”);,*,2.如何修改程序使其输出直角三角形?,*,#include main()int i,j,m;scanf(%d,#include main()int i,j,k,m;scanf(%d,3.如何修改程序使其输出正三角形?,*,马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?解方程组穷举法,方法1:穷举x,y,z的所有组合,#include main()int x,y,z;printf(Man t Women t Child

14、ernn);for(x=0;x=30;x+)for(y=0;y=30;y+)for(z=0;z=30;z+)if(x+y+z=30,方法2:改进算法,#include main()int x,y,z;printf(Man t Women t Childernn);for(x=0;x=16;x+)for(y=0;y=25;y+)z=30 x-y;if(3*x+2*y+z=50)printf(%3d t%5d t%8dn,x,y,z);,水仙花数,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数字本身。例如:153=13+53+33,水仙花数解法1-程序,#inc

15、lude main()int l1,l2,l3,l4;for(l1=1;l1=9;l1+)for(l2=0;l2=9;l2+)for(l3=0;l3=9;l3+)l4=l1*100+l2*10+l3;if(l4=l1*l1*l1+l2*l2*l2+l3*l3*l3)printf(Daffodils number is%dn,l4);,水仙花数程序实例(解法2),#include main()int l1,l2,l3,l4;for(l4=100;l4=999;l4+)l1=l4/100;l2=(l4%100)/10;l3=I4%10;if(l4=l1*l1*l1+l2*l2*l2+l3*l3*l

16、3)printf(Daffodils number is%dn,l4);,从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”;否则,输出“No!”,问题分析:概念:素数是指除了能被1和它本身整除外,不能被其他任何整数整除的数;判断素数的方法:把m作为被除数,把i=2(m-1)依次做为除数,若余数都不为0,则说明是素数。简单判断方法:只需用2 的数去除m,即可得到正确的判定结果。负数、0和1不是素数。,#include main()int m,i,k,flag=1;/*标志变量flag初值置为1*/printf(Please enter a number:);scanf(

17、%d,采用设置标志变量的方法,#include main()int m,i,k,flag=1;/*标志变量flag初值置为1*/printf(Please enter a number:);scanf(%d,采用设置标志变量的方法,#include main()int m,i,k;printf(Please enter a number:);scanf(%d,break方法,#include#include main()int m,i,k;printf(Please enter a number:);scanf(%d,goto方法,韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1至5报

18、数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。你知道韩信至少有多少兵吗?设兵数为x,则x应满足:x%5=1&x%6=5&x%7=4&x%11=10穷举法,对x从1开始试验,【例6.15】韩信点兵,#include main()int x;for(x=1;x 5000;x+)if(x%5=1,【例6.15】韩信点兵,“瞎猫碰死耗子”,#include main()int x;for(x=1;x+)if(x%5=1,【例6.15】韩信点兵,“死循环”,#include main()int

19、 x;for(x=1;x+)if(x%5=1,【例6.15】韩信点兵goto,#include main()int x;for(x=1;x+)if(x%5=1,【例6.15】韩信点兵break,#include#include main()int x;for(x=1;x+)if(x%5=1,【例6.15】韩信点兵break,标准库函数,作用是终止整个程序的执行,强制返回操作系统,#include main()int x;int find=0;/*置找到标志为假*/for(x=1;!find;x+)if(x%5=1/*置找到标志为真*/,【例6.15】韩信点兵标志变量,结构清晰的程序,#incl

20、ude main()int x;int find=0;/*置找到标志为假*/while(!find)if(x%5=1/*置找到标志为真*/,【例6.15】韩信点兵while,“错在哪儿?”,#include main()int x=1;int find=0;/*置找到标志为假*/while(!find)if(x%5=1,【例6.15】韩信点兵while,“错在哪儿?”,#include main()int x=1;int find=0;/*置找到标志为假*/while(!find)if(x%5=1,【例6.15】韩信点兵while,“你答对了吗?”,本章学习内容,计数控制的循环 条件控制的循环

21、 for语句,while语句,do-while语句 continue语句,break语句 嵌套循环 程序调试与排错,循序渐进式编程例6.6:猜数游戏,想一个1100之间的数,猜对:right!猜错:wrong!并提示大小,循序渐进式编程:猜数游戏例5.4,例6.6,例6.7,例6.12,猜数游戏用到的库函数,怎样模拟计算机“想”一个数呢?随机函数rand()产生0,RAND_MAX 之间的随机数magic=rand();#include#define RAND_MAX 0 x7FFF RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 产生0,b-1 之间的随机数ma

22、gic=rand()%b;产生a,a+b-1 之间的随机数magic=rand()%b+a;,#include#include main()int magic;/*计算机想的数*/int guess;/*人猜的数*/magic=rand()%100+1;/*“想”一个1,100之间的数magic*/printf(Please guess a magic number:);scanf(%d,例5.4,#include#include main()int magic;int guess;int counter;/*记录人猜次数的计数器变量*/magic=rand()%100+1;counter=0

23、;/*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d,例6.6,猜数游戏用到的库函数,每次运行程序时计算机所“想”的数都是一样的,这是什么原因呢?函数rand()产生的只是伪随机数随机函数srand为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”通过输入随机数种子,产生0,100之间的随机数scanf(%u,#include#include main()int magic;int guess;int counter;/*记录人猜次数的计数器变量*/unsigned int seed

24、;printf(Please enter seed:);scanf(%u,例6.6,猜数游戏用到的库函数,使用计算机读取其时钟值并把该值自动设置为随机数种子,产生0,100之间的随机数函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子#include srand(time(NULL);magic=rand()%100+1;函数time()能为程序员提供代表时间的字符串,使用NULL作为函数参数,使其不具备此功能,#include#include#include main()int magic;int guess;int counter;/*记录人猜次数的计

25、数器变量*/srand(time(NULL);magic=rand()%100+1;counter=0;/*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d,例6.6,#include#include#include main()int magic;int guess;int counter;/*记录人猜次数的计数器变量*/srand(time(NULL);magic=rand()%100+1;counter=0;/*计数器变量count初始化为0*/doprintf(Please guess a magic number:);scanf(%d,例6.7,domagic=rand()%100+1;counter=0;doprintf(Please guess a magic number:);scanf(%d,6.4嵌套循环,例6.12,domagic=rand()%100+1;counter=0;doprintf(Please guess a magic number:);scanf(%d,6.4嵌套循环,例6.12,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号