运算符详解
运算符就像数学中的符号,用来对数据进行各种操作。
算术运算符
基本运算
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 5 + 3 | 8 |
- | 减法 | 5 - 3 | 2 |
* | 乘法 | 5 * 3 | 15 |
/ | 除法 | 5 / 2 | 2(整数除法) |
% | 取余(模) | 5 % 2 | 1 |
#include <stdio.h>
int main() {
int a = 10, b = 3;
printf("加法:%d + %d = %d\n", a, b, a + b);
printf("减法:%d - %d = %d\n", a, b, a - b);
printf("乘法:%d * %d = %d\n", a, b, a * b);
printf("除法:%d / %d = %d\n", a, b, a / b);
printf("取余:%d %% %d = %d\n", a, b, a % b);
return 0;
}
整数除法 vs 浮点除法
#include <stdio.h>
int main() {
// 整数除法(会截断小数)
int a = 7, b = 2;
int result1 = a / b;
printf("整数除法:7 / 2 = %d\n", result1); // 3
// 浮点除法
float result2 = 7.0 / 2.0;
printf("浮点除法:7.0 / 2.0 = %.2f\n", result2); // 3.50
// 混合(至少一个是浮点数)
float result3 = 7 / 2.0;
printf("混合除法:7 / 2.0 = %.2f\n", result3); // 3.50
return 0;
}
取余运算的应用
#include <stdio.h>
int main() {
int number = 1234;
// 判断奇偶
if (number % 2 == 0) {
printf("%d 是偶数\n", number);
} else {
printf("%d 是奇数\n", number);
}
// 获取个位数
int lastDigit = number % 10;
printf("个位数是:%d\n", lastDigit);
// 判断是否是3的倍数
if (number % 3 == 0) {
printf("%d 是3的倍数\n", number);
}
return 0;
}
赋值运算符
| 运算符 | 示例 | 等价于 |
|---|---|---|
= | a = 5 | 赋值 |
+= | a += 3 | a = a + 3 |
-= | a -= 3 | a = a - 3 |
*= | a *= 3 | a = a * 3 |
/= | a /= 3 | a = a / 3 |
%= | a %= 3 | a = a % 3 |
#include <stdio.h>
int main() {
int num = 10;
printf("初始值:%d\n", num);
num += 5; // num = num + 5
printf("加5后:%d\n", num);
num -= 3; // num = num - 3
printf("减3后:%d\n", num);
num *= 2; // num = num * 2
printf("乘2后:%d\n", num);
num /= 4; // num = num / 4
printf("除4后:%d\n", num);
return 0;
}
自增自减运算符
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
++ | 自增 | ++a 或 a++ | 变量加1 |
-- | 自减 | --a 或 a-- | 变量减1 |
前缀 vs 后缀
#include <stdio.h>
int main() {
int a = 5, b = 5;
int x, y;
// 前缀:先加再用
x = ++a;
printf("前缀自增:a=%d, x=%d\n", a, x); // a=6, x=6
// 后缀:先用再加
y = b++;
printf("后缀自增:b=%d, y=%d\n", b, y); // b=6, y=5
return 0;
}
记忆技巧
++a:++在前,先加a++:++在后,后加
关系运算符(比较运算符)
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | 1(真) |
!= | 不等于 | 5 != 3 | 1(真) |
> | 大于 | 5 > 3 | 1(真) |
< | 小于 | 5 < 3 | 0(假) |
>= | 大于等于 | 5 >= 5 | 1(真) |
<= | 小于等于 | 3 <= 5 | 1(真) |
#include <stdio.h>
int main() {
int age = 18;
printf("age == 18: %d\n", age == 18); // 1
printf("age != 18: %d\n", age != 18); // 0
printf("age > 16: %d\n", age > 16); // 1
printf("age < 20: %d\n", age < 20); // 1
printf("age >= 18: %d\n", age >= 18); // 1
printf("age <= 17: %d\n", age <= 17); // 0
return 0;
}
常见错误
注意 == 和 = 的区别:
==是比较(判断相等)=是赋值
if (age = 18) { // ❌ 错误!这是赋值,不是比较
if (age == 18) { // ✅ 正确!这是比较
逻辑运算符
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
&& | 逻辑与(AND) | a && b | 都为真才为真 |
| ` | ` | 逻辑或(OR) | |
! | 逻辑非(NOT) | !a | 真变假,假变真 |
真值表
与运算(&&):
| A | B | A && B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
或运算(||):
| A | B | A || B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
非运算(!):
| A | !A |
|---|---|
| 0 | 1 |
| 1 | 0 |
实例
#include <stdio.h>
int main() {
int age = 20;
int score = 85;
// 与运算:年龄>=18 并且 分数>=60
if (age >= 18 && score >= 60) {
printf("成年且及格\n");
}
// 或运算:分数>=90 或者 年龄<18
if (score >= 90 || age < 18) {
printf("优秀或未成年\n");
}
// 非运算
int isStudent = 1;
if (!isStudent) {
printf("不是学生\n");
} else {
printf("是学生\n");
}
return 0;
}
三元运算符(条件运算符)
语法:条件 ? 值1 : 值2
#include <stdio.h>
int main() {
int age = 20;
// 普通if-else
char *status1;
if (age >= 18) {
status1 = "成年";
} else {
status1 = "未成年";
}
// 三元运算符(更简洁)
char *status2 = (age >= 18) ? "成年" : "未成年";
printf("状态:%s\n", status2);
// 找最大值
int a = 10, b = 20;
int max = (a > b) ? a : b;
printf("最大值:%d\n", max);
return 0;
}
运算符优先级
从高到低:
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 1 | () | 括号 |
| 2 | ! ++ -- | 单目运算符 |
| 3 | * / % | 乘除取余 |
| 4 | + - | 加减 |
| 5 | > < >= <= | 关系运算符 |
| 6 | == != | 相等运算符 |
| 7 | && | 逻辑与 |
| 8 | ` | |
| 9 | ?: | 三元运算符 |
| 10 | = += -= 等 | 赋值运算符 |
#include <stdio.h>
int main() {
int result;
result = 2 + 3 * 4; // 14(先乘后加)
result = (2 + 3) * 4; // 20(括号优先)
result = 10 > 5 && 20 > 15; // 1(关系运算后逻辑运算)
printf("结果:%d\n", result);
return 0;
}
实战案例
案例1:判断闰年
#include <stdio.h>
int main() {
int year = 2024;
// 闰年规则:能被4整除但不能被100整除,或能被400整除
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
printf("%d年是闰年\n", year);
} else {
printf("%d年不是闰年\n", year);
}
return 0;
}
案例2:计算器
#include <stdio.h>
int main() {
float num1 = 10, num2 = 3;
char op = '/';
float result;
if (op == '+') {
result = num1 + num2;
} else if (op == '-') {
result = num1 - num2;
} else if (op == '*') {
result = num1 * num2;
} else if (op == '/') {
result = num1 / num2;
}
printf("%.2f %c %.2f = %.2f\n", num1, op, num2, result);
return 0;
}
案例3:分数等级
#include <stdio.h>
int main() {
int score = 85;
char grade;
// 使用三元运算符
grade = (score >= 90) ? 'A' :
(score >= 80) ? 'B' :
(score >= 70) ? 'C' :
(score >= 60) ? 'D' : 'F';
printf("分数:%d,等级:%c\n", score, grade);
return 0;
}
练习题
练习1:交换变量(不用临时变量)
// 提示:使用加减运算
int a = 10, b = 20;
// 写代码交换a和b的值
练习2:判断三角形类型
// 给定三条边 a=3, b=4, c=5
// 判断:等边、等腰、还是普通三角形
练习3:计算平均分
// 三科成绩:语文90,数学85,英语88
// 计算平均分并判断是否优秀(>=85)
答案参考
查看答案
练习1:
int a = 10, b = 20;
a = a + b; // a = 30
b = a - b; // b = 10
a = a - b; // a = 20
printf("a=%d, b=%d\n", a, b);
练习2:
int a = 3, b = 4, c = 5;
if (a == b && b == c) {
printf("等边三角形\n");
} else if (a == b || b == c || a == c) {
printf("等腰三角形\n");
} else {
printf("普通三角形\n");
}
练习3:
int chinese = 90, math = 85, english = 88;
float average = (chinese + math + english) / 3.0;
printf("平均分:%.2f\n", average);
if (average >= 85) {
printf("优秀!\n");
}
知识点总结
- ✅ 算术:
+-*/% - ✅ 赋值:
=+=-=*=/=%= - ✅ 自增自减:
++-- - ✅ 关系:
==!=><>=<= - ✅ 逻辑:
&&||! - ✅ 三元:
? : - ✅ 记住优先级,不确定就用括号
下一步
👉 输入输出详解