C语言程序设计教程 第5章_第1页
C语言程序设计教程 第5章_第2页
C语言程序设计教程 第5章_第3页
C语言程序设计教程 第5章_第4页
C语言程序设计教程 第5章_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2024/5/131第五章循环结构5.1while语句5.2do-while语句5.3for语句5.4break、continue和goto语句5.5循环的嵌套5.6复合结构程序举例C语言程序设计教程2024/5/132本章重点、难点内容一、重点:1)3种循环语句的语法结构及其使用时的区别;

2)循环结束条件表达式的构造;

3)for语句的使用方法;二、难点:1)循环控制变量的使用及循环结束条件的设定;

2)for语句的几种不同使用方法;

3)break、continue语句的使用;

4)循环嵌套;2024/5/133C语言有while、do-while、和for语句三种循环结构语句。前两个称为条件循环,即根据条件来决定是否继续循环;后一个称为计数循环,即根据设定的执行次数来执行循环。2024/5/1345.1while语句while语句是通过判断循环控制条件是否满足来决定是否继续循环的语句。一般形式:

while(条件表达式)

{循环体语句序列}

条件表达式为循环控制条件,当表达式的值为非零(满足循环条件),就执行循环体语句,当表达式的值为零,就退出循环。2024/5/135while语句执行流程表达式语句真假表达式首先计算条件表达式语句如果表达式的值为非零,执行语句表达式重新计算表达式如果表达式的值为0,则跳出循环如果表达式的值一开始就为0,则语句一次也会被不执行。2024/5/136while语句举例问题:求n个学生的平均成绩(先考虑程序的输入及输出)算法:1输入n;i=1,average=0;2输入第i个学生的score;3average+=score;i++;4当i<=n重复做2;5average/=n;2024/5/137main(){intn,i=1;float

score,average=0;printf(“\nEntern:”);scanf(“%d”,&n);while(i<=n){printf(“\nEnterscore:”);scanf(“%f”,&score);average+=score;i++;}average/=n;printf(“\naverage=%f”,average);}2024/5/1385.2

do—while语句

do—while语句的一般形式是:

do{

循环体语句

}while(条件表达式)

特点:首先执行语句,再通过判断循环控制条件是否满足来决定是否继续循环。2024/5/139do—while语句执行流程首先计算语句,再计算表达式。如果表达式的值为非零,继续下一次循环如果表达式的值为0,则跳出循环如果表达式的值一开始就为0,也会执行一次语句。循环体语句条件表达式真假2024/5/1310main(){intscore,n,i=1;floataverage=0;printf(“Entern:”);scanf(“%d\n”,&n);do{printf(“\nEnterscore:”);scanf(“%d”,&score);average+=score;i++;}while(i<=n);average/=n;printf(“\naverage=%f”,average);}思考:与前面用While语句构成的循环在程序运行结果上有何区别?2024/5/1311注意:循环控制变量值在循环体内必须有所改变。例如:i=1;while(i<=100)

putchar(‘*’);i++;这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i++;不属于循环语句。i++应该在循环体内改变:i=1;while(i<=100){putchar(‘*’);

i++;}2024/5/1312 5.3for循环语句for(表达式1;表达式2;表达式3)循环体语句这是C语言最有特点的循环语句。使用最为灵活方便。一般形式:2024/5/1313先执行表达式1(初值表达式),用于循环开始前设置变量初值。接着计算表达式2(循环条件控制表达式),根据其真假值决定是否继续循环。执行循环体语句。最后执行表达式3(循环控制变量修改)。表达式1表达式2循环体表达式3执行流程真假2024/5/1314利用for语句重新设计求平均成绩程序main(){intn,score,i;floataverage=0;printf(“\nEntern:”);scanf(“%d”,&n);for(i=1;i<=n;i++){printf(“\nEnterscore:”);scanf(“%d”,&score);average+=score;}average/=n;printf(“\naverage=%f”,average);}2024/5/1315例:求1+2+…+99#include(stdio.h)

main()

{inti,s=0;/*s清0*/

for(i=1;i<100;i++)

s=s+i;

printf(“s=%d”,i);

}i=1i<100s=s+ii++2024/5/1316

循环语句的多种表示for(i=0;i<100;i++)s=s+i;main()

{inti=1,s=0;

do

{s=s+i;i++;}while(i<100);printf(“s=%d”,i);

}i=0i<100s=s+ii++main()

{inti,s=0;

i=0;

while(i<100)

{s=s+i;

i++;

}

printf(“s=%d”,i);

}2024/5/1317for语句的表达式可以省略如已先给变量赋过值。则可以省略表达式1。for(;i<100;i++)如果想在循环内部改变变量的值,则可以省略表达式3。for(i=0;i<100;)如果省略表达式1,3的话就相当于while。for(;i<100;)while(i<100)全部省略就是死循环。for(;;)(需要用break跳出)2024/5/1318逗号表达式

逗号运算符的主要应用就在for语句中。for语句中的表达式1和表达式3可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常清晰。例:for(i=1,j=10;i<=j;i++,j--)2024/5/1319for(i=a,j=b;i<=j;i++,j--)举例问题:求1/100+2/99+…+1floats=0.0;inti,j;for(i=1,j=100;i<=j;i++,j--)s=s+1.0*i/j;2024/5/1320

循环语句流程图表达式语句真假语句表达式表达式1表达式2循环体表达式3while循环do—while循环for循环2024/5/1321循环语句设计容易出错的几个环节一、While,Do-While循环:

1)循环条件判定表达式设计不当;

2)循环体内无使循环条件趋于假的语句;

3)(循环条件表达式)后的分号,while语句不能加,do-while则要加;4)用于界定循环体语句的花括号不使用或者使用不当;

5)循环控制变量未初始化;2024/5/1322二、for语句循环:

1)循环条件判定表达式设计不当;

2)用于界定循环体语句的花括号不使用或者使用不当;

3)表达式3后面不能有分号。建议:在进行循环设计时尽量使用for语句。2024/5/13235.4break、continue、goto语句

这一类语句的功能是改变程序的结构,使程序从其所在的位置转向另一处。这类语句是非结构化语句。一般而言,在这3个语句前面都应该有一个条件判定2024/5/1324非结构化语句之break

它的作用是把流程转向所在结构之后。在switch分支结构中,使用break语句可以使流程跳出switch分支结构。同样的,在循环结构中,使用break语句使流程跳出当前的循环层,转向执行该循环结构后面的语句。

简单的说就是跳出当前所在的结构main()

{

ints=0,i=1:

for(;;)

{s=s+i;i++;

if(i>100)break;/*如果i>100,则退出循环*/

}

printf(“s=%d”,s);

}

本程序中,当i>100时,强行终止for循环,继续执行for语句下一条语句2024/5/1325

非结构化语句之continuecontinue语句被称为继续语句。执行continue语句,使本次循环提前结束,即跳过循环体中continrue语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。该语句形式为:continue;2024/5/1326例5.4统计某个班级一门课程学生及格的人数main(){intn,i=1,j=0;floatscore;printf(“n=:”);scanf(“%d\n”,&n);while(i<=n){printf(“enterscore:”);scanf(“%f\n”,&score);i++;/*请思考该语句能否放在j++语句处

if(score<60)

continue;

j++;}printf(“%d\n”,j);}2024/5/1327非结构化语句之gotogoto被称为无条件转移语句。由两部分组成goto标号;和标号:语句它最大的好处就是可以一下子跳出多重循环,而break却不能做到这点。2024/5/1328#include“stdio.h”main(){floatscore,average=0;

intn=0;

scanf(“%f”,&score);/*输入第一个学生的分数*/if(score<0)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);/*输出平均成绩,保留两位小数*/}2024/5/1329 5.5循环的嵌套

在循环体语句中又有另一个完整的循环结构的形式,称为循环的嵌套。嵌套在循环体内的循环称语句称为内循环,外面的循环语句称为外循环。如果内循环体中又有嵌套的循环语句,称为多层循环。While、do-while、for三种循环都可以互相嵌套。

循环嵌套的程序中,要求内循环必须被包含在外层循环的循环体中,不允许出现内外层循环体交叉的情况。2024/5/1330000102030405101112131415202122232425303132333435404142434445505152535455输出结果:执行语句段:for(i=0;i<6;i++)

{

for(j=0;j<6;j++)printf(“%3d%3d”,i,j);

putchar(‘\n’);

}2024/5/1331循环嵌套举例问题:输出图形*********************2024/5/1332分析:一共6行,每行的‘*’数目与行号相同算法:行用i表示,

当i<=6do{输出i个‘*’换行

}inti,j;for(i=1;i<7;i++){printf("\n");for(j=1;j<=i;j++)

putchar('*');}2024/5/1333

循环嵌套举例问题:输出图形****************

2024/5/1334循环嵌套分析:一共4行,第i行输出的空格数为:(7-i+1)/2

第i行输出i*2-1个‘*’,算法:

当i<=7do{输出(7-i+1)/2个空格;

输出i个‘*’换行;i+=2;}2024/5/1335main()

{

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();

}2024/5/1336复合程序结构C语言允许循环语句与分支结构语句联用,即在循环体包含一个完整的分支结构,这样的程序结构被称为复合程序结构。复合程序结构同样必须做到嵌套层次清楚,决不允许出现嵌套层次之间相互交叉的情况。2024/5/1337

例:给多个学生的成绩评级。#include<stdio.h>

#include<conio.h>

main()

{inti,score;

scanf("%d",&score);

while(score>=0)

{switch(score/10)

{case10:

case9:printf("%d:A\n",score);break;

case8:

case7:printf("%d:B\n",score);break;

case6:printf("%d:C\n",score);break;

default:printf("%d:D\n",score);

}

scanf(“%d”,&score);/*输入下一个学生的成绩*/

}

}

while结构中嵌套了一个多分支选择结构。2024/5/13385.6复合程序结构举例例1目标:输入一个年号,判断是否为闰年。算法:能被4整除且不是100的倍数,或者能被400整除。2024/5/13392024/5/1340#include<stdio.h>

voidmain()

{intyear,leap;

printf(“Enteryear:”);

scanf(“%d”,&year);

if(year%400==0)

leap=1;/*是闰年leap置成1*/

else

{if(year

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论