《C语言讲课while循环结构.pptx》由会员分享,可在线阅读,更多相关《C语言讲课while循环结构.pptx(72页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、循环结构的引入循环结构的引入循环结构的引入循环结构的引入C语言提供了三种循环控制语句,构成了三种基本的循环结构:while语句构成的循环结构do-while语句构成的循环结构for语句构成的循环结构第1页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#include void main()float t=0.0001;t=t*2;printf(“%f”,t);第2页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#in
2、clude void main()float t=0.0001;t=t*2;printf(“%f”,t);第3页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#include void main()float t=0.0001;t=t*2;printf(“%f”,t);第4页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折,报纸会有多厚?#include void main()float t=0.0001;t=t*2;printf(“
3、%f”,t);0.0002第5页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折3次后,报纸会有多厚?#include void main()float t=0.0001;t=t*2;t=t*2;t=t*2;printf(“%f”,t);第6页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折3次后,报纸会有多厚?2023/2/21#include void main()float t=0.0001;t=t*2;t=t*2;t=t*2;printf(“%
4、f”,t);第7页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?计算机对同样的操作可以用循环结构完成循环结构可以使我们只写很少的语句,而让计算机反复执行,从而完成大量类同的操作。第8页/共72页 while循环控制 while循环控制结构一般格式 while(表达式表达式)循环体语句循环体语句 l l一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也表达式,也可以是可以是C C语言其他类语言其他类型的合法表达式型的合法表达式 l l用来控制循环体是用来控制循环体是否执行否执行l l称为称为循环
5、体语句循环体语句,可以是基本语句可以是基本语句、也也可以是可以是复合语复合语句句.l l是循环重复执行是循环重复执行的部分的部分 第9页/共72页 while循环控制 while循环控制结构一般格式 while(表达式表达式)循环体语句循环体语句 执行过程是:(1)先计算while后面的表达式的值,如果其值为“真”则执行循环体。(2)执行完循环体后,再次计算while后面的表达式的值,如果其值为“真”则继续执行循环体,如果表达式的值为“假”,退出此循环结构。非非0 0 0 0表达表达式式语语 句句第10页/共72页注意:为了保证循环正常运行,应该特别注意:循环控制变量的初始化循环控制变量的初始
6、化 (循环的初始值)(循环的初始值)循环条件(状态)的检查循环条件(状态)的检查 (确认是否进行循环)(确认是否进行循环)循环控制变量值的修改循环控制变量值的修改 (使循环趋于结束)(使循环趋于结束)第11页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include void main()float t=0.0001;第12页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?2023/2/21#inc
7、lude void main()float t=0.0001;int n=0;第13页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include void main()float t=0.0001;int n=0;while(n10)第14页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include void main()float t=0.0001;int n=0;while(n10)t=t
8、*2;n+;第15页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include void main()float t=0.0001;int n=0;while(n10)t=t*2;n+;第16页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折10次后,报纸会有多厚?#include void main()float t=0.0001;int n=0;while(n10)t=t*2;n+;printf(“%fn”,t);0.
9、1024循环控制变量必循环控制变量必须有正确的初值须有正确的初值循环判断条件循环判断条件循环控制变循环控制变量值的修改量值的修改第17页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?第18页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include void main()float t=0.0001;int n=0;第19页/共72页whilewhile循环控制结构循环控制
10、结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include void main()float t=0.0001;int n=0;while(t=8844)第20页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include void main()float t=0.0001;int n=0;while(t=8844)t=t*2;n+;第21页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假
11、设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include void main()float t=0.0001;int n=0;while(t=8844)t=t*2;n+;printf(“%dn”,n);第22页/共72页whilewhile循环控制结构循环控制结构循环控制结构循环控制结构假设一张报纸厚0.1毫米,将报纸从中间对折多少次后,报纸高度会超过珠穆朗玛峰?#include void main()float t=0.0001;int n=0;while(t=8844)t=t*2;n+;printf(“%3dn”,n);循环控制变量必循环控制变量必须有正
12、确的初值须有正确的初值循环判断条件循环判断条件循环控制变循环控制变量值的修改量值的修改第23页/共72页课堂练习#include void main()int a=5;while(-a)printf(“%5dn”,a-=3);问:程序的输出结果是_.1第24页/共72页课堂练习#include void main()int a=5;while(a-)printf(“%5dn”,a-=3);问:程序的输出结果是_.?程序陷入死循环状态第25页/共72页课堂练习#include void main()int a=5;while(-a);printf(“%5dn”,a-=3);问:程序的输出结果是_
13、.?-3第26页/共72页2023/2/2127do-while语句语句一般格式 do 语句语句 while(表达式表达式);功能:先执行内嵌语句先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。第27页/共72页2023/2/2128 do-while循环的算法(2 2)直到型循环()直到型循环(dodowhilewhile语句)语句)dodo语句while(while(表达式);特点特点:先执行后判断,循:先执行后判断,循环体至少执行一次。适用环体至少执行一次。适用于循环体至少执行一次,于
14、循环体至少执行一次,且总次数不确定的情况。且总次数不确定的情况。零非零表达式?语句(循环体)零非零表达式?语句(循环体)至少执至少执行一次行一次第28页/共72页2023/2/2129说明:while和和do-while都能实现循环控制,都能实现循环控制,whilewhile结构程序通常都可以转换成结构程序通常都可以转换成do-do-whilewhile结构结构l l区别:区别:do-while 语句先执行循环体再判断条件,循环体至少执行一次;while 语句先判断条件再执行循环体,循环体有可能一次也不执行l ldowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环
15、。第29页/共72页2023/2/2130举例举例while和和do-while循环的比较。循环的比较。include void main()int i,sum=0;scanf(“%d”,&i);while(i=100)sum=sum+i;i+;printf(“sum=%dn”,sum);include void main()int i,sum=0;scanf(“%d”,&i);do sum=sum+i;i+;while(i=100);printf(“sum=%dn”,sum);输入:输入:1 输入:输入:101 sum=5050输出:输出:sum=5050sum=0输出:输出:sum=101
16、此程序的此程序的功能?功能?什么情况下两什么情况下两者结果相同?者结果相同?二、二、do-while语句语句第30页/共72页2023/2/21315.3 for语句 语句一般格式 for(表达式1;表达式2;表达式3)语句 l l功能:功能:计算表达式计算表达式1 1的值,再的值,再判断表达式判断表达式2 2,如果其,如果其值为非值为非0 0(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(循环循环体体),并,并计算表达式计算表达式3 3;之后再去判断表达式;之后再去判断表达式2 2,一直到其值为,一直到其值为0 0时结束循环,执行后续语句。时结束循环,执行后续语句。循环初始条件循环初始
17、条件循环控制条件循环控制条件循环体循环体第31页/共72页2023/2/2132for语句的算法N-S结构图for(表达式1;表达式2;表达式3)语句NY流程图计算表达式1 语句计算表达式3表达式2为真?例如:main()int i,sum;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);可部分或全部省略,可部分或全部省略,但但“;”不可省略不可省略第32页/共72页2023/2/2133省略for语句的表达式 表达式1、2、3全省略,即:for(;)就等同于:就等同于:while(while(1)1),会无限循环(死循死循环环)注意:
18、在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行 省略表达式省略表达式省略表达式省略表达式1 1和表达式和表达式和表达式和表达式3 3,即:即:即:即:for for(;(;表达式表达式2 2;);)就等同于:就等同于:whilewhile(表达式表达式2 2)省略表达式省略表达式省略表达式省略表达式2 2,即:即:即:即:forfor(表达式表达式1 1;表达式;表达式3 3)就等同于:就等同于:表达式表达式1;1;while(1while(1)表达式表达式3;3;第33页/共72页2023/2/2134例如:i=1;for(;i100)if(i100)for(i
19、=1;i100)if(i100)i+;i+;第34页/共72页2023/2/2135说明:所有用 while 语句实现的循环都可以用for 语句实现。等价于:等价于:for(表达式表达式1;表达式表达式2;表达式表达式3)语句;语句;表达式1;while(表达式2)语句;表达式3;第35页/共72页2023/2/2136for语句的简单应用【例5.4】求n!,即计算p=123n的值。思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。设置:乘数乘数i i,初值为1,终值为n(n是循环控制终值,需要从键盘输入)累乘器累乘器 p p,每次循环令p=p*i第36页/共72页2023/2/
20、2137程序:main()int i,n;long p;p=1;printf(Enter n:);scanf(%d,&n);for(i=1;i=n;i+)p=p*i;printf(p=%ld n,p);思考:思考:如何输出如何输出1!,2!,1!,2!,n!n!?如何求如何求s=1!+2!+n!s=1!+2!+n!?第37页/共72页2023/2/2138几种循环语句的比较while和和do-while语句的语句的表达式只有只有一个,for语句有语句有三个。while 和和for先判断循环条件循环条件后执行循环体,循环体,do-while语句语句先执行循环体循环体后判断循环条件。循环条件。wh
21、ilewhile语句多用于语句多用于循环次数不定循环次数不定的情况的情况do-whiledo-while语句多用于语句多用于至少要运行一次至少要运行一次的情况的情况forfor语句语句多用于要多用于要赋初值赋初值或或循环次数固定循环次数固定的情况的情况第38页/共72页2023/2/2139循环结构中的跳转语句有如下三种语句实现跳转:continuecontinue语句 breakbreak语句 gotogoto语句在循环语句的循环体中使用,可以进行循环的流程控制第39页/共72页2023/2/2140后续语句continue;continue;Y YN N表达式表达式?后续语句continu
22、e;continue;表达式表达式?Y YN Ncontinue语句及应用 功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。whilewhile语句语句do-whiledo-while语句语句后续语句计算表达式计算表达式3 3计算表达式计算表达式1 1continue;continue;表达式表达式2?2?Y YN Nforfor语句语句第40页/共72页2023/2/2141例如:int x,n=0,s=0;int x,n=0,s=0;while(n10)scanf(%d,&x);if if(x0)(x0)continue;continue;s+=x;n+
23、;int x,n=0,s=0;int x,n=0,s=0;dodo scanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;n+;s+=x;n+;while(n10);while(n10);for(n=0,s=0;n10;n+)for(n=0,s=0;n10;n+)scanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;s+=x;第41页/共72页2023/2/2142应用举例 把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的
24、数。for(n=100;n=200;n+)n能被7整除 T F 终止本次循环 输出n 输出10个数 T F 换行第42页/共72页2023/2/2143算法和程序main()int n,j=0;for(n=100;n=200;n+)if(n%7!=0)continue;printf(%6d,n);j+;if(j%10=0)printf(n);printf(n j=%dn,j);运行jc5_7第43页/共72页2023/2/2144后续语句break;break;Y YN N表达式表达式?后续语句break;break;表达式表达式?Y YN N循环中break的应用功能:利用break语句能够
25、强迫终止本层循环,转到后续语句执行。whilewhile语句语句do-whiledo-while语句语句后续语句计算表达式计算表达式3 3计算表达式计算表达式1 1break;break;表达式表达式2?2?Y YN Nforfor语句语句第44页/共72页2023/2/2145例如:int x,n=0,s=0;int x,n=0,s=0;while(n10)scanf(%d,&x);if(x0)break;if(x0)break;s+=x;n+;int x,n=0,s=0;int x,n=0,s=0;dodo scanf(%d,&x);scanf(%d,&x);if(x0)break;if(
26、x0)break;s+=x;n+;s+=x;n+;while(n10);while(n10);for(n=0,s=0;n10;n+)for(n=0,s=0;n10;n+)scanf(%d,&x);scanf(%d,&x);if(x0)break;if(x0)break;s+=x;s+=x;第45页/共72页2023/2/2146用goto语句实现循环 有兴趣的同学自学有兴趣的同学自学不提倡使用goto语句注意注意:goto语句能实现程序无条件转移,为编语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破程提供了便利。但是无限制地使用,会破坏程序的结构化程度。坏程序的结构化程度。因
27、此应限制使用。因此应限制使用。第46页/共72页2023/2/2147循环的嵌套 如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:#include main()int i,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(%4d,i*j);运行jc5_a外循环语句内循环语句第47页/共72页第48页/共72页2023/2/2149注意:while、do-while、for循环语句可以并列,也可以相互嵌套,但循环语句可以并列,也可以相互嵌套,但要层次清楚,要层次清楚,不能出现交叉。不能出
28、现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:例如:for(a=1;a=10;a+)for(b=0;b=0&c=a&c=A&c=Z)k,s,d,o);k+;whilewhile语句语句-实例实例第50页/共72页 例4.6:求数列2/1,3/2,5/3,8/5,13/8,21/13,.前20项的和.main()int i=1,t;float a=2,b=1,sum=0;do sum=sum+a/b;t=a;a=a+b;b=t;i+;while(i=20);printf(“sum=%10.6f
29、”,sum);do-whiledo-while语句语句 实例实例第51页/共72页 例:判断正整数m是否素数。分析:素数的定义可以表达为-若m 为素数,当且仅当它能分解为1和m的乘积。则可以得出判断m是否为素数的一种方法:让m被2到sqrt(m)除,若m能被2 sqrt(m)之中的任何一个整数整除,则m 不为素数;否则 m为素数。程序如下:forfor语句语句-实例实例第52页/共72页#include”math.h”/*判断正整数m是否素数*/main()int i,m,k;printf(“请输入正整数m:”);scanf(“%d”,&m);k=sqrt(m);for(i=2;i=k+1)p
30、rintf(“%d 是素数”,m);第53页/共72页 例:求水仙花数。如果一个三位数的个位数、十位数、和百位数的立方和等于该数自身,则称该数为水仙花数。分析:一个三位数 个、十、百位数 循环结构循环结构(forfor语句语句)-定义变量i-定义变量a、b、ci=a*a*a+b*b*b+c*c*ci=100;i=999;i+a=?b=?c=?第54页/共72页结构嵌套的练习1.main()lianxi1.c int k,s,j;for(k=2;k6;k+,k+)s=1;for(j=k;j0)switch(k)default:break;case 1:n+=k;case 2:case 3:n+=
31、k;k-;printf(“%dn”,n);问:程序的输出结果是_.7第56页/共72页 3、main()int a=1,b;for(b=1;b=8)break;if(a%2=1)a+=5;continue;a-=3;printf(“%dn”,b);问:程序的输出结果是_.结构嵌套的练习 4第57页/共72页 例4.9:打印出以下图形。*程序如下:循环结构循环结构(forfor语句语句)第58页/共72页 main()int i,j,k;for(i=1;i=4;i+)/*上三角(1-4行)的打印*/for(j=1;j=4-i;j+)printf(“”);for(k=1;k=2*i-1;k+)pr
32、intf(“*”);printf(“n”);循环结构循环结构(forfor语句语句)*第59页/共72页 for(i=1;i=3;i+)/*下三角的打印*/for(j=1;j=i;j+)printf(“”);for(k=1;k=7-2*i;k+)printf(“*”);printf(“n”);循环结构循环结构(forfor语句语句)*第60页/共72页上机中的一些问题1、循环的嵌套。例:main()int a,b,s=0;for(a=1;a=5;a+)for(b=1;b=4;b+)s=a+b;printf(“s=%4dn”,s);s=s+b;s=0;s=s+b;程序的结果为什么?第61页/共7
33、2页上机中的一些问题2、按一定格式输出某种图形或结果。例:打印九九乘法表 关键的问题是:学会分析数据间的联系和规律,采用适当的控制结构,及输出格式(%4d,t,n)的正确使用。程序如下:第62页/共72页#include“stdio.h”main()int i,j;clrscr();printf(“*”);for(i=1;i=9;i+)printf(“%4d”,i);printf(“n”);for(i=1;i=9;i+)printf(“%4d”,i);for(j=1;j=i;j+)printf(“%4d”,i*j);printf(“n”);S3-4.c第63页/共72页#include“std
34、io.h”main()int i,j;clrscr();printf(“*”);for(i=1;i=9;i+)printf(“%4d”,i);for(i=1;i=9;i+)printf(“n%d”,i);for(j=1;j=i;j+)printf(“%4d”,i*j);第64页/共72页xy-1010fx1fx2fx0(x1)(x2)0例3.6:实现用二分法求 2x-4x+3x-6=0在 1010 之间的根。第65页/共72页定义数据:x1,x2,f1,f2,x0,赋初值计算:x0,f0f0*f1=1e-5输出ynynS3-6.c计算:f1,f2第66页/共72页p12例3.7:完善程序 s3
35、-7.c。输入一串字符,以#号作为结束标志,输出其中字符、数值的个数,写出程序执行过程、结果。第67页/共72页main()char ch;int ch_num,dig_num;ch_num=dig_num=0;do while(ch!=#);printf(“The numbers of chars is%d”,ch_num);printf(“The number of digital is%d,”dig_num);第68页/共72页定义数据,赋初值输入字符字符型数据?ch_num+dig_num+ch!=#?输出ynynS3-7.c第69页/共72页main()char ch;int ch_
36、num,dig_num;ch_num=dig_num=0;do ch=getchar();if(ch=A&ch=a&ch=0&ch=9)dig_num+;while(ch!=#);printf(“The numbers of chars is%d”,ch_num);printf(“The number of digital is%d,”dig_num);第70页/共72页习题:输出图形:1 2 3 4 6 7 8 11 12 16main()int i,j,k,p=1;char space=;for(i=1;i=4;i+)for(k=1;ki;k+)printf(“%5c”,space);p+;for(j=k;j=4;j+)printf(“%5d”,p+);printf(“n”);第71页/共72页感谢您的欣赏!第72页/共72页