请C++高手看一下一个程序的问题,语法错误一个,在rootx函数的定义中的“x=x(x1,x2)”这句处发生错误

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
class imaroot{
public:
virtual double f(double x)=0;
virtual double x(double x1,double x2)=0;
};
class root:public imaroot{
public:
double f(double x){
double y;
y=((x-5.0)*x+16.0)*x-80.0;
return y;
}
double x(double x1,double x2){
double x;
x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return x;
}
double rootx(double x1,double x2){
double x,y,y1;
y1=f(x1);
do{
x=x(x1,x2); //出现错误
y=f(x);
if(y*y1>0){
y1=y;
x1=x;
}else{
x2=x;
}
}
while(fabs(y)>=1.0e-6);
return x;
}
};
int main(void){
root a;
double x,x1,x2;
cout<<"input x1,x2:";
cin>>x1>>x2;
do{
cout<<"f(x1)与f(x2)同号重新输入"<<endl;
cin>>x1>>x2;
}
while(a.f(x1)*a.f(x2)>=0);
x=a.rootx(x1,x2);
cout<<setiosflags(ios::fixed)<<setprecision(7);
cout<<"A root of equation is "<<x<<endl;
return 0;
}

函数名与变量名重复。
程序有一个 x 函数,还有一个 x 变量。
你要么更改函数名,要么更改变量名。追问

恩恩。现在对了,可是运行时出现一个问题,我输入的区间是4.5和5.5,明明是f(4.5)*f(5.5)是异号,为啥会提示同号叫我重新输入?

追答

因为 do while 循环的条件表达式写错。

a.f(x1) * a.f(x2)
a.f(x1) 得到的结果为负数,a.f(x2) 得到的结果也为负数,负数与负数相乘得正。

追问

谢啦

追答

a.f(x1) 得到的结果为负数,a.f(x2) 得到的结果也为负数,负数与负数相乘得正。
因结果 a.f(x1) * a.f(x2) 大于或等于 0,所以进入循环。

追问

f(4.5)0,相乘是小于0的,为何会进入循环?难道代码写死了a.f(x1) 得到的结果为负数,a.f(x2) 得到的结果也为负数?应该怎么改呢?

追答

f 函数的定义是你写,你自己可以看一下你是怎么定义计算的。

y=((x-5.0)*x+16.0)*x-80.0;
这是你自己定义的计算公式。

温馨提示:内容为网友见解,仅供参考
无其他回答

...语法错误一个,在rootx函数的定义中的“x=x(x1,x2)”这句处发生错误...
函数名与变量名重复。程序有一个 x 函数,还有一个 x 变量。你要么更改函数名,要么更改变量名。

c++函数求根问题,运行出错
你的就错了一处,估计是笔误。在函数double xpoint(double x1,double x2)中 y=(x1*f(x2)-x2*f(x1))\/(f(x2)-f(x2)-f(x1));应该改成 y=(x1*f(x2)-x2*f(x1))\/(f(x2)-f(x1));改后运行正确。另外,可能是网页的关系,这个网页上把你的 < 和 > 号都显示错了。

用C++输入一个非负实数x,计算其平方根
include<iostream> include<iomanip> include<cmath> using namespace std;int main(){ double n;cin>>n;cout<<fixed;cout<<setprecision(2)<<(double)sqrt(n);return 0;}

新手用c++编成一元二次方程问题,求帮助!
对于新手使用C++编写的关于一元二次方程的问题,首先需要了解一元二次方程的基本形式为 ax^2 + bx + c = 0。其中,a、b、c 是常数,x 是未知数。为了求解该方程的根,可以使用二次方程求根公式:x = [-b ± sqrt(b^2 - 4ac)] \/ (2a)。接下来,我们可以通过编写C++代码来实现这个过程。

请帮我看一下“从键盘输入一个数,然后输出该数的平方、立方以及平方根...
调试--设置--符号 选microsoft符号服务器 下载到符号 “Cstart00.exe”: 已加载“C:\\Windows\\System32\\kernel32.dll”,已加载符号(去除源信息)。

dev c++ 求二元一次方程的根 各种情况,一元,二元,有解,虚根, 帮忙看...
是if else的问题,比如你的input,a,b,c都是0,此时首先会满足 if (a=0,b=0,c=0) printf("x1=x2=R");但之后 if (a=0,b!=0,c!=0) printf("x1=x2=%f",-c\/b); else if (d>=0) printf("x1=%f,x2=%f",-b+tem\/(2*a),-b-tem\/(2*a)); else printf("%f,%f...

C++程序问题,哪位高手帮帮忙看下。有一个错误invalid conversion from...
bitree *root,*s;front=1;rear=0;root=null;x=getchar();while(x!='#'){ s=null;if(x!='@'){ s=(struct node*)malloc(sizeof(bitree));\/\/这里!这里!这里!这里!这里!s->data=x;s->left=null;s->right=null;} rear++;Q[rear]=s;if(rear==1)root=s;else { if(rear%...

...和运行程序时为什么printf("Please input x1, x2:\\n");会出两遍...
你的printf放在循环里了当然会循环出现了,我没用过弦接法,不过我感觉你可能应该把 printf("Please input x1, x2:\\n");scanf("%f, %f", &x1, &x2);放在do的前面

求C++高手!!!
(4)若x0—x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2); (5)所求x1就是方程COS(X)-X=0的一个实根,作为函数值返回。程序将输出结果Root=0.739085。***11.下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N],该函数的功能是:使数组左下半三角元素中的值全部置...

程序员必知的 89 个操作系统核心概念
shell:程序,用于获取命令执行于操作系统。过去唯一用户界面,现也支持图形用户界面(GUI)。GUI (Graphical User Interface):允许用户通过图形图标和音频指示与电子设备交互的用户界面。内核模式 (kernel mode):超级模式,拥有底层硬件完整访问权,可执行任何指令与内存地址,用于操作系统的最低级功能。内核...

相似回答