关于c语言调用函数的相关问题

关于c语言调用函数的相关问题

  1. 调用函数其中一个函数在另一个函数里面赋值,则在一个调用函数需重新定义赋值;
  2. 指针不需再定义,调用的是地址;
  3. 函数参数具体指:在主函数里调用一个函数,会把主函数里的数传到调用的函数里,只是把数值传给调用的函数;
  4. ys=Lagrange(n,x,y,xs);和Lagrange(n,x,y,xs,ys);含义不同,前者指把函数返回一个值,赋给ys;后者若ys不是指针,就不会改变ys的值,若是指针,改变的是ys指向的地址的值;
  5. void是单return,也可不return;return 0是一般在主函数里使用;return函数值是double函数或者int函数;
  6. 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;
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值