第3章
数据的运算处理
程序的执行过程是对数据进行处理的过程,因此,程序中不仅需要使用常量和变量来存储求解问题涉及的数据,还需要对这些数据进行各种运算处理。本章介绍C语言的常用运算。
3.1算术运算
引例3.1 求平均值
【问题】给定三个整数,计算并输出这三个整数的平均值。
【想法】求三个整数的和,再除以3。
【算法】设变量x、y和z存储三个整数,变量sum存储三个整数的和,算法如下:
【程序】定义变量x、y和z为int型,定义变量sum为int型,由于平均值可能是小数,在进行除法运算前要
进行类型转换。程序如下:
#include<stdio.h>
int main ()
{
int x = 3, y = 5, z = 8;
int sum;
sum = x + y + z;
printf("%d、%d和%d的平均值是", x, y, z);
printf("%6.2f\n", (double)sum/3); /*先将sum的值转换为double型*/
return 0;
}
运行结果如下:
程序设计基础——从问题到程序(第2版)
48 3、5和8的平均值是 5.33
3.1.1 算术运算
所谓算术运算就是数值运算,由算术运算符、运算对象和圆括号组成的式子称为算
术表达式。算术表达式的运算对象和运算结果均为数值型数据,一般可以是整型和实型。人们在进行算术运算时往往不区分运算对象是整型还是实型,为了照顾这种习惯,大多
逗号表达式的运算顺序数程序设计语言允许在整型和实型之间进行混合算术运算。
【语法】 算术表达式的一般形式如下:
其中,二目运算(也称双目运算)是指该运算符需要两个运算对象,一目运算(也称单目运算)是指该运算符需要一个运算对象;运算对象通常是数值量,可以是常量、变量,还可以是表达式。C 语言的算术运算符如表3.1所示。
表3.1 C 语言的算术运算符 运算符
运算规则 运算类别 运算对象 运 算 结 果 举 例 +
取正 +5, +12.3 -
取负 一目 整型或实型 整型或实型 -5, -12.3 + 加法 3 + 5, 3.5 + 8, x + 3 - 减法 3 - 5, 3.5 - 8, x – 3 * 乘法 3 * 8, 3.5 * 8, x * 8 / 除法
整型或实型 若两个运算对象都是整型,则为整型,否则为实型
3 / 8, 3.5 / 8, x / 8 % 求余 二目 整型 整型 3 % 8, 16 % 8, x % 8
【语义】 执行算术运算符规定的算术运算。
【例3.1】 写出下列数学表达式对应的C 语言算术表达式:
(1)2x + 5y
(2)x 2 + 2x + 1
(3)s(s - a)(s - b)(s - c)
解:对应的算术表达式如下:
(1)2 * x + 5 * y
(2)x * x + 2 * x + 1
(3)s * (s - a) * (s - b) * (s – c)
在C 语言中进行算术运算需要注意以下问题: ① 两个整数相除的结果为整数,舍去小数部分,例如,7 / 3的运算结果为2。但是,
如果有一个运算对象为负值,则舍去的方向不确定。例如,对于-7 / 3,有的系统给出的
结果为-2,有的系统给出的结果为-3。大多数系统采取“向零靠拢”的方法,即取整后
的结果向零靠拢,则-7 / 3的结果为-2。
②求余运算的运算对象均为整数,不能用于实数,例如,7 % 3的运算结果为1。
但是,如果运算对象为负值,则求余运算的结果不确定。例如,对于-7 % 3,有的系统
给出的结果为-1,有的系统给出的结果为2。
由实现定义。C标准未定义运算符/和%对负数的运算规则,这部分内容应该由“实
现”来定义。所谓实现是指软件在特定开发平台上进行的编译、连接和执行。因此,根
据实现的不同,程序的行为可能会有差异。应该避免编写与实现定义行为相关的程序,
例如,使用运算符/和%时,尽量保证运算对象均为正数。
3.1.2运算符的优先级和结合性
运算符的优先级是指在表达式中具有不同的运算符时,表达式的求值顺序,优先级
高的先于优先级低的进行运算,例如,表达式5 + 3 % 2等价于5 + (3 % 2),这是因为%
运算的优先级高于+运算的优先级。运算符的结合性是指在运算符的优先级相同时,表达
式的求值方向,即运算对象按什么顺序进行运算,通常有两种求值方向:左结合和右结
合,左结合是将运算对象用左侧的运算符进行运算,右结合是将运算对象用右侧的运算
符进行运算。例如,表达式2 + i − 3等价于(2 + i) − 3,这是因为变量i两侧运算符的优
先级相同,运算符+和-的结合性是左结合,所以变量i先用左侧的运算符进行运算。
每种运算符都具有确定的优先级和结合性。C语言常用运算符的优先级和结合性如
表3.2所示,可以用圆括号来改变运算符的执行顺序。
表3.2常用运算符的优先级和结合性
第3章 数据的运算处理 49
程序中应该避免使用晦涩并且容易出错的表达式。可以在容易出错或不确定的地方按照自己的本意给表达式适当加括号,也可以将复杂的表达式拆分为多个子表达式,然后分别计算子表达式的值。
3.2逻辑运算
逻辑思维最基本的功能就是能够分辨各种情况,这些各种可能的情况称为逻辑条件。
通常采用关系运算和逻辑运算来表达逻辑条件,关系运算可以看作是逻辑运算的简单形式,较复杂的逻辑条件就需要采用逻辑运算来表示。
引例3.2判断闰年
【问题】对于给定的年份,判断该年是否是闰年。
【想法】闰年是满足下列条件之一的年份:①能被4整除,但不能被100整除;
②能被400整除。
【算法】设变量year表示年份,则条件①可以表示为:year % 4等于 0 并且 year % 100 不等于0,条
件②可以表示为:year % 400等于0,年份year只要满足条件①和②之一即是闰年。算法用伪代码描述如下:
【程序】由于年份year只要满足条件①和②之一即是闰年,因此,闰年的判定条件是(year % 4 == 0 && year %100 != 0) || (year % 400 == 0),程序如下:
#include<stdio.h>
int main ()
{
int year = 2014;
if ((year % 4 == 0 && year %100 != 0)‖(year % 400 == 0))
printf("%d年是闰年\n", year);
else
printf("%d年不是闰年\n", year);
return 0;
}
运行结果如下:
2014年不是闰年
50
程序设计基础——从问题到程序(第2版)
第3章 数据的运算处理 51 3.2.1 关系运算
所谓关系运算就是比较运算,也就是将两个值进行比较,比较的结果取决于编译系
统采用的字符集,常用的字符集是ASCII 码。例如,对于a > 5,如果a 的值为8则满足a > 5(即a > 5成立),如果a 的值为3则不满足a > 5(即a > 5不成立)。
由关系运算符、运算对象和圆括号组成的式子称为关系表达式。关系表达式的运算
对象是任何可以进行比较的数据,在C 语言中,可以是整型、实型或字符型;关系表达式的运算结果是逻辑值,即只有逻辑真和逻辑假两个值。
【语法】 关系表达式的一般形式如下: 运算对象 关系运算符 运算对象
其中,运算对象可以是常量、变量,还可以是表达式;C 语言的关系运算符如表 3.3 所示。
表3.3 C 语言的关系运算符 运算符 运算规则 运算类型 运算对象 运 算 结 果 举 例
< 小于
5 < 3, x < y
<= 小于等于
3 <= 3, x <= 2
> 大于 5 > 3, x > y
>= 大于等于 3 >= 3, 2 >= x
= = 等于 3 == 3, x == 2
!= 不等于 二目 整型、实型 或
字符型 满足则为真(1) 不满足则为假(0) 3 != 3, x != 2
【语义】 执行关系运算符定义的比较运算,若满足该关系表达式,则结果为真(1),否则结果为假(0)。
3.2.2 逻辑运算
由逻辑运算符、运算对象和圆括号组成的式子称为逻辑表达式。C 语言规定参与逻
辑运算的运算对象可以是整型、实型和字符型;逻辑表达式的运算结果是逻辑值,即只有逻辑真和逻辑假两个值。
【语法】 逻辑表达式的一般形式如下:
其中,运算对象可以是常量、变量,还可以是表达式;C 语言的逻辑运算符如表3.4
或
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论