,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,C,语言程序设计,基础篇,C,语言程序设计基础篇,第,7,章 简单程序设计之二,2024/11/15,C 语言程序设计基础篇第 7 章 简单程序设计,1,本章内容提要,多分支选择结构,switch,语句,循环嵌套,break,语句和,continue,语句,程序举例,2024/11/15,本章内容提要多分支选择结构switch语句2023/10/,2,教学目标,在三种基本结构的基础上,结合本章介绍流程控制的其他几个语句:,switch,语句、,break,语句和,continue,语句及循环的嵌套,实现复杂的算法,设计出结构清晰、功能强大的程序,,对,C,语言程序开发设计有比较深刻的认识。,2024/11/15,教学目标在三种基本结构的基础上,结合本章介绍流程控制的其他几,3,7.1 多分支选择结构程序设计,1、语句形式:,switch (,表达式),case,常量1:语句1;,case,常量2:语句2;,case,常量3:语句3;,.,case,常量,n:,语句,n;,default:,语句,n+1;,根据表达式的不同值,选择不同的程序分支,又称开关语句,。,数值型,或,字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,千万不能接(;)号,2024/11/15,7.1 多分支选择结构程序设计1、语句形式:switc,4,2、语句执行流程:,指语句的最后一条是否为,break,简单语句或复合语句,break,break,有,无,break,有,无,有,计算表达式,常量1,常量2,常量,n,=,语句1,=,=,=,语句2,语句,n,其它,=,语句,n+1,无,值,case,语句出,现的次序并,不影响执行,结果。,2024/11/15,2、语句执行流程:指语句的最后一条是否为break简单语句或,5,void main(),int n;,printf(,请输入成绩:,);,scanf(%d,switch(int)(n/10),case 10:,printf(,成绩,%,d,的等级为优秀,n,n);,case 9:,printf(,成绩,%,d,的等级为优秀,n,n);,case 8:,printf(,成绩,%,d,的等级为良好,n,n);,case 7:,printf(,成绩,%,d,的等级为中等,n,n);,case 6:,printf(,成绩,%,d,的等级为及格,n,n);,default:,printf(,成绩,%,d,的等级为不及格,n,n);,【例7.1】编写程序,对学生成绩进行等级评定。将成绩分为几个等级:059分为不及格,6069分为及格,7079分为中等,8089分为良好,90100分为优秀。要求输入一个成绩,输出其对应的等级。,请输入成绩:,78,成绩,78,的等级为中等,成绩,78,的等级为及格,成绩,78,的等级为不及格,出错啦!?,2024/11/15,void main()【例7.1】编写程序,对学生成绩进行等,6,在“,switch”,语句中,“,case,常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个,switch,语句,因此会继续执行所有后面语句的情况。,为此,语言提供了一种,break,语句,其功能是可以跳出它所在的,switch,语句。,2024/11/15,在“switch”语句中,“case 常量表达式”只相当于一,7,将上面的例7.1修改如下:,void main(),int n;,printf(,请输入成绩:,);,scanf(%d,switch(int)(n/10),case 10:,printf(,成绩,%,d,的等级为优秀,n,n);break;,case 9:,printf(,成绩,%,d,的等级为优秀,n,n);break;,case 8:,printf(,成绩,%,d,的等级为良好,n,n);break;,case 7:,printf(,成绩,%,d,的等级为中等,n,n);break;,case 6:,printf(,成绩,%,d,的等级为及格,n,n);break;,default:,printf(,成绩,%,d,的等级为不及格,n,n);,请输入成绩:,78,成绩,78,的等级为中等,2024/11/15,将上面的例7.1修改如下:void main()请输入成绩:,8,使用,switch,语句时还应注意以下几点,switch,后面圆括号内表达式的值和,case,语句中常量表达式的值,都必须是整型的、枚举型的或字符型的,不允许是浮点型的。在,case,后的各常量表达式的值不能相同。,每个,case,子句既可以是一条语句,也可以是多条语句。当是多条语句时,不需要用花括号括起来。,各个,case,子句和,default,子句的先后顺序可以变动,而不会影响程序执行结果。,default,子句可以省略不用。,多个,case,的后面可以共用一组执行语句。如例7.1中等级为优秀的判断程序可改为:,2024/11/15,使用switch语句时还应注意以下几点 switch后面圆括,9,switch(int)(n/10),case 10:,case 9:,printf(,成绩,%,d,的等级为优秀,n);,break;,2024/11/15,switch(int)(n/10)2023/10/6,10,7.2,嵌套循环结构程序设计,在一个循环内又完整地包含另一个循环,称为循环的嵌套,。,for,语句可以与,while,语句、,do-while,语句相互嵌套,构成多重循环,例如:,2024/11/15,7.2 嵌套循环结构程序设计 在一个循环内又完整地包含另一,11,(,1,),(,2,),for()do,while()for(),while();,(,3,),(,4,),while()for(),for()for(),2024/11/15,(1),12,for(i=1;i=9;i+),打印第,i,行;,【例,7.2,】,打印乘法小九九表。,使用一个循环,9,次的循环语句,,每次循环打印一行:,打印第,i,行,循环,i,次,每次循环打印一个表达式,:,for(j=1;j=i;j+),打印第,j,个表达式;,打印完一行后换行,2024/11/15,for(i=1;i=9;i+)【例7.2】打印乘法小九,13,#,include,void main(),int i,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=1,2*1=2 2*2=4,3*1=3 3*2=6 3*3=9,4*1=4 4*2=8 4*3=12 4*4=16,5*1=5 5*2=10 5*3=15 5*4=20 5*5=25,6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36,7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49,8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64,9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,2024/11/15,#include 程序运行情况如下:202,14,【例,7.3,】,百鸡问题。,#,includestdio.h,void main(),int x,y,z;,for(x=1;x=20;x+),/*,用嵌套的,for,循环依次设公鸡有1,2,20只*/,for(y=1;y=33;y+)/*,设母鸡有1,2,33只*/,for(z=3;z100;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,只,2024/11/15,【例7.3】百鸡问题。#includestdio.h,15,7.3,break,语句和,continue,语句在循环中的应用,break,语句只能用在,switch,语句或循环语句中,其作用是跳出,switch,语句或跳出本层循环,转去执行后面的程序。由于,break,语句的转移方向是明确的,所以不需要语句标号与之配合。,break,语句的一般形式为,break;,注意,:,break,语句对,if-else,的条件语句不起作用。,在多层循环中,一个,break,语句只向外跳一层。,使用,break,语句可以使循环语句有多个出口,2024/11/15,7.3 break语句和continue语句在循环中的应用,16,continue,语句,continue,语句只能用在循环体中,其一般格式是:,continue;,其语义是:结束本次循环,即不再执行循环体中,continue,语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。,continue,语句只用在,for,、,while,、,do-while,等循环体中,常与,if,条件语句一起使用,用来加速循环。,1),while(,表达式,1),if(,表达式,2)break;,2),while(,表达式,1),if(,表达式,2)continue;,2024/11/15,continue 语句continue语句只能用在循环体中,,17,2024/11/15,2023/10/6,18,【例,7.4,】,输出,100,以内能被,7,整除的数。,#,include stdio.h,void main(),int n;,for(n=1;n=100;n+),if(n%7!=0),continue;,printf(%d,n);,printf(n);,程序运行情况如下:,7 14 21 28 35 42 49 56 63 70 77 84 91 98,2024/11/15,【例7.4】输出100以内能被7整除的数。#include,19,【,例,7.5】,判断,m,是否素数,#include,#include,int main(),int m,i,k;,scanf(,%d,k=sqrt(m);,for(i=2;i=k+1),printf(,%d is a prime numbern,m);,else,printf(,%d is not a prime numbern,m);,return(0);,2024/11/15,【例7.5】判断m是否素数#include,20,7.4,程序举例,【例,7.6,】,模拟自动饮料机,#,include stdio.h,void main(),int button;,printf(=,自动饮料机,=,n);,printf(1.,可口可乐,n);,printf(2.,雪碧,n);,printf(3.,百事可乐,n);,printf(4.,芬达,n);,printf(5.,非常可乐,n);,printf(,请按,1,5,键选择饮料:,n);,scanf(%d,2024/11/15,7.4 程序举例【例7.6】模拟自动饮料机#incl,21,switch(button),case 1:,printf(n,你获得一听可口可乐,n);,break;,case 2:,printf(n,你获得一听雪碧,n);,break;,case 3:,printf(n,你获得一听百事可乐,n);,break;,case 4:,pri