注册 登录
编程论坛 新人交流区

书上错了吗?

nofarewell 发布于 2007-10-20 13:46, 722 次点击
书上说这两个程序运行结果不同,我都运行了,结果却是一样的.有人能告诉我为什么吗?谢谢了
1

#include <iostream.h>
void main()
{
int i;
static int s;
for(i=1;i<10;i++)
{
s=0;
s=s+i;
if(s>8)
break;
}
cout<<s<<endl;
}

2

#include <iostream.h>
void main()
{
int i,s;
for(i=1;i<10;i++)
{
s=0;
s=s+i;
if(s>8)
break;
}
cout<<s<<endl;
}

书上说把s定义为静态变量的那个运行结果应为11 我运行了,结果和第二个一样是9

另还有一个问题,一起问了:
语句:
int a=1,i=1,b;
b=a&&i++;
执行后i的值为多少?
能帮我把执行过程一步步列出来吗?先执行哪一步后执行哪一步,谢谢了:)
正在家里自学,也没人可问,只好发到论坛问各位大侠了

[此贴子已经被作者于2007-10-20 14:05:39编辑过]

23 回复
#2
nofarewell2007-10-20 14:09

哪位懂的帮我看一下啊 谢谢啦

#3
nofarewell2007-10-20 14:25

谁帮忙看一下

#4
rediums2007-10-20 14:27

你的代码没有打错吧??

int a=1,i=1,b;
b=a&&i++;

执行b=a&&i++这句的时候可以这样看b=(a&&i++);因为赋值的优先级最低;先做a&&i,此时a=1,i=1,所以a&&i结果为true,也就是1,把1赋值给b,也就是b=1,最后做i++,所以i=2,所以最后结果为b=1,i=2。

i++的意思是先求i所在完整表达式的值,然后在做++操作

[此贴子已经被作者于2007-10-20 14:45:01编辑过]

#5
nofarewell2007-10-20 15:17
先谢了
前缀后缀++操作符的我知道,不过这道题还是不太清楚.我把原题打出来吧,麻烦你再帮我看看
下列逻辑运算符的说法正确的是:
A 它们都是双目运算符,优先级相同;
B 语句"int a=0,i=1,b;b=a&&i++;"执行后,i的值为2
C 语句"int a=1,i=1,b;b=a||i++;"执行后,i的值为2
D 语句"int a=1,i=1,b;b=a&&i++;"执行后,i的值为2

照你的意思说,BCD三个选项执行后i值都为2啊 因为i++都是最后运算的

另:上面那一题的代码我确定没有打错 那么简单的几行 核对过很多遍了 我在网上下的电子书,是不是这样的书错误较多
#6
nofarewell2007-10-20 15:31
帮我看看啊 自学真麻烦 5555555555555555
#7
yoyo_shm2007-10-20 15:38
没错 。。。。。
#8
nofarewell2007-10-20 16:02

书上说的没错
我指出来的没错
自学真烦没错

哪个没错
#9
rediums2007-10-20 17:12
我在调试器里看了一下,B 和C里面的i最后值为1
#10
cjz_4992007-10-20 17:29

我也不懂

#11
rediums2007-10-20 17:33
从书上找到了两条规则:
运算符&&:对于A && B,只有在A为ture的情况下才会对B求值;
运算符||:对于A || B,只有在A为false的情况下才会对B求值;

(注:规则只限于内部类型)
#12
nofarewell2007-10-20 17:35
晕,我明白了,短路和开路计算吧 谢谢啊
第一题帮我看了吗?
#13
rediums2007-10-20 17:43
编译器的输出结果就是9呀
??
#14
a030512242007-10-20 19:39
1.首先逻辑运算符的优先级为:非,与,或;

下面的执行结果与编译器处理逻辑运算的方式有关,且逻辑运算符的优先级高于赋值运算符,先执行逻辑运算:
2.int a=0,i=1,b;b=a&&i++; //编译器先判断a是否为非零,因a=0,又是与运算,故不再判断i,也不执行执行i++,i = 1;

3.int a=1,i=1,b;b=a||i++;//编译器先判断a是否为非零,因a=1,又是或运算,故不再判断i,也不执行执行i++,i = 1;

4.int a=1,i=1,b;b=a&&i++;//编译器先判断a是否为非零,因a=1,又是与运算,故再判断i,执行执行i++,i = 2。
#15
nofarewell2007-10-20 19:58
那就是书上错了 别理它  这本书上的习题不是很好 编程题看着也很怪异  我还是另找一本吧
#16
rediums2007-10-20 20:44

我估计书上的意思应该是把那个s=0移到for循环的外面去

#17
Wǒの小小菜鸟2007-10-20 21:41
#18
影王子2007-10-20 21:56
我都看糊涂了。。。
#19
succubus2007-10-21 00:32
书上显然错了
#20
c36bcqlm2007-10-21 06:23
那个 输入输出头函数  我这里没有怎么办??
#21
leo86852007-10-21 06:27
好像没错。
#22
rediums2007-10-21 10:08
以下是引用leo8685在2007-10-21 6:27:51的发言:
好像没错。

没错你倒是解释一下呀,TMD废话!

#23
scanning2007-10-21 11:39

for的每次循环都给S重新定义了一次 剩下的你自己要思考了 要不没提高了

#24
diaoxue2007-10-21 11:50
多看看++
静态变量啊
1