您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > C语言程序设计教程第05章
2020/1/111第五章循环结构5.1while语句5.2do-while语句5.3for语句5.4break、continue和goto语句5.5循环的嵌套5.6复合结构程序举例C语言程序设计教程C语言程序设计教程第5章循环程序设计22020/1/11C语言有while、do-while、和for语句三种循环结构语句。前两个称为条件循环,即根据条件来决定是否继续循环;后一个称为计数循环,即根据设定的执行次数来执行循环。C语言程序设计教程第5章循环程序设计32020/1/115.1while语句while语句是通过判断循环控制条件是否满足来决定是否继续循环的语句。一般形式:while(表达式)语句表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行语句,当表达式的值为零,就退出循环。C语言程序设计教程第5章循环程序设计42020/1/11while语句执行流程表达式语句真假表达式首先计算表达式语句如果表达式的值为非零,执行语句表达式重新计算表达式如果表达式的值为0,则跳出循环如果表达式的值一开始就为0,则语句一次也会被不执行。C语言程序设计教程第5章循环程序设计52020/1/11while语句举例问题:求n个学生的平均成绩算法:1输入n;i=1,average=0;2输入第i个学生的score;3average+=score;i++;4当i=n重复做2;5average/=n;C语言程序设计教程第5章循环程序设计62020/1/11main(){intn,score,i=1;floataverage=0;printf(“\nEntern:”);scanf(“%d”,&n);while(i=n){printf(“\nEnterscore:”);scanf(“%d”,&score);average+=score;i++;}average/=n;printf(“\naverage=%f”,average);}C语言程序设计教程第5章循环程序设计72020/1/115.2do—while语句do—while语句的一般形式是:do{语句}while(表达式)特点:首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。C语言程序设计教程第5章循环程序设计82020/1/11do—while语句执行流程首先计算语句,再计算表达式。如果表达式的值为非零,继续下一次循环如果表达式的值为0,则跳出循环如果表达式的值一开始就为0,也会执行一次语句。语句表达式C语言程序设计教程第5章循环程序设计92020/1/11main(){intn,score,i=0;floataverage=0;do{printf(“\nEnterscore:”);scanf(“%d”,&score);average+=score;i++;}while(score=0);average/=--i;printf(“\naverage=%f”,average);}C语言程序设计教程第5章循环程序设计102020/1/11注意:循环控制变量值在循环体内必须有所改变。例如:i=1;while(i=100)putchar(‘*’);i++;这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i++;不属于循环语句。i++应该在循环体内改变:i=1;while(i=100){putchar(‘*’);i++;}C语言程序设计教程第5章循环程序设计112020/1/115.3for循环语句for(表达式1;表达式2;表达式3)循环体语句这是C语言最有特点的循环语句。使用最为灵活方便一般形式:C语言程序设计教程第5章循环程序设计122020/1/11先计算初值表达式,用于循环开始前设置变量初值。接着计算循环控制逻辑表达式,控制循环条件,决定循环次数。执行循环体语句,这个语句也可以是其它循环。循环控制变量,修改表达式。表达式1表达式2循环体表达式3执行流程C语言程序设计教程第5章循环程序设计132020/1/11例:求1+2+…+99#include(stdio.h)main(){inti,s=0;/*s清0*/for(i=1;i100;i++)s=s+i;printf(“s=%d”,i;)}i=0i100s=s+ii++C语言程序设计教程第5章循环程序设计142020/1/11循环语句的多种表示for(i=0;i100;i++)s=s+i;main(){inti=1,s=0;dos=s+i;while(++i100)printf(“s=%d”,i);}i=0i100s=s+ii++main(){inti,s=0;i=0;while(i100){s=s+i;i++;}printf(“s=%d”,i);}C语言程序设计教程第5章循环程序设计152020/1/11for语句的表达式可以省略如已先给变量赋过值。则可以省略表达式1。for(;i100;i++)如果想在循环内部改变变量的值,则可以省略表达式3。for(i=0;i100;)如果都省略的话就相当于while。for(;i100;)while(i100)全部省略就是死循环。for(;;)(需要用break跳出)C语言程序设计教程第5章循环程序设计162020/1/11逗号表达式逗号运算符的主要应用就在for语句中。for语句中的表达式1和表达式3可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常清晰。例:for(i=1,j=10;i=j;i++,j--)C语言程序设计教程第5章循环程序设计172020/1/11for(i=a,j=b;i=j;i++,j--)举例问题:求1/100+2/99+…+1floats=0.0;for(i=1,j=100;i=j;i++,j--)s=s+i/j;C语言程序设计教程第5章循环程序设计182020/1/11循环语句流程图表达式语句真假语句表达式表达式1表达式2循环体表达式3while循环do—while循环for循环C语言程序设计教程第5章循环程序设计192020/1/11循环语句流程图的统一格式。循环上限循环下限循环体C语言程序设计教程第5章循环程序设计202020/1/115.4break、continue、goto语句这一类语句的功能是改变程序的结构,使程序从其所在的位置转向另一处。这类语句是非结构化语句C语言程序设计教程第5章循环程序设计212020/1/11非结构化语句之break它的作用是把流程转向所在结构之后。在switch分支结构中,使用break语句可以使流程跳出switch分支结构。同样的,在循环结构中,使用break语句使流程跳出当前的循环层,转向执行该循环结构后面的语句。简单的说就是跳出当前所在的结构main(){ints=0,i=1:for(;;){s=s+i;i++;if(i100)break;/*如果i100,则退出循环*/}printf(“s=%d”,s);}本程序中,当i100时,强行终止for循环,继续执行for语句下一条语句C语言程序设计教程第5章循环程序设计222020/1/11非结构化语句之continuecontinue语句被称为继续语句。执行continue语句,使本次循环提前结束,即跳过循环体中continrue语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。该语句形式为:continue;C语言程序设计教程第5章循环程序设计232020/1/11例5.4显示输入的字符,如果按的是Esc键,则退出循环;如果按的是Enter键,则不做任何处理,继续输入下一个字符。#include“conio.h”main(){charch;for(;;){ch=getch();/*字符输入函数*/if(ch==27)/*Esc键的ACSII码为27*/break;/*退出循环*/if(ch==13)continue;/*按的是Enter:键,跳过字符输出语句*/putch(ch);/*显示输入的字符*/}getch();/*让程序停一下,拍任意键继续*/}C语言程序设计教程第5章循环程序设计242020/1/11非结构化语句之gotogoto被称为无条件转移语句。由两部分组成goto标号;和标号:语句它最大的好处就是可以一下子跳出多重循环,而break却不能做到这点。C语言程序设计教程第5章循环程序设计252020/1/11#include“stdio.h”main(){floatscore,average=0;intn=0;scanf(“%f”,&score);/*输入第一个学生的分数*/if(score0)gotoend;/*表达式为非0,转移到end标号处*/loop:average+=score;n++;scanf(“%f”,&score);if(score=0)/*表达式为非0,转移到loop标号处*/gotoloop;average=average/n;/*求平均成绩average*/end:printf(“%6.2f”,average);/*输出平均成绩,保留两位小数*/}C语言程序设计教程第5章循环程序设计262020/1/115.5循环的嵌套在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While、do-while、for三种循环都可以互相嵌套。循环嵌套的程序中,要求内循环必须被包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。C语言程序设计教程第5章循环程序设计272020/1/11000102030405101112131415202122232425303132333435404142434445505152535455输出结果:执行语句段:for(i=0;i6;i++){for(j=0;j6;j++)printf(“%3d%3d”,i,j);putchar(‘\n’);}C语言程序设计教程第5章循环程序设计282020/1/11循环嵌套举例问题:输出图形*********************C语言程序设计教程第5章循环程序设计292020/1/11分析:一共6行,每行的‘*’数目与行号相同算法:行用i表示,当i=6do{输出i个‘*’换行}inti,j;for(i=1;i7;i++){printf(\n);for(j=1;j=i;j++)putchar('*');}C语言程序设计教程第5章循环程序设计302020/1/11循环嵌套举例问题:输出图形****************C语言程序设计教程第5章循环程序设计312020/1/11循环嵌套分析:一共4行,第i行输出的空格数为:(7-i+1)/2第i行输出i*2-1个‘*’,算法:当i=7do{输出(7-i+1)/2个空格;输出i个‘*’换行;i+=2;}C语言程序设计教程第5章循环程序设计322020/1/11main(){inti,j;for(i=1;i=7;i+=2){printf(“\n”);for(j=1;j=(7-i+1)/2;j++)putchar(‘’);/*输出(7-i+1)/2个空格*/for(j=1;j=i;j++)putchar(’*’);/*输出i个‘*’*/}getch();}C语言程序设计教程第5章循环程序设计332020/1/11复合程序结构C语言允许循环语句与分支结构语句联用,即在循环体包含一个完整的分支结构,这样的程序结构被称为复合程序结构。复合程序结构同样必须做到嵌套层次清楚,决不允许出现嵌套层次之间相互交叉的情况。C语言程序设计教程第5章循环程序设计342020/1/11例:给多个学生的成绩评级。#includestdio.h#includeconio.hmain(){inti
本文标题:C语言程序设计教程第05章
链接地址:https://www.777doc.com/doc-2908212 .html