C语言题目,题目不懂是什么意思,还有为什么选B,求详解

有以下程序voidmain(){intp[8]={1,2,3,4,5,6,7,8},i=0,j=0;while(i++<7)if(i%2)j+=p[i];printf("... 有以下程序
void main()
{
int p[8]={1,2,3,4,5,6,7,8},i=0,j=0;
while(i++<7) if(i%2) j+=p[i];
printf("%d\n",j);
}
程序运行后的输出结果是( B)。
A)16 B)20 C)36 D)0
展开
 我来答
峰枫lt
2013-01-09 · TA获得超过180个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:173万
展开全部
if(i%2) j+=p[i];应该是这句不懂吧。
if 后括号里是判断:i%2若等于零则不执行下面语句,回复循环。若i%2不等于零即执行下面语句。
因为C语言里表判断的时候零为假,非零为真。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友15dbac2
2013-01-09 · TA获得超过123个赞
知道答主
回答量:122
采纳率:0%
帮助的人:71.1万
展开全部
第一次循环i=0执行后i=1不能被2整出所以 j+=p[1];j=2
第二次i=1执行后i=2能被整除不执行j+=p[i];j=2
第三次i=2执行后I=3不能被整出执行j+=p[i];j=2+p[3];j=6
第四次i=3执行后I=4能被整除 j=6
第五次i=4执行后i=5不能被整除j+=p[i];j=6+p[5];j=12
第六次i=5执行后i=6 被整除直接输出j=12
第七次i=6执行后i=7 不能整除执行j+=p[i];j=12+p[7];j=20
回答完毕
追问
不是要在第二次循环的时候i才会自增吗?怎么第一次没循环完就自增了?
追答
while(i++<7)  if(i%2)   j+=p[i];

这个语句执行
while(i++<7)
之后这个i已经自增,但是这个语句中使用的i仍然是没有自增后的值,这就是i++,++i的区别,前者是先使用后运算,后者是先运算后使用。懂否?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱上我们的微笑
2013-01-09
知道答主
回答量:41
采纳率:0%
帮助的人:17.5万
展开全部
i=0; j=0+p[1]=2;
i=1;
i=2; j=2+p[3]=6;
i=3;
i=4; j=6+p[5]=12;
i=5;
i=6; j=12+p[7]=20;
i=7;

i 是个后置自增,你要在p【i】里的i要进行自增才行。
追问
不是要在第二次循环的时候i才会自增吗?怎么第一次没循环完就自增了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式