条件判断 if-else
让程序能够做出选择和判断!
if 语句
基本语法
if (条件) {
// 条件为真时执行
}
示例
#include <stdio.h>
int main() {
int age = 20;
if (age >= 18) {
printf("你已经成年了!\n");
}
return 0;
}
流程图
graph TB
A[开始] --> B{age >= 18?}
B -->|是| C[输出:你已经成年了]
B -->|否| D[跳过]
C --> E[结束]
D --> E
if-else 语句
语法
if (条件) {
// 条件为真时执行
} else {
// 条件为假时执行
}
示例
#include <stdio.h>
int main() {
int score = 75;
if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
return 0;
}
if-else if-else 多分支
语法
if (条件1) {
// 条件1为真
} else if (条件2) {
// 条件2为真
} else if (条件3) {
// 条件3为真
} else {
// 所有条件都不满足
}
示例:成绩等级
#include <stdio.h>
int main() {
int score = 85;
if (score >= 90) {
printf("等级:A(优秀)\n");
} else if (score >= 80) {
printf("等级:B(良好)\n");
} else if (score >= 70) {
printf("等级:C(中等)\n");
} else if (score >= 60) {
printf("等级:D(及格)\n");
} else {
printf("等级:F(不及格)\n");
}
return 0;
}
嵌套 if
if语句内部还可以有if语句:
#include <stdio.h>
int main() {
int age = 20;
int hasLicense = 1; // 1表示有驾照
if (age >= 18) {
if (hasLicense) {
printf("可以开车\n");
} else {
printf("成年了,但没有驾照\n");
}
} else {
printf("未成年,不能开车\n");
}
return 0;
}
优化建议
嵌套太深会难以阅读,能用逻辑运算符的尽量用:
// 可以简化为
if (age >= 18 && hasLicense) {
printf("可以开车\n");
} else {
printf("不能开车\n");
}
switch 语句
适合多个固定值的判断:
语法
switch (表达式) {
case 值1:
// 代码块1
break;
case 值2:
// 代码块2
break;
default:
// 默认代码块
}
示例:星期判断
#include <stdio.h>
int main() {
int day = 3;
switch (day) {
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("无效的日期\n");
}
return 0;
}
break 的重要性
如果忘记写break,会"穿透"执行:
#include <stdio.h>
int main() {
int num = 2;
switch (num) {
case 1:
printf("一\n");
case 2:
printf("二\n"); // 执行这里
case 3:
printf("三\n"); // 也执行!
default:
printf("其他\n"); // 还执行!
}
return 0;
}
输出:
二
三
其他
重要
除非有特殊需求,每个case后面都要加break!
实战案例
案例1:BMI计算器
#include <stdio.h>
int main() {
float height, weight, bmi;
printf("请输入身高(米):");
scanf("%f", &height);
printf("请输入体重(千克):");
scanf("%f", &weight);
bmi = weight / (height * height);
printf("\n你的BMI指数:%.2f\n", bmi);
if (bmi < 18.5) {
printf("体重过轻\n");
} else if (bmi < 24) {
printf("体重正常\n");
} else if (bmi < 28) {
printf("体重过重\n");
} else {
printf("肥胖\n");
}
return 0;
}
案例2:简易登录系统
#include <stdio.h>
#include <string.h>
int main() {
char username[20];
char password[20];
printf("=== 登录系统 ===\n");
printf("用户名:");
scanf("%s", username);
printf("密码:");
scanf("%s", password);
if (strcmp(username, "admin") == 0 &&
strcmp(password, "123456") == 0) {
printf("\n登录成功!欢迎 %s\n", username);
} else {
printf("\n用户名或密码错误!\n");
}
return 0;
}
案例3:电费计算器
#include <stdio.h>
int main() {
float usage, cost;
printf("请输入用电量(度):");
scanf("%f", &usage);
if (usage <= 100) {
cost = usage * 0.5;
} else if (usage <= 200) {
cost = 100 * 0.5 + (usage - 100) * 0.6;
} else {
cost = 100 * 0.5 + 100 * 0.6 + (usage - 200) * 0.8;
}
printf("用电量:%.2f度\n", usage);
printf("电费:%.2f元\n", cost);
return 0;
}
案例4:简易菜单系统
#include <stdio.h>
int main() {
int choice;
printf("=== 学生管理系统 ===\n");
printf("1. 添加学生\n");
printf("2. 删除学生\n");
printf("3. 查询学生\n");
printf("4. 退出系统\n");
printf("请选择(1-4):");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("你选择了:添加学生\n");
break;
case 2:
printf("你选择了:删除学生\n");
break;
case 3:
printf("你选择了:查询学生\n");
break;
case 4:
printf("退出系统...\n");
break;
default:
printf("无效的选择!\n");
}
return 0;
}
练习题
练习1:判断奇偶数
输入一个整数,判断是奇数还是偶数。
练习2:判断三角形
输入三条边,判断能否构成三角形,如果能,判断类型(等边、等腰、普通)。
练习3:计算器菜单
制作一个带菜单的计算器:
1. 加法
2. 减法
3. 乘法
4. 除法
请选择:
答案参考
查看答案
练习1:
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d是偶数\n", num);
} else {
printf("%d是奇数\n", num);
}
return 0;
}
练习2:
#include <stdio.h>
int main() {
int a, b, c;
printf("请输入三条边(用空格分隔):");
scanf("%d %d %d", &a, &b, &c);
if (a + b > c && a + c > b && b + c > a) {
printf("能构成三角形\n");
if (a == b && b == c) {
printf("等边三角形\n");
} else if (a == b || b == c || a == c) {
printf("等腰三角形\n");
} else {
printf("普通三角形\n");
}
} else {
printf("不能构成三角形\n");
}
return 0;
}
练习3:
#include <stdio.h>
int main() {
int choice;
float a, b, result;
printf("=== 计算器 ===\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
printf("请选择:");
scanf("%d", &choice);
printf("请输入两个数:");
scanf("%f %f", &a, &b);
switch (choice) {
case 1:
result = a + b;
printf("%.2f + %.2f = %.2f\n", a, b, result);
break;
case 2:
result = a - b;
printf("%.2f - %.2f = %.2f\n", a, b, result);
break;
case 3:
result = a * b;
printf("%.2f * %.2f = %.2f\n", a, b, result);
break;
case 4:
if (b != 0) {
result = a / b;
printf("%.2f / %.2f = %.2f\n", a, b, result);
} else {
printf("错误:除数不能为0\n");
}
break;
default:
printf("无效的选择\n");
}
return 0;
}
知识点总结
- ✅ if - 单条件判断
- ✅ if-else - 二选一
- ✅ if-else if - 多分支
- ✅ 嵌套if - 条件套条件
- ✅ switch - 固定值判断
- ✅ 别忘了break!
下一步
👉 循环语句