注册 登录
编程论坛 C++教室

C++的问题,请解释一下,

yfbn 发布于 2007-09-07 18:54, 1163 次点击
#include<stdio.h>
void main()
{
int x=10,y=5,z=0;
if(x=y+z)printf("* * *");
else printf("@ @ @");
}
请解释以上为什么在 屏幕上显示的 ***而不是@@@谢谢!

#include<stdio.h>
void main()
{int x=6,y=2,z=10;
if(x<y)
if(y<0)z=0;
else z+=1;
printf("%d\n",z);
}
为什么输出的 结果是10呢、

[此贴子已经被作者于2007-9-7 19:35:37编辑过]

17 回复
#2
福尔摩斯2007-09-07 18:58
x=y+z

= 是赋值

判断:x==y+z
#3
PcrazyC2007-09-07 19:17
新手经常范的错误把==写成=

上面除非Y+Z=0,否则都会执行printf("* * *");
#4
yfbn2007-09-07 20:06
1)可以具体解释一下吗?就是说if(x=y+z)在这里是个多余的条件还有else printf("@ @ @");也是多余的吗
把x=y+z改为Y+Z=0程序报错,
2)程序我呢
这两个是习题上的我在电脑中运行了 ,但是我就是想不明白为什么着个答案,请高人指导!
#5
福尔摩斯2007-09-07 20:16
以下是引用yfbn在2007-9-7 20:06:51的发言:
1)可以具体解释一下吗?就是说if(x=y+z)在这里是个多余的条件还有else printf("@ @ @");也是多余的吗
把x=y+z改为Y+Z=0程序报错,
2)程序我呢
这两个是习题上的我在电脑中运行了 ,但是我就是想不明白为什么着个答案,请高人指导!

在if()括号判断中,只有0与非0,之分

0,表示否定,那么就不执行if后边的语句(执行else后边的语句)

非0,表示肯定,那么就执行if后比的语句(不执行else后边的语句)

x=y+z :是赋值,从右到左,所以 x=2+10=12(也就是说 x 被重新赋值,不再是6),非0,执行if后边语句

x==y+z :判断,判断语句的,这样的判断值只有2个:0和1 ;6==2+10 吗? 显然不等,所以值这个语句的值为0



至于:把x=y+z改为Y+Z=0程序报错

大小写区分

同时请你注意:

0=y+z也是错,因为常量不能为左值!

#6
PcrazyC2007-09-07 20:17
我是因为打五笔,打大写容易点,你肯定不能这样了,C语言是区分大写的,当然报错,我也没有要你那么改的意思,只是说按照你写的,只有y+z=0才会输出else printf("@ @ @");

你应该把x=y+z改成x==y+z,1楼不是说了么;

第二个题目,我把代码改一下,和你的效果一样,{}里的没有执行,直接运行PRINTF函数
[CODE]
#include<stdio.h>
void main()
{
int x=6,y=2,z=10;
if(x<y) //如果X<Y则执行{}里的,否则执行{}后面的
{
if(y<0)
{
z=0;
}
else //和最近的IF配对
{
z+=1;
}
}
printf("%d\n",z);
}
[/CODE]
#7
cince2007-09-07 22:51


楼上的。。顶你一下。。

呵呵。。说的够明白了
#8
cince2007-09-07 22:58


对于新手来说。最好用使用成对编码来写:
像这样子:

if()
{
...
}
else
{
...
}

尤其是一对对的括号一定要对好

不建议新手使用这样子:
if(...)
...
else
...
这样子自己都会很乱


还有就是:
我举一个简单的例子:
int main()
{
int i,b;
for(i=0;..)
{
...
}
}
这其中呢。

我个人的顺序写法是这样子的:
先写
for(i=0;)
{
}
然后再在前面加上:int i;

前提是:前面得留一行用于声类型的。


以上的纯粹是个人的风格。大家可以参考参考

#9
jokiye2007-09-08 09:56
= 赋值运算符.
if(x=y+z)的值为真.
#10
雨中飞燕2007-09-08 10:19
以下是引用cince在2007-9-7 22:58:55的发言:


对于新手来说。最好用使用成对编码来写:
像这样子:

if()
{
...
}
else
{
...
}

尤其是一对对的括号一定要对好

不建议新手使用这样子:
if(...)
...
else
...
这样子自己都会很乱


还有就是:
我举一个简单的例子:
int main()
{
int i,b;
for(i=0;..)
{
...
}
}
这其中呢。

我个人的顺序写法是这样子的:
先写
for(i=0;)
{
}
然后再在前面加上:int i;

前提是:前面得留一行用于声类型的。


以上的纯粹是个人的风格。大家可以参考参考

支持,我也是这样,写了for(),while(),if(),后面先写一对大括号
打常量字符串,先打引号再写中间



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/

#11
yfbn2007-09-08 13:05
回复:(PcrazyC)我是因为打五笔,打大写容易点,你肯定...

谢谢 ,按你 说的 运行成功!

只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-9-8 13:06:59编辑过]

#12
yfbn2007-09-08 13:29
以下是引用yfbn在2007-9-7 20:06:51的发言:
1)可以具体解释一下吗?就是说if(x=y+z)在这里是个多余的条件还有else printf("@ @ @");也是多余的吗
把x=y+z改为Y+Z=0程序报错,
2)程序我呢
这两个是习题上的我在电脑中运行了 ,但是我就是想不明白为什么着个答案,请高人指导!

为什么我 把 if中改为(x=y+z)输出的是***, 只有把if中改成x==y+z输出才能是@@@,

#13
PcrazyC2007-09-08 17:20
if(x=y+z)

x=y+z=0+5=5

由于5是真,所以输出的是***

而x==y+z,即,10==0+5,肯定为假了,所以输出@@@
#14
acrobat2007-09-08 17:24

因为x==y+z是条件表达式,而x=y+z是赋值表达式,所以if()语句不会做出错误判断的。

#15
PcrazyC2007-09-08 18:04
楼上的说得有点问题,错误判断的情况还是有的,假如y=-1,z=1;
x=y+z时,x=0,这个时候就会输出@@@了,因为O为假
#16
yfbn2007-09-09 13:35
谢谢谢谢,现在我明白了!!!
#17
冰的热度2007-09-09 13:48
明白了就好,
#18
snakeImao2007-09-10 14:17
C++中,用 0 表示bool值为false,用非零表示bool值为true .
1