猎人灵魂坐骑:请达人帮我分析下我的CODE!谢谢

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 12:31:33
#include<stdio.h>
#define MAX 6

void recive(int a[])
{
int i;
for(i=0;i<MAX;i++)
{
scanf("%d",a[i]);
}
}

int assign(int x[MAX])
{
int i=0;
int b[MAX];
int c[MAX];
int d[MAX];
int ab=0;
int ac=0;
int ad=0;
for(i=0;i<MAX;i++)
{
if(x[i]%3==0)
{
b[ab]=x[i];
ab++;
}
else if(x[i]%3==1)
{
c[ac]=x[i];
ac++;
}
else
{
d[ad]=x[i];
ad++;
}
}
printarry(b[ab]);
printarry(c[ac]);
printarry(d[ad]);
}

int printarry(int x[])
{
int i=0;
printf("Arry is:");
for(i=0;i<MAX;i++)
{
printf(" ");
printf("%d",x[i]);
}
printf("\n");
}

main()
{
int a[MAX];
recive(a[MAX]);
assign(a[MAX]);
getch();
}

为什么不能得到正确的结果?

本程序问题:
1:先定义后调用的函数要在调用之前有原型说明,本题的printarry函数,否则把函数实现放在调用前。
2:函数实参为数组时只要数组名称就可以了,如不要写成a[MAX],只要a就可以了
3: printarry函数输出值个数是MAX个,而求出的a,b,c的个数小于等于MAX个,所以后面输出的有随机数,所以printarry(b);
printarry(c); printarry(d); 结果与预期不一样.
4: scanf("%d",a[i]);应是scanf("%d",&a[i]);
5:函数定义有返回值得,一定有返回值

printarry函数可以再加一个参数,来表示第一个参数(数组)的实际有效的元素数,打印出来即可

scanf("%d",a[i]);//错误,应该是a+i或者&a[i]
下边没有仔细的看。

#include<stdio.h>
#define MAX 6

void recive(int a[])
{
int i;
for(i=0;i<MAX;i++)
{
scanf("%d",&a[i]);
}
}
void printarry(int x[])
{
int i=0;
printf("Arry is:");
for(i=0;i<MAX;i++)
{
printf(" ");
printf("%d",x[i]);
}
printf("\n");
}

void assign(int x[MAX])
{
int i=0;
int b[MAX]={0};
int c[MAX]={0};
int d[MAX]={0};
int ab=0;
int ac=0;
int ad=0;
for(i=0;i<MAX;i++)
{
if(x[i]%3==0)
{
b[ab]=x[i];
ab++;
}
else if(x[i]%3==1)
{
c[ac]=x[i];
ac++;
}
else
{
d[ad]=x[i];
ad++;
}
}
printarry(b);
printarry(c);
printarry(d);
}
void main()
{
int a[MAX];
char b;
recive(a);
assign(a);
b=getchar();
}

虽然程序很简单,但是也要写一下注释,要保持良好的程序风格!
写了返回类型又没有返回值,就声明为空类型好一些,还有参数传入也有问题,注意数组怎么传,看一下所用的库函数是不是有错!