#include
#include
#include
#include
using namespace std;
double a(double x)
{
return 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
}
double b(double x1, double x2, double(*c)(double))
{
double d;
do
{
d = (x1 + x2) / 2;
if ((*c)(d) * (*c)(x1) > 0)
x1 = d;
else
x2 = d;
} while ((*c)(d) >= 1e-6);
return d;
}
int main(void)
{
double x1, x2;
double a(double);
double b(double, double, double);
double(*c)(double);
c = a;
do
{
scanf_s("%lf,%lf", &x1, &x2);
}
while ((*c)(x1) * (*c)(x2) > 0);
printf("%lf",b(x1,x2,*c));
return 0;
为什么*c有问题;而且我把b函数删了就没有问题,为什么;为什么我可以删b函数不可以删a函数?
b函数第三个参数是double类型,但你实际调用b函数却用 * c作为参数?
main中b函数的申明,和前面的b函数定义中的第三个参数是不一样的啊
修改main函数中的b函数声明为:
double b(double, double, double(*c)(double));
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
double a(double x)
{
return 2 * pow(x, 3) - 4 * pow(x, 2) + 3 * x - 6;
}
double b(double x1, double x2, double(*c)(double))
{
double d;
do
{
d = (x1 + x2) / 2;
if ((*c)(d) * (*c)(x1) > 0)
x1 = d;
else
x2 = d;
} while ((*c)(d) >= 1e-6);
return d;
}
int main(void)
{
double x1, x2;
double a(double);
double b(double, double, double(*c)(double));
double(*c)(double);
c = a;
do
{
scanf_s("%lf,%lf", &x1, &x2);
}
while ((*c)(x1) * (*c)(x2) > 0);
printf("%lf",b(x1,x2,*c));
return 0;
}
b传参把 *c 的星号去掉
b传参时c 前面的星号要去掉