C语言快速入门教程
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
首页
入门指南
基础教程
进阶教程
实战案例
编程指南
  • 基础教程

    • Hello World 深入理解
    • 变量详解
    • 数据类型详解
    • 运算符详解
    • 输入输出详解
    • 条件判断 if-else
    • 循环语句
    • 函数详解
    • 数组详解

运算符详解

运算符就像数学中的符号,用来对数据进行各种操作。

算术运算符

基本运算

运算符名称示例结果
+加法5 + 38
-减法5 - 32
*乘法5 * 315
/除法5 / 22(整数除法)
%取余(模)5 % 21
#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 += 3a = a + 3
-=a -= 3a = a - 3
*=a *= 3a = a * 3
/=a /= 3a = a / 3
%=a %= 3a = 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 == 51(真)
!=不等于5 != 31(真)
>大于5 > 31(真)
<小于5 < 30(假)
>=大于等于5 >= 51(真)
<=小于等于3 <= 51(真)
#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真变假,假变真

真值表

与运算(&&):

ABA && B
000
010
100
111

或运算(||):

ABA || B
000
011
101
111

非运算(!):

A!A
01
10

实例

#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");
}

知识点总结

  • ✅ 算术:+ - * / %
  • ✅ 赋值:= += -= *= /= %=
  • ✅ 自增自减:++ --
  • ✅ 关系:== != > < >= <=
  • ✅ 逻辑:&& || !
  • ✅ 三元:? :
  • ✅ 记住优先级,不确定就用括号

下一步

👉 输入输出详解

最近更新: 2025/12/26 14:29
Prev
数据类型详解
Next
输入输出详解