在本篇博客文章中,我们将深入探讨C语言中的if语句及其相关用法。if语句是一种用于条件判断的分支语句,它允许我们根据条件的真假来执行不同的代码块。
if语句的基本语法如下所示:
if (条件) {
// 条件为真时执行的代码块
}
在这个语法结构中,条件是一个布尔表达式,如果条件的值为真(非零),则执行if语句块中的代码。
除了 if 语句,我们还可以使用 else 语句和 else if 语句来处理条件的不同情况。else 语句在 if 条件以及 else if 条件(假设存在)均为假时执行,而 else if 语句用于在多个条件之间进行判断。
if
与else if
均需条件,从if
往下遍历条件,若所有条件不符合,执行else
后的代码。
int num = 10;
if (num > 0) {
printf("数字是正数\n");
} else if (num < 0) {
printf("数字是负数\n");
} else {
printf("数字是 0\n");
}
在这个示例中,我们根据 num 的值输出不同的结果。如果 num 大于0,我们打印"数字是正数";如果 num 小于0,我们打印"数字是负数";如果 num 等于0(不大于0且不小于0,就是0),因此我们打印"数字是 0"。
在C语言中,我们可以嵌套if语句,这意味着在一个 if 语句块内部包含另一个if语句块。这样可以实现更复杂的条件判断逻辑。
int num = 10;
if (num > 0) {
if (num % 2 == 0) {
printf("数字是正偶数\n");
} else {
printf("数字是正奇数\n");
}
} else if (num < 0) {
printf("数字是负数\n");
} else {
printf("数字是 0\n");
}
在这个示例中,我们首先判断num是否大于0,如果是,则进一步判断num是否为偶数或奇数。根据条件的不同,我们输出相应的结果。
在C语言中,else 语句总是与最近的 if 语句配对,这就导致了一个被称为"悬空 else"的问题。当我们有多个嵌套的if语句时,可能会出现 else 语句与我们预期的 if 语句不匹配的情况。
为了解决悬空 else 问题,可以使用
花括号(代码块)
来明确 if 语句的范围,从而避免 else 语句与错误的 if 语句配对。
首先请看这个示例,初学者可能发现预期的输出和实际的输出有出入。
int num = -10;
if (num > 0)
if (num % 2 == 0)
printf("数字是正偶数\n");
else
printf("数字是负数\n");
在这个示例中,初学者会下意识的根据缩进格式来判断,理所当然的认为上述代码打印"数字是负数",实际情况是什么都不会打印!!!因为else 语句总是与最近的 if 语句配对。
我们使用了花括号将 if 语句的范围明确标记出来,从而避免了悬空 else 问题。
int num = -10;
if (num > 0) {
if (num % 2 == 0) {
printf("数字是正偶数\n");
}
} else {
printf("数字是负数\n");
}
在本节中,我们将介绍C语言中常用的关系操作符。在C语言中,任何非零值都被视为真(true),而零值被视为假(false)。关系运算符的结果大致上可以认为返回的是 bool
类型的 true
或者 false
,但是,严格来说是int
类型的1
(表示真)或0
(表示假)。
C语言中的关系操作符包括以下几种:
==
:等于
!=
:不等于
>
:大于
<
:小于
>=
:大于等于
<=
:小于等于
我们可以使用这些操作符在条件判断中比较两个值的大小关系。
关系操作符的返回值类型是布尔类型,即 int
型的0或1。当关系成立时,返回1(真),否则返回0(假)。
关系操作符常常用于条件判断语句中,例如 if 语句、while 循环等。通过比较两个值的大小关系,我们可以根据条件的真假来执行不同的代码块。
下面是一个使用关系操作符的示例:
int a = 5, b = 10;
if (a == b) {
printf("a 与 b 相等\n");
} else if (a < b) {
printf("a 比 b 小\n");
} else {
printf("a 比 b 大\n");
}
在这个示例中,我们比较了变量a和b的值,并根据比较结果输出不同的结果。
条件操作符(也称为三元运算符、三目运算符)是C语言中一种简洁的条件表达式。它允许我们根据条件的真假选择不同的值。
条件操作符的语法如下所示:
条件 ? 表达式1 : 表达式2
如果条件为真,则返回表达式1的值;如果条件为假,则返回表达式2的值。
通常来讲,是可以支持多条三元运算嵌套的,然而在我看来这并不是写代码的良好习惯,可读性太差!
条件操作符提供了一种简洁的条件判断方式,它可以替代简单的 if 语句。使用条件操作符可以使代码更加简洁和易读。
下面是一个使用条件操作符的示例:
int age = 18;
char* result = (age >= 18) ? "你是成年人" : "你是未成年";
printf("%s\n", result);
在这个示例中,我们根据年龄的值选择不同的结果。如果年龄大于等于18岁,我们输出"你是成年人";否则,我们输出"你是未成年"。
逻辑操作符用于在条件判断中组合多个条件,并根据逻辑关系的真假进行逻辑运算。
C语言中常用的逻辑操作符包括以下几种:
&&
:逻辑与(AND)
||
:逻辑或(OR)
!
:逻辑非(NOT)
逻辑与操作符(&&)在两个条件都为真时返回真,逻辑或操作符(||)在两个条件中至少一个为真时返回真,逻辑非操作符(!)用于取反。
逻辑操作符具有短路运算的特性,即在某个条件已经确定的情况下,将不再计算后续的条件。
下面是一个逻辑操作符短路运算的示例:
int num = 10;
if (num > 0 && num < 100) {
printf("Number is between 0 and 100\n");
}
在这个示例中,如果 num 大于0,才会继续判断 num 是否小于100。如果 num 小于等于0,后续的条件判断将被短路,不再执行。
逻辑与
:左假则右不执行,因为一假则假,既然都是假的了,何必浪费时间往右继续判断?
逻辑或
:左真则右不执行,因为一真则真,既然都是真的了,那就不用在继续判断啦!
现在,让我们来探讨C语言中另一个重要的分支语句:switch 语句。
switch 语句是一种用于多分支选择的语句,它根据表达式的值选择不同的执行路径。
switch 语句的基本语法如下所示:
switch (表达式) {
case 值1:
// 执行语句块1
break;
case 值2:
// 执行语句块2
break;
...
default:
// 默认执行语句块
break;
}
在这个语法结构中,表达式的值将与每个 case 的值进行比较,如果匹配,则执行相应的语句块。如果没有匹配的 case,则执行 default 语句块(可选)。
下面是一个使用 switch 语句的示例:
int choice = 2;
switch (choice) {
case 1:
printf("You chose option 1\n");
break;
case 2:
printf("You chose option 2\n");
break;
case 3:
printf("You chose option 3\n");
break;
default:
printf("Invalid choice\n");
break;
}
在这个示例中,根据变量choice的值,我们选择不同的菜单项进行输出。
在 switch 语句中,case 的执行顺序是从上到下的,即匹配到的第一个 case 执行后,会继续执行后续的 case 语句块,直到遇到 break 语句或 switch 语句结束。
如果在 case 语句块中没有使用 break 语句,将会发生
case穿透
现象,即执行完一个case后,会继续执行下一个case语句块,直到遇到break语句或switch语句结束。
下面是一个"case穿透"的示例:
int num = 2;
switch (num) {
case 1:
printf("Number is 1\n");
case 2:
printf("Number is 2\n");
case 3:
printf("Number is 3\n");
default:
printf("Invalid number\n");
}
在这个示例中,如果num的值为2,将会输出"Number is 2"、"Number is 3"和"Invalid number"。这是因为没有在每个case语句块中使用break语句,导致执行顺序继续向下执行。
为了避免
case穿透
问题,我们可以在每个case语句块的末尾添加break语句,或者使用合适的控制流语句(如if语句)来控制执行流程。
switch语句在实际应用中非常常见,特别适用于根据不同的选择执行不同的操作。
例如,在菜单选择、状态机等场景中,我们可以使用switch语句来处理多个固定的选项。
下面是一个使用switch语句的示例:
int choice;
printf("Please enter your choice (1-3): ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("You chose option 1\n");
break;
case 2:
printf("You chose option 2\n");
break;
case 3:
printf("You chose option 3\n");
break;
default:
printf("Invalid choice\n");
break;
}
在这个示例中,根据用户输入的choice值,我们选择不同的菜单项进行输出。
文章转载自:顾平安
原文链接:https://www.cnblogs.com/gupingan/p/17868320.html