前言
编程的目的是解决生活中的实际问题,而生活中的的任何问题,在计算机中都可以抽象成顺序结构,选择结构和循环结构或者它们的组合,C语言是结构化的程序设计语言,本篇文章就介绍了C语言中的选择结构。
选择结构
在生活中,我们会遇到各种各样的选择,而在计算机中,很多时候也是一样的,计算机同样也会面临选择,在C语言中,我们可以使用if和switch语句来实现分支结构(选择结构)。
if语句
1.if语句的语法形式
if(表达式)
语句
在C语言中0表示假,非0表示真。
如果表达式的结果为真,则执行if下的语句,否则则不执行;
例子:判断一个数能否被3整除
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);//输入一个数
if (num % 3 == 0)//判断能否被3整除
printf("%d 能被3整除\n", num);
return 0;
}
2.if...else...
在生活中,会遇到这样一种情况,即一件事只有两可能,或者说只有两种结果,比如抛硬币,不是正面就是反面。那么在C语言中如何表示一件事的两种结果呢?这里就可以使用if...else...语句。
if(表达式)
语句1
else
语句2
如果表达式为真,则执行语句1,否则执行语句2;
例如:判断一个数是否大于3
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);//输入一个数
if (num > 3)//判断是否大于3
printf("%d 比3大\n", num);
else
printf("%d 比3小或等于3\n", num);
return 0;
}
3.分支中包含多条语句
C语言中,if和else默认只控制一条语句,如果要让它们控制多条语句,则需要加上{};
例子:判断是否成年
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);//输入一个数表示年龄
if (age > 18)//判断是否大于18
{
printf("年龄为%d\n", age);
printf("成年了,可以饮酒");
}
else
{
printf("年龄为%d\n", age);
printf("未成年,不能饮酒");
}
return 0;
}
4.多重判断与嵌套if
在解决问题的时候,会遇到有些事有多个结果,在C语言中,else能与if连用,构成else if,达到多重判断的效果。
例子:判断一个数是正数,负数,还是0
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);//输入数字
if (num == 0)
printf("输⼊的数字是0\n");
else if (num > 0) //else if多重判断
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
在这个问题中,if可以看作是嵌套在else之下,达到的效果和以下代码相同
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);//输入数字
if (num == 0)
printf("输⼊的数字是0\n");
else
{
if (num > 0)
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
}
return 0;
}
除了上述例子,if语句在使用时也可以嵌套多个if,有了嵌套if语句,就可以完成更多复杂逻辑的判断。
注意事项
如果出现多个if和一个else,若没有{},else默认与最近的if匹配。
switch语句
1.switch语句的语法形式
switch (表达式)
{
case 整形常量1:语句1
case 整形常量2:语句2
default: 语句3
}
从语法形式上就可以看出,switch语句在条件有多个结果的时候更加易用,可读性更强。
需要注意的是,switch语句中的表达式必须是整形表达式,case后的值是整形常量,且与case用空格隔开。
2.switch语句中的break
首先来看以下代码:
判断一个数除以3的余数
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
return 0;
}
在这个代码中,每个case后的语句中都带有break,它的作用是什么呢?
我们将以上代码中的break去掉,看下执行效果;
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n % 3)
{
case 0:
printf("整除\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
首先输入3
会发现得到的结果很奇怪,为什么会得出这样的结果?
事实上,在C语言的switch语句中,case可以看作一个入口,在上述例子中,由于3除以3等于0,也就是说会从case 0进入swtich语句,但由于没有break,在执行完case 0之后的语句后,并不会结束switch语句,而是继续执行,这就是为什么输入3之后把所有的语句都执行了一遍。
所以,当我们想实现选择结构的时候,大部分情况需要在每一个语句的后面加上break;
当然,并不是所有程序都需要在switch后面加上break,这要视待解决的问题而定。
3.switch语句中的default
假如现在有一个抽奖活动,抽到数字1,2,3分别可以获得一等奖,二等奖和三等奖,其余的数字都无法获奖。要描述这种情景,就需要把除1,2,3以外的数字都归为一类,这里就可以使用switch语句中的default子句。
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);//输入
switch (n)
{
case 1:
printf("一等奖\n");
break;
case 2:
printf("二等奖\n");
break;
case 3:
printf("三等奖\n");
break;
default:
printf("谢谢参与\n");
break;
}
return 0;
}
在上述代码中,default用于描述n不匹配所有case的情况,需要注意的是,虽然大部分情况下都把default语句放置在最后,但其实default语句可以和case语句是没有顺序关系的。
总结
在遇到一件事有多个结果时,需要用到选择结构,在平时编程中,if语句使用的频率很高,但switch语句由于其表达式必须时整形表达式,且使用并不特别方便,因此只在分支很多,且能够私用整形表达式时使用。
plus:写博客真的不是一件简单的事,希望自己能够坚持下去。