8 条题解
-
5
思路分析:
根据一元二次方程求解公式:
可以计算出方程的解。然而,需要注意以下几点:
- 判别式为0时,有两个相等的实根。
- 判别式大于0时,有两个不等的实根。
- 判别式小于0时,无实根。
因此,在代码中需要根据判别式的值来判断方程的解,最终将结果以指定的格式输出。
解析:
- 导入头文件
#include <iostream> #include <cmath> #include <iomanip>
本程序使用了
iostream
、cmath
和iomanip
三个头文件,分别用于输入输出、数学计算和精度控制。- 定义变量
本程序定义了七个变量,分别为:
double a, b, c, delta, x1, x2;
其中,
a
、b
、c
为一元二次方程的系数,delta
为判别式,x1
、x2
为方程的两个实根。- 读入数据
cin >> a >> b >> c;
通过
cin
函数从标准输入流中读入三个浮点数,即一元二次方程的系数。- 判断方程的解
delta = pow(b, 2) - 4 * a * c; if (fabs(delta) < 1e-5) { x1 = x2 = (-b) / (2 * a); cout << fixed << setprecision(5) << "x1=x2=" << x1 << endl; } else if (delta > 0) { x1 = (-b + sqrt(delta)) / (2 * a); x2 = (-b - sqrt(delta)) / (2 * a); if (x1 > x2) { swap(x1, x2); } cout << fixed << setprecision(5) << "x1=" << x1 << ";x2=" << x2 << endl; } else { cout << "No answer!" << endl; }
- 根据判别式的值,判断方程的解:
- 如果判别式为0,则有两个相等的实根。
- 如果判别式大于0,则有两个不等的实根。
- 如果判别式小于0,则无实根。
最终将结果以指定的格式输出即可。
在输出结果时,使用了
fixed
和setprecision()
函数来控制精度输出。fixed
用于设置浮点数的输出格式为定点表示法,setprecision()
用于设置输出的小数位数。此外,在两个实根的情况下,还需要根据根的大小交换
x1
和x2
的值,使得输出的根的顺序满足要求。- 输出结果
cout << fixed << setprecision(5) << "x1=x2=" << x1 << endl; cout << fixed << setprecision(5) << "x1=" << x1 << ";x2=" << x2 << endl; cout << "No answer!" << endl;
最后,将计算出的方程的解以指定的格式输出即可。注意,在每个浮点数输出时需要使用
fixed
和setprecision()
函数控制精度。完整代码:
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { double a, b, c, delta, x1, x2; cin >> a >> b >> c; delta = pow(b, 2) - 4 * a * c; if (fabs(delta) < 1e-5) { x1 = x2 = (-b) / (2 * a); cout << fixed << setprecision(5) << "x1=x2=" << x1 << endl; } else if (delta > 0) { x1 = (-b + sqrt(delta)) / (2 * a); x2 = (-b - sqrt(delta)) / (2 * a); if (x1 > x2) { swap(x1, x2); } cout << fixed << setprecision(5) << "x1=" << x1 << ";x2=" << x2 << endl; } else { cout << "No answer!" << endl; } return 0;//题解不易请勿抄袭代码,谢谢合作!!! }
-
3
#include <iostream> #include <cmath> //将必要的库导出来 #include <cstdio> using namespace std; int main() { double a,b,c,x1,x2; cin>>a>>b>>c; if (b*b-4*a*c<0 || a==0) cout<<"No answer!"; //判断根号下正负 是否产生增根 else { //计算下x1 x2 x1=(-b+sqrt(b*b-4.0*a*c))/2.0/a; x2=(-b-sqrt(b*b-4.0*a*c))/2.0/a; if (x1==x2) printf("x1=x2=%.5lf",x1); //相等情况 else if(x1<x2)printf("x1=%.5lf;x2=%.5lf",x1,x2); //不相等情况,x1<x2 else printf("x1=%.5lf;x2=%.5lf",x2,x1); //不相等情况,x2<x1 } return 0; }
这应该是最简了吧(累死劳资了😄 )
-
1
#include <iostream> #include <cmath> #include <iomanip> using namespace std; int main() { double a,b,c,d,e,f,x1,x2,x1_x2; cin >> a >> b >> c; d=-b; e=pow(b,2)-4*a*c; f=2*a; if(e>0) { x1=(d-sqrt(e))/f; x2=(d+sqrt(e))/f; cout << fixed << setprecision(5) << "x1=" << x1 << ";x2=" << x2; } else if (e==0) { x1_x2=d/f; cout << fixed << setprecision(5) << "x1=x2=" << x1_x2; } else { cout << "No answer!"; } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; int main()//hetao1285761 { double a,b,c,x,y; cin>>a>>b>>c; if (b*b>=4.0*a*c) { x=(-b+sqrt(b*b-4.0*a*c))/(2.0*a); y=(-b-sqrt(b*b-4.0*a*c))/(2.0*a); if (x==y)cout<<"x1=x2="<<fixed<<setprecision(5)<<x; else if (x>y) cout<<"x1="<<fixed<<setprecision(5)<<y<<";x2="<<x; else cout<<"x1="<<fixed<<setprecision(5)<<x<<";x2="<<y; } else cout<<"No answer!"; return 0; }
不想写那么多头文件……用万能头文件吧,别累着自己😄
-
1
#include<iostream> #include<iomanip> #include<cmath> using namespace std; int main() { double a,b,c,x,y; cin>>a>>b>>c; if (b*b>=4.0*a*c) { x=(-b+sqrt(b*b-4.0*a*c))/(2.0*a); y=(-b-sqrt(b*b-4.0*a*c))/(2.0*a); if (x==y) { cout<<"x1=x2="<<fixed<<setprecision(5)<<x; } else if (x>y) { cout<<"x1="<<fixed<<setprecision(5)<<y<<";x2="<<x; } else { cout<<"x1="<<fixed<<setprecision(5)<<x<<";x2="<<y; } } else { cout<<"No answer!"; } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; int main(){ double a,b,c,dt,result1,result2; cin>>a>>b>>c; dt = sqrt(b*b-4*a*c); //计算Δ result1 = (-b+dt)/2.0/a; result2 = (-b-dt)/2.0/a;//计算两根 if(result1 == result2 && dt>=0){ printf("x1=x2=%.5lf",result1); }//根相等时 else if(result1 != result2 && dt>=0){ if(result1 < result2){ printf("x1=%.5lf;x2=%.5lf",result1,result2); }//根不等时 else{ printf("x1=%.5lf;x2=%.5lf",result2,result1); } } else { cout<<"No answer!"; }//无实根 return 0; } --- 输出采用printf会简单得多```
-
1
#include<bits/stdc++.h> using namespace std; int main() { double a, b, c; cin>>a>>b>>c; double delta = b*b - 4*a*c; if(fabs(delta) < 0.00001)//如果delta等于0 cout<<"x1=x2="<<fixed<<setprecision(5)<<-b/(2*a);//输出相等的根 else if(delta > 0) { double x_small = (-b-sqrt(delta))/(2*a);//x_small保存较小的根 double x_big = (-b+sqrt(delta))/(2*a);//x_big保存较大的根 if(x_small > x_big)//刚刚求出的x_small与x_big没有确定的大小关系,此处操作可以使得x_small一定小于x_big { double temp = x_small;//交换x_small与x_big x_small = x_big; x_big = temp; } cout<<fixed<<setprecision(5)<<"x1="<<x_small<<";x2="<<x_big;//先输出较小的根再输出较大的根 } else cout<<"No answer!";//没有实根 return 0; }
-
0
#include <iostream>//导库 #include <iomanip> #include <cmath> using namespace std; int main() { double a,b,c,know1,know2; cin >> a >> b >> c; if (b*b-4*a*c<0 || a==0)//判断根号下正负,是否增根 cout << "No answer!"; else { know1 = (-b+sqrt(b*b-4*a*c))/(2.0*a); know2 = (-b-sqrt(b*b-4*a*c))/(2.0*a); if (know1 == know2) cout <<fixed<<setprecision(5)<<"x1=x2="<<know1; else if (know1<know2) cout <<fixed<<setprecision(5)<< "x1="<< know1<<";x2="<<know2; else if (know1>know2) cout <<fixed<<setprecision(5)<< "x1="<< know2<<";x2="<<know1; } return 0; }
- 1
信息
- ID
- 159
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 504
- 已通过
- 106
- 上传者