菜鸟新手请教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 谢谢,我是新人,实在不会! 展开
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 谢谢,我是新人,实在不会! 展开
5个回答
展开全部
先逐句分析:
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。
以上~~
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。
以上~~
展开全部
#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*/
}
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*/
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对数组p中除第一个以外的每个int值进行判断,如果是奇数就累加到j上
结果就是
j=13+15+17
因为在
if(p[i]%2)之前已经有了i++,所以这时候i=1,所以第一个11是没加进去的
结果就是
j=13+15+17
因为在
if(p[i]%2)之前已经有了i++,所以这时候i=1,所以第一个11是没加进去的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的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
“if(p[i]%2)”判断奇数有13,15,17
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询