以下程序输出的结果是A)42B)45C)56D)60main(){int p[8]={11,12,13,14,15,16,17,18

来源:百度知道 编辑:UC知道 时间:2024/06/08 20:11:46
以下程序输出的结果是
A)42 B)45 C)56 D)60

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);}
答案是B,为什么从i不从0开始,i++不是先运算后自加吗,我想应该有11啊

i是从0开始的,i++也是先运算后自加的。
while第一次循环时,i=0,因为i++是先运算后自加,所以当运行到if(p[i]%2)时,i此时由0自加为1即p[1],while第二次循环时,i=1,当运行到if(p[i]%2)时,i此时为2即p[2],以此类推,while循环6次,if(p[i]%2)条件为真时,i的值分别为:2,4,6;即p[2]=13,p[4]=15,p[6]=17,j=13+15+17=45

第一次循环:i++<7时,i=0,但是,p[i]%2的时候i就变成1了。12除2取余为0。无操作下次循环。这样就把p[0]错过了~就是p[2]p[4]p[6]相加,得45.