算术运算符主要用于进行简单的算术运算,在C语言中,算术运算以算术表达式的形式出现。C语言除了提供简单的加减乘除四则运算符外,还提供了模除(%)、自增(++)和自减(--)等几种特殊的算术运算符。
C语言中,除运算符用“/”代替,乘运算符用“*”代替,并且“*”不能省略(如x*y不能省略为xy)。由于受到计算机硬件和操作系统性能影响,算术运算并不能完全和数学运算相匹配,例如在进行除(/)运算时,需考虑操作对象的数据类型。
范例 3.4
ComputeOperatorType.c
ComputeOperatorType.c 程序使用输出函数printf验证两种不同数据类型进行算术除操作的结果,分析浮点型数据作算术运算的精度。
(光盘\chat3\ ComputeOperatorType.c)
这是一个非常简单的输出算术表达式值的程序。程序第 4 行中,输出表达式 1/2 的值,使用浮点输出格式%f。在数学计算中,1/2 的值为 0.5,但C语言中却输出 0.000000 的结果。造成这种输出的原因是C语言中,两个整型量作算术运算,其结果仍为整型,因此程序执行过程中,首先进行 1/2 的除运算,得商 0.500000,然后取结果中的整数部分 0,并以浮点形式输出,结果为 0.000000。这是程序初学者比较容易犯的错误,也是程序员经常忽略的一个知识点。
程序第 5 行的操作避免了这种情况的发生,程序将整数 1 改为实型常量 1.0。C语言规定,当两种不同类型的数据进行运算时,系统自动将精度较低的一个转化为精度较高的类型,结果为高精度类型。因此,程序第 5 行中,1.0/2 的执行过程为先将常量 2 转化为实型常量 2.0,然后与 1.0 进行除运算,得商 0.500000。
程序运行输出结果:
另外一种方式是对某一对象进行强制类型转换,例如可将程序第 4 行改为printf("%f\n",(float)1/2);
有关强制类型转换将在后续章节介绍。
不能将程序第 4 行改为:printf("%f\n",(float)(1/2));这样仍然得不到正确结果,因为这样的强制类型转换是对商作转换,因而结果仍然是 0.000000。同时注意0 不能作为除数,否则程序运行时将崩溃。