C 使用运算符(operator)来代表算术运算。基于算术运算的运算符包括:=、+、-、*、/。
bwm = 2000;
赋值运算符(assignment operator)“=”不表示“相等”,而是一个赋值运算符。上面的赋值语句读为:“将值2000赋给变量 bwm”。赋值运算符的动作是从右到左。赋值运算符的左边应该是一个可修改的左值。
几个术语:数据对象、左值、右值、操作数
income = salary + bribes;
加法运算符(addition operator)“+”使得在它两侧的值被加到一起。操作数可以是常量也可以是变量。上面的语句先查找右边两个变量的值,将它们加起来,最后将这个和赋给变量 income。
takehome = 224-24;
减法运算符(subtraction operator)“-”从它左边的数中减去它右边的数。操作数可以是常量也可以是变量。上面的语句从224中减去24,最后将差值赋给变量 takehome。
“+”和“-”被称为二元(binary)或双值(dyadic)运算符,表示它们需要两个操作数。
rocky = -12;
smokey = -rocky;
负号“-”可以用于指示或改变一个值的代数负号。上面的语句将值12赋给变量 smokey。当这样使用负号时,称它为一元运算符,表示它只需要一个操作数。
正号“+”不改变它的操作数的值或符号,只是使您能够使用下面的语句而编译器不会报错。
dozen = +12;
cm = 2.54 * inch;
乘法运算符“*”将其左右两边的值相乘。上面的语句将2.54与变量 inch 的值相乘,然后将结果赋给 cm。
four = 12.0/ 3.0;
除法运算符“/”使其左边的值被其右边的值除。上面的语句将3.0除12.0,得到值4.0赋给变量 four。
整数除法运算和浮点数除法运算有很大不同。整数除法运算产生一个整数结果,浮点数除法运算产生一个浮点数结果。在 C 中,整数除法采取“趋零截尾”原则,舍弃整个小数部分。如:7/4=1;而7.0/4=1.75。
C 通过建立一个运算符的优先顺序来满足运算需求。
运算符 | 结合性 |
( ) | 从左到右 |
+ -(一元运算符) | 从右到左 |
* / | 从左到右 |
+ -(二元运算符) | 从左到右 |
= | 从右到左 |
当两个运算符共享一个操作数时,优先级规定了求职的顺序。有同样优先级的运算符共享一个操作数时,根据结合性进行运算。如:12/3*2,* 和 / 有相同的优先级,因此根据结合性从左到右进行运算,结果为8。(如果从右到左,结果为2,错误)
sizeof 运算符以字节为单位返回其操作数的大小。操作数可以是一个具体的操作对象,或者一个类型。C 规定 sizeof 返回 size_t 类型的值,这是一个无符号整数类型,可以使用 %zd(或 %u 或 %lu)作为 size_t 类型值的 printf() 说明符。
取模运算符(modulus operator)“%”只能用于整数运算。取模运算符计算出用它右边的整数去除它左边的整数所得到的余数。
C99 规定:不管在什么情况下,如果 a 和 b 都是整数值,a % b = a - (a / b) * b。
增量运算符(increment operator)将其操作数的值增加1。
减量运算符(decrement operator)将其操作数的值减去1。
增量和减量运算符的优先级仅低于圆括号。运算原则:当 n++ 是表达式的一部分时,它表示:“先使用 n,再将 n 的值增加”;同理,当 ++n 表示:“先将 n 的值增加,再使用 n”。该原则对减量运算符同样适用。
表达式(expression)由运算符和操作数组合构成。最简单的表达式是一个单独的操作数,以此为基础可以建立复杂的表达式。一些表达式是多个较小的表达式的组合,这些小的表达式被称为字表达式。每个表达式都有一个值。
语句(statement)是构成程序的基本成分,程序(program)是一系列带有某种必须的标点的语句集合。一个语句是一条完整的计算机指令。在 C 中,语句用结束处的一个分号标识。如:legs = 4 是一个表达式,而 legs = 4; 是一个语句。
复合语句(compound statement)是使用花括号组织起来的两个或更多的语句,也被称为代码块(block)。
int toes; /*声明语句:*/
toes = 10; /*赋值语句:*/
printf("%d\n", toes); /*函数调用语句:*/
while(toes < 20) toes = toes + 2; /*结构化语句:*/
; /*空语句:*/
while(years < 2018) /*复合语句:*/
{
wisdom = wisdom * 1.05;
printf("%d %d", years, wisdom);
years = years + 1;
}
指派运算符(cast operator)的一般形式为:圆括号和其中的类型名。下例中,mice 为 int 变量:
mice = 1.6 + 1.7;
mice = (int)1.6 + (int)1.7;
第一条语句使用自动转换:先将1.6与1.7相加,得到3.3,然后通过截尾被转换成3赋值给 mice,最终 mice 值为3。
第二条语句使用指派运算符,先将1.6和1.7转换为整数(1),再相加得到2,赋值给 mice,最终mice值为2。
#include
void pound(int n); /*函数原型*/
int main(void)
{
int weight = 150;
pound(weight); /*函数调用*/
return 0;
}
void pound(int n) /*函数定义*/
{
printf("You are %d pounds weight.\n", n);
}
函数原型:void pound(int n);
函数头:void pound(int n)
编程练习参考程序