C语言程序设计-循环例子课件_第1页
C语言程序设计-循环例子课件_第2页
C语言程序设计-循环例子课件_第3页
C语言程序设计-循环例子课件_第4页
C语言程序设计-循环例子课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计

—基础篇第7章简单程序设计之二2023/11/27本章内容提要多分支选择结构—switch语句循环嵌套break语句和continue语句

程序举例

2023/11/27教学目标在三种基本结构的基础上,结合本章介绍流程控制的其他几个语句:switch语句、break语句和continue语句及循环的嵌套,实现复杂的算法,设计出结构清晰、功能强大的程序,对C语言程序开发设计有比较深刻的认识。2023/11/277.1多分支选择结构程序设计1、语句形式:

switch(表达式){ case常量1:语句1;

case常量2:语句2;

case常量3:语句3;.......

case常量n:语句n;default:语句n+1;}根据表达式的不同值,选择不同的程序分支,又称开关语句。数值型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号2023/11/272、语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2常量n=语句1…===语句2语句n其它=语句n+1无值case语句出现的次序并不影响执行结果。2023/11/27voidmain(){intn;printf("请输入成绩:");

scanf("%d",&n);switch((int)(n/10)){case10:printf("成绩%d的等级为优秀\n",n);case9:printf("成绩%d的等级为优秀\n",n);case8:printf("成绩%d的等级为良好\n",n);case7:printf("成绩%d的等级为中等\n",n);case6:printf("成绩%d的等级为及格\n",n);default:printf("成绩%d的等级为不及格\n",n);}}

【例7.1】编写程序,对学生成绩进行等级评定。将成绩分为几个等级:0~59分为不及格,60~69分为及格,70~79分为中等,80~89分为良好,90~100分为优秀。要求输入一个成绩,输出其对应的等级。

请输入成绩:78↙成绩78的等级为中等成绩78的等级为及格成绩78的等级为不及格

出错啦!?2023/11/27在“switch”语句中,“case常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,因此会继续执行所有后面语句的情况。为此,C语言提供了一种break语句,其功能是可以跳出它所在的switch语句。2023/11/27将上面的例7.1修改如下:voidmain(){intn;printf("请输入成绩:");

scanf("%d",&n);switch((int)(n/10)){case10:printf("成绩%d的等级为优秀\n",n);break;case9:printf("成绩%d的等级为优秀\n",n);break;case8:printf("成绩%d的等级为良好\n",n);break;case7:printf("成绩%d的等级为中等\n",n);break;case6:printf("成绩%d的等级为及格\n",n);break;default:printf("成绩%d的等级为不及格\n",n);}}请输入成绩:78↙成绩78的等级为中等2023/11/27使用switch语句时还应注意以下几点

switch后面圆括号内表达式的值和case语句中常量表达式的值,都必须是整型的、枚举型的或字符型的,不允许是浮点型的。在case后的各常量表达式的值不能相同。每个case子句既可以是一条语句,也可以是多条语句。当是多条语句时,不需要用花括号括起来。各个case子句和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。多个case的后面可以共用一组执行语句。如例7.1中等级为优秀的判断程序可改为:2023/11/27switch((int)(n/10)){case10:case9:printf("成绩%d的等级为优秀\n");break;

…}2023/11/277.2嵌套循环结构程序设计

在一个循环内又完整地包含另一个循环,称为循环的嵌套。for语句可以与while语句、do-while语句相互嵌套,构成多重循环,例如:

2023/11/27(1)

(2)for() do{{… …while()for(){…}{…}

…} }while();(3)

(4)while()for(){ {

…for()for(){…}{

…}}

}2023/11/27for(i=1;i<=9;i++){

打印第i行;}【例7.2】打印乘法小九九表。

使用一个循环9次的循环语句,每次循环打印一行:打印第i行,循环i次,每次循环打印一个表达式:for(j=1;j<=i;j++){

打印第j个表达式;}打印完一行后换行2023/11/27#include<stdio.h>voidmain(){ inti,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) printf("%d*%d=%-3d",i,j,i*j); printf("\n"); }}程序运行情况如下:1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=812023/11/27【例7.3】百鸡问题。

#include"stdio.h"voidmain(){intx,y,z;

for(x=1;x<=20;x++)/*用嵌套的for循环依次设公鸡有1,2,…,20只*/

for(y=1;y<=33;y++)/*设母鸡有1,2,…,33只*/

for(z=3;z<100;z+=3)/*设小鸡有3,6,…,99只*/

if(x*5+y*3+z/3==100&&x+y+z==100)printf(“公鸡%d只、母鸡%d只、小鸡%d只\n",x,y,z);}程序运行结果如下:公鸡4只、母鸡18只、小鸡78只公鸡8只、母鸡11只、小鸡81只公鸡12只、母鸡4只、小鸡84只

2023/11/277.3break语句和continue语句在循环中的应用

break语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。由于break语句的转移方向是明确的,所以不需要语句标号与之配合。break语句的一般形式为break;注意:break语句对if-else的条件语句不起作用。在多层循环中,一个break语句只向外跳一层。使用break语句可以使循环语句有多个出口

2023/11/27continue语句continue语句只能用在循环体中,其一般格式是:continue;其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。1)while(表达式1){……if(表达式2)break;……}2)

while(表达式1){……if(表达式2)continue;……}2023/11/272023/11/27【例7.4】输出100以内能被7整除的数。

#include"stdio.h"voidmain(){intn;for(n=1;n<=100;n++){if(n%7!=0)continue;printf("%d",n);}printf("\n");}程序运行情况如下:7142128354249566370778491982023/11/27【例7.5】判断m是否素数#include<math.h>#include<stdio.h>intmain(){ intm,i,k; scanf("%d",&m); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1) printf("%disaprimenumber\n",m); else printf("%disnotaprimenumber\n",m); return(0);}2023/11/277.4程序举例

【例7.6】模拟自动饮料机

#include"stdio.h"voidmain(){intbutton;printf("=====自动饮料机=====\n");printf("1.可口可乐\n");printf("2.雪碧\n");printf("3.百事可乐\n");printf("4.芬达\n");printf("5.非常可乐\n");printf("请按1~5键选择饮料:\n");scanf("%d",&button);2023/11/27switch(button){case1:printf("\n你获得一听可口可乐\n");break;case2:printf("\n你获得一听雪碧\n");break;case3:printf("\n你获得一听百事可乐\n");break;case4:printf("\n你获得一听芬达\n");break;case5:printf("\n你获得一听非常可乐\n");break;default:printf("\n非法操作!\n");}}程序运行情况如下:=====自动饮料机=====1.可口可乐2.雪碧3.百事可乐4.芬达5.非常可乐请按1~5键选择饮料:3↙你获得一听百事可乐2023/11/27【例7.10】数组元素排序——冒泡排序(以升序为例)

排序过程:比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置重复上述过程,共经过n-1趟冒泡排序后,排序结束2023/11/27例3849657613273097第一趟38496513273076第二趟384913273065第三趟3813273049第四趟13273038第五趟132730第六趟4938659776132730

初始关键字n=8384976971397279730971376767627301365276530651313494930492738273830381327第七趟2023/11/27输入n个数给a[0]到a[n-1]for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)a[j]>a[j+1]真假a[j]

a[j+1]输出a[0]到a[n-1]#include<stdio.h>main(){inta[10],i,j,t;printf("Input10numbers:\n");

for(i=0;i<10;i++)scanf("%d",&a[i]);printf("\n");

for(i=0;i<9;i++)for(j=0;j<9-i;j++)

if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("Thesortednumbers:\n");

for(i=0;i<10;i++) pri

温馨提示

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

评论

0/150

提交评论