• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 初中学习 > 正文

    [C语言自增\自减运算符的应用] 自增自减从右至左

    时间:2019-01-05 03:29:50 来源:雅意学习网 本文已影响 雅意学习网手机站

      摘 要: Ca语言的一个主要特点是运算符丰富、范围广。灵活地使用各种运算符可以实现在其它高级语言中难以实现的运算。本文主要对C语言中自增、自减两个运算符的使用作详细说明。
      关键词: C语言 自增、自减运算符 功能 运算规则
      
      C语言中的运算符非常丰富,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。在这些运算符中,最难理解、最易出错也最为灵活的便是自增、自减运算符。下面我详细归纳了使用自增、自减运算符时的注意事项,并结合运算符的优先级和其本身的特点,对Turbo C环境下的自增、自减运算符的功能与运算规则加以分析。
      1.自增、自减运算符的作用及形式
      C语言中的自增运算符“++”和自减运算符“--”的作用是使运算对象的值增1或减1,如i++,相当于i=i+1;i--,相当于i=i-1。因此,自增、自减运算本身也是一种赋值运算,其运算对象只要是标准类型的变量,不论是字符型、整型、实型或是枚举型都可作为运算对象,而由于常量和表达式不占存储单元,因此不能使用常量或表达式作运算对象,如1++、(a+b)--等都是非法的。
      自增、自减运算符有两种使用形式:前置式(++i,--i)和后置式(i++,i--)。前置式中先使i加减1,再使用i,后置式中先使用i,再使i加减1。
      2.自增、自减运算符的应用
      很多C语言教材和参考书都说明自增、自减运算符具有“从右向左”的结合性,并且由于操作数只有一个,属于单目操作,因此优先级也高于其它双目运算符和三目运算符的优先级。但在实际的编程中我们发现,自增、自减运算符的运算规则在不同的表达式中也不尽相同。下面我们就从自增、自减运算符的以下几点应用来进行分析。
      2.1自增、自减运算符在赋值表达式中的应用。
      例1:main()
       {int i=1,j=2,k;
       k=i+++j;
       printf("k=%d,i=%d,j=%d\n",k,i,j);
       }
      这里的i+++j是理解成i+(++j),还是理解成(i++)+j呢?Turbo C编译处理将自左向右解释为(i++)+j,而不是i+(++j),因此程序运行结果为:k=3,i=2,j=2。
      2.2自增、自减运算符在条件表达式中的应用。
      例:main()
       {int i=1,j=3,k;
       k=i>j?++i:++j;
       printf("k=%d,i=%d,j=%d\n",k,i,j);
       }
      由于程序中的“i>j?++i:++j”是一个条件表达式,虽然自增运算符的优先级比条件运算符的优先级高,但在程序运行时,先对i是否大于j进行判断,由于(i>j)为假,因此只需计算++j,j自增后为4,而对于++i并不计算,i仍为1,程序的运行结果为:k=4,i=1,j=4。
      2.3自增、自减运算符在逻辑表达式中的应用。
      例:main()
       {int i=0,j=1,k=2,x;
       x=++i||++j&&++k;
       printf("x=%d,i=%d,j=%d,k=%d\n",x,i,j,k);
       }
      程序中的赋值语句“x=++i||++j&&++k;”在执行时,虽然里边包含三个自增运算:++i、++j和++k,而自增运算符的优先级又高于逻辑运算符的优先级,但在Turbo C中实际只执行了++i,对++j和++k并没有执行。这是因为在C语言中针对||运算符和&&运算符在使用的时候有一个规定:在一个复杂的逻辑表达式中,若前面子表达式的值能够决定整个表达式的值,则后面的子表达式不需计算。在表达式x=++i||++j&&++k中,++i的值为1,它与后面的子表达式++j&&++k进行||运算,它能够决定整个表达式的值,后面的++j和++k无需执行,因此程序的运行结果为:x=1,i=1,j=1,k=2。
      2.4自增、自减运算符和其它单目运算符的应用。
      例:main()
       {int i=1,j;
       j=-i++;
       printf("%d,%d\n",i,j);
       }
      程序中对于同一个运算对象i而言,-和++都是单目运算符,优先级相同,那么到底是先运算-i呢,还是先运算i++。由于单目运算符具有从右向左的结合性,所以i先于右边的运算符++结合,即先计算i++,在计算-i,表达式等价于-(i++)。程序运行结果为:2,-1。
      2.5自增、自减运算符在函数中的应用。
      例:main()
       {int i=3;
       printf("%d,%d\n",i,i++);
       }
      在调用函数时,对实参的求值顺序,C标准并无统一规定。在有的系统中,从左至右求值,程序运行结果为:3,3。但在多数系统(如:Turbo C)中对函数参数的求值顺序是从右向左,上面printf函数中药输出两个表达式的值(i和i++),先求出第二个表达式i++的值3(i未自增时的值),然后在求解第一个表达式的值,由于在求解第二个表达式后,i自增1,i变为4,所以printf函数中的第一个参数i的值为4,程序运行结果为:4,3。
      为了避免出现类似错误,程序最好改写成:
      main()
       {int i=3,j;
       j=i++;
       printf("%d,%d\n",i,j);
       }
      综上所述,在使用自增、自减运算符时,若在表达式或语句中只包含一种操作时(自增或自减),则前置式和后置式的作用都是一样的,都是使变量加1或减1。若自增、自减运算符和其它运算符联合使用时,就需根据从不同运算符优先级和结合性两点上综合考虑变量的变化方式。若在函数调用中使用自增、自减运算符时,我们要考虑不同的系统中处理方法不尽相同,所以对于初学者而言,若是不能熟练的掌握自增、自减运算符的使用,就需避免写出别人看不懂,也不知道系统会怎样执行的程序,尽量在比较单一的表达式中实现程序。总之,掌握好C语言的运算符、表达式对编写简洁明快、清晰易懂的程序非常重要。
      
      参考文献:
      [1]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.
      [2]杨路明.C语言程序设计[M].北京:北京邮电大学出版社,2003.
      [3]黄维通,马力妮.C语言程序设计[M].北京:清华大学出版社,2003.
      [4]宗大华,蒋玮.C语言程序设计[M].人民邮电出版社,2003.
      [5]秦玉平,戴心来.C语言中的自增自减运算[J].渤海大学学报,2004,(4):368.
    本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

    推荐访问:运算符 语言

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章