C语言编写函数,把数组中所有奇数放在另一个数组中返回,

给的提示是 void odds(int *a,int an,int *b,int *bn)这个*bn要怎么利用上呢?
自己编写一下程序,多处错误,帮我改改!
#include<stdio.h>
void odds(int *a,int an,int *b,int *bn);
void arrout(int w[],int m);
#define n 10
main()
{
int a[n]={15,96,54,76,25,64,31,21,35,91},b[n],m=0;
arrout(a,n);
odds(a,n,b,m);
arrout(b,m);
}
void arrout(int w[],int m)
{
int i;
for(i=0;i<m;i++)
printf("%4d",w[i]);
printf("\n");
}
void odds(int *a,int an,int *b,int *bn)
{
int i,j,*bn;
bn=&j;
for(j=0,i=0;i<an;i++)
if(a[i]%2!=0)
{b[j]=a[i];j++;}
}

1.对2取余非零即为奇数

#include <stdio.h>

// å°†src中奇数放入dst中,并返回奇数个数
int getOdd(int *dst, const int *src, int srcLen)
{
    int len = 0;
    for (int i = 0; i < srcLen; i++)
        if (src[i] % 2 != 0) // éž0即为奇数
            dst[len++] = src[i];
    return len;
}

int main()
{
    int a[10] = {0, 1, 2, 3, 4, -5, 6, 7, 8, -9}, b[10];
    int len = getOdd(b, a, 10);
    printf("Odd is: ");
    for (int i = 0; i < len; i++)
        printf("%d ", b[i]);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-19
你是不是用错了, odds(a,n,b,m);m这个必须要是&m因为你的参数是一个指针变量,而且arrout(b,m);这里的m一直是0,根本输不出任何数,int *bn这个变量时要来保存有多少个奇数的,所以你下面的程序bn=&j;这个去掉,直接用 odds(a,n,b,&m);用m的地址,在for循环的外面即
for(j=0,i=0;i<an;i++)
if(a[i]%2!=0)
{b[j]=a[i];j++;}
*bn=j;这样,然后arrout(b,m);这样调用就正确了,因为j的值赋值给了m ,我这个是针对于你的原题修改一下的
第2个回答  推荐于2017-09-24
#include<stdio.h>
void odds(int *a,int an,int *b,int *bn);
void arrout(int w[],int m);
#define n 10
main()
{
int a[n]={15,96,54,76,25,64,31,21,35,91};
int b[n],m=0;
arrout(a,n);
odds(a,n,b,&m);
arrout(b,m);
}
void arrout(int w[],int m)
{
for(int i=0;i<m;i++)
printf("%4d",w[i]);
printf("\n");
}
void odds(int *a,int an,int *b,int *bn)
{
int i,j;
for(j=0,i=0;i<n;i++)
if(a[i]%2!=0)
{
b[j]=a[i];
j++;
}
*bn=j;
}本回答被提问者采纳
第3个回答  2012-07-19
odds(a,n,b,m); 改成 odds(a,n,b,&m);
这样从函数返回后,b数组中存放了奇数,m等于b数组中元素个数
函数odds改成
void odds(int *a,int an,int *b,int *bn)
{
int i,j = 0;
for(i=0;i<an;i++)
if(a[i]%2!=0)
{b[j]=a[i]; j++;}
*bn = j;
}追问

然后主函数就改成这样了,还有什么错误啊?
main()
{
int m=10,a[n]={15,96,54,76,25,64,31,21,35,91},b[m]={0};
arrout(a,n);
odds(a,n,b,&m);
arrout(b,m);
}

第4个回答  2012-07-19
这个bn不应该是个指针,应该是数组b的大小吧?改成这样,防止数组b溢出,
void odds(int *a,int an,int *b,int bn)
{
int i,j;
for(j=0,i=0;i<an,j<bn;i++)

if(a[i]%2!=0)
{b[j]=a[i];j++;}
}