8 条题解

  • 5
    @ 2023-6-21 0:17:22

    思路分析:

    根据一元二次方程求解公式:image

    可以计算出方程的解。然而,需要注意以下几点:

    • 判别式为0时,有两个相等的实根。
    • 判别式大于0时,有两个不等的实根。
    • 判别式小于0时,无实根。

    因此,在代码中需要根据判别式的值来判断方程的解,最终将结果以指定的格式输出。

    解析:

    1. 导入头文件
    #include <iostream>
    #include <cmath>
    #include <iomanip>
    

    本程序使用了iostreamcmathiomanip三个头文件,分别用于输入输出、数学计算和精度控制。

    1. 定义变量

    本程序定义了七个变量,分别为:

    double a, b, c, delta, x1, x2;
    

    其中,abc为一元二次方程的系数,delta为判别式,x1x2为方程的两个实根。

    1. 读入数据
    cin >> a >> b >> c;
    

    通过cin函数从标准输入流中读入三个浮点数,即一元二次方程的系数。

    1. 判断方程的解
    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;
    }
    
    1. 根据判别式的值,判断方程的解:
    • 如果判别式为0,则有两个相等的实根。
    • 如果判别式大于0,则有两个不等的实根。
    • 如果判别式小于0,则无实根。

    最终将结果以指定的格式输出即可。

    在输出结果时,使用了fixedsetprecision()函数来控制精度输出。fixed用于设置浮点数的输出格式为定点表示法,setprecision()用于设置输出的小数位数。

    此外,在两个实根的情况下,还需要根据根的大小交换x1x2的值,使得输出的根的顺序满足要求。

    1. 输出结果
    cout << fixed << setprecision(5) << "x1=x2=" << x1 << endl;
    cout << fixed << setprecision(5) << "x1=" << x1 << ";x2=" << x2 << endl;
    cout << "No answer!" << endl;
    

    最后,将计算出的方程的解以指定的格式输出即可。注意,在每个浮点数输出时需要使用fixedsetprecision()函数控制精度。

    完整代码:

    #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
      @ 2023-7-14 21:11:14
      #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;
      }
      

      这应该是最简了吧(累死劳资了😄 )

      • @ 2023-10-14 22:11:41

        把库缩写为#include <bits/stdc++.h>就可以更简))))

    • 1
      @ 2024-5-4 12:20:35
      #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
        @ 2023-10-5 20:20:44
        #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;
        }
        

        不想写那么多头文件……用万能头文件吧,别累着自己😄

        • @ 2023-10-5 20:26:04

          放心,五毒无毒

          不好意思打错了

      • 1
        @ 2023-7-15 9:45:40
        #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
          @ 2023-6-22 14:17:12
          #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
            @ 2023-6-20 19:57:38
            #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
              @ 2024-5-1 21:41:55
              #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
              上传者