简介:
C语言是结构化的程序设计语言,包括顺序结构,分支结构以及循环结构。顺序结构就是从上到下以此执行,分支结构就是会选择一条支路执行下去,而循环结构会在相应的循环体中不断执行直到退出循环为止。C语言的执行逻辑就是从上到下以次执行(除非遇到分支或循环),分支和循环可以嵌套使用。本文将介绍分支的使用
分支语句
1 if else语句
1.1 if
if ( 表达式 )
语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假,非0表真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果不是0,则语句执行。
判断一个数是否是素数,代码如下:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
1.2 else
if ( 表达式 )
语句1
else
语句2
输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
1.3 分支中包含多条语句
默认在 if 和 else 语句中默认都只控制⼀条语句
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
return 0;
}
输⼊的值不管是>=18还是<18,"可以谈恋爱了"都会打印在屏幕上
if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了,
if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真
假,都会被执行。
代码修改如下:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else
{
printf("好好学习\n");
}
return 0;
}
1.4 嵌套if else
在 if else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。
比如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。
代码如下:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
比如,输⼊⼀个⼈的年龄,如果年龄<18岁,打印"少年",如果年龄在18岁⾄44岁打印"⻘年",如果年龄在45岁⾄59岁打印"中⽼年",如果年龄在60岁⾄89岁打印"⽼年",如果90岁及以上打印"⽼寿星"。代码实现如下:
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 90)
printf("老寿星\n");
else if (age >= 60)
printf("老年\n");
else if (age >= 45)
printf("中老年\n");
else if (age >= 18)
{
printf("青年\n");
}
else
printf("少年\n");
return 0;
}
1.5 悬空else问题
如果有多个 if 和 else语句(没有用花括号括起来的话) , else 总是跟最接近的 if 匹配
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
很多人可能会认为输出haha,但***运行代码之后的结果是啥也没有***,如下图所示
这就是悬空 else 的问题,如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近
的 if 匹配。为了实现效果可以将代码改成下面这样
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
{
printf("haha\n");
}
return 0;
}
可以看到这样写就可以将haha很好的打印出来,所以不要吝啬花括号{}的使用,这个不容易造成误解也便于理解。
2 switch case语句
C语言还提供了 switch 语句来实现分⽀结构。switch语句是⼀种特殊形式的if else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
其中expression是整型表达式,value1以及value2都是整形常量或整形常量表达式。
例如:输入任意⼀个整数值,计算除2之后的余数:
#include<stdio.h>
int main()
{
//输⼊任意⼀个整数值,计算除2之后的余数
int a = 0;
scanf("%d", &a);
switch (a % 2)
{
case 0:
printf("余数为%d", 0);
break;
case 1:
printf("余数为%d", 1);
break;
}
return 0;
}
case和后边的数字之间必须有空格,每⼀个case语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。
如果没有break,则就会打印如下所示
switch 语句也是分支效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch 语句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执行,有可能执⾏其他 case语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2 中的语句。所以在 switch 语句中 break 语句是⾮常重要的,能实现真正的分支效果。
switch语句中的default
在使用switch 语句的时候,我们经常可能遇到⼀种情况,比如 switch 后的表达式中的值无法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加入default子句例如,输入1-5,输出的是“工作日”,输入6-7,输出“休息日”
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执行default 子句
#include <stdio.h>
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:
printf("输入错误\n");
}
return 0;
}
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满足实际需求的就可以,不过通常是把 default 子句放在最后处理的。
# 总结:
本文主要介绍了if else的语法规则,一些基本用法和例子,还介绍了switch case的语法规则,一些基本用法以及例子,这两者也是可以嵌套使用的。如果有什么不足错误之处,欢迎大家批评指正。