中易网

C程的自运算在循环是到-1就停止?

答案:2  悬赏:40  
解决时间 2021-10-26 00:56
C程的自运算在循环是到-1就停止?
最佳答案
这个要看仔细了:
while (y--); 后面有个 分号
所以这条语句执行后  y 就变成了 -1
y-- 是先把 y 的值返回再 y 自减1,当y为0时条件不满足退出,但 此时 y又要自减1,变成了-1,应该很好理解 吧。
全部回答
计算机具有逻辑判断能力,其判断的依据是计算机内部进行逻辑运算的结果。C语言提供了关系运算和逻辑运算,用来构造C程序控制中的条件,实现程序的选择结构和循环结构控制。   关系运算和逻辑运算的结果都是逻辑值,即"真"和"假"。由于C语言中没有逻辑型数据,因此C语言规定用整型数据来表示逻辑值。即:用整数值1表示逻辑"真",用整数值0表示逻辑"假"。在C语言中,将非0就视为"真"。 3.4.1 关系运算符与关系表达式   1. 关系运算符   关系运算实际上是逻辑比较运算,它是逻辑运算中的一种。关系运算符的作用是确定两个数据之间是否存在某种关系。C语言规定的6种关系运算符及其有关的说明见表3-6。   表3-6 算术运算符   运算符 含义 运算对象个数 结合方向 简例   > 大于 双目运算符 自左至右 a>b,3>8   > = 大于等于 双目运算符 自左至右 a>=b,3>=2   < 小于 双目运算符 自左至右 a<b,3<8   < = 小于等于 双目运算符 自左至右 a<=b,3<=b   ! = 不等于 双目运算符 自左至右 a!=b,3!=5%7   = = 恒等于 双目运算符 自左至右 a==b,3==5*a   关系运算符都是双目运算符,其结合性是从左到右结合。优先级分为两级:   高级:<、<=、>、>=   低级:==、!=   关系运算符的优先级低于算术运算符。   2. 关系表达式   用关系运算符将两个表达式连接起来的式子称为关系表达式。它的一般形式为:   表达式1 关系运算符 表达式2   其中,关系运算符指明了对表达式所实施的操作。"表达式1"和"表达式2"是关系运算的对象,它们可以是算术表达式、关系表达式、逻辑表达式、  赋值表达式和字符表达式。但一般关系运算要求关系运算符连接的两个运算对象为同类型数据。例如:   a+b>3*c 两个算术表达式的值作比较   (a=b)<(b=10%c) 两个赋值表达式的值作比较   (a<=b)==(b>c) 两个关系表达式的值作比较   'A'!='a' 两个字符表达式的值作比较   关系式只有两种可能的结果:或者它所描述的关系成立,或者这个关系不成立,所以说一个关系表达式描述的是一种逻辑判断。若关系成立,说明关系式表述的关系是"真"的,称逻辑值为"真",用1表示;若关系不成立,说明关系式表述的关系是"假"的,称逻辑值为"假",用0表示。所以关系表达式的运算结果一定是逻辑值。   进行关系运算时,先计算表达式的值,然后再进行关系比较运算。例如:   a=2,b=3,c=4,则上述关系表达式的值为:   a+b>3*c (5>12)关系不成立 表达式结果值为0(假)   (a+=b)<(b*=10%c) (5<6) 关系成立 表达式结果值为1 (真)   (a<=b)==(b>c) (1==0)关系不成立 表达式结果值为0(假)   'A'!='a' (65!=97)关系成立 表达式结果值为1(真)   以关系表达式"a+b>3*c"为例,因为算术运算的优先级高于关系运算,所以先计算a+b和3*c的值,结果分别为5和12,再将5和12进行关系比较,其运算结果为0。   在表达式中连续使用关系运算符时,要注意正确表达含义,注意运算优先级和结合性。   例如,变量x的取值范围为"0≤x≤20"时,不能写成"0<=x<=20"。因为关系表达式"0<=x<=20"的运算过程是:按照优先级,先求出"0<=x"的结果,再将结果1或0作"<=9"的判断,这样无论x取何值,最后表达式一定成立,结果一定为1。这显然违背了原来的含义。此时,就要运用下面介绍的逻辑运算符进行连接,即应写为:"0<=x && x<=9"。 3.4.2 逻辑运算符与逻辑表达式   1.逻辑运算符   C语言规定的3种逻辑运算符及其有关的说明见表3-7。   表3-7 逻辑运算符   运算符 含义 运算对象个数 结合方向 简例   && 逻辑与 双目运算符 自左向右 a&&b,3>8&&a==b   || 逻辑或 双目运算符 自左向右 a||b,3<=b8||a==b   ! 逻辑非 单目运算符 自右向左 !a,!a==b   逻辑运算要求运算对象为"真"(非0)或"假"(0)。这三种逻辑运算符的运算规则可用表3-8的真值表表示:       表3-8 逻辑运算真值表            a b a&&b a||b !a !b    0 0 0 0 1 1    0 非0 0 1 1 0    非0 0 0 1 0 1    非0 非0 1 1 0 0     在一个逻辑表达式中,可以含有多个逻辑运算符,其优先级是:"!"最高,"&&"次之,"||"最低;逻辑运算优先级低于所有关系运算,而"!"优先级高于所有算术运算。   例如:某程序中有如下说明:int a=3,b=1, x=2, y=0;则:   ① (a>b) && (x>y) 的值为1。   ② a>b && x>y 的值为1。   注意:①②两式是等价的,因为"&&"运算优先级低于关系运算,故括号可以省略。   ③ (y||b) && (y||a) 的值为1。   ④ y||b && y||a 的值为1。   注意:③④两式结果虽然一样,但两式的含义不同。③式中由于括号的优先级高于"&&",因此,先计算"y||b"和"y||a"后,再将两个结果进行"&&"运算。而④式由于"&&"的优先级高于"||",故要先计算"b&&y",其结果为0,再计算"y||0",其值也为0,最后计算"0||a",结果为1。由此可见,运算符的优先级制约着表达式的计算次序。   ⑤ !a || a>b 的值为1。   此式中"!"的优先级高于">",而 ">"的优先级高于"||",故先计算"!a",其值为0,再计算"a>b",其值为1,最后计算"0||1",值为1。 3.4.3 条件运算符与条件表达式   条件运算符是C语言中唯一具的三目运算符,就是说它有三个运算对象。条件运算符的形式是"? :"由它构成的表达式称为条件表达式。其形式为:   表达式1 ? 表达式2 : 表达式3   条件运算符的"?"个":"总是成对出现的。条件表达式的运算功能是:先计算表达式1的值,若值为非0,则计算表达式2的值,并将表达式2的值作为整个条件表达式的结果;若表达式1的值为0,则计算表达式3的值,并将表达式2的值作为整个条件表达式的结果。例如有以下条件表达式:   (a>b)?a+b:a-b   当a=8,b=4,c=3时,求解条件表达式的过程如下:   先计算关系式a>b,结果为1,因其值为真,则计算a+b的结果为12,这个12就是整个条件表达式的结果。请特别注意,此时不再计算表达式a-b了。如果关系式a>b的结果为0,就不再计算表达式a+b了。这一点在应用中很重要。   条件表达式的优先级高于赋值运算,但低于所有关系运算、逻辑运算和算术运算。其结合性是自右向左结合,当多个条件表达式嵌套使用时,每个后续的":"总与前面最近的、没有配对的"?"相联系。例如在条件表达式"a>0 ? a/b:a<0 ? a+b:a-b"中,出现两个条件表达式的嵌套,求解这个表达式时先计算后面一个条件表达式"a<0 ? a+b:a-b"的值,然后再与前面的"a>0 ? a/b:"组合。   使用条件表达式可以使程序简洁明了。例如,赋值语句"z=(a>b)?a:b "中使用了条件表达式,很简洁地表示了判断变量a与b的最大值并赋给变量z的功能。所以,使用条件表达式可以简化程序   例3-8:定义高等数学中常用的符号函数sign的数学定义如下。 .   对应的C函数定义如下:      double sign(double x)   { return x>0 ? 1:(x==0 ? 0:-1);   }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
用cdr设计台历一般规格为多少?
山西太原师范学院怎么样啊?
广州天河区广州大道北1098号属于广州哪个街道
什么牌子的显卡比较好??性价比较高?
南澳海关怎么去啊,我要去那办事
外国人如何过春节
凤岗有卖兰蔻保养品的美容店吗
飞鹤飞帆系列奶粉是听装好还是金装好?
日立电梯SJ300变频器为何容易坏!
燃气辐射管有哪些分类?
家庭火灾逃生预案
郑州哪里收寒假工
要如何丰面颊?
七星伴月来怎么解释
打除皱针多少钱
推荐资讯
小孩十四个月了发现右膝盖比左膝盖大这严重吗
跪求快速便捷瘦手臂方法阿亲~
吉利SRV车怎么样
五卅运动是哪一年?
荸荠有什么营养成分和功效?
每天晚上睡不着觉胡思乱想怎么办?
湖北省随州市马坪四中的邮编是多少?
北京市东燕郊天洋城是属于北京哪个区
冠捷高清显示器的报价单谁有?
为什么中通快递 单号778300129702查不到物流
无线集成块pt2260四路遥控开关电路板
刷墙多少钱一平,珠海刷墙哪家好啊?要专业刷
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?