昨天说到了赋值运算符,今天接着讲其他的运算符。
· 加法运算符:+ 。加法运算符肯定是用来算加法的,即使其两侧的值相加。例如:printf("%d",4 + 20) ; 其打印结果不是4+20而是24(其实这在前面的博文中已经用过)。当然他也可以用于两个变量相加,就像:a = b +c,诸如此类。但是这里要注意了 a,b,c, 都是变量,也就是左值(准确的说是可修改的左值),但他们组成表达式的是时候b + c就是右值了
· 减法运算符: - 。减法运算符当然是用于做减法的,大体上和加法相同。
· 值得一提的是+和-运算符都被称为二元运算符,即需要两个对象才能完成操作。减号还可以用于标明或改变一个值的代数符号,如:a = - 1,这种方式的减号被称为一元运算符,即只需要一个运算对象,加号+也是如此
· 乘法运算符:* 。其实基本用法都一样,就像这样:a = b * c; 在C语言中没有平方函数,如果要打印一个平方数,就要通过乘法来完成。
/*squares.c -- 打印平方表*/
#include <stdio.h>
int main (void)
{
int n = 1;
printf("打印平方表\n");
while(n <=20)
{
printf("%4d %6d\n", n, n*n);
n = n + 1;
}
return 0;
}
输出结果为:
打印平方表
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
11 121
12 144
13 169
14 196
15 225
16 256
17 289
18 324
19 361
20 400
这里依然使用的while循环来完成重复计算,我们可以改动()内的值,得到更多的平方数,
· 除法运算符: / 。用起来就像这样:a = b / c。但是做除法会遇到有小数的情况,在这里整数除法与浮点数除法不同。整数除法的结果依然是整数,只保留整数部分,小数点后的会直接截去,不会四舍五入进一位。浮点数除法的结果依然是浮点数。那么问题来了,整数除以浮点数或者浮点数除以整数的结果又是什么呢?
/*divide.c --- 整数除以浮点数*/
#include <stdio.h>
int main (void)
{
printf("10/3.0 的结果是:%f \n",10/3.0);
return 0;
}
输出: 10/3.0 的结果是:3.333333
正是浮点数。其实计算机在做这个运算时,是把整数转换成浮点数来计算的。
下面来讲一个故事,国王和小麦的故事。有一天国王问智者想要什么赏赐,智者说要小麦。国王轻蔑一笑,不就是小麦,老子多的是,问智者:“你想要多少都给你。”智者说指着棋盘说:“我要在棋盘里装小麦,第一个放一粒,第二个放两粒,以此类推到第64格。”国王哈哈大笑:“小意思,都给你。”智者也哈哈大笑:“你先算算要给我多少吧,辣鸡。”
好吧我随便讲的。
下面来算算国王要给多少小麦,和世界产量相比又怎么样
/*wheat.c 国王和小麦*/
#include <stdio.h>
#define SQUARES 64//棋盘共64格
int main(void)
{
const double CROP = 2E16;//世界小麦年产量谷粒数
double current, total;
int count = 1;
printf("square grains total fraction of \n");
printf(" added grains world total \n");
total = current = 1.0;
printf("%4d %13.2e%12.2e %12.2e\n", count, current, total, total / CROP);
while(count < SQUARES)
{
count = count + 1;
current = 2.0 *current;
total = total +current;
printf("%4d%13.2e %12.2e %12.2e\n", count, current, total, total / CROP);
}
printf("That's all. \n");
return 0;
}
来看看输出结果(其实我是拒绝的)
square grains total fraction of
added grains world total
1 1.00e+000 1.00e+000 5.00e-017
2 2.00e+000 3.00e+000 1.50e-016
3 4.00e+000 7.00e+000 3.50e-016
4 8.00e+000 1.50e+001 7.50e-016
5 1.60e+001 3.10e+001 1.55e-015
6 3.20e+001 6.30e+001 3.15e-015
7 6.40e+001 1.27e+002 6.35e-015
8 1.28e+002 2.55e+002 1.27e-014
9 2.56e+002 5.11e+002 2.55e-014
10 5.12e+002 1.02e+003 5.12e-014
11 1.02e+003 2.05e+003 1.02e-013
12 2.05e+003 4.10e+003 2.05e-013
13 4.10e+003 8.19e+003 4.10e-013
14 8.19e+003 1.64e+004 8.19e-013
15 1.64e+004 3.28e+004 1.64e-012
16 3.28e+004 6.55e+004 3.28e-012
17 6.55e+004 1.31e+005 6.55e-012
18 1.31e+005 2.62e+005 1.31e-011
19 2.62e+005 5.24e+005 2.62e-011
20 5.24e+005 1.05e+006 5.24e-011
21 1.05e+006 2.10e+006 1.05e-010
22 2.10e+006 4.19e+006 2.10e-010
23 4.19e+006 8.39e+006 4.19e-010
24 8.39e+006 1.68e+007 8.39e-010
25 1.68e+007 3.36e+007 1.68e-009
26 3.36e+007 6.71e+007 3.36e-009
27 6.71e+007 1.34e+008 6.71e-009
28 1.34e+008 2.68e+008 1.34e-008
29 2.68e+008 5.37e+008 2.68e-008
30 5.37e+008 1.07e+009 5.37e-008
31 1.07e+009 2.15e+009 1.07e-007
32 2.15e+009 4.29e+009 2.15e-007
33 4.29e+009 8.59e+009 4.29e-007
34 8.59e+009 1.72e+010 8.59e-007
35 1.72e+010 3.44e+010 1.72e-006
36 3.44e+010 6.87e+010 3.44e-006
37 6.87e+010 1.37e+011 6.87e-006
38 1.37e+011 2.75e+011 1.37e-005
39 2.75e+011 5.50e+011 2.75e-005
40 5.50e+011 1.10e+012 5.50e-005
41 1.10e+012 2.20e+012 1.10e-004
42 2.20e+012 4.40e+012 2.20e-004
43 4.40e+012 8.80e+012 4.40e-004
44 8.80e+012 1.76e+013 8.80e-004
45 1.76e+013 3.52e+013 1.76e-003
46 3.52e+013 7.04e+013 3.52e-003
47 7.04e+013 1.41e+014 7.04e-003
48 1.41e+014 2.81e+014 1.41e-002
49 2.81e+014 5.63e+014 2.81e-002
50 5.63e+014 1.13e+015 5.63e-002
51 1.13e+015 2.25e+015 1.13e-001
52 2.25e+015 4.50e+015 2.25e-001
53 4.50e+015 9.01e+015 4.50e-001
54 9.01e+015 1.80e+016 9.01e-001
55 1.80e+016 3.60e+016 1.80e+000
56 3.60e+016 7.21e+016 3.60e+000
57 7.21e+016 1.44e+017 7.21e+000
58 1.44e+017 2.88e+017 1.44e+001
59 2.88e+017 5.76e+017 2.88e+001
60 5.76e+017 1.15e+018 5.76e+001
61 1.15e+018 2.31e+018 1.15e+002
62 2.31e+018 4.61e+018 2.31e+002
63 4.61e+018 9.22e+018 4.61e+002
64 9.22e+018 1.84e+019 9.22e+002
That's all.
还是把结果那出来了,可以加好多好多字数。。。
其实这个程序里用到了基本运算符和上一章的内容,比如count限定符、#define等重点内容,所以还是打了一遍。
下面来讲一下优先级
优先级其实也很简单,先举个例子:butter = 25.0 + 60.0 * n / SCALE ,这个表达式。。。小学生都知道怎么算。这是没有括号的情况,有括号小学生应该也知道怎么算。
就这样吧。。。。。。