第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三个数,打印出最大者。