第五章 选择结构程序设计任课老师:台安返回下一页上一页第五章 选择结构程序设计第五章 选择结构程序设计选择型程序用来解决我们面临的判断型问题,即在不同的条件下选择相应的操作。 C语言提供了两种判断语句或者说是分支语句:
5.1 if语句
5.2 switch语句
5.3 程序举例返回下一页上一页第五章 选择结构程序设计
5.1 if语句
if语句:判别条件是否满足(表达式的值为真时满足),来决定程序的流程(执行两路操作之一)。
5.1.1 if语句的三种形式
1,if ( 表达式) 语句例如,if (x>y) printf("%d",x);
(流程图中菱形框表判断,矩形框表示要执行的操作,即若干条语句)
返回下一页上一页第五章 选择结构程序设计
if语句的三种形式
2,if ( 表达式) 语句 1 else 语句 2
例:打印输入两数的较大值
main( )
{ int x,y;
printf(“Please input,”);
scanf(“%d%d”,&x,&y);
if (x>y) printf("%d",x);
else printf("%d",y);
printf(“ok”);
}
返回下一页上一页第五章 选择结构程序设计
3,实现多路分支
if ( 表达式 1)
语句 1
else if (表达式 2)
语句 2
else if (表达式 3)
语句 3
.....
else if (表达式 m)
语句 m
else
语句 n
if语句的三种形式返回下一页上一页第五章 选择结构程序设计例,商店售货按购物的款数分别给予不同的优惠折扣。折扣办法:
购款价值在 500元以上优惠 15%,300~500优惠 10%,100~300优惠
7.5%,50~100优惠 5%,50元以下不优惠,
设变量,n:购物款数,c:优惠折扣百分比,a:优惠后的实际款数
main( )
{ float n,c,a;
scanf (“%f”,&n);
if(n>500) c=0.15;
else if(n>300) c=0.10;
else if(n>100) c=0.075;
else if(n>50) c=0.05;
else c=0 ;
a=n* (1-c);
printf (“a=%f\n”,a);
}
输入,输出:
800 720.000000
480 432.000000
200 185.000000
80 76.000000
30 30.000000
返回下一页上一页第五章 选择结构程序设计
if语句括号里的表达式的值按非零即真处理
main( )
{ int x=0;
float y= -5.6;
if(x) printf (“x=%d\n”,x);
if(y) printf (“y=%f\n”,y);
if(?0?) printf(,?0?=%d\n”,?0?);
if(x>y) printf (“x-y=%f\n”,x-y);
if(y> -100) {x++; y++; printf(“x=%d,y=%y\n”,x,y); }
}
运行结果:
y= -5.600000
0?=48
x- y=5.600000
x=1,y=- 4.600000
示例:
返回下一页上一页第五章 选择结构程序设计猜数游戏 1
main()
{ int magic=123;
int guess;
scanf("%d",&guess);
if (guess==magic) printf("*** right ***");
}
返回下一页上一页第五章 选择结构程序设计猜数游戏 2
main()
{ int magic=123;
int guess;
scanf("%d",&guess);
if (guess==magic) printf("*** right ***");
else printf("***wrong***);
}
返回下一页上一页第五章 选择结构程序设计猜数游戏 3
main( )
{ int magic=123;
int guess;
scanf("%d",&guess);
if (guess==magic) {
printf("*** right ***");
printf("%d is the magic number",magic); }
else {
printf("***wrong***);
if(guess>magic) printf("too high");
else printf("too low");}
}
返回下一页上一页第五章 选择结构程序设计
5.1.2 if 语句的嵌套
嵌套:在 if语句中,又包含 1到多个 if 语句 一般形式:
if( a )
if(b ) 语句 1
else 语句 2
else
if(c ) 语句 3
else 语句 4
条件 a成立时的内嵌语句条件 a不成立时的内嵌语句条件 a成立并且 b不成立时的内嵌语句条件 a不成立并且 c不成立时的内嵌语句返回下一页上一页第五章 选择结构程序设计
使用内嵌的 if语句时,应区分表面形式与实际作用如,if( )
if( ) 语句 1
else
if( ) 语句 2
else 语句 3
编程者希望把中间的 else与第一行的 if匹配,虽然书写时对得很整齐,但编译后程序的执行效果如何呢?
if 语句的嵌套返回下一页上一页第五章 选择结构程序设计
if与 else 的配对原则
⑴在 C语言中,if与 else 的配对原则是,从最内层开始,else总是与它上面最近的、未曾配对的 if配对。因此,上述问题在编译时的真正效果是:
if( )
if ( ) 语句 1
else
if( ) 语句 2
else 语句 3
返回下一页上一页第五章 选择结构程序设计
if与 else 的配对原则为了使程序清晰,不至出错,采取的方法是:
( 1) 使内嵌的 if也包含 else:
if( )
if( ) … else …
else
if( ) … else,..
(2) 若 if 和 else数目不等,为实现设计者的企图,可用 { } 实现,如上述问题可进行如下描述:
if( )
{ if( ) 语句 1 }
else
{ if( ) 语句 2 else 语句 3}
返回下一页上一页第五章 选择结构程序设计例 1:三个数中求最大数
float max3(float x,float y,float z)
{ float max=x;
if(z>y)
{ if (z>x) max=z; }
else
if (y>x) max=y;
return(max);
}
返回下一页上一页第五章 选择结构程序设计例 2.有一函数如下,编一程序,输入一个 x值,输出 y值。
main()
{
int x,y;
scanf("%d",&x);
if (x<0) y = -1;
else if (x= =0) y = 0 ;
else y = 1;
printf("x=%d,y=%d\n",x,y);
}
输入,-1234?
输出,x= -1234,y= -1
输入,0?
输出,x=0,y=0
输入,756?
输出,x=756,y=1
返回下一页上一页第五章 选择结构程序设计另一种设计方法
main( )
{ int x,y;
scanf(%d”,&x);
y= 0;
if(x !=0)
if(x >0 ) y= 1;
else y= -1;
printf(“x=%d,y=%d\n”,x,y);
}
同学们试写出其它表示方法。
输入,-5?
输出,x=-5,y=0
输入,0?
输出,x=0,y=-1
输入,8?
输出,x=8,y=1
/ *此 else 和谁匹配? */
返回下一页上一页第五章 选择结构程序设计条件运算符
C语言中有一种条件远算符号,可代替 if语句。
格式,表达式 1? 表达式 2,表达式 3
操作过程,若表达式 1为真,则此条件表达式的值取表达式 2的值,否则取表达式 3的值,
三元运算符:优先级 9级,只高于赋值运算符和逗号运算符返回下一页上一页第五章 选择结构程序设计条件运算符示例
main( )
{ float a,b,max;
printf(" please input two data,");
scanf("%f%f",&a,&b);
max=a>b?a:b ;
printf("The max is %f\n",max);
}
若输入数据 2.5和 3.6,输出值应是? A 2.5 B 3.6 C 0 D 1
返回下一页上一页第五章 选择结构程序设计
5.2 switch语句 (单条件测试 )
Switch语句是对某一个条件的多种可能进行判别测试 。
格式:
switch(表达式 )
{ case 常量表达式 1:语句 1;
case 常量表达式 2:语句 2;
……
case 常量表达式 n,语句 n;
default,语句 n+1;
}
执行过程,计算表达式的值,依次与 case后的常量表达式比较,
(1) 若有相等的值,从这点开始执行,语句 break终止 ;
(2)若无相等的值,则执行 default后面的语句,若无
default,则无任何操作返回下一页上一页第五章 选择结构程序设计例:根据考试成绩的等级打印出百分制分数段
main( )
{ char n;
scanf(“%c”,&n);
switch(n) {
case?a?,printf (“85~100\n” ); break;
case?b?,printf (“70~84\n” ); break;
case?c?,printf (“60~69\n” ); break;
case?d?,printf (“<60\n” ); break;
default,printf (“input error!\n” ); }
}
输入,a? 输出,85~100
c? 60~69
e? input error !
返回下一页上一页第五章 选择结构程序设计问题的提出:
( 1)若无 break语句,情况将如何;
( 2) case 顺序颠倒是否可以?
( 3) case 后有多句,不加 { } 是否行?
返回下一页上一页第五章 选择结构程序设计说明:
⑴ switch后面括号内的“表达式”可以是整数表达式或字符表达式,也可以是枚举型数据。
⑵执行完一个 case后面的语句后,如果没有
break语句,将顺序执行下面 case后的语句;
(3)case后面的常量表达式必须是唯一的,不允许多个 case的常量表达式相同;
(4)case后面的表达式必须有一个具体的数值 ;
(5) 多个 case重叠,共用一个语句组;