上机内容:输入一元二次方程ax^2+bx+c=0的各项系数,并根据各系数的值的情况,分别进行求解
上机目的:分支结构程序设计
我的程序:
上机目的:分支结构程序设计
我的程序:
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013, 青岛农业大学理信学院
* All rights reserved.
* 文件名称:求一元二次方程的根.cpp
* 作 者:幻影行者
* 完成日期:2013 年 7 月 21 日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 输入描述:输入方程各项系数a,b,c
* 问题描述:输入一元二次方程ax^2+bx+c=0的各项系数,并根据各系数的值的情况,分别进行求解
* 程序输出:输出方程的解
* 问题分析:先后对a,b的取值范围进行讨论。分三种情况:
(1) a!=0时方程为一元二次方程,此时在讨论根的判别式delta,大于0,有两个不等实根,等于0,有两个相等实根,小于0无实根
(2) a=0且b!=0时方程为一元一次方程
(3) a=0,b=0时不是方程。
* 算法设计:略
*/
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,b,c,delta;//方程的各项系数a,b,c,根的判别式delta
float x1,x2; //方程的根
cout<<"请输入方程ax^2+bx+c=0各项系数a,b,c的值:";
cin>>a>>b>>c;
delta=b*b-4*a*c;
if(a!=0) //首先讨论a的取值,a!=0确保是一元二次方程
{
if(a==1) //改进:显示输入各系数后所得的方程
cout<<"所求方程为"<<"x^2+"<<b<<"x+"<<c<<"=0,";
else if(a==-1)
cout<<"所求方程为"<<"-x^2+"<<b<<"x+"<<c<<"=0,";
else
cout<<"所求方程为"<<a<<"x^2+"<<b<<"x+"<<c<<"=0,";
if(delta>=0) //delta大于等于0方程有实根
{
if(delta>0)
{
cout<<"方程有两个不相等的实数根:"<<endl;
x1=float(-b+sqrt(delta))/2*a; //用求根公式求解
x2=float(-b-sqrt(delta))/2*a;
cout<<"x1="<<x1<<'\t'<<"x2="<<x2<<endl;
}
else
{
cout<<"方程有两个相等的实数根:"<<endl;
x1=x2=float(-b)/2*a;
cout<<"x1=x2="<<x1<<endl;
}
}
else //delta小于0无实根
{
cout<<"方程无实数根!"<<endl;
}
}
else //a=0的情况
{
if(b!=0) //a=0,b!=0,方程此时为一元一次方程
{
if(b==1) //改进:显示输入各系数后所得的方程
cout<<"所求方程为"<<"x+"<<c<<"=0,";
else if(b==-1)
cout<<"所求方程为"<<"-x+"<<c<<"=0,";
else
cout<<"所求方程为"<<b<<"x+"<<c<<"=0,";
cout<<"该方程为一元一次方程,其根为:";
cout<<"x="<<float(-c)/b<<endl;
}
else //a=0,b=0,不是方程
{
cout<<"不是方程!"<<endl;
}
}
return 0;
}
运行结果:
心得体会:
求方程ax^2+bx+c=0的根,先后对a,b的取值范围进行讨论。分三种情况:
(1) a!=0时方程为一元二次方程,此时在讨论根的判别式delta,大于0,有两个不等实根,等于0,有两个相等实根,小于0无实根
(2) a=0且b!=0时方程为一元一次方程
(3) a=0,b=0时不是方程。