Presentation is loading. Please wait.

Presentation is loading. Please wait.

C语言程序设计 李祥 E-mail:tom_lx@126.com QQ:100756.

Similar presentations


Presentation on theme: "C语言程序设计 李祥 E-mail:tom_lx@126.com QQ:100756."— Presentation transcript:

1 C语言程序设计 李祥 QQ:100756

2 第三章 运算符与表达式 目录 1 2 3 4 5 除法模块实现分析 算术运算符与算术表达式 赋值运算符与赋值表达式
自动类型转换与强制类型转换运算 5 项目完善(乘法模块的开发)

3 知识点要求: 技能要求: 教学要求 1 2 3 1 2 基本算术运算符、自加自减运算 赋值运算符与赋值表达式 强制类型转换
编程实现简单的算术运算 2 赋值运算符的使用

4 3.1 除法模块实现分析 任务描述: 任务要求: 编写divide函数,实现两个整数的除法运算。 (1)计算两个整数相除的商。
(2)要求商保留小数点后面一位小数。

5 3.1 除法模块实现分析 任务分析 除法模块的实现思路与加法模块类似,不同的是实现除法法模块时,我们还需要考虑以下几个问题:
(1)在C语言中也用“÷”号表示除法吗? (2)在C语言中12÷5结果为2.4吗? (3)输出时如何保留一位小数?

6 3.1 除法模块实现分析 void divide() {int x,y;float z; x=3; y=2; z=x/y;
任务实现 编写divide函数 void divide() {int x,y;float z; x=3; y=2; z=x/y; printf("x/y=%.1f\n",z); return; } 在主函数中调用divide函数

7 3.1 除法模块实现分析 涉及知识点 常量-- 3,2 (已学) 变量-- x,y,z (已学) 数据类型-- int,float (已学)
常量-- 3,2 (已学) 变量-- x,y,z (已学) 数据类型-- int,float (已学) 赋值运算符-- = 除法运算符-- / 输出1位小数— %.1f(下章学)

8 3.2 算术运算符与算术表达式 3.2.1 基本算术运算符与表达式 基本算术运算符: + :正号运算符(单目运算符)
3.2 算术运算符与算术表达式 基本算术运算符与表达式 基本算术运算符: + :正号运算符(单目运算符) - :负号运算符(单目运算符) * :乘法运算符 / :除法运算符 % :求余运算符 + :加法运算符 - :减法运算符

9 3.2 算术运算符与算术表达式 说明 两个整数相除的结果为整数 如5/3的结果值为1,舍去小数部分
3.2 算术运算符与算术表达式 说明 两个整数相除的结果为整数 如5/3的结果值为1,舍去小数部分 如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2 VC++采取“向零取整”的方法 如5/3=1,-5/3=-1,取整后向零靠拢 % 运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如8%3,结果为2

10 思考题: void main() {int a,b; float c; a=12; b=5; c=a/b; printf ("c=%f\n",c); return; } 输出结果? C=

11 3.2 算术运算符与算术表达式 算术表达式与运算符的优先级与结合性: 在表达式求值时,先按运算符的优先级别高低次序执行。
3.2 算术运算符与算术表达式 算术表达式与运算符的优先级与结合性: 在表达式求值时,先按运算符的优先级别高低次序执行。 算术运算符的结合方向为“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。以后可以看到有些运算符的结合方向为“自右至左”,即右结合性。详见附录Ⅱ。

12 3.2 算术运算符与算术表达式 3.2.2 自增、自减运算符 前置的加与减:
3.2 算术运算符与算术表达式 自增、自减运算符 前置的加与减: ++i, -- i (在使用i之前,先使i的值加(减)1,++i称为前置的加,--i称为前置的减)。 例:i的原值等于3 j=++i; (i的值先变成4,再赋给j,j的值为4)

13 3.2 算术运算符与算术表达式 3.2.2 自增、自减运算符 后置的加与减:
3.2 算术运算符与算术表达式 自增、自减运算符 后置的加与减: i++,i (在使用i之后,使i的值加(减)1,i++称为后置的加,i--称为后置的减)。 例: i的原值等于3 j=i++; (先将i的值3赋给j,j的值为3,然后i变为4)

14 3.2 算术运算符与算术表达式 3.2.2 自增、自减运算符 自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式。
3.2 算术运算符与算术表达式 自增、自减运算符 自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式。 ++和--的结合方向是“自右至左”,见附录Ⅱ。

15 思考题 以下程序的运行结果是? #include<stdio.h> void main()
{int i,j,m,n,x=0,y=0; i=10;j=20; m=++i;n=j++; x+=i--;y-=--j; printf("i=%d,j=%d\n",i,j); printf("m=%d,n=%d,x=%d,y=%d\n",m,n,x,y); return; }

16 3.3 赋值运算符与赋值表达式 3.3.1 赋值运算符与赋值表达式 赋值运算符
3.3 赋值运算符与赋值表达式 赋值运算符与赋值表达式 赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。

17 3.3 赋值运算符与赋值表达式 3.3.1 赋值运算符与赋值表达式 赋值表达式
3.3 赋值运算符与赋值表达式 赋值运算符与赋值表达式 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。 它的一般形式为: 〈变量〉 〈赋值运算符〉 〈表达式〉

18 3.3 赋值运算符与赋值表达式 3.3.1 赋值运算符与赋值表达式
3.3 赋值运算符与赋值表达式 赋值运算符与赋值表达式 对赋值表达式求解的过程是:将赋值运算符右侧的“表达式”的值赋给左侧的变量。 a=b=c=5 //赋值表达式值?a、b、c值? a=5+(c=6) //表达式值为11?a、c的值? a=(b=4)+(c=6) //表达式值为10? a,b,c的值?

19 3.3 赋值运算符与赋值表达式 复合的赋值运算符 在应用中经常碰到“a=a+3”等情况,在C中允许将它变为“逆波兰”式,即“a+=3”,以提高运行效率。 例如,可以有: a+=3 等价于 a=a+3 x*=y+8 等价于 x=x *(y+8) x%=3 等价于 x=x%3 x%=y+3 等价于 x=x%(y+3)

20 3.3 赋值运算符与赋值表达式 3.3.2 复合的赋值运算符 凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。 运算符
3.3 赋值运算符与赋值表达式 复合的赋值运算符 凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。 运算符 表达式示例 运算关系 += a+=3 a=a+3 -= a-=b a=a-b *= a*=2 a=a*2 /= a/=b a=a/b %= a%=3 a=a%3

21 3.3 赋值运算符与赋值表达式 3.3.2 复合的赋值运算符 【例3.1】复合的赋值运算符使用。 已知:int m=5,y=2;
3.3 赋值运算符与赋值表达式 复合的赋值运算符 【例3.1】复合的赋值运算符使用。 已知:int m=5,y=2; 求:y+=y-=m*=y 后,y的值是多少?

22 3.3 赋值运算符与赋值表达式 求:y+=y-=m*=y 后,y的值是多少? 求解过程为: y=y+( y-=m*=y)
3.3 赋值运算符与赋值表达式 求:y+=y-=m*=y 后,y的值是多少? 求解过程为: y=y+( y-=m*=y) y=y+( y=(y-(m*=y))) y=y+( y=(y-(m=m*y))) y=y+( y=(y-(m=5*2))) y=y+( y=(y-10)) y=y+( y=-8) y=-16

23 思考题 写出下面程序的预期结果,体会复合赋值运算符的功能。 #include<stdio.h> void main()
{int a=2,b=4,c=3,d=5,e=8; b+=a; c*=a; d/=a; e%=a; printf("b=%d\nc=%d\nd=%d\ne=%d\n",b,c,d,e); return; }

24 3.4 自动类型转换与强制类型转换 3.4.1 表达式中的自动类型转换
当表达式中的操作数类型不相同时,则在运算之前,C编译器先将所有操作数都转换成同一类型,即转换成占内存字节数最大的操作数的类型,这称为类型提升。 类型提升的规则如下图:

25 3.4 自动类型转换与强制类型转换 图中横向向左的箭头表示必定的转换。 纵向箭头表示运算对象为不同类型时转换的方向。

26 3.4 自动类型转换与强制类型转换 3.4.2 赋值中的自动类型转换
赋值运算符左侧变量的类型和右侧表达式的类型不一致,则赋值时将发生自动类型转换。 转换的规则是: 将右侧表达式的值转成左侧变量的类型。

27 3.4 自动类型转换与强制类型转换 请分析编译时警告产生的原因。 【例3.2】观察下列程序中的赋值运算符的自动类型转换。
#include <stdio.h> void main() {int n=256; float f=4.8; double d=2.5; n=f; f=n; d=f; printf("n=%d\n",n); printf("f=%f\n",f); printf("d=%f\n",d); return; } 请分析编译时警告产生的原因。

28 3.4 自动类型转换与强制类型转换 3.4.3 强制类型转换 可以利用强制类型转换运算将一个表达式转换成所需类型。 其一般形式为
(类型名)(表达式) 例如: (double)a //将a转换成double型 (int)(x+y) //将x+y的值转换成整型 需要说明的是在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。

29 3.4 自动类型转换与强制类型转换 【例3.3】强制类型转换。 #include <stdio.h> void main( )
{ float x; int i; x=3.6; i=(int)x; //进行类型的强制转换 printf("x=%f,i=%d\n",x,i); }

30 3.5 项目的完善 任务描述: 参考divide函数,完成multiply函数的开发,实现两个数实数的乘法法功能。 任务要求:
(1)计算并输出两个实数的乘积。 (2)要求结果保留小数点后面二位小数。 请同学们自己完成!

31 重点 难点 本章小结 1 2 3 1 2 算术运算符(+、-、*、/、%) 赋值运算符(=) 强制类型转换运算( (类型) )
自加、自减运算符(++、--) 2 复合赋值运算符(+=、-=、*=、/=、%=)

32 本章结束!


Download ppt "C语言程序设计 李祥 E-mail:tom_lx@126.com QQ:100756."

Similar presentations


Ads by Google