c语言如何将数组作为全局变量

具体是要求出一个“完数”(约数之和等于自己,约数不包括自己),输出这个数并且输出约数。如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);
}

在c语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变
如在如下程序中
int i;
int main()
{
int i_copy = i;
i = 9;
return 0;
}
int
i就是一个全局变量,故在main函数中可以调用或修改i的值
所以,定义数组也和普通全局变量的方法相同,如
char str[10];
int main()
{
str[0] = 'a';
str[1] = '\0';
return 0;
}
拓展资料
c语言是一门通用计算机编程语言,应用广泛。c语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管c语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的c语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称mcu)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的c语言语法产生差异,由美国国家标准局为c语言制定了一套完整的美国国家标准语法,称为ansi
c,作为c语言最初的标准。目前2011年12月8日,国际标准化组织(iso)和国际电工委员会(iec)发布的c11标准是c语言的第三个官方标准,也是c语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-24
c语言中全局变量的定义为:在一个函数之外定义,从定义位置开始到源程序最后都有效的变量,可见如果将数值在函数之外申明就可以叫全局变量,如果要使该全局变量在所有程序段都有效,必须定义在主程序的最开始位置。本回答被网友采纳
第2个回答  2012-06-15
把数组在任何一个函数外定义即可。
所以把int a[100];放到main()函数上面就行了。追问

是的,这样就不会有编译错误了(上面纯属失误)。但是却变成了死循环。能帮助一下吗??

追答

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是大循环中的变量。

追答

。。。好吧,这还真没注意看,疏忽了,从没想过这个会错。

本回答被提问者采纳
相似回答