由于某些原因,我不知道是什么,它没有显示大约的根,应该作为一个非零浮点打印的avg值是0,因为它的值在结尾,我也不确定在这里是否有必要。帮帮我,p.s-我的第一个问题。
// C program for bisection method
#include<stdio.h>
#include<math.h>
#define F(x) (x*x*x-9*x+1)
int main(int argc, char const *argv[])
{
double guess_1, guess_2,func, avg;
printf("Enter values of 1st guess and 2nd guess : "); //assumes the initial 2 values from user
scanf("%lf%lf",&guess_1,&guess_2);
for (int i = 1; fabs(F(avg)) < 0.001; i++)
{
avg=(guess_1+guess_2)/2;
if (F(guess_1)*F(avg)<0)
{
guess_2=avg;
}else
{
guess_1=avg;
}
}
printf("approximate root is : %lf",avg);
return 0;
}发布于 2022-09-19 17:39:58
你有两个主要问题:
avg没有像天气叶片在注释中指出的那样初始化。固定版本如下:
// C program for bisection method
#include<stdio.h>
#include<math.h>
#define F(x) ((x)*(x)*(x)-9*(x)+1)
int main(void)
{
double guess_1, guess_2, avg;
printf("Enter values of 1st guess and 2nd guess : "); //assumes the initial 2 values from user
scanf("%lf%lf",&guess_1,&guess_2);
// TODO: Check if result == 2
avg=(guess_1+guess_2)/2;
while (fabs(F(avg)) > 0.001)
{
avg=(guess_1+guess_2)/2;
if (F(guess_1)*F(avg)<0)
{
guess_2=avg;
}else
{
guess_1=avg;
}
}
printf("approximate root is : %lf",avg);
return 0;
}输出:
a)
Enter values of 1st guess and 2nd guess : 2.3 3.5
approximate root is : 2.942810
b)
Enter values of 1st guess and 2nd guess : -1.0 1.0
approximate root is : 0.111328进一步改进:
variables
for循环移至宏定义中括号中的whileforx。https://stackoverflow.com/questions/73777045
复制相似问题