扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你是指作为函数的参数传递一个数组吗?
成都网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设公司、微信开发、微信小程序开发、集团企业网站设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:成都阳光房等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞许!
如果是这个意思,那很简单,用指针就可以了,如
定义有int a[5];
则这样定义函数:
int fun(int *p, int size)
{
//p为数组的首地址
//size为数组的大小
//传递进去后可以像操作a一样用下标操作p
//如p[0], p[4]...
}
传递参数给函数可以这样写:
fun(a, 5);
若是多维数组,则第一维大小不给出,只指定后面的维数大小,如:
定义有int a[5][2];
则这样定义函数:
int fun(int p[][2], int size)
{
//p为数组的首地址
//size为第一维的大小
//传递进去后可以像操作a一样用下标操作p
//如p[0][1], p[4][1]...
}
传递参数给函数可以这样写:
fun(a, 5);
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
你的程序可以输入五组数据啊
就是stu[5] 前面多了个分号啊
#includestdio.h
#includestdlib.h
struct student
{
int num;
char name[10];
float score[3];
}stu[5];
int main()
{
void print(struct student *);
int j;
struct student *k;
printf("Please input the data of students:\n");
for(k=stu;kstu+5;k++)
{
printf("Please input the num,name:\n");
scanf("%d %s",k-num,k-name);
for(j=0;j3;j++)
scanf("%f",k-score[j]);
}
print(k);
system("pause");
return 0;
}
void print(struct student *p)
{
printf("num name score\n");
for(p=stu;pstu+5;p++)
printf("%-5d%-5s%-5.1f%-5.1f%-5.1f\n",p-num,p-name,p-score[0],p-score[1],p-score[2]);
}
调用时:
sum=fun1(a[N]);
printf("sum=%d\n",sum);
定义中:
int fun1(int a[N],int i)
{
int s=0;
for(i=0;iN;i++)
s=s+a[i];
return(s);
}
注意定义的函数int fun1(int a[N],int i),在调用函数的时候语法是sum=fun1(int a[N],int i);错误在于调用函数时()内的参数应该和定义时一样
你的意思是说,输入一些数据,让程序拟合出来一个函数。
这个很复杂。比如我举个例子。
多项式拟合函数polyfit之C语言的源码
2010-11-25 10:05:57| 分类: VC++编程 | 标签:double poly_n polyfit int for |字号 订阅
#include stdio.h
#include conio.h
#include stdlib.h
#include math.h
main()
{
int i,j,m,n=7,poly_n=2;
double x[7]={1,2,3,4,6,7,8},y[7]={2,3,6,7,5,3,2};
double a[3];
void polyfit(int n,double *x,double *y,int poly_n,double a[]);
system("cls");
polyfit(n,x,y,poly_n,a);
for (i=0;ipoly_n+1;i++)/*这里是升序排列,Matlab是降序排列*/
printf("a[%d]=%g\n",i,a[i]);
getch();
}
/*==================polyfit(n,x,y,poly_n,a)===================*/
/*=======拟合y=a0+a1*x+a2*x^2+……+apoly_n*x^poly_n========*/
/*=====n是数据个数 xy是数据值 poly_n是多项式的项数======*/
/*===返回a0,a1,a2,……a[poly_n],系数比项数多一(常数项)=====*/
void polyfit(int n,double x[],double y[],int poly_n,double a[])
{
int i,j;
double *tempx,*tempy,*sumxx,*sumxy,*ata;
void gauss_solve(int n,double A[],double x[],double b[]);
tempx=calloc(n,sizeof(double));
sumxx=calloc(poly_n*2+1,sizeof(double));
tempy=calloc(n,sizeof(double));
sumxy=calloc(poly_n+1,sizeof(double));
ata=calloc((poly_n+1)*(poly_n+1),sizeof(double));
for (i=0;in;i++)
{
tempx[i]=1;
tempy[i]=y[i];
}
for (i=0;i2*poly_n+1;i++)
for (sumxx[i]=0,j=0;jn;j++)
{
sumxx[i]+=tempx[j];
tempx[j]*=x[j];
}
for (i=0;ipoly_n+1;i++)
for (sumxy[i]=0,j=0;jn;j++)
{
sumxy[i]+=tempy[j];
tempy[j]*=x[j];
}
for (i=0;ipoly_n+1;i++)
for (j=0;jpoly_n+1;j++)
ata[i*(poly_n+1)+j]=sumxx[i+j];
gauss_solve(poly_n+1,ata,a,sumxy);
free(tempx);
free(sumxx);
free(tempy);
free(sumxy);
free(ata);
}
void gauss_solve(int n,double A[],double x[],double b[])
{
int i,j,k,r;
double max;
for (k=0;kn-1;k++)
{
max=fabs(A[k*n+k]); /*find maxmum*/
r=k;
for (i=k+1;in-1;i++)
if (maxfabs(A[i*n+i]))
{
max=fabs(A[i*n+i]);
r=i;
}
if (r!=k)
for (i=0;in;i++) /*change array:A[k]A[r] */
{
max=A[k*n+i];
A[k*n+i]=A[r*n+i];
A[r*n+i]=max;
}
max=b[k]; /*change array:b[k]b[r] */
b[k]=b[r];
b[r]=max;
for (i=k+1;in;i++)
{
for (j=k+1;jn;j++)
A[i*n+j]-=A[i*n+k]*A[k*n+j]/A[k*n+k];
b[i]-=A[i*n+k]*b[k]/A[k*n+k];
}
}
所以这种程序是超级大型的,一般没人能独立写出来。
编程计算器和一些程序能实现,但是源代码都是不公布的。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流