资源描述:
《C语言学习3运算符.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C语言学习3——运算符3.1:C语言中的运算符就是我们平时所说的加减乘除等,那么在C语言中,它们有着怎样的先后顺序呢,看表3—1:运算符结合性()从左到右+-(一元运算符)从右到左*/从左到右+-(二元运算符)从左到右=从右到左表3—1:常用运算符及优先级当两个运算符共享一个操作数时,具有较高优先级的运算符先被运算。如果运算符有相同的优先级,结合性(从左到右还是从右到左)决定了哪个运算符先被应用。例如:y=2*6/3;*和/共享了操作数6,而*和/又着同样的优先级,所以由结合性(从左到右)来决定运算顺序,即先
2、算*再算除。我们再来看个简单的额难问题(这不是病句哦),y=2*3+6*7,表达式中的加号分别于两个乘号共用了操作数3和6,有优先级可知先,3先与第一个乘号结合,6与第二个乘号结合。但问题是,计算机先计算2*3还是先计算6*7呢?您可能说,明显是从左到右嘛,这只是我们平时计算的习惯,计算机是不确定的,因为结合性(从左到右还是从右到左)只适用于同等优先级的运算符共享同一个操作数。幸运的是,计算机不管先计算2*3还是先计算6*7,结果是一样的,只是随着硬件的不同,计算的速度不同而已。3.2:下面我们再来看下取模运
3、算符:%取模运算符用于整数运算,取模运算符就是求两个整数相除的余数。例如:11%5的结果是1、3%2的结果是1.对于两个整数取模很容易计算和理解,那么负数的取模运算按照什么规则呢?C99规定了,第一个操作数是负数,那么模也是负数,如果第一个操作数是正数,那么模也是正数。例如:11%5的结果是1、11%-2的结果是1、-11%-5的结果是-1、11%-5的结果是1。3.3:增量和减量运算符:++--这两运算符算是比较难的了,记得大学里老师讲的也云里雾里的。下面我们看程序3.1/*函数名:main输入参数:无输出
4、参数:无调用函数:printf()被调用:无功能:验证运算符++和--*/#includevoidmain(void){inti_num=0;inti_width=0;i_num++;++i_width;printf("i_num=%d,i_width=%d",i_num,i_width);}程序3.1:++num与num++的区别上面的程序运行完i_num和i_width分别是多少呢?看看下面的运行结果:当时看到这个结果,我都要哭了,因为,大学老师讲++在变量的前面与后面是不一样的,结
5、果我反复的翻阅资料终于找到了原因!当单独使用这些增量运算符时(例如i_num++),那么++放在变量的前后是一样的,也就是说++num与num++的结果是一样的,当该运算符及其操作数是一个更大的表达式的一部分时(例如:width=num++与width=++num),两种情况就不一样了。下面我看程序3.2/*函数名:main输入参数:无输出参数:无调用函数:printf()被调用:无功能:验证运算符++和--*/#includevoidmain(void){inti_num=0;inti_w
6、idth=0;intm,n;m=i_num++;n=++i_width;printf("m=%d,n=%d,i_num=%d,i_width=%d",m,n,i_num,i_width);}程序3.2:++num与num++的区别我们用上面的结论来看看程序3.2运行完m,n,i_num,i_width的值分别是多少。“m=i_num++;”该语句是将i_num先赋值给m,然后自己再自加,所以m=0,i_num=1;“n=++i_width;该语句是将i_width先自加1再将自加后的值赋给n,所以n=1,
7、i_width=1.下面让我们看看运行的结果是否如此:一句话总结,当n++是表达式的一部分时,先使用n然后将它的值加1;++n则是先加一再使用加完后的n.下面提出一个问题:x=2;y=3;x*y++与x*++y的值分别是多少?++的优先级仅低于(),所以x*y++可写成x*(y++),其结果自然是2*3=6.后面一个就由您来验证吧。自减运算符与自增运算符是一个道理,这里就不详细讲解了。看了自增运算符时,您可能觉的这挺酷的,想尽快运用的程序里。但在您使用之前,我还需要提出几点要注意的地方,减少您以后使用中遇到的
8、麻烦。注意点1:如果一个变量出现在同一个函数的多个参数中时,不要使用自增运算符。例如:假设num的初始值是1那么printf(“%10d%10d”,num,num*num++)打印出的结果是什么呢?这是不确定的,因为printf()获取要打印的值时,它可能先计算第二个参数,也就是说num先自加,那么结果是绿色的num是1、橙色和红色的的num是2,也就是说打印出的结果是2、2.而如果printf