菜鸟新手请教C语言问题~

#include<stdio.h>voidmain(){intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++<7)if(... #include <stdio.h>
void 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);
}
请各位大侠帮我解答一下为什么这个结果是45 谢谢,我是新人,实在不会!
展开
 我来答
Jeankingtu
2010-09-05
知道答主
回答量:12
采纳率:0%
帮助的人:16.9万
展开全部
先逐句分析:
1、i++ < 7,成立时循环while。这句话判断的是i<7成立否,判断之后才运行i++,因为自增的优先级低于比较运输符。
2、p[i] % 2,对2取余不为0时执行if,即奇数时执行if。
3、j += p[i],累加。
整体分析:
这道题利用while循环对数组p进行了遍历,每次循环条件判断结束后进行自增,再对当前元素对2取余,进行判断,决定是否累加。
所以,第一次循环时,i=0,但做完while的条件后i自增了,所以当if进行条件判断的时候i已经是1了,所以第0号元素(11)被漏过去了,从第1号元素(12)开始对2取余。
这样,真正累加的数字是13,15,17,最后j的值为45。
以上~~
luofl1992
2010-09-05 · TA获得超过710个赞
知道小有建树答主
回答量:561
采纳率:0%
帮助的人:578万
展开全部
#include <stdio.h>
void main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7) /*i从0开始,但是这里的i比进去之后小一,这里可以看看后缀自增运算的优先级*/
if(p[i]%2) /*p[i]为奇数才执行下面的语句,里面i从一开始,所以是2、4、6被加进去了 */
j+=p[i]; /*13 、 15 、 17 之和*/
printf("%d\n",j); /*结果为45*/
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Inpool
2010-09-05 · TA获得超过782个赞
知道小有建树答主
回答量:486
采纳率:66%
帮助的人:439万
展开全部
对数组p中除第一个以外的每个int值进行判断,如果是奇数就累加到j上
结果就是

j=13+15+17

因为在
if(p[i]%2)之前已经有了i++,所以这时候i=1,所以第一个11是没加进去的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
望穿秋水待伊人
2010-09-05 · TA获得超过644个赞
知道小有建树答主
回答量:708
采纳率:100%
帮助的人:797万
展开全部
你用的i++做判断,这样第一次p[i]就是p[1],这样就是13+15+17=45了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-09-05
展开全部
while(i++<7)先判断循环体,此时i=i+1;也就说从p[1]开始
“if(p[i]%2)”判断奇数有13,15,17
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式