s cats + dogs – ponies -data
计算这些表达式,都会得到一个数值。注意,变量名也是一个表达式,它的计算结果是一个值,即该变量包含的值。最后一个例子的值是data的负值,所以如果data包含-5,表达式-data的值就是5。当然,data的值仍是-5。稍后将详细讨论如何构建表达式,并学习运算规则。这里先用基本算术运算符做一些简单的例子。表2-1列出了这些算术运算符。
表2-1 基本算术运算符
| 运 算 符 |
动 作 |
| + |
加 |
| - |
减 |
| * |
乘 |
| / |
除 |
| % |
取模(Modulus) |
应用运算符的数据项一般称为操作数,两边的操作数都是整数时,所有这些运算符都生成整数结果。前面没有提到过取模运算符。它用运算符左边的表达式值去除运算符右边的表达式值,并求出其余数,所以有时称为余数运算符。表达式12 % 5的结果是2。因为12除以5的余数是2。下一节将详细介绍。所有这些运算符的工作方式都与我们的常识相同,只有除法运算符例外,它应用于整数时有点不直观。下面进行一些算术运算。
注意:
应用运算符的值称为操作数。需要两个操作数的运算符(如%)称为二元运算符。应用于一个值的运算符称为一元运算符。因此-在表达式a-b中是二元运算符,在表达式-data中是一元运算符。
试试看:减和乘
下面基于食物的程序演示了减法和乘法:
// Program 2.5 Calculations with cookies
#include
int main(void)
{
int cookies = 5;
int cookie_calories = 125; //Calories per cookie
int total_eaten = 0; //Total cookies eaten
int eaten = 2; // Number to be eaten
cookies = cookies - eaten; // Subtract number eaten fromcookies
total_eaten = total_eaten + eaten;
printf( I have eaten %d cookies. There are %d cookies left,
eaten, cookies);
eaten = 3; // New value for cookies eaten
cookies = cookies - eaten; // Subtract number eaten from cookies
total_eaten = total_eaten + eaten;
printf( I have eaten %d more. Now there are %d cookiesleft , eaten, cookies);
printf( Total energy consumed is %dcalories. , total_eaten*cookie_calories);
return 0;
}
这个程序产生如下输出:
I have eaten 2 cookies. There are 3 cookies left
I have eaten 3 more. Now there are 0cookies left
Total energy consumedis 625 calories.
代码的说明
首先声明并初始化3个int类型的变量:
int cookies = 5;
int cookie_calories =125; //Calories per cookie
int total_eaten = 0; //Total cookies eaten
在程序中,使用变量total_eaten计算吃掉的饼干总数,所以要将它初始化为0。
下一个声明并初始化的变量存储吃掉的饼干数,如下:
inteaten = 2; // Number to be eaten
用减法运算符从cookies中减掉eaten:
cookies= cookies - eaten; //Subtract number eaten from cookies
减法运算的结果存回cookies变量,所以cookies的值变成3。因为吃掉了一些饼干,所以要给total_eaten增加吃掉的饼干数:
total_eaten= total_eaten + eaten;
将eaten变量的当前值2加到total_eaten的当前值0上,结果存储回变量total_eaten。printf()语句显示剩下的饼干数:
printf( I have eaten %d cookies. There are%d cookies left,
eaten, cookies);
这个语句在一行上放不下,所以在printf()的第一个参数后的逗号后面,将该语句的其他内容放在下一行上。可以像这样分拆语句,使程序易于理解,或放在屏幕的指定宽度之内。注意不能用这种方式拆分第一个字符串参数。不能在字符串的中间放置换行符。需要将字符串拆开成两行或多行时,一行上的每一段字符串必须有自己的一对双引号。例如,上面的语句可以写成:
printf( I have eaten %d cookies.
There are %d cookies left,
eaten, cookies);
如果两个或多个字符串彼此相邻,编译器会将它们连接起来,构成一个字符串。
用整数值的转换说明符%d将eaten和cookies的值显示出来。在输出字符串中,eaten的值取代第一个%d, cookies的值取代第二个%d。字符串在显示之前会先换行,因为开头处有一个 。
下一个语句将变量eaten的值设为一个新值:
eaten= 3; // New value for cookies to beeaten
新值3取代eaten变量中的旧值2。然后完成和以前一样的操作序列:
cookies = cookies - eaten; // Subtract numbereaten from cookies
total_eaten =total_eaten + eaten;
printf( I have eaten %d more.Now there are %d cookies left , eaten, cookies);
最后,在执行return语句,结束程序前,计算并显示被吃掉饼干的卡路里数:
printf( Totalenergy consumed is %d calories. , total_eaten*cookie_calories);
printf()函数的第二个参数是一个算术表达式,而不是变量。编译器会将表达式total_eaten*cookie_calories的计算结果存储到一个临时变量中,再把该值作为第二个参数传送给printf()函数。函数的参数总是可以使用算术表达式,只要其计算结果是需要的类型即可。
下面看看除法和取模运算符。
试试看:除法和取模运算符
假设你有一罐饼干(其中有45块饼干)和7个孩子。要把饼干平分给每个孩子,计算每个孩子可得到几块饼干,分完后剩下几块饼干。
// Program 2.6 Cookies and kids
#include
int main(void)
{
int cookies = 45; //Number of cookies in the jar
int children = 7; //Number of children
int cookies_per_child = 0; //Number of cookies per child
int cookies_left_over = 0; // Number of cookiesl