《C语言程序设计》一 2.3 运算符和表达式

2.3 运算符和表达式

在前面的例子程序中已经多次用到基本的运算。运算符是表示某种操作的符号,操作的对象叫操作数,用运算符把操作数连接起来形成一个有意义的式子叫表达式。C语言为了加强对数据的表达、处理和操作能力,提供了大量的运算符和丰富的表达式类型,其中最常用的是算术运算符和赋值运算符。

2.3.1 算术运算符与算术表达式

算术运算符分为一元算术运算符和二元算术运算符两类,一元算术运算符只需要一个操作数,放在运算符的后面,二元算术运算符需要两个操作数,操作数写在运算符两边。
1.C语言提供的算术运算符
C语言提供了如下算术运算符:
+(正号、加法运算符)
–(负号、减法运算符)
*(乘法运算符)
/(除法运算符)
%(求余运算符)
两个整数相除结果还是整数,如8/3结果为2。如果参加运算的两个数中有一个是实型,则结果为double型。
求余运算符要求%两侧都是整型数据,表达式x%y的结果为两数相除后的余数,如果x能被y整除,则结果为零。求余运算符不能应用到float型或double型。
2.算术表达式的计算
用算术运算符把常量、变量、函数等运算对象连接起来,称为算术表达式,如a+b*c-2+‘a’是一个合法的算术表达式,表达式的结果为一个算术值。运算符都有优先级和结合性,因此在求表达式的值时,要按照优先级的高低依次计算,如果一个运算量两侧运算符优先级相同,则按规定的结合方向进行。
算术运算符的优先级与代数中相同,即先乘除,后加减,结合性是从左到右,如当表达式中有多个加法或减法,则按从左到右的顺序求值。算术运算符的优先级见表2-3。

编写程序时,应能将代数表达式用正确的算术表达式表示出来。例如:
1)求三个数的算术平均值:

这里必须使用括号改变运算的次序,如果不使用括号,根据运算符的优先级a + b + c/3的计算结果为a+b+。
2)根据三角形三边计算三角形面积:

表达式中使用开平方根函数sqrt(),使用函数时后面必须使用一对括号,把所有参数括进去,括号可以嵌套,但要保证配对正确。
3)根据半径计算圆的周长:
代数表达式:s=2πr
算术表达式:s=23.14159r
表达式中使用了常量π,但是π不是C/C++字符集中的字符,因此用3.141 59表示。

2.3.2 赋值运算符与赋值表达式

C语言中“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。
1.简单的赋值运算符
简单赋值就是把一个表达式的值赋给一个变量,格式为:

变量名 = 表达式

例如:

i = 1                   /将数值1赋给变量i/
count = count + 1       /计算count+1的值并赋给变量count/
sum = i1 + i2           /计算i1+i2的值并赋给变量sum/

2.复合的赋值运算符
算术运算符与“=”结合在一起,形成复合的赋值运算符。例如:

i += 2等价于i = i + 2
a %= 3等价于a = a % 3
a  = b + 5等价于a = a (b + 5)

对于复杂表达式,例如:

yyval[yypv[p1+p2] + yypv[p3+p4]] += 2

使用复合的赋值运算符简化了程序,使程序很容易理解,因为读者不必检查两个长表达式是否一致。赋值运算符也有利于编译,产生高质量的目标程序。
3.赋值表达式的计算
对赋值表达式求解的过程是:将赋值运算符右侧的表达式的值赋给左侧的变量。赋值表达式的值就是被赋值的变量的值。例如“x = 3”这个赋值表达式的值为3,而变量x的值也是3。
赋值运算符按照“自右向左”的结合顺序,如赋值表达式“a = b = 8”的计算顺序是:
1)首先计算“b = 8”的值,它的值等于8。
2)再计算“a = 8”,即a的值等于8,整个赋值表达式的值也等于8。
又比如,如果a的初值为6,赋值表达式“a += a-= a *= a”的求解步骤为:
1)先进行“a = a”的运算,它相当于a=aa=6*6=36。
2)再进行“a -= 36”的运算,它相当于a=a-36=36-36=0。
3)最后进行“a += 0” 运算,它相当于a=a+0=0+0=0。

2.3.3 数据类型的转换

当运算符两侧操作数的数据类型不同时,它们会按照提升规则自动进行类型转换,使二者具有同一类型,然后再进行运算。转换的规则见图2-2。
图2-2中横向向左的箭头表示必定的转换,如字符型(char)数据和短整型(short)必定先转换成整型(int),单精度浮点型(float)必定先转换为双精度浮点型(double),以提高运算精度。
图2-2中纵向的箭头表示当运算符两侧操作数的数据类型不同时自动转换的方向。数据总是由低级别向高级别转换,例如,一个int型数据与一个double型数据进行运算,则先将int型直接转换为double型,然后在两个同类型(double)数据之间进行运算;如果一个int型与一个long型数据进行运算,则将int型转换为long型再进行运算。
在进行赋值运算时也发生类型转换,右侧的值转换为左侧的值。例如,x为float型,i为int型,当进行x=i和i=x赋值操作时会引起类型转换。转换是按如下规则进行的:
1)char型转换为int型时没有变化。
2)long型转换为short型或char型时,截掉多余的高位信息。
3)float、double型转换为int型时,小数部分会被截掉。
在任何表达式中都可以强制类型转换。其形式为:

(类型名)表达式

例如,库函数sqrt()需要一个double型的参数,如果n是一个整型数,我们可以使用sqrt((double)n) 把n的值转换为double型。注意,在强制类型转换时,得到了一个所需类型的中间变量,原来变量n的类型并未发生变化。例如,有程序片段:

float x;  int i;
x = 3.6;
i = (int)x;
printf("x=%f,i=%d\n", x , i);

运行结果如下:

x=3.600000, i=3

x的类型仍为float型,值仍等于3.6。
总之,在程序设计中,表达式的应用应注意两点,首先是考虑如何将代数式表示成正确的表达式,其次是考虑运算符的优先级、结合性及参与运算的数据类型的逐步转换问题。

时间: 2024-12-03 10:04:56

《C语言程序设计》一 2.3 运算符和表达式的相关文章

《C语言程序设计与实践(第2版)》——导读

前言 C语言程序设计是一门理论与工程实践密切相关的专业基础课程,在计算机学科教学中具有十分重要的地位.大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养.通过本课程的学习,学生应培养良好的编程风格,掌握常见的算法思路,真正提高运用C语言编写程序解决实际问题的综合能力,为后续课程的实践环节打好基础. 目前国内关于C语言的教材较多,有些教材语法知识介绍细致,较适合作为非专业的等级考试类教学用书:有些教材起点较高,内容深奥,不适于初学者.为了帮助广大学生更好地掌

《C语言程序设计与实践(第2版)》——第3章 基本数据类型和表达式 3.1基本语法单位

第3章 基本数据类型和表达式 本书第2章从总体上介绍了一个C程序的基本结构,使读者对C程序有了大概的了解.本章将详细介绍C语言程序中使用的基本语法单位.数据类型.运算符和表达式. 3.1 基本语法单位 任何一种语言都会根据自身的特点规定它自己特定的一套基本符号.例如,英语的基本符号是26个英文字母和一些标点符号. C语言作为一种程序设计语言,也有它自己的基本符号,这些基本符号就组成了程序.3.1.1 基本符号 程序中要对各种变量和各种函数起名,这些变量名.函数名都是由语言的基本符号组成的.C语言

《C语言程序设计》一导读

前 言 程序设计基础是计算机课程体系中的第一门重要的基础课程.因为C语言是使用最广泛的语言之一,它具有完备的高级语言特性,语言简洁紧凑.灵活方便,具有丰富的运算符和数据类型,生成目标代码质量高,程序执行效率高,可移植性好,是高校计算机专业和非计算机专业的首选语言,所以,本书以C语言作为编程语言进行讲解. 本书以解决实际问题的程序设计思想作为出发点,选择C语言作为编程语言,突出结构化程序设计方法,介绍常用的数组.链表等数据结构,以及递归.递推.排序.查找等算法的设计. 本书的主要特色有: 1.教学

c语言-请问怎么学好《C语言程序设计教程》

问题描述 请问怎么学好<C语言程序设计教程> 这本书下学期就要学了,可是看着迷迷糊糊,看不懂,有没有什么学习的捷径?什么配套的辅导书比较好?谢谢! 解决方案 简单来说,就是Reading+Coding. 阅读入门可以从谭浩强的<C程序设计>开始,国人所写比较符合我们的思维习惯,但是过于基础,许多细节问题没有讲到,所以看完那本可以接着看看<C语言深度解剖>. 另外还有两本国外的C语言经典著作<C程序设计语言><数据结构与算法分析--C语言描述>,可

c语言程序设计运动会统计

问题描述 c语言程序设计运动会统计 .问题描述: 参加运动会的N个学校编号为1-N.比赛分为M个男子项目和W个女子项目,项目编号分别为1-M和M+1-M+W.由于各项目的参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1:还有些项目只取前三名,得分顺序为5,3,2(哪些取前五名或前三名自己设定).写一个统计程序产生各种成绩单和得分报表. 2.功能要求: 1)界面要求有合理提示,每个功能可以设立菜单:2)输入数据形式和范围:可以输入学校名称,运动项目名称.3)输出形式:有中文提示,各

C语言的基本运算符和表达式

C语言运算符的种类.优先级和结合性 C语言中运算符和表达式数量之多, 在高级语言中是少见的.正是丰富 的运算符和表达式使C语言功能十分完善. 这也是C语言的主要特点之一. C语言的运算符不仅具有不同的优先级 , 而且还有一个特点,就是它的结合性.在表达式中, 各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规 定,还要受运算符结合性的制约, 以便确定是自左向右进行运算还是自右向左进行运算. 这种结合性是其它高级语言 的运算符所没有的,因此也增加了C语言的复杂性. 运算符的种类C语言的运算符可

C语言初级讲座之运算符和表达式

运算符的种类.优先级和结合性 C语言中运算符和表达式数量之多,在高级语言中是少见的.正是丰富的运算符和表达式使C语言功能十分完善. 这也是C语言的主要特点之一. C语言的运算符不仅具有不同的优先级,而且还有一个特点,就是它的结合性.在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算还是自右向左进行运算. 这种结合性是其它高级语言的运算符所没有的,因此也增加了C语言的复杂性. 运算符的种类C语言的运算符可分为以下几类: 1.算

C语言学习教程第三章-C语言程序设计初步(4)

分支结构程序 关系运算符和表达式 在程序中经常需要比较两个量的大小关系, 以决定程序下一步的工作.比较两个量的运算符称为关系运算符. 在C语言中有以下关系运算符:< 小于<= 小于或等于 > 大于>= 大于或等于== 等于!= 不等于 关系运算符都是双目运算符,其结合性均为左结合. 关系运算符的优先级低于算术运算符,高于赋值运算符. 在六个关系运算符中,<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同.关系表达式关系表达式的一般形式为:

C语言学习教程第三章-C语言程序设计初步(1)

C语言程序设计 本课介绍C语言程序设计的基本方法和基本的程序语句.从程序流程的角度来看,程序可以分为三种基本结构, 即顺序结构.分支结构.循环结构. 这三种基本结构可以组成所有的各种复杂程序.C语言提供了多种语句来实现这些程序结构. 本章介绍这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后面各章的学习打下基础. C程序的语句 C程序的执行部分是由语句组成的. 程序的功能也是由执行语句实现的.C语句可分为以下五类:1.表达式语句2.函数调用语句3.控制语句4.复合语句5.空语句 1.表