| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 691 人关注过本帖
标题:大虾看下这个题
只看楼主 加入收藏
luoweijun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:138
注 册:2009-6-12
结帖率:64.71%
收藏
已结贴  问题点数:20 回复次数:13 
大虾看下这个题
有一下程序
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);
   }
我做的结果是56,但为什么执行的结果是45呢,谁帮我说明下,谢谢!!!
2009-08-28 09:09
hzphb
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2009-1-12
收藏
得分:0 
求数组中奇数的和 ,执行结果差了 11 ,第一个数据未加入 ?
while 循环中 i++ 估计有问题 。
2009-08-28 09:37
jetlif
Rank: 2
等 级:论坛游民
帖 子:7
专家分:28
注 册:2009-8-19
收藏
得分:0 
回复 楼主 luoweijun
程序代码:
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);
   }
代码方面看不出有什么问题,可能是while循环里有问题吧,如果换成for循环,答案就可以得到你想要的了,如下:
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int p[8]={11,12,13,14,15,16,17,18};
  int i=0,j=0;
  for(;i<7;i++)
  {
  if (p[i]%2)
  j+=p[i];
                  }
   printf("%d\n",j);
  system("PAUSE");  
  return 0;
}

结果为:56,可以去看下while跟for循环的区别。

[ 本帖最后由 jetlif 于 2009-8-28 09:45 编辑 ]
2009-08-28 09:38
luoweijun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:138
注 册:2009-6-12
收藏
得分:0 
我就是想搞清是什么问题,楼上都说些带问号的话,晕了饿,我也不是想得到程序的结果为56,这是一道出在书上的题,改成if也没那个必要啊,谁来说说啊
2009-08-28 09:54
ucfhvqdo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-7-20
收藏
得分:5 
因为while(i++<7)里面的i是从0开始的,而p[i]里面的i是从1开始的,所以j+=p[i]是等于
j=13+15+17=45的
2009-08-28 10:10
ucfhvqdo
Rank: 2
等 级:论坛游民
帖 子:13
专家分:49
注 册:2009-7-20
收藏
得分:5 
因为while(i++<7)里面的i是从0开始的,而p[i]里面的i是从1开始的,所以j+=p[i]是等于
j=13+15+17=45的
2009-08-28 10:11
guoweiyan
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2009-8-3
收藏
得分:5 
结果没有问题。
要是你想得到你想要的结果的话。可以改成这样:
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];
   i=i+1;}
   printf("%d\n",j);
   }
你可以试试
2009-08-28 10:13
baikil
Rank: 10Rank: 10Rank: 10
来 自:X星球
等 级:青峰侠
威 望:4
帖 子:282
专家分:1580
注 册:2009-7-20
收藏
得分:0 
main()
{  int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; --->i=0;没错
   while(i++<7)   ---> 你的i在内部不是从0--->7 而是 1--->7  改为i初始化为-1便可
        if(p[i]%2)
             j+=p[i];
   printf("%d\n",j);
 }

自创QQ群64885635,方便C#学习交流.希望各项工作路好学都好入!
2009-08-28 10:21
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:5 
11没算到,也就是p[0]没算到。
while(i++<7)    /* 这里注意i++,第一次循环i等于0,执行完这条语句进到循环体里i就增1 */
  if(p[i]%2) j+=p[i];   /*第一次循环到这里i值是1 */

努力—前进—变老—退休—入土
2009-08-28 10:25
luoweijun
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:67
专家分:138
注 册:2009-6-12
收藏
得分:0 
谢谢 各位大虾,在下明白了
2009-08-28 14:05
快速回复:大虾看下这个题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018785 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved