C语言,我哪里错了?

来源:百度知道 编辑:UC知道 时间:2024/05/14 19:26:05
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 ",j);
}
程序运行后的输出结果是45
我自己计算的过程是
j=0+11=11
j=11+13=24
j=24+15=39
j=39+17=46
最后得46,请问我哪里错了?
说错了 是56 我哪里错了?

11是不会运行的
while(i++<7) 运行后 i已经变成了1 此时判断P[1]即12
跳过,所以
j=0+13=13
j=13+15=28
j=28+17=45

当while(i++<7) 运行后,i变为了1,所以p[0]并没有加进去.
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=-1,j=0;
while(i++<7)
if(p[i]%2)
j+=p[i];
printf("%d ",j);
}
------------------------------------------------
或:
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
for(i=0;i<8;i++)
if(p[i]%2)
j+=p[i];
printf("%d ",j);
}

i++含义是先取i的值,然后i自加1.所以判断完i<7后
i的值已经是i+1了。所以刚开始执行时11将被跳过。
结果变成:13+15+17=45