当前位置: 代码迷 >> C语言 >> [求助] if和 while 的问题
  详细解决方案

[求助] if和 while 的问题

热度:99   发布时间:2006-06-12 11:43:06.0
也是56。我上面的是45!!!!!你们再看看
----------------解决方案--------------------------------------------------------
if(p[i]%2)只要不等于0就可以了 只要为真就可以
----------------解决方案--------------------------------------------------------
i++写在while()里 和后边的语句中不一样;

while(i++ < 7)
首先 i=0;
判断0<7;
然后i++
i=1;

再执行后边的语句if(p[i]%2) ;
这时候i的值为1;
if(p[1]%2);

while(i < 7)
i=0;
判断i<7;
i值仍然是0;
再执行后边的语句if(p[i]%2) ;
if(p[0]%2);


两个表达式执行的数组元素不一样;

while(i++ < 7) p[1]->p[7];

while(i < 7) p[0]->p[6];

请指点下 我这样说对不?





----------------解决方案--------------------------------------------------------

#include <stdio.h>
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++ < 7)
{
if(p[i]%2)
{
j+=p[i];
}
}
printf("%d\n",j);
}
不等价于
include <stdio.h>
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i< 7)
{
if(p[i]%2)
j+=p[i];
i++;
}
printf("%d\n",j);
}
我是这么认为的
你执行了while(i++<7)后立刻执行了i=i+1这一句即等同于
include <stdio.h>
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i< 7)
{ i++;
if(p[i]%2)
j+=p[i];

}
printf("%d\n",j);
}
而此循环进行到i=6的时候终止虽然最后i=7,当i=0第一次执行p[i]%2时候不是执行p[0]%2而是p[1]%2
此时p[1]=12,p[1]%2==0 所以不执行j+=p[i];i=1时候 执行p[2]%2这个时候为真 执行j+=p[i];依次推下去
最后结果就是13+15+17=45.


----------------解决方案--------------------------------------------------------
最后结果是45..程序功能是奇数相加,但是并没有把11加上。
----------------解决方案--------------------------------------------------------
  相关解决方案