Presentation is loading. Please wait.

Presentation is loading. Please wait.

第五章 选择结构程序设计 信息管理系.

Similar presentations


Presentation on theme: "第五章 选择结构程序设计 信息管理系."— Presentation transcript:

1 第五章 选择结构程序设计 信息管理系

2 在实际生活中,往往会要求根据情况的不同,选择不同的操作。
例如:输出两个数据a、b中较大的一个。 如果a>b 输出a; 否则 输出b; C语言提供了以下几种语句来实现这种情况。

3 一、if 语句 1、使用格式 ①、 if(条件) 语句1; else 语句2; 执行流程如图1所示。 满足 条件 语句1 语句2 不满足

4 【说明】 条件必须要放到()中。 条件可以是任意表达式(常用的是条件表达式和逻辑表达式)。若表达式的值为非0,则视为满足条件,若表达式的值为0,则视为不满足。 整个if 语句是一条语句。 语句1和语句2可以是任意一条语句,也可以是if语句。如果要执行多个操作,需要写成复合语句的形式。

5 例1:上题输出两数中的大者。 输出两个数据a、b中较大的一个。 如果a>b 输出a; 否则 输出b; 语句实现:
练习1:编写程序,输出实数x的绝对值。 使用格式: if(条件) 语句1; else 语句2; if(条件) 语句1; else 语句2; a>b printf(“%d”,a); printf(“%d”,b);

6 练习1:编写程序,输出实数x的绝对值。 1、读入x的值 2、根据x的不同情况进行操作:
如果 x>= |x|=x;/*也就是说输出x;*/ 否则 |x|=-x;/*也就是说输出-x;*/ 语句实现: (见程序P5_1) if(条件) 语句1; else 语句2; x>=0 printf(“|x|=%f”,x); printf(“|x|=%f”,-x);

7 if语句的使用格式 ② 如果不满足时什么也不做,则可用如下格式: if(条件) 语句1; 执行流程如图2所示。 图2 满足 条件 语句1

8 (ch>=‘A’&&ch<=‘Z’)
例2: 读入一个字符,如果是个大写字母,则输出。 (见程序P5_2) char ch; /*定义变量*/ scanf(“%c”, ch); /*读入数据*/ & 进行操作: 使用if的第二种格式 if(条件) 语句1; (ch>=‘A’&&ch<=‘Z’) printf(“%c”,ch);

9 例3: 有三个整数a、b、c,将其最大者放入a,次之放入b,最小者放入c。(见程序P5_3)
1、先将a、b中的大者放入a(保证a中存放a、b中的较大 的一个): 2、再让a与c比较,将较大的一个放入a(保证a中存放最大的那个): 3、比较b和c,将较大的那个放入b(保证c中存放最小的那个): if (a<b) 交换a、b的值 {z=a;a=b;b=z;} if (a<c) 交换a、c的值 {z=a;a=c;c=z;} if (b<c) 交换b、c的值 {z=b;b=c;c=z;}

10 练习2: 编写程序,判断输入的年份是否为闰年。若为闰年,则输出“这一年是闰年”,(年份能被4整除,但不能被100整除,或者能被100整除,又能被400整除)。 main() {int year; scanf(“%d”,&year); if(year%4==0 && year%100!=0 || year%100==0 && year%400==0) printf(“%d 年是闰年); }

11 ③ 嵌套格式 如果语句1或语句2是一条if语句,即if语句里面还有一条if语句的情况,称为if语句的嵌套格式。
语句1; else 语句2; 语句3; if(条件1) 语句1; else if(条件2) 语句2; 语句3; if(条件1) if(条件2) 语句1 ; else 语句2; if(条件1) if(条件2) 语句1; else 语句2 if(条件3) 语句3; 思考:满足什么条件时执行语句2?

12 【说明】 if语句嵌套使用时,if和else的个数可以相同,也可以不同。else总是和它上面最近的、且还没有配对的if对应。
例如:有如下的写法: if(条件1) if(条件2) 语句1; else 语句2; 思考:满足什么条件时执行语句2? 满足条件1,但不满足条件2时执行语句2 if(条件1) if(条件2) 语句1; else 语句2; 所以一般写成:

13 例3:求一元二次方程ax2+bx+c=0的根。
根据 的情况进行计算: >=0 <0 >0 ==0 有实根 无实根 有两不等实根 有两相等实根 main() { float a,b,c,delta,x1,x2; scanf(“%f%f%f”,&a,&b,&c); delta=b*b-4*a*c; if(delta>=0) if(delta>0) {x1=(-b+sqrt(delta))/4*a; x2=(-b-sqrt(delta))/4*a; printf(“\nx1=%d,x2=%d”,x1,x2);} else {x1=x2= -b/4*a; printf(“x1=x2=%d”,x1);} printf(“no gen”); }

14 练习3: 已知: y= x>0 x=0 x<0 编写程序,任意输入x的值,输出相应y的值。 (见程序P5_4)

15 练习4: 编写一个程序,判断一个整数是否为三位数,如果是,则反向输出。如输入235,输出532 【分析】
1、如何判断x是三位数:100<=x<=999 2、如何求个位数、十位数和百位数: 假设x为一个三位数则 个位数a= x%10; 十位数b=(x/10)%10或b=(x%100)/10; 百位数c= x/100; (见程序P5_5)

16 二、条件表达式 max = a>b?a:b 等价于: if (a>b) max=a; else max=b;

17 三、switch语句 当分支很多时(有多种可能,选其一执行)。 1、使用格式 switch(表达式) {case 常量表达式1:语句1;
…… …… case 常量表达式n:语句n; [default:语句n+1;] } [ ]表示其中部分如需要可有,如不需要可无。

18 例1: 要求按照考试成绩的等级打印出百分制分数段,可以用switch语句实现。 switch ( grade)
{case ‘A’:printf(“\n85~100”);break; case ‘B’:printf(“\n70~84”);break; case ‘C’:printf(“\n60~69”);break; case ‘D’:printf(“\n<60”);break; default : printf(“\nerror”); } (见程序P5_6)

19 【说明】 switch、case等为关键字,要原样照写;{}不要漏掉。 switch后面括弧内的表达式的值只允许它为整型或字符型;
例如可以出现case 3+4 : …,但不能出现case 3.4:…。 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。 每个case的常量表达式的值必须互不相同。

20 【说明】 各个case和default的出现次序不影响执行结果,例如,可以先出现default……,再出现case语句。
再执行switch语句时,格式switch后面表达式的值找到匹配的入口,就从此执行,执行完一个case后面的语句后,自动转换到下一个case继续执行。 如果我们想让程序执行完一个分支后,不再执行后面的case语句,即终止switch语句的执行可以用break语句来实现。 每个分支可以包含多个语句。 多个case 可共用一组执行语句。 允许嵌套使用switch语句。

21 带有break语句的switch语句的执行流程如图3所示:
表达式的值 值1 值2 值3 …… 值n 语句1 语句2 语句3 …… 语句n 图3

22 例3: 给出一百分制成绩,要求输出成绩等级:100~90分输出’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 scanf(“%d”,&x); switch ( x%10) {case 0: case 9: printf(“\nA”); break; case 8:printf(“\nB”); break; case 7:printf(“\nC”); break; case 6:printf(“\nD”); break; default : printf(“\nE”); }

23 练习 : 1、以下程序的输出结果是() main() { int x=1, a=0, b=0 ; switch ( x )
{case 0: b++; case 1: a++; case 2: a++,b++; } printf (“\na=%d,b=%d”,a,b) ; } A)a=2,b=1 B)a=1,b=1 C)a=1, b=0 D)a=2,b=2

24 练习 : 2、下面程序的输出结果是() main() { int x=1, y=0, a=0, b=0 ; switch (x )
{case 1: switch (y ) {case 0: a++; break; case 1: b++; break; } case 2: a++; b++; break; printf (“a=%d,b=%d\n”, a,b); A)a=2,b=1 B)a=1, b=1 C)a=1,b=0 D)a=2,b=2

25 练习 : 3、与y = ( x > 0 ? 1 : x < 0 ? –1 : 0 ) ;的功能相同的if语句是() A) B)
C) D) if(x) if(x>0 y=1; else if (x<0) y=-1; else y=0; if(x>0) y=1; else if (x<0) y=-1; else y=0; if(x>=0) if (x>0) y=1; else y=-1; if(x>0) y=1; else if (x=0) y=0; else y=-1;

26 练习 : 4、下面程序的输出结果是() main() {float x=2.0,y; if(x<0.0) y=0.0;
else if (x<10.0) y=1.0/x; else y=1.0; printf(“\n%f”,y); }A) B) C) D) 5、当a=3,b=4,c=5时,执行以下程序的输出结果是() if (a!=c) ; a=c; c=b; b=a; }

27 练习 : 6、设ok1=1,ok2=2,ok3=0,x=15,a=3,b=4,执行以下程序段后x的值是() if(ok1)
{if (a<b) {if(!ok3) x=0; else x=1; } else x=2; else x=3;

28 练习 : 作业: 输入某年月日,计算该天是该年中第几天。 如:若输入2004 1 20,则1月20日是2004年的第20天。
如:若输入 ,则1月20日是2004年的第20天。 若输入 ,则2月5日是2004年的第36天。 (见程序P5_7)

29 总结: 选择结构的程序设计有三种实现方法: 一般情况下: 如果有2种或3种可能情况,从中选择一种来执行,则使用if语句比较方便;
如果有很多种情况,从中选择一种来执行,则使用switch语句实现比较方便; 条件语句在考试中常以填空或选择的形式出现,让你求执行结果。 不管使用哪种语句,一定要牢记使用格式,并多加练习。


Download ppt "第五章 选择结构程序设计 信息管理系."

Similar presentations


Ads by Google