| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:为什么输出的奇数只给我2个?
只看楼主 加入收藏
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
结帖率:85.29%
收藏
已结贴  问题点数:20 回复次数:10 
为什么输出的奇数只给我2个?
#include <stdio.h>
#include <stdlib.h>

#define NUM 20
 
void getdata(int *a )
{ int i ;
  for(i=0;i<=NUM;i++)
    a[i]=rand()%101;}   
   
void priarr(int *b,int x)
{int i;
 for(i=0;i<x;i++)
 {printf("%5d", b[i] );
  if ((i+1)%10==0)printf("\n");}
 printf("\n");}  

void odd(int *a,int *d)
{int i,j;
 for(i=0,j=0;i<NUM;i++)
  {if(a[i]%2!=0){d[j]=a[i];j++;}}
 }

main()
{int j,p[NUM], q[j];
 getdata(p);
 printf("output %d random numbers:\n",NUM);
 priarr(p,NUM);
 odd(p,q);
 printf("output odd numbers:\n");
 priarr(q,j);
 system("PAUSE");   
 return 0;
}
程序读入随机数组后,但是输出的奇数却只有两个。自己看了半天了,还是不知道哪儿出了问题,貌似是j++没有运作,可是怎么改呢?
 
搜索更多相关主题的帖子: void 101 include numbers 
2011-07-03 07:48
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
int j,p[NUM], q[j]; //楼主的q[j]啥意思。
2011-07-03 08:08
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 2楼 hjywyj
就是用这个数组来放那最后想要的奇数
2011-07-03 08:22
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:1 
回复 3楼 wxz11191975
那么楼主的j是多少呢?这个写法在VC6.0根本不能编译
2011-07-03 08:29
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:4 
程序代码:
root@~ #cat 73.c
#include <stdio.h>
#include <time.h>                    //这里加入时间函数
#define NUM 20


int main (void) {
        srand((unsigned)time(NULL)); //这里加入随机数种子
        int a[NUM],i,odd=0;
        int *p;

        for(i=0;i<NUM;i++) {
                a[i]=rand()%101;
                if(a[i]&1) {
                        odd++;
                        printf("%i ",a[i]);
                }
        }

        printf("\nNumbers of odd : %i\n",odd);

        return 0;

}


程序代码:
root@~ #./73
87 11 65 59 13 27 7 53 15 55 57
Numbers of odd : 11
root@~ #./73
19 97 33 63 51 45 15 47 93
Numbers of odd : 9
root@~ #


[ 本帖最后由 ansic 于 2011-7-3 10:37 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-07-03 10:09
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 4楼 hjywyj
我也看到了问题在j,可是我不会改呀。
我是想把odd函数里的那个d的数组,也就是放得到的奇数的那个数组传回主函数去,可是我不知道怎么表达。问题也正是在这儿,因为没有表达好,所以最后输出来的奇数的数组永远都只有2个。而且,为什么是2个而不是3个4个或是其他个?哪句指令让这台傻机子这么干活来着呢?我都没看出毛病在哪儿。。。
2011-07-03 10:09
wxz11191975
Rank: 1
等 级:新手上路
帖 子:98
专家分:0
注 册:2011-6-20
收藏
得分:0 
回复 5楼 ansic
谢谢你对我的两道题目均作了回复,可是,我怎么看不明白你的代码。我只能看懂C,多加了其他语言的命令我看不懂。。。。。
2011-07-03 12:05
qldxsun
Rank: 4
等 级:业余侠客
帖 子:125
专家分:240
注 册:2011-6-4
收藏
得分:1 
回复 楼主 wxz11191975
第一,数组的定义有问题,vc6环境下无法编译。第二,可以让存奇数的数组长度就等于num,然后在odd函数结尾,在存奇数的数组下标j处加结束符。这样问题就能解决了。手机上的,只能这样说了。应该是对的

[ 本帖最后由 qldxsun 于 2011-7-3 22:35 编辑 ]
2011-07-03 22:30
懒懒的小幽
Rank: 2
等 级:论坛游民
帖 子:6
专家分:31
注 册:2011-7-1
收藏
得分:12 
修改如下:

#include <stdio.h>
#include <stdlib.h>

#define NUM 20

void getdata(int *a )
{ int i ;
  for(i=0;i<=NUM;i++)
    a[i]=rand()%101;}   
   
void priarr(int *b,int x)
{int i;
for(i=0;i<x;i++)
{printf("%5d", b[i] );
  if ((i+1)%10==0)printf("\n");}
printf("\n");}  

int odd(int *a,int *d)
{int i,j;
for(i=0,j=0;i<NUM;i++)
  {if(a[i]%2!=0){d[j]=a[i];j++;}}
return j;
}

main()
{int j=0,p[NUM];
int  q[20];
getdata(p);
printf("output %d random numbers:\n",NUM);
priarr(p,NUM);

printf("output odd numbers:\n");
priarr(q,odd(p,q));
system("PAUSE");   
return 0;
}
2011-07-04 23:45
懒懒的小幽
Rank: 2
等 级:论坛游民
帖 子:6
专家分:31
注 册:2011-7-1
收藏
得分:2 
还有就是没有 置随机码种子  取随机数用的 如果不写 默认为srand(1)
2011-07-04 23:47
快速回复:为什么输出的奇数只给我2个?
数据加载中...
 
   



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

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