- C编程教程
- C语言 - 首页
- C语言基础
- C语言 - 概述
- C语言 - 特性
- C语言 - 历史
- C语言 - 环境搭建
- C语言 - 程序结构
- C语言 - Hello World
- C语言 - 编译过程
- C语言 - 注释
- C语言 - 词法单元
- C语言 - 关键字
- C语言 - 标识符
- C语言 - 用户输入
- C语言 - 基本语法
- C语言 - 数据类型
- C语言 - 变量
- C语言 - 整数提升
- C语言 - 类型转换
- C语言 - 类型强制转换
- C语言 - 布尔值
- C语言中的常量和字面量
- C语言 - 常量
- C语言 - 字面量
- C语言 - 转义序列
- C语言 - 格式说明符
- C语言中的运算符
- C语言 - 运算符
- C语言 - 算术运算符
- C语言 - 关系运算符
- C语言 - 逻辑运算符
- C语言 - 位运算符
- C语言 - 赋值运算符
- C语言 - 一元运算符
- C语言 - 自增和自减运算符
- C语言 - 三元运算符
- C语言 - sizeof 运算符
- C语言 - 运算符优先级
- C语言 - 其他运算符
- C语言中的决策语句
- C语言 - 决策语句
- C语言 - if 语句
- C语言 - if...else 语句
- C语言 - 嵌套 if 语句
- C语言 - switch 语句
- C语言 - 嵌套 switch 语句
- C语言中的循环
- C语言 - 循环
- C语言 - while 循环
- C语言 - for 循环
- C语言 - do...while 循环
- C语言 - 嵌套循环
- C语言 - 无限循环
- C语言 - break 语句
- C语言 - continue 语句
- C语言 - goto 语句
- C语言中的函数
- C语言 - 函数
- C语言 - 主函数
- C语言 - 按值调用函数
- C语言 - 按引用调用函数
- C语言 - 嵌套函数
- C语言 - 可变参数函数
- C语言 - 用户自定义函数
- C语言 - 回调函数
- C语言 - return 语句
- C语言 - 递归
- C语言中的作用域规则
- C语言 - 作用域规则
- C语言 - 静态变量
- C语言 - 全局变量
- C语言中的数组
- C语言 - 数组
- C语言 - 数组的特性
- C语言 - 多维数组
- C语言 - 将数组传递给函数
- C语言 - 从函数返回数组
- C语言 - 变长数组
- C语言中的指针
- C语言 - 指针
- C语言 - 指针和数组
- C语言 - 指针的应用
- C语言 - 指针运算
- C语言 - 指针数组
- C语言 - 指向指针的指针
- C语言 - 将指针传递给函数
- C语言 - 从函数返回指针
- C语言 - 函数指针
- C语言 - 指向数组的指针
- C语言 - 指向结构体的指针
- C语言 - 指针链
- C语言 - 指针与数组的比较
- C语言 - 字符指针和函数
- C语言 - NULL 指针
- C语言 - void 指针
- C语言 - 悬空指针
- C语言 - 解引用指针
- C语言 - 近指针、远指针和巨指针
- C语言 - 指针数组的初始化
- C语言 - 指针与多维数组的比较
- C语言中的字符串
- C语言 - 字符串
- C语言 - 字符串数组
- C语言 - 特殊字符
- C语言中的结构体和联合体
- C语言 - 结构体
- C语言 - 结构体和函数
- C语言 - 结构体数组
- C语言 - 自引用结构体
- C语言 - 查找表
- C语言 - 点 (.) 运算符
- C语言 - 枚举 (enum)
- C语言 - 结构体填充和打包
- C语言 - 嵌套结构体
- C语言 - 匿名结构体和联合体
- C语言 - 联合体
- C语言 - 位域
- C语言 - typedef
- C语言中的文件处理
- C语言 - 输入输出
- C语言 - 文件I/O (文件处理)
- C语言预处理器
- C语言 - 预处理器
- C语言 - 预处理指令
- C语言 - 预处理器运算符
- C语言 - 宏
- C语言 - 头文件
- C语言中的内存管理
- C语言 - 内存管理
- C语言 - 内存地址
- C语言 - 存储类
- 其他主题
- C语言 - 错误处理
- C语言 - 可变参数
- C语言 - 命令执行
- C语言 - 数学函数
- C语言 - static关键字
- C语言 - 随机数生成
- C语言 - 命令行参数
- C语言编程资源
- C语言 - 问答
- C语言 - 快速指南
- C语言 - 速查表
- C语言 - 有用资源
- C语言 - 讨论
C语言中的算术运算符
C语言中的算术运算符是一些特殊的预定义符号,用于执行算术运算。我们熟悉基本的算术运算——加法、减法、乘法和除法。C语言是一种计算语言,因此这些运算符对于执行计算机化过程至关重要。
除了上述分别分配给四个符号+、−、*和/的运算之外,C语言还有一个名为模运算符的算术运算符,我们使用%符号。
下表列出了C语言中的算术运算符:
运算符 | 描述 |
---|---|
+ | 将两个操作数相加。 |
– | 从第一个操作数中减去第二个操作数。 |
* | 将两个操作数相乘。 |
/ | 将分子除以分母。 |
% | 模运算符,返回整数除法后的余数。 |
++ | 自增运算符将整数值增加一。 |
-- | 自减运算符将整数值减少一。 |
上表中也列出了++和--运算符。我们将在单独的章节中学习自增和自减运算符。
示例:C语言中的算术运算符
以下示例演示如何在C程序中使用这些算术运算符:
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d \n\n", op1, op2); printf("Addition of op1 and op2: %d\n", op1 + op2); printf("Subtraction of op2 from op1: %d\n", op1 - op2); printf("Multiplication of op1 and op2: %d\n", op1 * op2); printf("Division of op1 by op2: %d\n", op1/op2); return 0; }
输出
运行此代码时,将产生以下输出:
Operand1: 10 Operand2: 3 Addition of op1 and op2: 13 Subtraction of op2 from op1: 7 Multiplication of op1 and op2: 30 Division of op1 by op2: 3
C语言中的类型强制转换
前三个结果符合预期,但除法的结果并非如此。您期望10/3是一个分数(3.333333)。这是因为我们使用%d格式说明符来打印除法的结果吗?如果我们将代码的最后一行更改如下:
printf("Division of op1 by op2: %f\n", op1/op2);
现在除法运算的结果将是“0.000000”,这更令人惊讶。C语言之所以这样表现,是因为整数与另一个整数相除总是返回一个整数。
要获得浮点除法,至少一个操作数必须是浮点数,或者您需要使用类型转换运算符将其中一个整数操作数更改为浮点数。
现在,将给定程序的最后一个printf语句更改如下:
printf("Division of op1 by op2: %f\n", (float)op1/op2);
再次进行此更改后运行代码,它将显示正确的除法结果:
Division of op1 by op2: 3.333333
注意:如果对浮点表达式使用%d格式说明符,它将始终导致“0”。
示例
至少有一个浮点(或双精度)操作数的算术运算的结果始终是浮点数。请看以下示例:
#include <stdio.h> int main(){ int op1 = 10; float op2 = 2.5; printf("Operand1: %d Operand2: %f\n", op1, op2); printf("Addition of op1 and op2: %f\n", op1 + op2); printf("Subtraction of op2 from op1: %f\n", op1 - op2); printf("Multiplication of op1 and op2: %f\n", op1 * op2); printf("Division of op1 by op2: %f\n", op1/op2); return 0; }
输出
运行代码并检查其输出:
Operand1: 10 Operand2: 2.500000 Addition of op1 and op2: 12.500000 Subtraction of op2 from op1: 7.500000 Multiplication of op1 and op2: 25.000000 Division of op1 by op2: 4.000000
使用char数据类型的算术运算
在C语言中,char数据类型是int类型的子集。因此,我们可以对char操作数执行算术运算。
示例
以下示例显示如何对两个操作数执行算术运算,其中一个操作数为“char”类型:
#include <stdio.h> int main(){ char op1 = 'F'; int op2 = 3; printf("operand1: %c operand2: %d\n", op1, op2); printf("Addition of op1 and op2: %d\n", op1 + op2); printf("Subtraction of op2 from op1: %d\n", op1 - op2); printf("Multiplication of op1 and op2: %d\n", op1 * op2); printf("Division of op1 by op2: %d\n", op1/op2); return 0; }
输出
运行代码并检查其输出:
operand1: F operand2: 3 Addition of op1 and op2: 73 Subtraction of op2 from op1: 67 Multiplication of op1 and op2: 210 Division of op1 by op2: 23
由于char数据类型是int的子集,因此%c格式说明符将返回与%d说明符返回的整数关联的ASCII字符。
如果两个char操作数之间的任何算术运算导致整数超出char的范围,则%c说明符将显示空白。
C语言中的模运算符
模运算符(%)返回除法运算的余数。
示例
请看以下示例:
#include <stdio.h> int main(){ int op1 = 10; int op2 = 3; printf("Operand1: %d Operand2: %d\n", op1, op2); printf("Modulo of op1 and op2: %d\n", op1%op2); return 0; }
输出
运行代码并检查其输出:
Operand1: 10 Operand2: 3 Modulo of op1 and op2: 1
模运算符需要两个int类型的操作数。如果不是,编译器会给出类型不匹配错误。例如,在上例代码中将“op1”的数据类型更改为float,然后再次运行程序:
float op1 = 10; int op2 = 3; printf("Modulo of op1 and op2: %d\n", op1%op2);
现在,您将收到一条类型不匹配错误,显示以下消息:
error: invalid operands to binary % (have 'float' and 'int')
尽管它允许char操作数进行模运算。
C语言中的否定运算符
由符号++和--表示的自增和自减运算符是一元运算符。它们已在单独的章节中介绍。“−”符号表示减法运算符,也充当一元否定运算符。
示例
以下示例重点介绍如何在C语言中使用否定运算符:
#include <stdio.h> int main(){ int op1 = 5; int op2 = -op1; printf("Operand1: %d Operand2: %d\n", op1, op2); return 0; }
输出
运行此代码时,将产生以下输出:
Operand1: 5 Operand2: -5
在上例中,“–”符号返回op1的负值,并将相同的负值赋值给op2。