C语言第三章课件
功能 复合加法 复合减法 复合乘法 复合除法 复合取余
使用举例 I += 6 I -= 6 I *= 6 I /= 6 I %= 6
等价于 I=I+6 I = I-6 I=I*6 I=I/6 I=I%6
操作数 双目
结合方式
自右 至左
2019/5/12
28/51
已知 int a = 3; 执行 a += a -= a * a 后,变量a的值?
第3章 简单的算术运算 和表达式
本章学习内容
算术运算符 增1和减1运算符 宏常量与 const常量 表达式与赋值中的自动类型转换 强制类型转换运算符 常用的标准数学函数
2019/5/12
2/51
float f=3.65656; n=f; printf("%d",f);
2019/5/12
33/51
前缀( Prefix )增1和减1运算符
例子: int i=5
j = ++i - 2
i = i + 1; j = i – 2;
i 56 j ?4?
2019/5/12
34/51
后缀(Postfix)增1和减1运算符
Example: int i=5
j = i++ - 2
j = i – 2; i = i + 1;
#define 标识符 字符串 宏常量(Macro constant )
–也称符号常量 –一般采用全大写字母表示 宏定义不是语句,而是一种编译预处理 命令
2019/5/12
44/51
【例3.4】计算圆的周长和面积
宏替换
2019/5/12
45/51
计算圆的周长和面积
#include <stdio.h>
-2 5 -11
-10
-1
2019/5/12
12/51
求余(Modulus)
11 Example: % -5 = 1
-2 -5 11
10
1
2019/5/12
13/51
求余(Modulus)
Example:
11.0 % 5 = ?
错误
2019/5/12
14/51
算术表达式 (Arithmetic Expression)
变量1 = 变量2 = 表达式 ;
2019/5/12
25/51
3.1.2复合的赋值运算符 (Combined Assignment Operators)
变量x = 变量x 运算符op 表达式 ;
变量x 运算符op = 表达式;
这种形式看起来更直观,且执行效率一般也更高一些
2019/5/12
26/51
– 某些集成化调试工具可以对const常量进行调试
i 56 j ?3?
2019/5/12
35/51
后缀(Postfix)增1和减1运算符
int a=3; printf("%d", -a++);
printf("%d", -a); a = a + 1;
a 34
2019/5/12
36/51
3.1.3增1和减1运算符
(Increment and Decrement)
#define PI 3.14159;
#define R 5.3;
main()
{
printf("area = %f\n", PI * R * R);
printf("circumference = %f\n", 2 * PI * R);
} 相当于执行
语法错误
#include <stdio.h>
main()
当算术表达式包含两个或两个以上的算术 运算符时
首先要确定运算顺序 所有的运算符都有一个优先级
2019/5/12
15/51
算术表达式 (Arithmetic Expression)
优先级(Order of Precedence)
高: * / % 低: + -
不同优先级时的运算顺序:
——从高到低
2019/5/12
39/51
int i=10, y=10; y = x++ * x++; // y=100, x=12 printf("x = %d,y = %d\n",x,y); y = ++x * ++x; // 14*14, x=14 printf("x = %d,y = %d\n",x,y); y = ++x * x++; // 15*15 x= 16 printf("x = %d,y = %d\n\n",x,y);
关键是如何分离个位、十位、百位数字?
153 % 10 = 3 153 / 100 = 1
153 - 1*100 = 53
53 / 10 = 5
2019/5/12
22/51
【例3.1】计算并输出一个三位整 数的个位、十位和百位数字之和
2019/5/12
23/51
编程练习1 设计题目
基本要求:编写程序实现依次显示任意数字 的千位,百位,十位,个位。例如3461
(Increment and Decrement)
n++,n--,++n,--n – ++让参与运算的变量加1,--让参与运算的变量减1 – 作为后缀(postfix)运算符时,先取n的值,然后加/减1 – 作为前缀(prefix)运算符时,先加/减1,然后取n的值
m = ++n;
n++; m = n;
2019/5/12
浮点数除法 (Floating Division) W 或 Z 是浮点数
7/51
整数除法(Integer Division)
Example: 11 / 5 = 2
整数
2019/5/12
整数
结果是整数
8/51
实数除法(Floating Division)
Example: 11.0 / 5 = 2.2
浮点数
2019/5/12
整数
浮点数
9/51
求余(Modulus)
取余“%” 的作用是取得2个操作数除法运 算的余数,同时要求操作数必须为整型数据。 如整型的变量I和S,I%S得到的结果是I/S的余 数部分。
printf("%d\n", 12 % 3);
printf("%d\n ", 30 % 7);
-3%9, 12%-5, -12%-4, -4%-8
余数的符号与被除数的符号一致。
2019/5/12
10/51
求余(Modulus)
Example: 11 % 5 = 1
2 5 11
10
1
remainder
2019/5/12
11/51
求余(Modulus)
-11 Example: % 5 = -1
巧妙使用圆括号改变运算顺序 –从内往外运算
Example:
(9–(3+2))*3=?
2019/5/12
18/51
算术表达式 (Arithmetic Expression)
Example:
( 9 – (–34 + 25 3 = 12
例子:
W+Z
操作数 (Operand)
2019/5/12
运算符 (Operator)
操作数 (Operand)
5/51
3.1.1算术运算符和表达式
Arithmetic Operators
+ -
2019/5/12
%
/ *
6/51
除法(Division)
例子:
W/Z
整数除法 (Integer Division) W 和 Z 是整数
42/51
使用幻数存在的问题?
假如直接使用常数,会有什么影响? – 程序的可读性变差 – 容易发生书写错误 – 当常数需要改变时,要修改所有引用它的代码,
工作量大,还可能有遗漏
解决方案: – 避免使用幻数 – 把幻数定义为常量(宏常量、const常量……)
2019/5/12
43/51
3.2宏常量与宏替换
3.1.2复合的赋值运算符 (Combined Assignment Operators)
例子:
num = num + 5;
15 + 5 20
num 1250
例子: num += 5; similar to num = num + 5
2019/5/12
27/51
运算符
+= -= *= /= %=
2019/5/12
40/51
【例3.2】计算圆的周长和面积
2019/5/12
41/51
【例3.3】计算圆的周长和面积
在程序中直接使用的常数称 为幻数(Magic Number)
Input r: 5.3↙
circumference = 33.300854
area = 88.247263
2019/5/12
创新要求1 : 将结果以原数字逆序的结构显 示出来. 例如,3461显示为1643
创新要求2:计算并输出一个三位整数的个 位、十位和百位数字之和。
2019/5/12
24/51