题目
用矩形法分别求函数y = sin(x)
在函数[0,1]
区间的定积分、y = cos(x)
在 [-1, 1]
区间的定积分、y = 5x^2^ + 6x + 7
在 [1, 3]
区间的定积分,要求编程时使用指向函数的指针变量。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
double fsin(double x)
{
return sin(x);
}
double fcos(double x)
{
return cos(x);
}
double fn(double x)
{
return 5 * pow(x, 2) + 6 * x + 7;
}
double fun(double m, double n, double (*p)(double)) /*函数fun求定积分*/
{
double h, sum = 0; /*计算p指向的函数的定积分*/
h = fabs(n - m) / 1000; /*积分值等于1000个小矩形的面积之和*/
for (int i = 0; i < 1000; i++)
{
sum = sum + h * (*p)(m + i * h + h / 2);
}
return sum;
}
int main()
{
int k;
while (1)
{
printf("1. 计算函数y = sin(x)在[0,1]区间的定积分。\n");
printf("2. 计算函数y = cos(x)在[-1,1]区间的定积分。\n");
printf("3. 计算函数y = 5 * x^2 + 6 * x + 7在[1,3]区间的定积分。\n");
printf("4. 结束程序!!!\n");
printf("请输入你的选择:\n");
scanf("%d", &k);
if (k == 1) printf("函数y = sin(x)在[0,1]区间的定积分为:%lf。\n", fun(0, 1, fsin));
else if (k == 2) printf("函数y = cos(x)在[-1,1]区间的定积分为:%lf。\n", fun(-1, 1, fcos));
else if (k == 3) printf("函数y = 5 * x^2 + 6 * x + 7在[1,3]区间的定积分为:%lf。\n", fun(1, 3, fn));
else if (k == 4)
{
break;
}
else
{
printf("你的输入有误!!!\n");
}
printf("\n\n\n");
}
return 0;
}