关于c语言调用函数的相关问题
- 调用函数其中一个函数在另一个函数里面赋值,则在一个调用函数需重新定义赋值;
- 指针不需再定义,调用的是地址;
- 函数参数具体指:在主函数里调用一个函数,会把主函数里的数传到调用的函数里,只是把数值传给调用的函数;
- ys=Lagrange(n,x,y,xs);和Lagrange(n,x,y,xs,ys);含义不同,前者指把函数返回一个值,赋给ys;后者若ys不是指针,就不会改变ys的值,若是指针,改变的是ys指向的地址的值;
- void是单return,也可不return;return 0是一般在主函数里使用;return函数值是double函数或者int函数;
- void是空函数,必须要返回值;int返回值是整数;double是小数。
具体参考:
单个待求点的Lagrange插值与多个待求点的Lagrange插值的对比:
下面展示一些 内联代码片
。
#include<stdio.h>
double Lagrange(int n,double *x,double *y,double xs);
void output(int n,double *x, double *y, double xs, double ys);
int main()
{
//该程序用于求Lagrange插值
int n=3;//插值结点个数
double x[3]={1.0,1.3,1.5};//给定的插值结点
double y[3]={1.0,1.69,2.25};//给定的插值结点函数值
double xs=1.2;//xs为待求点
double ys;//ys为待求点Lagrange插值
ys=Lagrange(n,x,y,xs);//Lagrange插值函数
output(n,x,y,xs,ys);//输出函数
return 0;
}
double Lagrange(int n, double *x, double *y, double xs)
{
//该程序为求Lagrange插值具体程序
int i,j;
double ys=0.0;
double l;
for(i=0;i<n;i++)
{
l=1.0;
for(j=0;j<n;j++)
{
if(i!=j)
{
l=l*(xs-x[j])/(x[i]-x[j]);
//l为Lagrange插值基函数
}
}
ys=ys+l*y[i];
}
return ys;
}
void output(int n, double *x, double *y, double xs, double ys)
{
//该程序为输出程序
int i;
printf("插值结点为:");
for(i=0;i<n;i++)
{
printf("%f ",x[i]);
}
printf("\n");
printf("插值结点函数值为:");
for(i=0;i<n;i++)
{
printf("%f ",y[i]);
}
printf("\n");
printf("待求点为:%f\n",xs);
printf("待求点Lagrange插值为:%f\n",ys);
return;
}
#include<stdio.h>
double Lagrange(int n,double *x,double *y,double xs);
void output(int n,double *x, double *y, double xs, double ys);
int main()
{
//该程序用于求Lagrange插值
int n=3;//插值结点个数
double x[3]={1.0,1.3,1.5};//给定的插值结点
double y[3]={1.0,1.69,2.25};//给定的插值结点函数值
double xs=1.2;//xs为待求点
double ys;//ys为待求点Lagrange插值
ys=Lagrange(n,x,y,xs);//Lagrange插值函数
output(n,x,y,xs,ys);//输出函数
return 0;
}
double Lagrange(int n, double *x, double *y, double xs)
{
//该程序为求Lagrange插值具体程序
int i,j;
double ys=0.0;
double l;
for(i=0;i<n;i++)
{
l=1.0;
for(j=0;j<n;j++)
{
if(i!=j)
{
l=l*(xs-x[j])/(x[i]-x[j]);
//l为Lagrange插值基函数
}
}
ys=ys+l*y[i];
}
return ys;
}
void output(int n, double *x, double *y, double xs, double ys)
{
//该程序为输出程序
int i;
printf("插值结点为:");
for(i=0;i<n;i++)
{
printf("%f ",x[i]);
}
printf("\n");
printf("插值结点函数值为:");
for(i=0;i<n;i++)
{
printf("%f ",y[i]);
}
printf("\n");
printf("待求点为:%f\n",xs);
printf("待求点Lagrange插值为:%f\n",ys);
return;
}
下面展示一些 内联代码片
。
#include<stdio.h>
void Lagrange(int n, double *x, double *y, int m, double *xs, double *ys);
void output(int n, double *x, double *y, int m, double *xs, double *ys);
void main()
{
double x[]={-0.8, -0.5, 0.1, 0.4, 0.9};
double y[]={1.0, 0.5, 1.5, 0.4, 0.2};
double xs[]={0.3, 1.1};
double ys[]={0.0, 0.0};
int n,m;
int i;
n=5;
m=2;
Lagrange(n, x, y, m, xs, ys);
output(n, x, y, m, xs, ys);
return;
}
void Lagrange(int n, double *x, double *y, int m, double *xs, double *ys)
{
int i, j, k;
double l;
for(k=0;k<m;k++)
{
ys[k]=0.0;
for(i=0;i<n;i++)
{
l=1.0;
for(j=0;j<n;j++)
{
if(i!=j)
{
l*=(xs[k]-x[j])/(x[i]-x[j]);
}
}
ys[k]=ys[k]+l*y[i];
}
}
return;
}
void output(int n, double *x, double *y, int m, double *xs, double *ys)
{
int i;
printf("插值结点为: ");
for(i=0;i<n;i++){
printf("%f ",x[i]);
}
printf("\n");
printf("插值结点函数值为: ");
for(i=0;i<n;i++){
printf("%f ",y[i]);
}
printf("\n");
printf("待求点为:");
for(i=0;i<m;i++){
printf("%f ",xs[i]);
}
printf("\n");
printf("插值结点函数值为:");
for(i=0;i<m;i++){
printf("%f ",ys[i]);
}
printf("\n");
return;
}
#include<stdio.h>
void Lagrange(int n, double *x, double *y, int m, double *xs, double *ys);
void output(int n, double *x, double *y, int m, double *xs, double *ys);
void main()
{
double x[]={-0.8, -0.5, 0.1, 0.4, 0.9};
double y[]={1.0, 0.5, 1.5, 0.4, 0.2};
double xs[]={0.3, 1.1};
double ys[]={0.0, 0.0};
int n,m;
int i;
n=5;
m=2;
Lagrange(n, x, y, m, xs, ys);
output(n, x, y, m, xs, ys);
return;
}
void Lagrange(int n, double *x, double *y, int m, double *xs, double *ys)
{
int i, j, k;
double l;
for(k=0;k<m;k++)
{
ys[k]=0.0;
for(i=0;i<n;i++)
{
l=1.0;
for(j=0;j<n;j++)
{
if(i!=j)
{
l*=(xs[k]-x[j])/(x[i]-x[j]);
}
}
ys[k]=ys[k]+l*y[i];
}
}
return;
}
void output(int n, double *x, double *y, int m, double *xs, double *ys)
{
int i;
printf("插值结点为: ");
for(i=0;i<n;i++){
printf("%f ",x[i]);
}
printf("\n");
printf("插值结点函数值为: ");
for(i=0;i<n;i++){
printf("%f ",y[i]);
}
printf("\n");
printf("待求点为:");
for(i=0;i<m;i++){
printf("%f ",xs[i]);
}
printf("\n");
printf("插值结点函数值为:");
for(i=0;i<m;i++){
printf("%f ",ys[i]);
}
printf("\n");
return;
}