知识点精讲
一、if语句基本语法
if语句是C语言最基础的分支结构,遵循先判断条件,后执行对应分支的规则,核心用于实现"条件性执行"逻辑,头文件仅需stdio.h(输入输出时)。
1. 单分支if语句(满足条件才执行)
基本格式:
// 单分支标准格式
if (条件表达式) {
// 分支体:条件为真时执行的代码
}
// 条件为假时,直接跳过分支体
2. 双分支if-else语句(二选一执行)
基本格式:
// 双分支标准格式
if (条件表达式) {
// 分支1:条件为真时执行
} else {
// 分支2:条件为假时执行
}
3. 多分支if-else if-else语句(多选一执行)
基本格式:
// 多分支标准格式
if (条件表达式1) {
// 分支1:条件1为真时执行
} else if (条件表达式2) {
// 分支2:条件2为真时执行
} else if (条件表达式3) {
// 分支3:条件3为真时执行
} else {
// 默认分支:所有条件都为假时执行
}
| 组成部分 |
要求 |
示例 |
高频考点 |
| 条件表达式 |
布尔型(非0为真,0为假) |
score >= 60、num % 2 == 0、a > b && a > c |
关系运算符(>=/<=/==/!=)和逻辑运算符(&&/||/!)的正确使用 |
| 分支体 |
单语句/复合语句 |
{ printf("及格"); }、printf("偶数"); |
多条语句必须用{}包裹,否则仅第一条属于分支体 |
| else分支 |
可选,与最近的if匹配 |
else { printf("不及格"); } |
else不能单独存在,必须紧跟if/else if |
#include
int main() {
// 示例:单分支if(判断是否为正数)
int num = 15;
if (num > 0) {
printf("%d是正数\n", num);
}
// 示例:双分支if-else(判断奇偶)
if (num % 2 == 0) {
printf("%d是偶数\n", num);
} else {
printf("%d是奇数\n", num);
}
// 示例:多分支(成绩等级判断)
int score = 85;
if (score >= 90) {
printf("成绩等级:优秀\n");
} else if (score >= 80) {
printf("成绩等级:良好\n");
} else if (score >= 60) {
printf("成绩等级:及格\n");
} else {
printf("成绩等级:不及格\n");
}
return 0;
}
执行流程:
1. 计算条件表达式的值 → 2. 值为真执行对应分支体 → 3. 执行完毕后跳出整个if结构 → 4. 值为假则判断下一个else if(或执行else/跳出)
二、if语句的嵌套使用
在if/else分支体中嵌套另一个if语句,用于处理多层条件判断,是中职考试高频考点。
#include
int main() {
// 嵌套if:判断是否为正数且为偶数
int num = 18;
if (num > 0) {
printf("%d是正数\n", num);
if (num % 2 == 0) {
printf("%d还是偶数\n", num);
} else {
printf("%d是奇数\n", num);
}
} else if (num < 0) {
printf("%d是负数\n", num);
} else {
printf("输入的是0\n");
}
return 0;
}
嵌套规则(高频考点):
1. 嵌套层级要清晰,建议用缩进区分(4个空格/1个Tab)
2. else始终与最近的未匹配的if配对(就近原则)
3. 可用{}强制改变else的匹配关系
// 易错示例:else的就近匹配
#include
int main() {
int a = 1, b = 2;
if (a == 0)
if (b == 2)
printf("A\n");
else // 实际匹配内层if,而非外层if
printf("B\n");
// 输出:无(因为a!=0,内层if不执行,else也不执行)
// 修正:用{}明确匹配关系
if (a == 0) {
if (b == 2)
printf("A\n");
} else {
printf("B\n");
}
// 输出:B
return 0;
}
三、if语句常见错误(高频考点)
- 条件表达式错误:将==写成=(赋值运算符),如if (score = 60) 永远为真
- 缺少{}:多语句分支体未用{}包裹,仅第一条语句生效
- else单独存在:else没有对应的if,语法错误
- 嵌套匹配错误:未用{}控制else的匹配对象,逻辑出错
- 多分支条件顺序错误:如先判断score>=60再判断score>=90,导致90分也判定为及格
// 错误示例1:条件表达式用=代替==
#include
int main() {
int score = 50;
if (score = 60) { // 赋值操作,score被改为60,条件永远为真
printf("及格\n");
} else {
printf("不及格\n");
}
// 错误输出:及格(实际score=50应不及格)
return 0;
}
// 错误示例2:多分支条件顺序错误
#include
int main() {
int score = 95;
if (score >= 60) {
printf("及格\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 90) {
printf("优秀\n");
}
// 错误输出:及格(实际应输出优秀)
return 0;
}
四、if与条件运算符(拓展考点)
简单的双分支if-else可简化为条件运算符(?:),考试中常考转换。
| if-else形式 |
条件运算符形式 |
说明 |
| if (a > b) max = a; else max = b; |
max = (a > b) ? a : b; |
条件?表达式1:表达式2 |
| if (num%2==0) printf("偶数"); else printf("奇数"); |
printf("%s", (num%2==0) ? "偶数" : "奇数"); |
表达式结果作为函数参数 |
例题精选
例题1:if单分支(判断是否成年)
输入年龄,使用单分支if判断是否成年(≥18岁),掌握基础条件判断。
#include
int main() {
int age;
printf("请输入你的年龄:");
scanf("%d", &age);
if (age >= 18) {
printf("你已成年,可以独立承担民事责任\n");
}
printf("程序执行完毕\n");
return 0;
}
运行示例1:
请输入你的年龄:20
你已成年,可以独立承担民事责任
程序执行完毕
运行示例2:
请输入你的年龄:16
程序执行完毕
例题2:if-else双分支(判断奇偶)
输入整数,使用双分支判断奇偶性,是中职考试最基础的if考点。
#include
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数\n", num);
} else {
printf("%d 是奇数\n", num);
}
return 0;
}
运行示例1:
请输入一个整数:28
28 是偶数
运行示例2:
请输入一个整数:-15
-15 是奇数
例题3:if-else if-else多分支(成绩等级)
输入0-100的成绩,判断等级(优秀/良好/中等/及格/不及格),高频考点。
#include
int main() {
int score;
printf("请输入成绩(0-100):");
scanf("%d", &score);
if (score >= 90 && score <= 100) {
printf("成绩等级:优秀\n");
} else if (score >= 80 && score < 90) {
printf("成绩等级:良好\n");
} else if (score >= 70 && score < 80) {
printf("成绩等级:中等\n");
} else if (score >= 60 && score < 70) {
printf("成绩等级:及格\n");
} else if (score >= 0 && score < 60) {
printf("成绩等级:不及格\n");
} else {
printf("输入的成绩无效!\n");
}
return 0;
}
运行示例:
请输入成绩(0-100):85
成绩等级:良好
易错点:条件顺序不能颠倒,且要处理无效输入
例题4:嵌套if(判断闰年)
输入年份,判断是否为闰年(能被4整除且不能被100整除,或能被400整除),嵌套if经典应用。
#include
int main() {
int year;
printf("请输入年份:");
scanf("%d", &year);
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0) {
printf("%d年是闰年\n", year);
} else {
printf("%d年不是闰年\n", year);
}
} else {
printf("%d年是闰年\n", year);
}
} else {
printf("%d年不是闰年\n", year);
}
return 0;
}
运行示例1:
请输入年份:2024
2024年是闰年
运行示例2:
请输入年份:1900
1900年不是闰年
运行示例3:
请输入年份:2000
2000年是闰年
例题5:if嵌套(求三个数最大值)
输入三个整数,使用嵌套if求最大值,中职考试高频应用题。
#include
int main() {
int a, b, c, max;
printf("请输入三个整数(用空格分隔):");
scanf("%d %d %d", &a, &b, &c);
if (a > b) {
if (a > c) {
max = a;
} else {
max = c;
}
} else {
if (b > c) {
max = b;
} else {
max = c;
}
}
printf("最大值是:%d\n", max);
return 0;
}
运行示例:
请输入三个整数(用空格分隔):12 45 28
最大值是:45
拓展:可简化为max = (a>b ? (a>c?a:c) : (b>c?b:c))
例题6:if综合应用(猜数字游戏)
随机生成1-100的数字,用户输入猜测值,用if判断大小关系,综合实战应用。
#include
#include
#include
int main() {
// 生成1-100随机数
srand(time(0));
int target = rand() % 100 + 1;
int guess;
printf("猜数字游戏(1-100):\n");
printf("请输入你的猜测:");
scanf("%d", &guess);
if (guess > target) {
printf("猜大了!正确数字是:%d\n", target);
} else if (guess < target) {
printf("猜小了!正确数字是:%d\n", target);
} else {
printf("恭喜猜对了!\n");
}
return 0;
}
运行示例:
猜数字游戏(1-100):
请输入你的猜测:50
猜小了!正确数字是:78
例题7:if常见错误修正(真题考点)
修正以下代码的错误,使其能正确判断成绩是否及格(≥60)。
// 错误代码
#include
int main() {
int score = 75;
if (score = 60)
printf("及格\n");
else
printf("不及格\n");
return 0;
}
// 修正后代码
#include
int main() {
int score = 75;
if (score >= 60) { // 1. 将=改为>= 2. 增加{}(规范)
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}
错误分析:
1. 条件表达式中使用赋值运算符=,而非关系运算符>=
2. 虽单语句可省略{},但建议始终添加以提高可读性
修正后输出:及格