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 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 (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
语句