龙空技术网

如何用C语言实现定积分的计算?一篇带你深入了解指针

喵喵视角 35

前言:

现在姐妹们对“sinx用c语言”大体比较看重,你们都想要了解一些“sinx用c语言”的相关知识。那么小编在网络上搜集了一些关于“sinx用c语言””的相关资讯,希望咱们能喜欢,同学们一起来了解一下吧!

定积分计算原理(这里采用矩形法)

如图:

就是把曲边梯形的面积分成N份,在把每份的面积相加。

实现思路

这里我们定义一个函数integral用来表示需求定积分的通用函数,它的参数包括 积分上限,积分下限,函数名称。

这里可以用指针指向函数名称。

代码实现:

// 完成日期2019 12 19 //题目描述:输入函数上下限,并选择函数类型,输出定积分的值//方法: 矩形法#include <stdio.h>#include <math.h>   //用到数学库int main (){void integral (double up,double down,int n,double (*p)(double x));double sinx (double);double ex(double);double up,down;   // 分别用来存储上下限int n,m;  printf ("Please enter the upper and lower limit of points:(WARNING: upper>down)\n");//输入上下限,上限大于下限scanf ("%lf%lf",&up,&down);printf ("How many parts would you like to divide the interval\n"); //输入把区间分成多少块scanf ("%d",&n);printf ("Please choose: sinx(1),ex(2)   :"); //选择函数类型scanf ("%d",&m);if (1==m) integral (up,down,n,sinx); else if (2==m) integral(up,down,n,ex);else printf ("error number !"); //输错提示	return 0;}void integral (double up,double down,int n,double (*p)(double x)) //最后一个参数指向函数的首位置{	double x=down,i,s=0;	int j;	i=(up-down)/n; //每个小区间的长度	if (p=sinx) printf ("sinx 的积分是: ");	else if (p=ex) printf ("ex 的积分是: ");	for (j=0;j<n;j++)	{x=x+i;	s=s+(*p)(x)*i; 	}	printf ("%lf\n",s);}double sinx (double x){		return sin(x);}double ex (double x){	return exp(x);}
结果:


如何我们划分更多的区间:


可以看出 划分的区间越多所求的值越精确。也说明程序是没问题的。

问题和不足:

在要求输入上下限的时候,必须要上限大于下限,这里可以使用fab 函数求绝对值,这样就能保证划分的区间数是正的了。

总结

这里使用了指向函数的指针做为函数,使用这种指针的好处是,在进行选择的时候可以快速定位到函数,在每次调用的函数时不确定的,所以使用指向函数的指针作为函数参数就大大方便了很多。

但是不能忘记声明被调用的函数,指针只是指向函数的首地址。

注意细节

在定义指向函数的指针的时候

double (*p)(double x) 类型名 (*指针变量)(函数参数列表)

括号不能丢 ,第一个括号表示时指针,第二个括号表示时函数。一个指针变量可以先后指向同类型的不同函数。double 表示函数返回的数据类型。

如有错误欢迎指出!

标签: #sinx用c语言 #c语言函数绝对值 #c语言怎么计算sin #c语言定积分函数 #c语言定积分函数怎么写