1、新建一个数组作为参数项目,如图所示:
创新互联建站成立于2013年,我们提供高端重庆网站建设、成都网站制作、成都网站设计、网站定制、全网整合营销推广、微信小程序开发、微信公众号开发、网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为护栏打桩机企业提供源源不断的流量和订单咨询。
2、添加一个array.c文件,如图所示:
3、包含stdio.h和stdlib.h头文件,如图所示:
4、输入main函数主体及返回值,如图所示:
5、定义一个数组arr,如图所示:
6、定义一个function函数,如图所示:
7、将数组作为参数传递给function函数,如图所示:
8、运行程序,输出结果,如图所示:
对于有数组参数的函数,编译程序要为其开辟相应的内存空间,而程序中两个函数
都有数组参数a[n][m],由于n,m是变量,编译程序并不知道n,m的具体值,所以不能
通过编译。
修改:
1.在#include下面添加以下伪指令:
#define n 5
#define m 5
2.将函数的参数形式改为:
int sum(int a[n][m]);
void pl(int a[n][m]);
并按此修改程序文件中所有关于这两个函数的申明和调用即可
c语言可以用数组元素的方法或指针的方法调用数组。
int a[100],i;
for(i=0;i100;i++)
scanf("%d",a[i]);
for(i=0;i100;i++)
printf("%d ",a[i]);
也可以:
int a[100],*p;
for(p=a;pa+100;p++)
scanf("%d",p);
for(p=a;pa+100;p++)
printf("%d ",*p);
来传送子函数中的数组有多种方法——可以通过函数返回值返回地址传递数组;也可以通过函数输入参数来传递数组;还可以通过全局变量来传递数组。
子函数本身可以直接在作用域中进行调用。
1、通过函数返回值返回地址传递数组。
声明函数时需要声明函数返回值类型为对应数组的地址,此时可以返回数组的地址,结合数组元素的地址关系可以传递整个数组,同时可以根据数组的特性传递多个参数。
2、通过输入参数传递数组。
声明函数时提供空输入参数,调用函数时提供目标数组,即可以通过该数组调用子函数中的数组,该方法也可以用于传递多个参数。
3、通过全局变量来传递数组。
声明全局变量用于存储子函数中的数组,此时可以在全局变量作用域中读取调用子函数的数组。
注意:子函数是C语言模块化编程思想的核心,其方法是通过输入接口和输出接口实现对黑盒的调用,故对其内部数据的输入和调用也需要通过输入接口、输出接口和程序的公共区域实现。
因为main()函数中的function_a函数声明和实际的情况不一样,真实情况是该函数有三个参数,而你却将其声明为没有参数,所以在调用时,传入参数会有警告。
由于function_a的定义在main()之前,所以去掉主函数中的声明即可,或者将声明改为正确形式。
程序是什么功能,有什么错误 ,请说明。 追问: 编写程序求两个整数的所有质公约数、最大公约数、最小公倍数和两个数之差的绝对值。要求分别编写五个函数分别实现求两个整数的最小质公约数int zgys(int x,int y)、所有质公约数void zgyssz(int a[100],int x,int y)、最大公约数int gys(int x,int y)、最小公倍数int gbs(int x,int y)和两个数之差的绝对值int fun(int x,int y)。 void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;ij;i++)t=t*a[i]; return t; } } 回答: 哪些函数是对应的功能。还有,不是要5个函数吗,怎么只有三个的。 追问: void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;ij;i++)t=t*a[i]; return t; } } 那三个是 int zgys(int x,int y) { int f=1,i,min; min=xy?x:y; for(i=2;i=min;i++) {/*判断i是否是x与y的公约数*/ if(x%i==0y%i==0) f=i; break; } return f; } int gbs(int x,int y) { return x*y/gys(x,y); } int fun(int x,int y) { if(xy)return y-x; else return x-y; } 这三个我做出来了。 回答: 直接说,哪个函数是什么功能的就行了。还有就是,哪个函数有问题。 追问: 最小公倍数 int gbs(int x,int y){ return x*y/gys(x,y);} 两个数之差的绝对值 int fun(int x,int y){ if(xy)return y-x; else return x-y;} 求两个整数的最小质公约数 int zgys(int x,int y){ int f=1,i,min; min=xy?x:y; for(i=2;i=min;i++) {/*判断i是否是x与y的公约数*/ if(x%i==0y%i==0) f=i; break; } return f;} 求两个整数的所有质公约数 void zgyssz(int a[100],int x,int y) { int i; int zgys(int x,int y); for(i=0;i100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; }} 求两个整数的最大公约数 int gys(int x,int y){ int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a[100],x,y); { int t=1; for(i=0;ij;i++)t=t*a[i]; return t; }} 后两个有问题,弄不出来 回答: #includestdio.h int n; void main() { int zgys(int x,int y); void zgyssz(int a[ ],int x,int y); int gys(int x,int y); int a,b,c; printf("请输入两个数:"); scanf("%d%d",a,b); c=gys(a,b); printf("%d\n",c); } void zgyssz(int a[ ],int x,int y) { int i; int zgys(int x,int y); for(i=0;i100;i++) { a[i]=zgys(x,y); if(a[i]==1)break; x=x/a[i];y=y/a[i]; } n=i+1; } int gys(int x,int y) { int i,j=0,a[100]; void zgyssz(int a[100],int,int); zgyssz(a,x,y); { int t=1; for(i=0;in;i++)t=t*a[i];//这里的个数应该是a[i]的个数n。定为全局变量 return t; } } int zgys(int x,int y) { int f=1,i,min; min=xy?x:y; for(i=2;i=min;i++) { if(x%i==0y%i==0) { f=i; break; //break要放里面。 } } return f; }
希望采纳