你是指作為函數(shù)的參數(shù)傳遞一個數(shù)組嗎?
成都網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)公司、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站設(shè)計等服務(wù)項目。核心團(tuán)隊均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗,服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都陽光房等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗,同時也獲得了客戶的一致贊許!
如果是這個意思,那很簡單,用指針就可以了,如
定義有int a[5];
則這樣定義函數(shù):
int fun(int *p, int size)
{
//p為數(shù)組的首地址
//size為數(shù)組的大小
//傳遞進(jìn)去后可以像操作a一樣用下標(biāo)操作p
//如p[0], p[4]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
若是多維數(shù)組,則第一維大小不給出,只指定后面的維數(shù)大小,如:
定義有int a[5][2];
則這樣定義函數(shù):
int fun(int p[][2], int size)
{
//p為數(shù)組的首地址
//size為第一維的大小
//傳遞進(jìn)去后可以像操作a一樣用下標(biāo)操作p
//如p[0][1], p[4][1]...
}
傳遞參數(shù)給函數(shù)可以這樣寫:
fun(a, 5);
我可以幫助你,你先設(shè)置我最佳答案后,我百度Hii教你。
你的程序可以輸入五組數(shù)據(jù)啊
就是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]);
}
調(diào)用時:
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);
}
注意定義的函數(shù)int fun1(int a[N],int i),在調(diào)用函數(shù)的時候語法是sum=fun1(int a[N],int i);錯誤在于調(diào)用函數(shù)時()內(nèi)的參數(shù)應(yīng)該和定義時一樣
你的意思是說,輸入一些數(shù)據(jù),讓程序擬合出來一個函數(shù)。
這個很復(fù)雜。比如我舉個例子。
多項式擬合函數(shù)polyfit之C語言的源碼
2010-11-25 10:05:57| 分類: VC++編程 | 標(biāo)簽: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是數(shù)據(jù)個數(shù) xy是數(shù)據(jù)值 poly_n是多項式的項數(shù)======*/
/*===返回a0,a1,a2,……a[poly_n],系數(shù)比項數(shù)多一(常數(shù)項)=====*/
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];
}
}
所以這種程序是超級大型的,一般沒人能獨立寫出來。
編程計算器和一些程序能實現(xiàn),但是源代碼都是不公布的。