第 4章 选择结构程序设计
1、熟练掌握 if语句的 3种形式与使用,并理解 if语句嵌套的二义性;
2、熟练掌握 switch语句的使用方法;
3、了解用条件运算符实现选择的方法;
4、通过比较几种选择结构实现方法,了解各种选择结构的特性;
5、学会选择结构程序的综合运用。
我们一起来回忆:条件表达式
一般形式,表达式 1?表达式 2,表达式 3
功能:相当于条件语句,但不能取代一般 if语句例 if (a>b)
printf(“%d”,a);
else
printf(“%d”,b);
printf(“%d”,a>b?a:b);
表达式 1
表达式 2 表达式 3
非 0 =0
语言程序设计第四章选择结构设计
C
选择型程序设计
if语句 ( 选择执行语句 )
if语句的三种形式
形式一:
格式,if (表达式 )
语句表达式语句非 0
=0
例,if (x>y)
printf(“%d”,x); 表达式语句 1 语句 2
非 0 =0?形式二 (条件执行语句)
格式,if (表达式 )
语句 1
else
语句 2
例,if (x>y) max=x;
else max=y;
形式三:
格式:
if ( 表达式 1 ) 语句 1
else if (表达式 2 ) 语句 2
else if (表达式 3 ) 语句 3
…...
[ else 语句 n ]
表达式 1
语句 1
非 0
=0
表达式 2
表达式 3
语句 n语句 3语句 2
非 0
非 0
=0
=0
执行过程:
例,if (salary>1000) index=0.4;
else if (salary>800) index=0.3;
else if (salary>600) index=0.2;
else if (salary>400) index=0.1;
else index=0;
如,if(a==b&&x==y) printf(“a=b,x=y”);
if(3) printf(“OK”);
if(?a?) printf(“%d”,?a?);
说明:
if后面的表达式类型任意
语句可以是复合语句
if(x)? if(x!=0)
if(!x)? if(x==0)
例 考虑下面程序的输出结果,
#include <stdio.h>
main()
{ int x,y;
scanf(“%d,%d”,&x,&y);
if(x>y)
x=y; y=x;
else
x++; y++;
printf(“%d,%d\n”,x,y);
}
Compile Error!
#include <stdio.h>
main()
{ int x,y;
printf("Enter an integer:");
scanf("%d",&x);
y=x;
if(y<0)
y= -y;
printf("\ninteger:%d--->absolute value:%d\n",x,y);
}
例 求一个数的绝对值运行,Enter an integer:-12?
integer:-12--->absolute value,12
#include <stdio.h>
main()
{ int a,b;
printf("Enter integer a:");
scanf("%d",&a);
printf("Enter integer b:");
scanf("%d",&b);
if(a==b)
printf("a==b\n");
else
printf("a!=b\n");
}
例 输入两个数并判断两数相等否运行,Enter integer a:12?
Enter integer b:12?
a==b
运行,Enter integer a:12?
Enter integer b:9?
a!=b
#include <stdio.h>
main()
{ char c;
printf("Enter a character:");
c=getchar();
if(c<0x20) printf("The character is a control character\n");
else if(c>='0'&&c<='9') printf("The character is a digit\n");
else if(c>='A'&&c<='Z') printf("The character is a capital letter\n");
else if(c>='a'&&c<='z') printf("The character is a lower letter\n");
else printf("The character is other character\n");
}
例 判断输入字符种类运行,Enter a character,?
The character is a control character
运行:,8?
i digi
运行,Enter a character,D?
The character is a capital letter
运行,Enter a ch racter,h?
he c racter is a lower let e
运行,Enter a ch racter,F1?
The ch racter is other character
if语句嵌套,
一般形式:
if (表达式 1)
if (表达式 2) 语句 1
else 语句 2
else
if(表达式 3) 语句 3
else 语句 4
内嵌 if
内嵌 if
if (表达式 1)
if (表达式 2)
语句 1
else
语句 2
内嵌 if
if (表达式 1)
if (表达式 2)
语句 1
else
语句 3
内嵌 if
if (表达式 1)
语句 1
else
if(表达式 3)
语句 3
else
语句 4
内嵌 if
例 输入两数并判断其大小关系
#include <stdio.h>
main()
{ int x,y;
printf("Enter integer x,y:");
scanf("%d,%d",&x,&y);
if(x!=y)
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else
printf("X==Y\n");
}
运行,Enter integer x,y:12,23?
X<Y
Enter integer x,y:12,6?
X>Y
Enter integer x,y:12,12?
X==Y
if ~ else 配对原则,缺省 { }时,else总是和它上面离它最近的未配对的 if配对
if(……)
if(……)
if(……)
else…...else…...
else…...
例,if (a==b)
if(b==c)
printf(“a==b==c”);
else
printf(“a!=b”);
修改,if (a==b)
{ if(b==c)
printf(“a==b==c”);
}
else
printf(“a!=b”);
实现 if ~ else 正确配对方法:加 { }
例 考虑下面程序输出结果,
main()
{ int x=100,a=10,b=20;
int v1=5,v2=0;
if(a<b)
if(b!=15)
if(!v1)
x=1;
else
if(v2) x=10;
x=-1;
printf(“%d”,x);
}
结果,-1
switch语句 ( 开关分支语句 )
一般形式,switch( 表达式 )
{ case E1:
语句组 1;
break;
case E2:
语句组 2;
break;
…….
case En:
语句组 n;
break;
[default:
语句组 ;
break;]
}?执行过程,
switch
表达式语句组 1 语句组 2 语句组 n 语句组…...
E 1 E 2 En default
case
说明:
E1,E2,… En是 常量表达式,且值必须互不相同
语句标号作用,必须用 break跳出
case后可包含多个可执行语句,且不必加 { }
switch可嵌套
多个 case可共用一组执行语句如,……
case?A?:
case?B?:
case?C?,
printf(“score>60\n”);
break;
……..
例 switch(score)
{ case 5,printf(“Very good!”);
case 4,printf(“Good!”);
case 3,printf(“Pass!”);
case 2,printf(“Fail!”);
default,printf(“data error!”);
}
运行结果,score为 5时,输出:
Very good! Good! Pass! Fail! data error!
例 void 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;
case 3,a++;b++;
}
printf(“\na=%d,b=%d”,a,b);
}
运行结果,a=2,b=1
#include <stdio.h>
main()
{ int c;
printf("Enter m or n or h or other:");
c=getchar();
switch(c)
{ case 'm',printf("\nGood morning!\n");break;
case 'n',printf("\nGood night!\n"); break;
case 'h',printf("\nHello!\n"); break;
default,printf("\n\n"); break;
}
}
例 根据输入字母输出字符串