c语言 s=1*2*3*…*n,求s不大于32767时最大的n.,c语言ppt课件第3章最简单的C程序设计.ppt...

c语言ppt课件第3章最简单的C程序设计

整型数据的溢出 一个型变量(2字节)的最大允许值为32767。 例3.3 main() {int a,b; a=32767; b=a+1; printf(“%d,%d”,a,b); } 运行结果为 32767,-32768 粗略地看,++i和i++的作用相当于i=i+1。但++i和i++不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。如果i的原值等于3,则: ①j=++i; j的值为4 ②j=i++; j的值为3,然后i变为4 又如: i=3; printf (”%d”,++i); 输出“4”。若改为 printf(”%d”,i++); 则输出“3”。 注意: (1)自增运算符(++),自减运算符(--),只能用于变量,而不能用于常量或表达式,如5++或(a+b)++都是不合法的。因为5是常量,常量的值不能改变。(a+b)++也不可能实现,假如a+b的值为5,那么自增后得到的6放在什么地方呢?无变量可供存放。 (2)++和--的结合方向是“自右至左”。见附录。如果有-i++,i的左面是负号运算符,右面是自加运算符。如果i的原值等于3,若按左结合性,相当于(-i)++,而(-i)++是不合法的。对表达式不能进行自加自减运算。从附录Ⅲ可知负号运算符和“++”运算符同优先级,而结合方向为“自右至左”(右结合性),即它相当于-(i++),如果有printf(”%d”,-i++),则先取出i的值使用,输出-i的值-3,然后使i增值为4。注意(i++)是先用i的原值进行运算以后,再对i加1,不要认为先加完1后再加负号,输出-4,这是不对的。 自增(减)运算符常用于循环语句中使循环变量自动加1。也用于指针变量,使指针指向下一个地址。这些将在以后的章节中介绍。 (3)在表达式中包含自加或自减运算时,很容易出错。 i ++或i--什么时候进行自加或自减呢?如果有以下赋值语句,若i原值等于3, k=i++; 显然先将i的原值赋给以k(k的值等于3),然后i进行自加,执行完此语句后,i的值等于4。如果有以下表达式: (i++)+(i++)+(i++) 表达式的值是多少呢?有人认为相当于3+4+5,即12。事实上用TurboC和MS C系统时它等于9。即先把i的原值(3)取出来,作为表达式中i的值;因此先进行三个i相加,得9。然后再实现自加,i的值变为6。而 k=(++i)+(++i)+(++i) 有人以为从左到右使i增值,相当于k=4+5+6,得15。事实上k=18。原因是:++i的自加是在整个表达式求解一开始时最先进行的,即对表达式扫描,先对i进行三次自加,i得6,然后进行k=6+6+6的运算,故得18。 (4) C语言中有的运算符为一个字符,有的运算符由两个字符组成,在表达式中如何组合呢?如i+++j,是理解为(i++)+j呢?还是i+(++j) ? C编译在处理时尽可能多地(自左而右)将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理),如i+++j,将解释为(i++)+j,而不是i+(++j)。 (5) C语言中类似上述这样的问题还有一些。例如,在调用函数时,实参数的求值顺序,C标准并无统一规定。如i的初值为3.如果有下面的函数调用: printf (“%d,%d”,i,i++) 在有的系统中,从左至右求值,输出“3,3”。在多数系统中对函数参数的求值顺序是自右而左,上面printf函数中要输出两个表达式的值(i和i++分别是两个表达式),先计算出i++的值再计算i的值,输出i++,是先输出i的值3然后使i加1变为4,这个4就成了printf函数中第一个参数i的值,因此上面printf函数输出的是“4,3”。 这些问题不必死记,不同系统的处理方法也不相同,必要时上机试一下即可。但应当知道使用C语言时可能出问题的地方,以免遇到问题时不知其所以然。 使用++和--时会出现一些人们“想不到”的副作用,初学者要慎用。 1.设int a=3,则执行a+=a-=a*a后,变量的值是 A) 3B)0C)9D)-12 2.设i=3,则计算表达式 i---i后表达式的值为 A)0B)1C)2D)表达式出错 3.设int a=b=c=2, 表达式a+++b+++c++的结果是 A)6B)9C)8D)表达式出错 4.以下不合法的字符常量是(2006年4月全国等级考试试题) ( ) A)′\01

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值