还有下面这个
方便注释一下就好了,若是有这种题型的解法就更好了。
引用chatgpt部分指引作答:
第一题:以下是使用函数指针实现的通用函数代码,计算出给定函数在指定区间上的积分值:
#include <stdio.h>
#include <math.h>
double sigma(double(* fn)(double), double lower, double upper) {
const int n = 100;
const double h = M_PI / n;
double sum = 0.0;
for (int i = 0; i <= n; i++) {
double x = lower + i * h;
sum += fn(x) * h;
}
return sum;
}
double sin_fn(double x) {
return sin(x);
}
double cos_fn(double x) {
return cos(x);
}
int main() {
double sin_integral = sigma(sin_fn, 0.0, M_PI);
double cos_integral = sigma(cos_fn, 0.0, M_PI);
printf("Approximation of sin(x) integral: %f\n", sin_integral);
printf("Approximation of cos(x) integral: %f\n", cos_integral);
return 0;
}
这段代码中,sigma 函数接受一个指向双精度浮点函数的指针 fn、积分区间的下限 lower 和上限 upper 作为参数,并返回函数 fn 在区间 [lower, upper] 上的近似积分值。该函数使用梯形法来计算积分值,将积分区间分为 n 个小段,每个小段的宽度为 h,然后计算每个小段上 fn 函数值的平均值并将其与小段宽度相乘,最后将所有小段的积分值相加得到最终的近似积分值。
在 main 函数中,我们将 sin_fn 和 cos_fn 函数作为参数传递给 sigma 函数来分别计算出函数 sin(x) 和 cos(x) 在区间 [0, π] 上的积分值,并将结果输出到控制台。
第二题:以下是使用C语言循环程序线结构设计实现的代码,计算函数 f(x)=ln(2+x^2)-sin(x) 在给定节点上的函数值并输出到控制台:
#include <stdio.h>
#include <math.h>
double f(double x) {
return log(2 + pow(x, 2)) - sin(x);
}
int main() {
const double lower = 0.0;
const double upper = 2.0;
const int n = 10;
const double h = (upper - lower) / n;
printf("x\tf(x)\n");
for (int i = 0; i <= n; i++) {
double x = i * h;
double fx = f(x);
printf("%.2f\t%.5f\n", x, fx);
}
return 0;
}
这段代码中,我们使用了循环程序线结构设计来计算函数 f(x)=ln(2+x^2)-sin(x) 在给定节点上的函数值,并将结果输出到控制台。具体来说,我们首先定义了区间 [lower, upper] 和节点数 n,然后计算出节点之间的距离 h。在循环中,我们使用变量 i 从 0 循环到 n,在每次循环中计算节点 x_i 和对应的函数值 f(x_i),并将其格式化输出到控制台。最后,我们返回 0 表示程序执行成功。