选择语句是C语言编程中的基本概念,他们允许我们在特定的条件下执行不同的操作。下面,我们就来深入探究一下C语言中的选择语句的使用方法与具体实例。

一.逻辑运算符:

在学习选择语句和循环语句之前,我们首先要了解C语言为我们提供的三种逻辑运算符:逻辑与(&&)、逻辑或(||)、逻辑非(!)。

1.逻辑与(&&)

对于逻辑与(&&)运算符来说,如果两个条件都为真,则该表达式返回真(1),否则返回假(0)。例如表达式:(x>=10&&y<=20),会先判断x是否大于等于10,如果该条件为真,才会判断y是否小于等于20。若两个条件均成立,该表达式才会返回真(1),其余均返回假(0)。

2.逻辑或(||)

对于逻辑或(||)运算来说,它用于判断其中一个条件是否为真。如果两个条件中有一个以上为真,则表达式返回真(1),否则返回假(0)。例如表达式 :(x==0||y==0)会判断x是否等于0,或者判断y是否等于0。只要其中一个条件成立,整个表达式就会返回真。

3.逻辑非(!)

逻辑非运算符用于取反给定条件的值。如果条件为真,则逻辑非会返回假(0),如果条件为假,则逻辑非会返回真(1)。例如,表达式!(x>5)会判断x是否小于等于5,如果x 小于等于5,则该表达式返回真(1)。

4.逻辑现短路象

即如果逻辑与运算符中的第一个条件为假,则不会再判断第二个条件;同样的是,如果逻辑或运算符中的第一个条件为真,则不会再判断第二个条件。这种特性我们成为逻辑短路现象。利用这种现象,我们可以提高程序的执行效率。

二.选择语句:

首先,我们我们从选择语句开始,C语言为我们提供了两种选择语句,这两种语句分别是if语句和switch-case语句。

1.if语句
(1)if语句的基本语法

首先,我们我们从选择语句开始,C语言中最常见的选择语句是if语句,if语句可以根据不同条件执行不同区域的代码块。

下面演示C语言中if语句的基本语法:

if(condition){statement1;}else{statement2;}

其中,如果condition条件为真,则执行statement1语句,否则执行statement2语句。

(2)if语句的级联

我们在程序设计中,通常使用级联的if语句来描述多路分支,比如说我们要判断一个整数x是正数、负数还是零:

下面是级联if语句的演示代码:

#includeint main(){int x = 0;printf("输入一个整数x:\n");scanf("%d", &x);if (x < 0) {printf("x是负数\n");}else if (x == 0) {printf("x是0\n");}else {printf("x是正数\n");}return 0;}
(3)if语句的嵌套

在程序设计中,我们可以通过多个if语句的嵌套实现多个数据的筛选。例如判断三个数字a,b,c的大小关系,并按照从大到小顺序排列。

#includeint main(void){int a,b,c;printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);if(a>b){if(a>c){if(b>c){ printf("从小到大排列为:%d,%d,%d",c,b,a); }else{printf("从小到大排列为:%d,%d,%d",b,c,a);}}else{printf("从小到大排列为:%d,%d,%d",b,a,c);}}else{if(c>b){printf("从小到大排列为:%d,%d,%d",a,b,c);}else{if(a>c){printf("从小到大排列为:%d,%d,%d",c,a,b);}else{printf("从小到大排列为:%d,%d,%d",a,c,b);}}} return 0;}
2.switch-case语句
(1)switch-case语句的基本语法

在C语言中,switch-case语句用于多个条件的选择执行。以下是一个简单的switch-case语句的例子:

switch (exp) {case value1:statement1;case value2:statement2;defaule:statement3;}

在上述示例中,根据表达式exp的不同值,执行相应的case分支。如果找不到相应的case分支,则执行default分支。

需要注意的是,switch后面的exp必须为整形变量,case后面的值,必须为整形常量表达式。

练习:输入一个数字,计算除以3后的余数,倘若能整除,则输出“整除”

#includeint main(){int n = 0;printf("输入一个数:");scanf("%d", &n);int m = n % 3;switch (m) {case 1:printf("余数是%d\n",m);break;case 2:printf("余数是%d\n", m);break;default:printf("整除\n");break;}return 0;}

输出试例:

(2)switch-case语句中的break语句

在上面的练习中,如果我们去掉其中的break语句,会发生什么呢?

测试一组结果:

我们发现7除以3的余数本来为1,结果却多出了两行。这也就说明了当输入7时,case1、case2和default语句后的内容均被执行。

原因是switch语句具有分支效果,倘若没有break语句,程序会由上至下的执行所有的case语句和default语句,只有加上break,才会跳出循环,让switch语句结束。

需要注意的是,在switch语句中的case语句与default语句并没有特定的顺序要求,不过我们一般把default语句放在最后。