梯形积分法串行代码的实现:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
#define MAXN 30
double fun1(double x);
double fun2(double x);
double fun3(double x);
double Definite_integral(double a, double b, double (*p)(double x));
int main()
{
int c = 1;
double a, b;
char d = '0';
printf("*************************************\n");
printf("***** 用梯形积分串行算法 *******\n");
printf("***** 1、函数为:y = x *******\n");
printf("***** 2、函数为:y = x^2 *******\n");
printf("***** 3、函数为:y = sin(x) *******\n");
printf("*************************************\n");
while (0 != c) {
printf("请输入您要选择的类型:");
scanf("%d",&c);
switch (c)
{
case 1:
printf("请输入积分上下限(以空格隔开):>");
scanf("%lf %lf",&a,&b);
printf("该函数在%lf-%lf上的积分值为:》%lf\n", a, b, Definite_integral(a, b, fun1));
break;
case 2:
printf("请输入积分上下限(以空格隔开):>");
scanf("%lf %lf",&a,&b);
printf("该函数在%lf-%lf上的积分值为:》%lf\n", a, b, Definite_integral(a, b, fun1));
break;
case 3:
printf("请输入积分上下限(以空格隔开):>");
scanf("%lf %lf",&a,&b);
printf("该函数在%lf-%lf上的积分值为:》%lf\n", a, b, Definite_integral(a, b, fun1));
break;
default:
printf("您的输入有误,您的选择只能是:1、2、3、0,请重新输入!\n");
break;
}
printf("您还要继续选择吗?(1/0):>");
scanf("%d",&c);
}
printf("程序结束,欢迎下次再来!");
return 0;
}
/* 梯形法求定积分*/
double Definite_integral(double a, double b, double (*p)(double x)) {
int i, n = MAXN;
double x, y1, y2, deta, f;
deta = (b - a) / n;
x = a;
y1 = (*p)(x);
f = 0;
for (i = 0; i < n; i++) {
x += deta;
y2 = (*p)(x);
f += (y1 + y2) * deta / 2;
y1 = y2;
}
return f;
}
/*定义被积函数,三种供选择*/
double fun1(double x) {
double fx;
fx = x;
return fx;
}
double fun2(double x) {
double fx;
fx = x * x;
return fx;
}
double fun3(double x) {
double fx;
fx = sin(x);
return fx;
}
#define _CRT_SECURE_NO_WARNINGS