欧阳老师 发表于 2021-3-16 17:34:53

西交《程序设计基础》拓展资源(二)

西交《程序设计基础》拓展资源(二)
有趣的自加、自减运算
前记:
同学们在学习和以后的运用中,会经常看到++i,i++,--i,i—等类似格式的语句。刚开始学习时,这个地方看起来有一点难度,因为++/--的位置不一样会影响i当前的值和传递给下一步操作的值。不过这个++/--在写程序过程中有很重要的作用,如效率高、程序简洁等。所以我们今天提前了解下这部分的基础知识,后面还有一个小程序例子和解析步骤,大家结合步骤进行思考后,这部分就会很简单了。
基础概念:
1)单目运算符:指只需要一个操作数的运算符(如-1中的-,而1+1需要两个运算符,则+为双目运算符)
代表符号:!(逻辑非),~(按位取反),++(自增),--(自减);
例:int a=1;a++;(第二句“a++”则只对a一个变量进行了操作)。
2)双目运算符:指这个运算符对两个变量进行操作;
例:int a=1,b=2,c;c=a+b;(第二句“c=a+b”则是对a,b两个变量进行了操作)
3)三目运算符:指这个运算符对三个变量进行操作;
代表符号: (表达式)?:(a : b)
对于有些选择分支结构,可以使用简单的条件运算符来代替.如
if(a<b)        min=a;
else                min=b;
可以用下面的条件运算符来处理 min=(a<b)?a:b;
实际例子:
下面是一道增量表达式的题,要求写出程序的运行结果。
main()
{         int m=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d\n",n++,++m); }
题目分析:根据++位置的不同,变量是先自加还是先被读取送给表达式,是有区别的。
因此,第一个printf语句等效为:n = n+1;       
printf("%d%d",m,n);       
m = m+1;
故其打印的内容为1235;
第二个printf语句则可替换为                m = m+1;
printf("%d%d\n", n, m);
n = n+1;
该printf打印的内容为3514;
因第一个printf没有输出回车符,故两句printf输出的内容是紧挨着的,实际上是12353514。
对于逗号表达式(注意:函数参数列表不是逗号表达式),每两个相邻逗号之间可以对一个变量加加一次,而且不管加加在变量前还是后面,在进入下一个逗号之前,加加操作必须完成。
例如a = 1;        b = (a++, a++);        则执行完后,a为3, b为2,任何编译器上都会是这样。
过程是:第一个逗号前的操作完成之后,才进入第一个逗号后的表达式。而第一个操作完成之后,a为2;进入第二个a++之前,a已经是2,b得到的就是逗号分开的最后一个表达式的值,即2。
上面第二句等价于 a++;         b = a++;
假设a = 1;        b = (a++, ++a);        则执行完后,a b均为3
上面第二句等价于a++;         b = ++a;         所以,上面两个逗号前面的a++均可等效地替换为++a。本内容由易百网整理发布
网址 www.openhelp100.com
联系方式QQ 515224986
页: [1]
查看完整版本: 西交《程序设计基础》拓展资源(二)