具体是要求出一个“完数”(约数之和等于自己,约数不包括自己),输出这个数并且输出约数。如6=1+2+3;想将约数作为全局变量,这样实际上可以用被调函数返回好几个值。可是有问题。问题是
3 D:\Dev-Cpp\Temp\完数.c declaration for parameter "a" but no such parameter #include<stdio.h>
int main()
int a[100];
{int i,y;
int yue(int n);
for(i=1;i<=1000;i++)
{y=yue(i);
if(y==i) printf("%d\n",i);for(i=0;i<=100;i++)printf("a[i]*");}
system("pause");
}
int yue(int n)
{int i,sum=0,j=0,a[100];
for(i=1;i<=n/2;i++)
if(n%i==0){sum=sum+i;a[j++]=i;}
return(sum);
}
是的,这样就不会有编译错误了(上面纯属失误)。但是却变成了死循环。能帮助一下吗??
追答int yue(int n)好像没必要在main()函数中定义,程序可以自己调用。
printf("a[i]*")改成printf("%d*",a[i])
我是这样想的,由于每个数的约数的个数不同,所需要printf的a[i]个数也不一样,所以可以选择用一个全局变量int m=0去记录,在函数int yue(int n)中赋值为0。输出循环用只需循环m次。试下看看。
保险起见,还可以先将a[100]数组赋个初值0。
#include
int a[100],k;
int main()
{int i,y,j;
int yue(int n);
for(i=1;i<=1000;i++)
{y=yue(i);
if(y==i) {printf("%d==\n",i);for(j=0;j<=k;j++)printf("%d*",a[j]);printf("\n");}
}
system("pause");
已经找到错误的地方。找一个值记录j不是关键的错误。关键是输出数组循环中,不能再用i了。i是大循环中的变量。
。。。好吧,这还真没注意看,疏忽了,从没想过这个会错。
本回答被提问者采纳