c语言中字符减减自符意思,C语言中的自加自减运算
【摘 要】C语言中运算符十分丰富,自加运算和自减运算是c语言的教学中的重点和难点,但我们只要在教学中抓住运算的基本定义,通过经典题型分析和适度深入解析,就不难达到熟练应用之目的。
【关键词】运算的定义;经典题型;深度解析
C语言作为一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特征,编程功能十分强大。C语言定义了丰富的运算,多达40余种,这给c语言的学习带来了一定的困难。++运算(自加运算)和--运算(自减运算)正是这些运算中极具特点而又非常重要的两种运算,在教学中,历来是教学的难点,而关于这方面的系统的讲解资料又很难找到,本人在c语言教学中,对++和--运算就教学中碰到的问题,做了一些探索性的研究,现归纳总结,以期与同行共勉。
一、运算的定义
1. ++(自加运算)的定义
++(自加运算)是单目运算,且只能以变量为运算对象,如i++,++a等(i,a为已定义变量),它等效于i=i+1(a=a+1),但是,自加运算又有自己的特点――与其它运算的相关性,虽然对变量i来讲,i++与++i没有什么区别,但当i++和++i还参与其它运算时,i++和++i对整个运算结果的影响是不同的,例如有如下程序段:
int i=1 ,s ;
s=(i++)+1;
printf(“i=%d;s=%d\n”,i,s);
其运行结果是:i=2;s=2
若将程序中s=(i++)+1;换为s=(++i)+1;其它不变,其运行结果就会变为:i=2;s=3 ,此处我们可以看到: i++与++i的不同,并不影响i本身的结果,但却对s的值产生了不同的影响,这是因为系统在处理++i时先对i进行了加1运算,即:i=i+1,然后才参与其它运算,而在执行i++时,现将i的值参与其它运算,然后才给自己加1,所以得到的s的值是不同的,这正是++(自加运算)与众不同的地方。
2. --(自减运算)的定义
与自加运算类似,--(自减运算)也是单目运算,且只能以变量为运算对象,若i为已定义变量,i的自减运算分为--i和i-- ,两者对i自身的作用是一样的,即i=i-1 ,但当它们还参与其它运算时,--i先执行自减1运算,然后以i的值参与其它运算,i--则先以i值参与其它运算,然后对i进行自减1运算。
二、经典题型
下列程序执行后输出结果是什么?
main()
{int a=100;
printf(“a++=%d;”,a++); */①/*
printf(“++a=%d;”,++a); */②/*
printf(“a--=%d;”,a--); */③/*
}
当程序执行到①时,输出表达式a++,由于自加符++后置,故先输出a的值100,然后a自加1,即执行完①后输出“a++=100”,a的值是101。
当程序执行到②时,输出表达式++a,由于自加符++前置,故a先自加1变为102,然后输出a的值102,即执行完②后输出“++a=102”,a的值是102。
当程序执行到③时,输出表达式a--,由于自加符--后置,故先输出a的值102,然后a自减1,即执行完③后输出“a--=102”,a的值是101。
综上所述,程序输出结果为:
a++=100;++a=102;a--=102
小结:该题目只要深刻领会++(--)运算在运算符前置和后置时,对其参与的其它运算(操作)的处理时机是不同的,前置时先进行自加1(自减1)运算,再进行其它运算(操作),后置时先参与其它运算(操作),再进行自加1(自减1)运算。
三、深度解析
1. 分析下列程序执行后的输出结果
#include
main( ){
int i =1,j=2, p=0,q=0 ;
printf(“%d,%d,%d,%d”, p+i , j++ , q+j ,-- i ); */⑤/*
}
很多同学分析:在程序执行到⑤时 p+i输出1(0+1=1) ;j++输出2(j=2),j=2+1=3 ;q+j输出3(0+3=3);--i输出0(1-1=0) 。得到的结果是:1 ,2 ,3 ,0 。然而上机运行的结果却是:0 ,2 ,2 ,0 ,这是为什么呢?原来,turboC在printf()函数中,处理表达式列表的顺序是从右到左进行的,如果在表达式列表中不包含自加(自减)运算,从哪边开始处理数据都不会影响运算结果,但是,如果表达式列表中包含了自加(自减)运算,这个“处理数据的顺序”就会影响到数据的运算结果。正确的做法是先处理―i,输出0(1-1=0);其次是q+j,输出2(0+2=2);再次是j++,输出2(j=2,执行j++后j=3);最后是p+i,输出0(0+0=0),处理完毕后按原来顺序输出结果:0,2,2,0 。
结论:turboC在printf(“字符串”,表达式列表)函数中,处理表达式列表的顺序是从右到左进行的,如果在表达式列表中包含自加(自减)运算,运算起来就要十分细心。
2.分析如下程序输出结果:
#include
main( ){
int i=5,j=5,p,q;
p=(i--)+( ++ i)+(i++); */ ⑥/*
q=(++j)+( j++); */ ⑦/*
printf(“%d,%d,%d,%d”,p,q,i,j);
}
严格的讲,程序中⑥、⑦中的表达式是不符合C语言语法规范的。尽管如此,但在实际当中,我们仍会经常碰到类似的题目,而且这些题目在机器上运行也会有特定的结果,因此在这里我仍然想探讨一下其解法。
笔者经过反复推敲,找到了一种解决这类问题的办法,并在实际应用中与机器执行的结果符合的很好。
我的思路是:将⑥或⑦中右侧表达式的运算分为3类:前置(自加或自减)运算、后置(自加或自减)运算和加(减)法运算,首先要进行的是前置运算,其次执行加(减)法运算,最后执行后置运算。如(i--)+( ++ i)+(i++),其中中间的自加运算为前置运算,其前后的自减运算和自加运算都是后置运算,首先进行前置运算,即++i,执行后i=5+1=6;然后执行加法运算,即3个i相加;结果为6+6+6=18,最后执行后置运算,即i=6+1-1=6 。所以题目中p=18,i=6。同理(++j)+( j++)中++j为前置运算,j++为后置运算,先进行前置运算j=5+1=6;然后执行加法运算,即2个j相加6+6=12;最后进行后置运算j=6+1=7 。所以题目中q=12,j=7,程序最后运行结果为:18,12,6,7 。以上方法可扩展到任何含有自加(自减)运算的运算表达式中。
四、结论
当一个表达式中含有多个自加(自减)运算时,可将运算分为前置运算、后置运算和其它运算,按照先执行前置运算,然后执行其它运算,最后执行后置运算的法则,可得到正确的运算结果。
对C语言的教学而言,能让学生理解到以上的深度,我认为教学的任务就完成了,至于更深层次的研究就是他们以后的事了,希望本文能给广大C语言教学工作者带来便利!
参考文献:
[1] Dennis M. Ritchie等. The C programming Language [M].U.S:Prentice Hall,1988
[2]周查金等. C语言程序设计.北京:高等教育出版社,2000.5
c语言中字符减减自符意思,C语言中的自加自减运算相关推荐
- c语言中字符怎么表示6,6、C语言中的字符串
一.C语言中的字符串 字符串是一种重要的数据类型,但是C语言并没有显示的字符串数据类型,不像java有String ,OBC有NSString等等.所以C语言中的字符串一般以字符串常量的形式出现或者存 ...
- c语言统计字符数组上字母和数字,C语言问题求数组中的字母数字字符个数 – 手机爱问...
编个程序要求满足以下功能将字符串数组中每一行中的大写字母A.B.C都换成数字2,并且去除字符串中的连字符号'-',但是数字保持不变.设字符串数组有3行.例如:字符串内容为:输出的内容为A-BC-CBC ...
- c语言检查字符数组不为空,【C语言】检查输入是否为空,如为空,程序退出
检查用户输入是否为空行,如果输入为空,程序将退出:如不为空,屏幕打印输入的字符串. #include char input[257], *ptr; int main(void) { puts(&quo ...
- c 语言输出字符用什么作用是什么,C语言中输出字符串用什么符号
C语言中输出字符串用双引号. (推荐教程:c语言教程) 详细解读: 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串. ...
- C语言中字符数据超过127,如何用C语言显示ascii码超过127的字符
C语言的程序代码如下: #include "stdio.h" main() {inti; for (i=1;i<256;i++) { printf("%c &quo ...
- c语言计算器实现简单的四则运算.(加,减,乘,除)实验报告,C语言数据结构“简单计算器。”1、简单计算器。请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程...
共回答了23个问题采纳率:82.6% #include #define MaxSize 99 void trans(char str[],char exp[]) /*将算术表达式转换成后追表达式*/ ...
- 计算机c语言基础字符,2008计算机二级考试:C语言基础教程-C语言字符型数据
2.5.1字符常量 字符常量是指用一对单引号括起来的一个字符.如'a','9','!'.字符常量中的单引号只起定界作用并不表示字符本身.单引号中的字符不能是单引号(')和反斜杠(\),它们特有的表示法 ...
- c语言实验--字符编码,费诺编码的C语言实现实验论文.doc
费诺编码的C语言实现实验论文 #include //头文件 #include #include #define Bmax 10 //最长码长度 #define Smax 20 //数组最大长度 /** ...
- matlab中字符表示,(专题一)07 matlab中字符串的表示
matlab中,字符串使用单引号括起来的字符序列 >>xm='Central South University' >>xm(1:3) ans= Cen 截取1--3这三个字符, ...
- excel 替换 换行符_在Excel中查找和替换换行符
excel 替换 换行符 When you want to create a line break (line feed) in a cell, you press Alt + Enter, to s ...
最新文章
- Android RecyclerView 基本使用
- linux如何添加默认路由表_Linux-如何添加路由表
- 一些SQL性能优化的实用经验
- Python 比特币 教程 之一:创建机器人
- 《分布式系统:概念与设计》一3.5.2 IEEE 802.11无线LAN
- 英学者研究60亿次通话记录发现:好友再多也没用,最好朋友就4个
- 腾讯后台开发面试题--整理1
- 【Linux】 linux的进程系统一点补充
- JUnit 3一个例子就懂
- Web端口复用正向后门研究实现与防御
- Multiresolution Recurrent Neural Networks: An Application to...
- 计算机专业术语全称及含义整理
- EpsonL360清零软件+清零方法
- 谈谈键盘A键不定期失灵问题
- openlayers 地图源
- Python的特殊属性和用法
- tree--树,最常见的复杂关系结构
- C语言对于轴对称图形输出的分析
- Centos7防火墙与IPTABLES详解
- 找出耗电大户进行消灭 电池持久有绝招——下载加速吧