跳转至

3.1 if

若不希望else与最近的if语句配对,可以用大括号{ }将该if语句括起来

3.2 Switch Case

switch语句是一种在多个可能情况下选择执行的控制流语句。它通常与case语句一起使用。

语法

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
switch (表达式) {
  case 值1:
    // 代码块1
    break;
  case 值2:
    // 代码块2
    break;
  // 可以有多个case
  default:
    // 如果上面的case都不匹配时执行的代码块
}
  • 一定要注意有没有break
  • 若switch中的表达式的值不是整数则自动取整
  • case和default后的语句可以是复合语句,且不用加{ }
  • 常量表达式的语句可以省略,多个case共用一组执行语句
  • default可以置于case之间,default后case中的语句会继续执行
    C
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    int main()
    {
        int i;
        scanf("%d",&i);
        switch(i)
        {
            case 1:
            printf("1");
            break;
            default:
            printf("2");
            case 2:
            printf("3");
            break;
            case 3:
            printf("4");
            break;
        }
    }
    
  • switch无优先级,if有优先级

做题总结

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>
int main()
{
    int x = 5;
    if(x++>5)
    printf("%d",x);
    else
    printf("%d",x--);
    printf("%d",x);
}
注意:极其重要!!在if(x++>5)中,x已经加了1了!在后续printf中的x--中,先输出x,再将x的值减1。

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
    int k=5,n=0;
    while(k>0)
    {
        switch (k)
        {
            default:break;
            case 1:n+=k;
            case 2:
            case 3:n+=k;
        }
        k--;
    }
    printf("%d",n);
}

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <stdio.h>
int main()
{
    int a=1,b=2,c=3,d=0;
    if(a==1&&b++==2)
        if(b!=2||c--!=3)
            printf("%d,%d,%d\n",a,b,c);
        else if("%d,%d,%d\n",a,b,c);
    else printf("%d,%d,%d\n",a,b,c);
    //答案是1,3,3
}
这是因为b!=2之后的语句被||短路了。

C
1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
    int a=0,b=0,c=0,d=0;
    if(a=1)b=1;c=2;
    else d=3;
    printf("%d %d %d %d",a,b,c,d);
}
此处会编译错误,因为else前无与之对应的if。
C
1
2
3
4
5
6
7
case 1:****//正确
case 2+1:**//正确
case c:****//错误
case 2.0:**//错误

switch(a+b)//正确
switch(a==1)//正确

C
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>
int main()
{
    int a=0,b=1,c=0,d=20;
    if(a) d=d-10;
    else if(!b)
    if(!c)d=15;
    else d=25;
    printf("%d",d);
}
注意:相当于else if(!b)     { if(!c)d=15;     else d=25; }

C
1
2
3
if(a>b>c)
相当于
if((a>b)>c)