C语言小课堂:if选择

C语言小课堂:if选择
TANG JIAMEI今天我们来学习C语言中的 if
选择结构。
- 什么是
if
选择结构?
在C语言中, if
是一种条件控制语句,它允许程序根据某个条件的真假来决定是否执行特定的代码块。你可以把它想象成程序中的一个“决策点”:如果满足某个条件,就执行A操作;否则,就跳过A操作或者执行B操作。
if
语句是程序逻辑控制的基石,它使得程序不再是线性的,而是可以根据输入或内部状态进行动态的行为调整。
- 何时用
if
?为什么用它?
当你需要在程序中实现条件判断和分支逻辑 时,就需要使用 if
语句。
什么时候用?
根据用户输入做出不同响应:例如,如果用户输入“是”,则执行某个操作;如果输入“否”,则执行另一个操作。
验证数据有效性:例如,检查用户输入的年龄是否为正数,如果不是,则提示错误。
处理不同情况:例如,计算一个数的绝对值(如果为负数则取反,否则不变)。
实现游戏逻辑:例如,如果玩家得分达到某个阈值,则升级;如果生命值降到零,则游戏结束。
确保程序健壮性:防止除以零的错误,检查文件是否成功打开等。
为什么用它?
实现程序灵活性:让程序能够根据运行时的情况做出不同的行为,而不是固定不变。
模拟现实世界决策:现实世界中的很多决策都是基于条件的(“如果…就…”),if
语句让我们能在代码中模拟这些决策过程。
提高代码可读性和逻辑性:清晰地表达了程序的意图:“在满足A条件时执行B,否则执行C”。
与关联知识点的联系和区别:
与 switch
语句的联系与区别 :
if
语句适用于更复杂的、基于任意表达式的条件判断(例如,x > 10 && y < 20
)。它支持范围判断、逻辑组合等。
switch
语句主要用于基于单个变量或表达式的离散值进行多分支选择(例如,根据一个整数变量的值,执行不同的代码块)。它的可读性在处理大量离散值时通常更好。
通常, if
语句更为通用和灵活,而 switch
语句在特定场景下(如菜单选择)能提供更简洁的代码。
联系: if
和 switch
都是条件控制语句,用于实现分支逻辑。
区别:
与循环语句 ( for
, while
, do-while
) 的区别 :
if
语句是关于**“是否执行”**一次某个代码块。
循环语句是关于**“重复执行”**某个代码块,直到某个条件不再满足。
它们经常结合使用:在循环内部使用 if
来处理每次迭代中的特定条件。
if
选择结构是C语言乃至所有编程语言中最基本、最常用的控制结构之一,掌握它对于编写任何有意义的程序都至关重要。
- 怎么用
if
?
if
语句有几种常见的形式:
3.1. if
语句(基本形式)
语法:
if (条件表达式) {
// 当条件表达式为真(非零)时执行的代码块
}
说明:
条件表达式
:通常是一个关系表达式(如 a > b
)、逻辑表达式(如 x > 0 && y < 10
)或任何可以求值为非零(真)或零(假)的表达式。
{}
:花括号
{}
定义了一个代码块。如果
if
后面只有一条语句,可以省略花括号,但为了代码清晰和避免潜在错误,强烈建议总是使用花括号。
示例:
1 |
|
输出:
恭喜你,考试及格了!
程序继续执行...
3.2. if...else
语句
语法:
if (条件表达式) {
// 当条件表达式为真时执行的代码块
} else {
// 当条件表达式为假时执行的代码块
}
说明: if...else
结构提供了二选一的逻辑。如果条件为真,执行 if
后面的代码块;否则(条件为假),执行 else
后面的代码块。两者必选其一。
示例:
1 |
|
输出:
你还未成年,不能投票。
3.3. if...else if...else
语句(多重条件判断)
语法:
if (条件表达式1) {
// 如果条件表达式1为真,执行此代码块
} else if (条件表达式2) {
// 如果条件表达式1为假,且条件表达式2为真,执行此代码块
} else if (条件表达式3) {
// 如果前两个条件都为假,且条件表达式3为真,执行此代码块
} else {
// 如果以上所有条件都为假,执行此代码块 (可选)
}
说明:这种形式用于处理多个互斥的条件。程序会从上到下依次检查条件,一旦某个条件为真,其对应的代码块被执行,然后整个 if...else if...else
结构就会结束,跳过后续的 else if
和 else
。最后的 else
块是可选的,用于处理所有条件都不满足的情况。
示例:
1 |
|
输出:
你的成绩是 C。
3.4. 嵌套 if
语句
你可以在一个 if
或 else
块内部再包含另一个 if
语句,形成嵌套结构。
示例:
1 |
|
输出:
num1 是正数。
num2 也是正数。
注意事项:
条件表达式:非零即真,零即假。例如,if (1)
永远为真,if (0)
永远为假。
悬空 else
问题 :当存在多个 if
语句和 else
语句时, else
总是与其前面最近的未匹配的 if
匹配。使用花括号可以消除歧义。
比较运算符: ==
(等于), !=
(不等于), >
(大于), <
(小于), >=
(大于等于), <=
(小于等于)。
逻辑运算符: &&
(逻辑与), ||
(逻辑或), !
(逻辑非)。它们用于组合更复杂的条件。
掌握 if
语句是编程的入门砖,它能让你编写出有“智慧”的程序,能够根据不同的情况做出不同的反应。
💻 配套习题
第一题 (选择题)
以下关于C语言 if
语句的描述,哪一项是错误的?
A. if
语句可以根据条件表达式的真假来决定是否执行某个代码块。
B. 在 if
语句中,条件表达式的值为非零时被认为是真。
C. else
关键字总是与它最近的、未被其他 else
匹配的 if
语句配对。
D. if
语句只能判断整数类型的条件。
第二题 (填空题)
请补全下面的C语言代码,使得当变量 x
的值大于 10
且小于 20
时,程序会输出 “x在10到20之间”。
#include <stdio.h>
int main() {
int x = 15;
if (x ____ 10 ____ x ____ 20) {
printf("x在10到20之间\n");
}
return 0;
}
第三题 (代码输出题)
阅读下面的C代码,并写出其输出结果:
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
if (a > b) {
printf("A\n");
} else if (a == b) {
printf("B\n");
} else {
printf("C\n");
}
return 0;
}
第四题 (编程题)
编写一个C程序,要求用户输入一个整数。如果输入的整数是偶数,则输出 “你输入的是偶数。”;如果是奇数,则输出 “你输入的是奇数。”。
第五题 (编程题)
编写一个C程序,模拟一个简单的学生成绩评级系统。程序应接收用户输入的百分制成绩(0-100的整数),并根据以下规则输出对应的等级:
90-100:A
80-89:B
70-79:C
60-69:D
0-59:F
习题讲解
第一题 (选择题)
题目: 以下关于C语言 if
语句的描述,哪一项是错误的?
A. if
语句可以根据条件表达式的真假来决定是否执行某个代码块。
B. 在 if
语句中,条件表达式的值为非零时被认为是真。
C. else
关键字总是与它最近的、未被其他 else
匹配的 if
语句配对。
D. if
语句只能判断整数类型的条件。
答案: D
讲解:
A 选项正确:这是 if
语句的核心功能,它就是用来实现条件分支的。
B 选项正确:在C语言中,非零值被视为逻辑真(true),零值被视为逻辑假(false)。这是C语言处理布尔逻辑的方式。
C 选项正确:这是C语言中“悬空 else
”问题的规则, else
会向上匹配最近的 if
。为了避免歧义,通常建议使用花括号 {}
明确代码块。
D 选项错误: if
语句的条件表达式可以是任何能够求值为整数(0或非0)的表达式。这包括关系表达式(如 a > b
)、逻辑表达式(如 x > 0 && y < 10
),这些表达式的结果是0或1。此外,浮点数也可以作为条件表达式,例如 if (some_double_value)
,此时如果 some_double_value
为 0.0
,则为假,否则为真。因此,说它“只能判断整数类型的条件”是不准确的。
第二题 (填空题)
题目: 请补全下面的C语言代码,使得当变量 x
的值大于 10
且小于 20
时,程序会输出 “x在10到20之间”。
#include <stdio.h>
int main() {
int x = 15;
if (x ____ 10 ____ x ____ 20) {
printf("x在10到20之间\n");
}
return 0;
}
答案: >
&&
<
讲解:
x
大于 10
,所以第一个空应该填 >
。
x
小于 20
,所以第三个空应该填 <
。
题目要求 x
既要大于 10
又要小于 20
,这表示两个条件必须同时满足。在C语言中,表示“同时满足”的逻辑运算符是逻辑与 &&
。 所以完整的条件是 x > 10 && x < 20
。
第三题 (代码输出题)
题目: 阅读下面的C代码,并写出其输出结果:
#include <stdio.h>
int main() {
int a = 5;
int b = 10;
if (a > b) {
printf("A\n");
} else if (a == b) {
printf("B\n");
} else {
printf("C\n");
}
return 0;
}
答案: C
讲解:
首先,程序初始化 a
为 5
,
b
为 10
。
进入 if
语句:
第一个条件 a > b
(即 5 > 10
) 为假 (false)。
因此跳过第一个 printf("A\n");
,进入 else if
。
检查 else if
的条件 a == b
(即 5 == 10
) 为假 (false)。
因此跳过 printf("B\n");
,进入 else
。
因为前面的所有条件都为假,所以执行 else
块中的代码。
执行 printf("C\n");
。
程序输出 C
,然后换行,最后结束。
第四题 (编程题)
题目: 编写一个C程序,要求用户输入一个整数。如果输入的整数是偶数,则输出 “你输入的是偶数。”;如果是奇数,则输出 “你输入的是奇数。”。
参考代码:
1 |
|
讲解:
#include <stdio.h>
:包含标准输入输出库,以便使用 printf
和 scanf
函数。
int num;
:声明一个整型变量 num
来存储用户输入的数字。
printf("请输入一个整数: ");
:向用户显示提示信息。
scanf("%d", &num);
:从标准输入读取一个整数,并将其存储到 num
变量中。 %d
是整数的格式控制符,&num
是 num
变量的地址。
if (num % 2 == 0)
:这是核心判断部分。
num % 2
使用 取模运算符 %
来计算 num
除以 2
的余数。
如果一个整数是偶数,它除以 2
的余数总是 0
。
== 0
检查余数是否等于 0
。
printf("你输入的是偶数。\n");
:如果条件为真(即 num
是偶数),则执行此语句。
else { printf("你输入的是奇数。\n"); }
:如果条件为假(即 num
不是偶数,那么它一定是奇数),则执行 else
块中的语句。
return 0;
:表示程序成功执行。
第五题 (编程题)
题目: 编写一个C程序,模拟一个简单的学生成绩评级系统。程序应接收用户输入的百分制成绩(0-100的整数),并根据以下规则输出对应的等级:
90-100:A
80-89:B
70-79:C
60-69:D
0-59:F
参考代码:
1 |
|
讲解:
#include <stdio.h>
:标准输入输出库。
int score;
:声明一个整型变量 score
来存储用户输入的成绩。
用户输入:通过 printf
提示用户,并使用 scanf
读取成绩。
成绩有效性检查:
if (score < 0 || score > 100)
:这是一个关键的边界条件检查。使用逻辑或 ||
运算符,如果成绩小于0或者大于100,都认为是无效输入,并给出提示。
重要性:这个检查应该放在最前面,因为它处理的是所有后续逻辑的前提——有效的输入。
多重 else if
结构:
else if (score >= 90)
:如果成绩大于或等于90,则评为A。由于 if...else if
的执行特性,一旦这个条件满足,后续的 else if
块就不会再被检查和执行。
else if (score >= 80)
:如果上面的条件(score >= 90
)不满足,并且 score
大于或等于80,则评为B。这意味着 score
的实际范围是 80 到 89。
以此类推, score >= 70
意味着 70 到 79,score >= 60
意味着 60 到 69。
else { printf("你的等级是: F\n"); }
:如果前面所有的 if
和 else if
条件都不满足,那么成绩一定在 0 到 59 之间(因为我们已经排除了小于0的无效成绩),所以评为F。
return 0;
:程序正常退出。
这个题目很好地展示了 if...else if...else
结构在处理多重互斥条件时的应用,以及在编程中进行输入验证的重要性。
希望这些讲解和习题能帮助你更好地理解和掌握C语言的 if
选择结构!继续努力,编程的世界充满乐趣!🚀