




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章循环结构回顾多重if结构就是在主if块的else部分中还包含其他if块嵌套if结构是在主if块中还包含另一个if语句C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句switch结构也可以用于多分支选择。用于分支条件是整型表达式,而且判断该整型表达式的值是否等于某些值(可以罗列的),然后根据不同的情况,执行不同的操作条件运算符是if–else语句的另一种表现形式目标理解为什么使用循环结构熟练掌握while循环的使用熟练掌握do-while循环的使用理解while和do-while循环的区别熟练使用for循环理解break和continue语句的用法熟练使用嵌套循环本章结构循环结构跳转语句嵌套循环C语言的各种循环结构do-while与while比较for循环嵌套循环5.2C语言中的各种循环whiledo-whilefor需要多次重复执行一个或多个任务的问题考虑使用循环来解决5.2.1while循环while(表达式){
语句;}while循环的一般语法:while(index<100){......
index++;}计算表达式的值,当值为真(非0)时,执行循环体语句,一旦条件为假,就停止执行循环体。如果条件在开始时就为假,那么不执行循环体语句直接退出循环。
工作原理示例5.2.1while循环规则1:[<初始化>]while(循环条件){<循环体>}循环条件中使用的变量需要经过初始化5.2.1while循环规则2:while(index<100){......
index++;}while循环主体中的语句必须修改循环条件的值,否则会形成死循环while(1)真5.2.1while循环示例1例:用while语句求1~100所有整数的和。#include<stdio.h>intmain(){ inti; intsum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d\n",sum);}循环终值循环条件循环体循环变量增值循环初值#include<stdio.h>intmain(){intnum=1,result;while(num<=10){result=num*10;printf("%d×10=
%d\n",num,result);num++;}}5.2.1while循环示例2内存numresult1null102输出:1×10=102×10=203×10=304×10=405×10=506×10=607×10=708×10=809×10=9010×10=100111005.2.2do-while循环do{
语句;}while(表达式);while循环的一般语法:do{......
scanf(“%c”,&answer);}while(answer!=’n’);它先执行循环体中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。
工作原理示例5.2.2do-while循环示例例:用do-while语句求1~100所有整数的和。#include<stdio.h>intmain(){ inti,sum=0; i=1; do { sum+=i; i++; }while(i<=100); printf("%d\n",sum);}5.3嵌套while循环
嵌套while循环的语法while(i<=10){...while(i<=j){......}...}外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。问题描述:用“*”打印一个直角三角形图案。图案如下所示:*******************************************************5.3嵌套while循环示例intmain(){intnstars=1,stars;
while(nstars<=10){ stars=1;
while(stars<=nstars) { printf("*"); stars++; } printf("\n"); nstars++;}}内层循环控制每行打印*号的个数外层循环控制打印的行数输出:*******************************************************5.3嵌套do-while循环
嵌套do-while循环的语法do{...do{...}while(...)...}while(...)外循环内循环只有在内循环完全结束后,外循环才会进行下一趟。5.3嵌套do-while循环示例intx;chari,ans;ans='y';do{ x=0; printf("\n请输入字符序列:");setbuf(stdin,NULL); do{ i=getchar(); x++;}while(i!='\n');
printf("\n输入的字符数为:%d",--x); printf("\n是否需要输入更多序列(Y/N)?"); ans=getch();}while(ans=='Y'||ans=='y');输出:请输入字符序列:GOODMORNING输入的字符数为:11是否需要输入更多序列(Y/N)?N内存中的变量
xians0y检查条件判断是否按下回车键。如果否,
循环继续执行后续语句;如果是,循环回到开始处。如按下Y/y,
则循环从开始处执行,否则循环停止5.4比较while和do-while循环while(循环条件){循环体;}do{
循环体;}while(循环条件);do-while循环是先执行后判断,所以,即使开始条件为假,循环体也至少会被执行一次。while循环是先判断后执行,所以,如果条件为假,则循环体一次也不会被执行。
比较while和do-while循环的工作原理5.4通过示例比较intvalue,r_digit;value=0;do{printf("\n请输入一个数:");scanf("%d",&value);if(value<=0)printf("该数必须为正数\n");}while(value<=0);printf("\n反转后的数为:");do{r_digit=value%10;printf("%d",r_digit);value=value/10;}while(value!=0);printf("\n");intvalue,r_digit;value=0;while(value<=0)
{printf("\n请输入一个数:");scanf("%d",&value);if(value<=0)printf("该数必须为正数\n");}printf("\n反转后的数为:");while(value!=0){r_digit=value%10;printf("%d",r_digit);value=value/10;}printf("\n");
该程序用
do-while
循环将数字左右反转同样的程序用
while循环将数字左右反转小结循环结构的特点是,在给定条件成立时,重复执行某程序段,直到条件不成立为止while循环用于在给定条件为真的情况下重复执行一组操作,while循环先判断后执行do-while循环先执行后判断,因此循环将至少执行一次在循环中,需要修改循环变量的值以改变循环条件,否则有可能形成死循环循环嵌套必须将内层循环完整的包含在外层循环中for(表达式1;表达式2;表达式3){
语句;}
for循环的一般语法:6.1for循环counter=0;inum=1;cnt=100;counter==10;inum<25;cnt>0counter++;inum=inum+1;cnt--分号用于分隔for循环的三个表达式1、计算表达式1的值,通常为循环变量赋初值;2、计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;3、计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第2步重复执行;工作原理12346.2for循环示例1#include<stdio.h>intmain(){intnumber,count,factorial=1;printf("\n请输入任意一个正整数:");scanf("%d",&number);for(count=1;count<=number;count++) factorial=factorial*count;printf("\n%d的阶乘
=%d\n",number,factorial);}请输入任意一个正整数:5内存numbercountfactorial51121206循环执行五次5的阶乘=1206.2逗号运算符for(i=0,j=max;i<=max;i++,j--)printf(“\n%d+%d=%d”,i,j,i+j);for语句中的三个表达式都可以是逗号表达式逗号表达式就是通过“,”运算符隔开的多个表达式组成的表达式逗号表达式从左往右计算。逗号运算符在C语言运算符中的优先级最低for循环示例2#include<stdio.h>intmain(){ inti,j,max; printf("请输入一个值\n"); printf("根据这个值可以输出以下加法表:"); scanf("%d",&max);
for(i=0,j=max;i<=max;i++,j--)
printf("\n%d+%d=%d",i,j,i+j); printf("\n");}循环执行max次初始化语句只执行一次请输入一个值根据这个值可以输出以下加法表:50+5=51+4=52+3=53+2=54+1=56.2for循环的表达式for循环中有三个表达式for语句中的各个表达式都可以省略分号分隔符不能省略for(<初始化循环变量>;<循环条件>;<修改循环变量的值>){<循环体语句>;}可省略不能省略6.2省略表达式1intnum=0;for(;num<=10;num++){ printf("%d\n",num*2);}
inta=0,n;printf("\n输入n的值:");scanf("%d",&n);for(;n>0;a++,n--)printf("%d",a*2);
相当于省去了为循环变量赋初值,此时应在for语句之前给循环变量赋初值6.2省略表达式2for(num=1;;num++){...}
即不判断循环条件,也就是认为表达式2始终为真,这时应在循环体内设法结束循环,否则将成为死循环6.2省略表达式3for(i=1;i<=100;)
{sum=sum+1;i++;}
即省去修改循环变量的值,但此时应在循环体内设法结束循环6.2省略三个表达式for(;;){printf("这将一直进行下去");i=getchar();if(i=='X'||i=='x') break;}
即不为循环变量赋初值,不设置循环条件(认为表达式2为真值),不修改循环变量的值,无终止地执行循环体。此时应在循环体内设法结束循环,否则会成为死循环6.3.1break语句2-1break语句可以改变程序的控制流break语句用于do-while、while、for循环中时,可使程序终止循环而执行循环后面的语句break语句通常在循环中与条件语句一起使用。若条件值为真,将跳出循环,控制流转向循环后面的语句如果已执行break语句,就不会执行循环体中位于break语句后的语句在多层循环中,一个break语句只向外跳一层6.3.1break语句switch表达式语句组1break;语句组2break;语句组nbreak;语句组n+1break;…...常量1常量2常量ndefaultcase表达式……break;……0非0whiledo……break;…...表达式0非0while表达式2……break;…...0非0for表达式1表达式3break语句的两个用途:跳出switch语句跳出本层循环6.3.1break语句2-2跳出
for循环for(;;){printf("这将一直进行下去");i=getchar();if(i=='X'||i=='x')
break;}
跳出
while循环while(1){if(x==10)
break;}
跳出
do-while循环do{if(x==10)
break;}while(x<15);问题描述:统计从键盘输入的若干个字符中有效字符的个数,以换行符作为输入结束。有效字符是指第一个空格符前面的字符,若输入字符中没有空格符,则有效字符为除了换行符之外的所有字符。#include<stdio.h>intmain(){ intcount=0,ch; printf("\n请输入一行字符:"); while((ch=getchar())!='\n') { if(ch=='')
break; count++; } printf("\n共有
%d个有效字符。\n",count);}6.3.1break语句示例内存chcountH0_
请输入一行字符:Helloworld
共有5个有效字符1循环执行5次56.3.2continue语句2-1continue语句只能用在循环里continue语句的作用是跳过循环体中剩余的语句而执行下一次循环对于while和do-while循环,continue语句执行之后的动作是条件判断;对于for循环,随后的动作是变量更新
6.3.2continue语句continue语句的作用:立即结束本次循环表达式……continue;……0非0while非0do……continue;…...表达式0while表达式2……continue;…...0非0for表达式1表达式36.3.2continue语句2-2while(…){
…………continue;
…………}while(…){
…………
break;
…………}跳出整个循环继续下一次循环问题描述:求整数1~100的累加值,但要求跳过所有个位为3的数。#include<stdio.h>intmain(){ inti,sum=0; for(i=1;i<=100;i++) { if(i%10==3)
continue; sum+=i; } printf("sum=%d\n",sum);}6.3.2continue语句示例内存isumnull0131循环执行到i=1378输出:sum=45701循环执行到i=10110145706.3.2使用循环语句应注意的问题在循环体内除了修改控制次数外,不要把循环变量修改成其它无关的值,防止循环失去控制。在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。低效率:长循环在最外层for(row=0;row<100;row++){for(col=0;col<5;col++){sum=sum+a[row][col];}}高效率:长循环在最内层for(col=0;col<5;col++){for(row=0;row<100;row++){sum=sum+a[row][col];}}6.3.2使用循环语句应注意的问题如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。示例a的程序比示例b多执行了N-1次逻辑判断。效率低但程序简洁for(i=0;i<N;i++){if(condition)DoSomething();elseDoOtherthing();}效率高但程序不简洁if(condition){for(i=0;i<N;i++)DoSomething();}else{for(i=0;i<N;i++)DoOtherthing();}6.3.2使用循环语句应注意的问题建议for语句的循环控制变量的取值采用“半开半闭区间”写法。循环变量属于半开半闭区间for(x=0;x<N;x++){...}循环变量属于闭区间for(x=0;x<=N-1;x++){...}问题描述:用“*”输出一个菱形图案,图案如下:
*************************6.4嵌套循环示例1intmain(){ inti,j,k;
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");}}
输出:*************************控制打印的行数控制每行打印的空格数控制每行打印的*号数控制打印的行数控制每行打印的空格数控制每行打印的*号数问题描述:打印输出100至200之间的全部素数。分析:素数是指只能被1和它本身整除的数。算法比较简单,先将这个数被2除,如果能整除,且该数又不等于2,则该数不是素数。如果该数不能被2整除,再看则是否能被3整除。如果被3整除,并且该数不等于3,则该数不是素数,否则再判断是否被4整除,依此类推,该数只要是能被小于本身的某个数整除时,就不是素数。
6.4嵌套循环示例2intmain(){inti,j,n;n=0;
for(i=100;i<=200;i++){j=2;
while(i%j!=0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 有机化学原料的废弃物处理与资源化考核试卷
- 智能服务机器人技术创新考核试卷
- 机械式停车设备故障预防与诊断技巧考核试卷
- 木材采运的数字化转型与智能化考核试卷
- 中介居间费合同范本
- 房主房子出租合同范本
- 维修农村管道合同范本
- 畜牧产品加工与供应合作协议
- 物联网技术应用研发生产合同书
- 电信运营商合作协议具体内容
- 部编人教版九年级下册语文-第5单元-17-屈原-课件-课件
- (正式版)SH∕T 3541-2024 石油化工泵组施工及验收规范
- 小学学校2024-2025学年教学质量提升实施方案
- 施工影像资料交底
- 地连墙施工钢筋笼吊装计算书
- 风电施工安全生产事故案例汇编(第一期)
- 吊篮施工风险分级管控与隐患排查治理(汇编)
- 车间维修工培训课件
- 安全管理工作中形式主义及防止对策
- 2024年郑州信息科技职业学院高职单招(英语/数学/语文)笔试历年参考题库含答案解析
- 蓝牙基础知识全解课件
评论
0/150
提交评论