0%

2级联合嵌套的判断

2级联合嵌套的判断


示例

找出三个数中的最大

  • 如果要求输入三个整数,输出其中最大的,应该怎么做?

101118390154_03-1

如果当大括号只有一句话的时候,是可以省略大括号

也可以写为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int a.b.c;
scanf("%d %d %d",&a,&b,&c);

int max=0;

if (a>b)
if (a>c)
max = a;
else
max = c;
else
if (b>c)
max = b;
else
max = c;

printf("The max is %d\n",max);

但是这样写会冒有一定的风险,我所想的,和计算机还有别人看到代码,是不是所想一样的

嵌套的判断

  • 当if的条件满足或者不满足的时候要执行的语句也可以是一条if或if-else语句,这就是嵌套的if语句
1
2
3
4
5
if ( code==READY )
if ( count < 20 )
printf("一切正常\n");
else
printf("继续等待\n");

else的匹配

  • else总是和最近的那个if匹配
1
2
3
4
5
6
7
8
9
10
11
const int REDAY = 24;
int code = 0;
int count = 0;

scanf("%d %d", &code, &count);

if ( code==READY ) {
if ( count < 20 )
printf("一切正常\n");
else
printf("继续等待\n");

输入24 – 40

第一步 code==REDAY 会进入 if 里,

再判断 count < 20,已经超过,会离开整个if

但是有大括号的原因,会离开整个if,不会进入下一步else

这就是else的匹配


缩进

  • 缩进格式不能暗示else的匹配
1
2
3
4
5
if (gameover == 0 ){
if (player2move == 2)
printf("Your turn\n");
} else
printf("GAME OVER\n");

不加上 大括号,else 就会和最近的if进行匹配,而发生错误

tips

  • 在if或else后面总是用{}
  • 即使只有一条语句的时候

求分段函数

f(x) = -1;x<0

​ 0;x=0

​ 2x; x >0

1
2
3
4
5
6
7
if ( x < 0 ) {
f = -1;
} else if( x == 0 ) {
f=0;
} else {
f= 2* x;
}

流程图

image-20201013162257715

级联的if-else if

  • if ( exp1 )
    st1;
    else if ( exp2 )
    st2;
    else
    st3;

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int x;

scanf("%d",&x);

int f=0;
if ( x<0 ) {
f = -1;
} else if ( x ==0 ) {
f = 0;
} else if ( x >5 ) {
f = 2 * x;
} else {
f = 3*x;
}

printf("%d\n",f);

return 0;

如果else 后面都需要一个大括号,再有一个对应结尾的大括号,

随着分段函数函数各种条件的增加,代码会越来越往右偏移

所以把else 后面的大括号删除掉,成为else if

清楚美观


两段代码区别image-20201013162808121

左边是灵活的单一出口,不局限于printf

而右边就写死了,只能做一件事情给别人看,只能printf