C语言是一种结构化的程序设计语言,这里的结构指顺序结构、分支结构、循环结构。我现在要讲的就是分支循环。想要实现分支循环我们可以使用 if 语句和 switch 语句。
1.if 语句
1.1 if
以下是 if 语句的语法形式:
if ( 表达式 )
语句
表达式成立,为真;表达式不成立,为假,则语句不执行。
举个例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("你今年%d岁,是成年人", age);
return 0;
}
在C语言中,0为假,非0为真,如果表达式的结果是0的话,则语句不执行,表达式结果如果不为0,则语句执行。
1.2 else
在上面举了一个例子来判断是否成年了,如果大于或等于18岁就是成年了,反之则是未成年。要怎样表示出来呢?
这时就需要 if…else…语句了,形式如下:
if (表达式)
语句1
else
语句2
例子:
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("你今年%d岁,是成年人", age);
else
printf("你今年%d岁,是未成年人", age);
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;
}
1.4 嵌套 if
在 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;
}
再比如:
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if (num > 0)
{
if (num % 2 == 0)
printf("偶数\n");
else
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;
}
为什么呢?
如果将代码改成下面这样会更加容易理解:
#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;
}
带上适当的大括号会使代码的逻辑更加清晰,所以大家以后在写代码的时候要注意括号的使用,让代码的可读性更高。
2. switch语句
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
2.1 if语句和switch语句的使用对比
例子:输入任意一个整数值,计算除3之后的余数。
如果使用 if 语句完成是下面这样的效果:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%3 == 0)
printf("整除,余数为0\n");
else if(n%3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
如果使用 switch 语句改写的话是这样子的:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
在上述的代码中,我们要注意: case 和后面的数字之间必须有空格。每一个 case 语句中的代码执行完成后,需要加上 break,才能跳出这个switch 语句。
2.2 switch 语句中的 break
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
我们测试一组,结果如下:
2.3 switch 语句中的 default
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
再举个例子:输入1~7这7个数字,输入1就输出星期一,输入2就输入星期二……,如果输入的数字不在1~7的范围内就输出“输入错误”这四个字。
#include <stdio.h>
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:
printf("输入错误\n");
break;
}
return 0;
}