C Primer Plus学习_11 基本运算符和优先级

昨天说到了赋值运算符,今天接着讲其他的运算符。

·       加法运算符:+  。加法运算符肯定是用来算加法的,即使其两侧的值相加。例如: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 ,这个表达式。。。小学生都知道怎么算。这是没有括号的情况,有括号小学生应该也知道怎么算。

就这样吧。。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值