上一节介绍了数据的类型,常量、变量的概念和定义,那么如何处理这些数据呢?可以用代表一定运算功能的运算符将运算对象连接起来,并且以符合C的语法规则构成一个说明运算过程的式子(即表达式)来完成对数据的处理。其运算对象包括常量、变量、函数等。
运算符是C语言里用于描述对数据进行运算的特殊符号。有了基本数据对象和运算符,就可以写出描述计算的表达式了。C语言具有丰富而繁多的运算符,由它构成了各种表达式,这是其他任何程序设计语言所不可比的。其中有些运算符已超出了一般“运算符”的概念,这为编写程序带来了很大的方便性和灵活性,使程序简洁而高效。但另一方面,由于运算符丰富也会产生不便于记忆、应用难度较高等问题。初学者一定要注意运算符、表达式和运算过程的使用规则,这是编程的基本条件。Turbo C ++ 3.0的运算符非常丰富,主要分为三大类:算术运算符,关系运算符与逻辑运算符,按位运算符。除此之外,还有一些用于完成特殊任务的运算符。下面分别进行介绍。
表2-3列出了C语言中允许的算术运算符。在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的用法相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。
表2-3 算术运算符
运 算 符 |
作 用 |
运 算 符 |
作 用 |
- |
减法,也是一元减法 |
% |
模运算 |
+ |
加法 |
-- |
自减(减1) |
* |
乘法 |
++ |
自增(增1) |
/ |
除法 |
|
|
一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其他语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。
下面的程序是说明“%”用法的程序段。
int x,y;
x=10;
y=3;
printf("%d",x/y); /*显示3*/
printf("%d",x%y); /*显示1,整数除法的余数*/
x=1;
y=2;
printf("%d,%d",x/y,x%y); /*显示0,1*/
最后一行打印一个0和一个1,1/2整除时为0,余数为1,故1%2取余数1。
赋值运算符构成了C语言最基本、最常用的赋值语句,同时C语言还允许赋值运算符“=”与10种运算符联合使用,形成组合赋值运算,使得C程序简明而精练。
赋值运算符用“=”表示,其功能是计算赋值运算符“=”右边表达式的值,并将计算结果赋给“=”左边的变量。例如:
n=12.3;/*直接将实型数12.3赋给变量n*/
c=a*b; /*将a和b进行乘法运算,所得到的结果赋给变量c*/
注意:赋值运算符“=”与数学中的等号完全不同,数学中的等号表示在该等号两边的值是相等的,而赋值运算符“=”是指要完成“=”右边表达式的运算,并将运算结果存放到“=”左边指定的内存变量中。可见,赋值运算符完成两类操作:一是计算,二是赋值。
由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。它的一般形式为:变量名=表达式
对赋值表达式的求解过程:计算赋值运算符右边“表达式”的值,并将计算结果赋值给赋值运算符左边的“变量”。赋值表达式“变量名=表达式”的值就是赋值运算符左边“变量”的值。例如,上面提到的算术表达式:(a+b+c)/(sqrt(a)+b*(+sin(y)+sin(z)))。
写成赋值表达式为:v=(a+b+c)/(sqrt(a)+b*(+sin(y)+sin(z)))。其中v是变量,赋值号右边是算术表达式,v的值就是这个算术表达式的值,也就是该赋值表达式的值。以下的赋值表达式表示:
i=5 /* 将常数5赋值给变量i,赋值表达式"i=5"的值就是5 */
a=3.5-b/* 计算算术表达式3.5-b的值并赋值给变量a */
x=(a+b+c)/12.4*8.5 /* 计算算术表达式(a+b+c)/12.4*8.5的值并赋值给变量x */
作为一个操作符,逗号把几个表达式串在一起。逗号操作符的左侧总是作为void(无值),这意味着其右边表达式的值变为以逗号分开的整个表达式的值。例如:
x=(y=3,y+1);
这行将3赋给y,然后将4赋给x,因为逗号操作符的优先级比赋值操作符优先级低,所以必须使用括号。
实际上,逗号表示操作顺序。当它在赋值语句右边使用时,所赋的值是逗号分隔开的表中最后那个表达式的值。例如:
y=10;
x=(y=y-5,25/y);
执行后,x的值是5,y的起始值是10,减去5之后结果再除以25,得到最终结果。在某种意义上可以认为,逗号操作符和标准英语的and是同义词。