• if 语句
  • switch 语句

if语句

语法结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(表达式)
语句;
//或者
if(表达式)
语句;
else
语句2;
//多分支
if(表达式)
语句;
else if(表达式2)
语句2;
else
语句3;

若表达式为真,则语句执行

在C语言中,0表示假,非0表示真

例子:

1
2
3
4
5
6
7
8
9
int main()
{
int age = 10;
if (age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}

不过这种写法只能执行一条语句

所以我们可以使用以下的写法,使用{}

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
int main()
{
int age = 180;
if (age<18)
{
printf("少年\n");
printf("少年\n");
}
else if (age >= 18 && age <= 26)
{
printf("青年\n");
printf("青年\n");
}
else if (age >= 26 && age <= 40)
{
printf("壮年\n");
printf("壮年\n");
}
else if (age >= 40 && age <= 60)
{
printf("中年\n");
printf("中年\n");
}
else if (age >= 60 && age <= 120)
{
printf("老年\n");
printf("老年\n");
}
else
{
printf("老不死\n");
printf("老不死\n");
}
return 0;
}

悬空else

请问以下代码打印输出什么?

1
2
3
4
5
6
7
8
9
10
11
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("111\n");
else
printf("222\n");
return 0;
}

答案:不打印

因为else会匹配最近的if语句,而不是看起来和它对齐的语句

所以为了代码的逻辑清晰,最好适当使用{}

改正:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
{
printf("111\n");
}
}
else
{
printf("222\n");
}
return 0;
}

练习

1.判断一个数是否为奇数

2.输出1-100之间的奇数

答案:

例题一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1.判断一个数是否为奇数
int main()
{
int a = 0;
scanf("%d", &a);
if (a % 2 == 1)
{
printf("%d是奇数\n", a);
}
else
{
printf("%d不是奇数\n", a);
}
return 0;
}

例题二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main()
{
int a = 1;
while (a <= 100)
{
if (a % 2 == 1)
{
printf("%d是奇数\n", a);
}
a++;
}
//或者
for ( int i = 1; i <= 100; i++)
{
if (i % 2 == 1)
{
printf("%d是奇数\n", i);
}
}

//或者
for (int i = 1; i <= 100; i+=2)
{
printf("%d是奇数\n", i);
}

return 0;
}

switch 语句

switch语句常用于多分支的情况。

比如

输入1 ,输出星期一

输入2,输出星期二

输入3 ,输出星期三

输入4 ,输出星期四

输入5 ,输出星期五

输入6 ,输出星期六

输入7 ,输出星期天

如果使用if语句的话,过于复杂了

所以我们可以使用switch语句

语法结构:

1
2
3
4
5
6
switch(整型表达式)
{
//语句项
case 整型常量表达式;
语句;
}

而在switch语句中,我们没有办法直接实现分支

所以需要运用到break

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期七\n");
break;
default:
break;
}
return 0;
}

那么我们需要输入15,输出工作日;输入67,输出休息日,该怎么做呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
break;
}
return 0;
}

default 子句

switch语句中,如果表达的值和所有的case标签都不匹配

我们可以加上一条default子句

switch表达式的值不匹配所有的case标签的值时,执行default子句后的语句;

每个switch语句只能有一条default子句

但它可以出现在语句列表的任意位置

练习

请问以下代码打印输出什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:m++;
case 2:n++;
case 3:
//switch允许嵌套使用
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);
return 0;

答案:m = 5,n = 3

注意:break只是终止当前switch语句