第4章 选择结构[视频讲解]
4.1 语句分类
视频二维码(扫码观看)
(1)表达式语句:表达式的后面加一个分号。
(2)空语句:只有一个分号,作为语句结束符。
(3)复合语句:“{}”把若干语句组合在一起,又称语句块。
{
int a=0,b=1,sum;
sum=a+b;
printf("%d",sum);
}
(4)函数调用语句:printf("This is a function call");
(5)控制语句,共有9种,即:
①if语句
②switch语句
③while语句
④do-while语句
⑤for语句
⑥break语句
⑦continue语句
⑧goto语句
⑨return语句
4.2 if语句构成的选择结构
视频二维码(扫码观看)
(1)if语句的一般形式:
if(<表达式>) <语句1>;
if (<表达式>) <语句1>;
else <语句2>;
【注意】
①if后面的<表达式>一定要有括号;
②if和else同属于一个if语句,程序中不可以没有if而只有else;
③if语句与else语句不可能同时执行;
④<语句1>和<语句2>一定要以分号结束;
⑤if语句的表达式可以是任意类型的合法的表达式。
【例1】输入两个数,分别放入x和y中,若两数不相等,则输出其中的大数;若两数相等,则输出字符串x==y和x的值。
#include <stdio.h>
main()
{
int x,y;
printf("Enter x&y:\n");
scanf("%d%d",&x,&y);
printf("x,y:%d %d\n",x,y);
if(x > y)printf("x=%d\n",x);
if(y < x)printf("y=%d\n",y);
if(x == y)printf("x==y %d\n",x);
}
【例2】输入三个整数,分别放在变量a、b、c中,然后把输入的数据重新按由小到大的顺序放在变量a、b、c中,最后输出a、b、c中的值。
#include <stdio.h>
main()
{
int a,b,c,t;
printf("input a,b,c:");
scanf("%d %d %d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
if(a>b)/*如果a比b大,则进行交换,把小的数放入a*/
{
t=a;
a=b;
b=t;
}
if(a>c)/*如果a比c大,则进行交换,把小的数放入a*/
{
t=a;
a=c;
c=t;
}/*至此a、b、c中最小的数已放入a中*/
if(b>c)/*如果b比c大,则进行交换,把小的数放入b*/
{
t=b;
b=c;
c=t;
}/*至此a、b、c中的数已按由小到大的顺序放好*/
printf("%d,%d,%d\n",a,b,c);
}
【例3】输入两个数,分别赋给x和y,输出其中的大数。
#include <stdio.h>
main()
{
int x,y;
printf("Enter x&y:");
scanf("%d%d",&x,&y);
printf("x,y:%d %d\n",x,y);
if(x > y)
printf("max=x=%d\n",x);
else
printf("max=y=%d\n",y);
printf("* * end * *\n");
}
(2)if语句的嵌套形式
内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。
①内嵌的if语句带有else
if (<表达式>)
if (<表达式>) <语句1>;
else <语句2>;
else <语句3>;
②内嵌的if语句不带else
if (<表达式>)
{
if (<表达式>) <语句1>;
}
else <语句2>;
【例4】根据输入的学生成绩给出相应的等级,大于或等于90分以上的等级为A,60分以下的等级为E,其余每10分为一个等级。
#include <stdio.h>
main()
{
int g;
printf("Enter g:");
scanf("%d",&g);
printf("g=%d:",g);
if(g >= 90) printf(" A\n");
else if(g >= 80) printf(" B\n");
else if(g >= 70) printf(" C\n");
else if(g >= 60) printf(" D\n");
else printf(" E\n");
}
4.3 条件表达式构成的选择结构
视频二维码(扫码观看)
条件表达式:<表达式1> ? <表达式2> : <表达式3>
含义:首先计算<表达式1>的值,若为非零,则表达式的值为<表达式2>,否则表达式的值为<表达式3> 。
例如:max=(a>b)?a:b/* 将a、b两数中的较大值送给max*/
4.4 switch语句构成的选择结构
视频二维码(扫码观看)
switch语句的一般形式是:
switch (<表达式>)
{
case <常量表达式1> : <语句序列1>;
case <常量表达式2> : <语句序列2>;
…
case <常量表达式n> : <语句序列n>;
default:<语句序列n+1>;
}
【注意】
①case后面必须是常量,不能是包含变量的表达式;
②case和常量之间要有空格;
③case后的语句可以省略;
④break语句。
【例5】根据输入的学生成绩给出相应的等级,大于或等于90分以上的等级为A,60分以下的等级为E,其余每10分为一个等级。
#include <stdio.h>
main()
{
int g;
printf("Enter g:");
scanf("%d",&g);
printf("g=%d:",g);
switch(g/10)
{
case 10:
case 9:printf(" A\n");break;
case 8:printf(" B\n");break;
case 7:printf(" C\n");break;
case 6:printf(" D\n");break;
default:printf(" E\n");break;
}
}
4.5 语句标号和goto语句
视频二维码(扫码观看)
一般形式是:goto:无条件转向语句
如:
flag:printf("End!");
… …
goto flag;
4.6 习题解析
1下列运算符中优先级最高的算符是( )。
A.!
B.%
C.-=
D.&&
2为表示关系:x≥y≥z,应使用的C语言表达式是( )。
A.(x>=y)&&(y>=z)
B.(x>=y)and(y>=x)
C.(x>=y>=z)
D.(x>=y)&(y>=z)
3将下列数学式改写成C语言的关系表达式或逻辑表达式。
A.a=b或a<c
B.|x|>4
4当a=1,b=2,c=3时,以下if语句执行后,a、b、c中的值分别为?
if(a>c) b=a;a=c;c=b;
5编写程序,输入a、b、c三个数,打印出最大者。