前言:
现在姐妹们对“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语言定积分函数怎么写