❶ c语言,求一元二次方程的解
对于如下的一元二次方程:
ax*x+bx+c=0
设计C语言程序,输入一元二次方程的三个系数a、b、c,求解出该方程的两个根,并且允许用户在程序中多次输入不同的系数,以求解不同的一元二次方程的解。
编程思路分析:
对于该方程,令delta=b^2-4*a*c,从数学的角度来讲,我们需要根据delta的值来判断该方程的根情况:
当delta>=0时,其两个根为实数解,分别为(-b+sqrt(delta))/(2*a)和(-b-sqrt(delta))/(2*a);
当delta<0时,其两个根为复数解,实部皆为-b/(2*a),虚部分别为sqrt(-delta)/(2*a)和-sqrt(-delta)/(2*a)。
其中,sqrt(delta)代表对delta作开根号运算。
在代码设计中,可定义一个结构体Complex存储该方程的根,在该结构体中包括实部和虚部两个变
在程序中,定义两个Complex类型的根x1和x2,当delta>=0时,两个根的虚部为0,否则,分别求解两个根的虚部值。
具体编程如下:
#include"stdio.h"
#include"math.h"
/*求一元二次方程ax*x+bx+c=0的解*/
main()
{floata,b,c,x1,x2,d;
printf("请输入a:");
scanf("%f",&a);
printf("请输入b:");
scanf("%f",&b);
printf("请输入c:");
scanf("%f",&c);
d=b*b-4*a*c;if(d<0)
printf("方程没有实数解。
");
if(d==0){x1=(-b)/(2*a);
printf("x1=%f
",x1);}
if(d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f
",x1,x2);}}
请输入a:12
请输入b:34
请输入c:4
x1=-0.122985,x2=-2.710348
Pressanykeytocontinue
为迭代序列。
❷ c语言一元二次方程编程是怎么样的
c语言一元二次方程编程是#include<iostream> 。#include<cmath>。usingnamespacestd。intmain()。{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。/2/ax2=-b/2/a-sqrt(dlt)/2/a。
形如x=p或(nx+m)=p(p≥0)的一元二次方程可采用直接开平方的方法解一元二次方程.如果方程化成x²=p的形式,那么可得x=±p;(x²=p,x=±根号p)如果方程能化成(nx+m)=p(p≥0)的形式,那么nx+m=±p。
简洁的语言:
C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。
实际上,语句构成与硬件有关联的较少,且C语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故c语言拥有非常简洁的编译系统。
提供的控制语句具有结构化特征,如for语句、if...else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。
❸ 怎样用C语言编一个解一元二次方程的程序(可以看步骤)!
#include <stdio.h>
#include <math.h>
int main(void)
{
int a, b, c; //定义一元二次方程的三个数值;
printf("请依次输入一元二次方程的三个参数a b c,中间以空格隔开\n");
scanf("%d %d %d", &a, &b, &c); //依次输入一元二次方程的三个参数
double delta = b*b - 4*a*c; //定义delta的值为b*b - 4*a*c
double x1 = (-b + sqrt(delta))/(2 * a);
double x2 = (-b - sqrt(delta))/(2 * a);
if (delta>0) //delta大于0时,方程有两个解
{
printf("一元二次方程有两个解\n");
printf("一元二次方程的第一个解,x1 = %f\n",x1);
printf("一元二次方程的第二个解,x2 = %f\n",x2);
}
else if (delta ==0) //delta等于0,方程有两个相同的解
{
printf("一元二次方程有两个相同的解\n");
printf("一元二次方程的解为x1 = x2 =%f\n",x1);
}
else //delta小于0时,方程没有解
{
printf("一元二次方程没有解\n");
}
return 0;
}
❹ c语言编写一元2次方程。
程序想法没错,但设计的时候有点失误。
void
main()
{
float
a=0,b=0,c=0,d=0,x1=0,x2=0,e=0;/*定义变量*/
printf("axe2+bx+c=0,(a,b,c):\n");/*提示输入3个数*/
scanf("%f,%f,%f",&a,&b,&c);/*输入的时候用float型
*/
e=sqrt(d);/*根号d
*/
x1=(-b+e)/(2*a);/*计算方程,公式有点不点,逻辑*/
x2=(-b-e)/(2*a);/*计算方程*/
printf("\n
positive:\n
x1=%f,\n
negative:\nx2=%f",x1,x2);/*输出x1
x2,输出的时候也要用float型*/
}
else
printf("equation");/*方程无解*/
getch();
}
//经修改,可以正常运行,
还有建议下,你就在定义变量的时候不要一大串一起定义类型,
有时候变量的类型是不无法隐型转换的,就会出错。
就像程序里面的,开根号又不一定都开出个整数,大多都是带小数的,就应该定义成float型,
最后的解也会直接化成带小数的,要是你用long(长整型,也是整型的一种),
那小数点后面就将被程序自动省略,那问题可就大了,呵呵,。
还在做为printf输出的时候,要给点提示,不然人家也不知道,这a,b,c是干嘛用的。
❺ c语言,一元二次方程
#include<stdio.h>
#include<math.h>
intmain()
{
floata,b,c;
while(scanf("%f%f%f",&a,&b,&c)!=EOF)
{
if(a==0&&b==0&&c==0)
printf("ZeroEquation ");
else
{
floatx,x1,x2,m;
if(a==0&&b==0&&c!=0)
printf("NotAnEquation ");
if(a==0&&b!=0&&c!=0)
printf("%.2f ",-c/b);
if(a!=0&&b!=0)
{
if(b*b-4*a*c==0)
{
m=-b/(2*a);
printf("%.2f ",m);
}
if(b*b-4*a*c>0)
{
x=sqrt(b*b-4*a*c);
x1=(-b+x)/(2*a);
x2=(-b-x)/(2*a);
printf("%.2f ",x1);
printf("%.2f ",x2);
}
if(b*b-4*a*c<0)
{
x=sqrt(4*a*c-b*b);
x1=-b/(2*a);
x2=x/(2*a);
printf("%.2f+%.2fi ",x1,x2);
printf("%.2f-%.2fi ",x1,x2);
}
}
if(a!=0&&b==0&&c!=0)
{
printf("0.00+%.2fi ",sqrt(c/a));
printf("0.00-%.2fi ",sqrt(c/a));
}
if(a!=0&&b==0&&c==0)
printf("0.00 ");
}
}
return0;
}
❻ c语言解一元二次方程是什么
#include<iostream> 。
#include<cmath>。
usingnamespacestd。
intmain()。
{floata,b,c;floatx1,x2; cin>a>>b>>c;floatdlt=b*b-4*a*c;if(dlt>=0){x1=-b/2/a+sqrt(dlt)。
/2/ax2=-b/2/a-sqrt(dlt)/2/a。
cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有两个实根:";cout<<"x1="<<x1<<",x2="<<x2<<endl;} 。
else。
{x1=-b/2/a;x2=sqrt(-dlt)/2/a;cout<<a<<"x^2+"<<b<<"x+"<<c<<"=0有两个虚根:"。
cout<<"x="<<x1<<"+/-"<<x2<<"i"<<endl;}。
return0。
成立条件:
一元二次方程成立必须同时满足三个条件:
①是整式方程,即等号两边都是整式,方程中如果有分母;且未知数在分母上,那么这个方程就是分式方程,不是一元二次方程,方程中如果有根号,且未知数在根号内,那么这个方程也不是一元二次方程(是无理方程)。
②只含有一个未知数。
③未知数项的最高次数是2。
❼ c语言 解一元二次方程 新手很茫然
呵呵,写得不错。
if(a>0||a<0) -> if (a!=0) 这个确实比较好,要是怕出错,有人建议写成if(0!=a),为了避免输入错误。比如少输一个!等等。
浮点数的判断一般会弄一个范围,以避免直接的等号,因为计算有误差。但是实际上情况非常复杂。
如果能够确定输入的范围,那么这么优化判断自然没有问题。比如,a、b、c都是整数量级。
如果系数都是0.001这种量级,优化后的就是总显示有一个实数根或者无解,显然是不合适的。
因为实际上数学上的数和计算机所能表示的数范围相差太大,所以我觉得还是可以,二重根这种情况,打印两遍不算错误,不必判断是否相等。如果一定要判断,最好用整数或者分数。
此外,程序还可以考虑,使用分数之类进行计算,输出中带有根号。比如结果输出4*sqrt(2)这样更实用一些。
❽ c语言解一元二次方程
多出一句“请正确输入,谢谢合作!”与“是否正确?(是y\否n)”的原因:
注意一下scanf,scanf并不是像通常所误解的,认为是直接读取用户的当前输入为输入值。
而是读取当前键盘缓冲区中的数据为本次输入值。
所以如果当前的键盘缓冲区内仍有数据,那么就不会接受当前的用户输入值。
在这个程序中,
由于键盘缓冲区内仍有用户上次输入数据时所残留的回车符(也就是输入a,b,c时最后敲的回车),
所以scanf("%c",&z); 这一句就将键盘缓冲区中的回车读入,作为z值了。
所以判断失败,多出一句“请正确输入,谢谢合作!”与“是否正确?(是y\否n)”。
改正办法:
在每句scanf前,加上强制清空键盘缓冲区的处理fflush(stdin);,以保证接收的数据的正确性。
这也是一个好的编程习惯。
改过以后的程序:
#include "stdio.h"
#include "math.h"
void main()
{
printf("求方程ax^2+bx+c=0的根:\n");
L: printf("请分别输入a,b,c的值。\n");
double a,b,c,x1,x2,x,y;
char z;
printf("a=");
fflush(stdin); //强制清空键盘缓冲区
scanf("%lf",&a);
printf("b=");
fflush(stdin); //强制清空键盘缓冲区
scanf("%lf",&b);
printf("c=");
fflush(stdin); //强制清空键盘缓冲区
scanf("%lf",&c);
printf("你所输入的方程为%lfx^2+%lfx+%lf=0。\n",a,b,c);
M: printf("是否正确?(是y\否n)\n");
fflush(stdin); //强制清空键盘缓冲区
scanf("%c",&z);
if (z=='n')
goto L;
else if (z=='y')
{
if ((b*b-4*a*c)>0)
x1=(-b+sqrt(b*b-4*a*c))/(2*a),
x2=(-b-sqrt(b*b-4*a*c))/(2*a),
printf("有两个不同的实根:\nx1=%lf\nx2=%lf\n",x1,x2),
printf("\n");
if ((b*b-4*a*c)==0)
x1=-b/(2*a),
printf("有两个相同的实根:\nx1=x2=%lf\n",x1),
printf("\n");
if ((b*b-4*a*c)<0)
x=-b/(2*a),
y=sqrt(4*a*c-b*b)/(2*a),
printf("有两表个不同的曾根:\nx1=%lf+%lfi\nx2=%lf-%lfi\n",x,y,x,y),
printf("\n");
goto L ;
}
else printf("请正确输入,谢谢合作!\n");
goto M;
}
❾ 初学C语言,求一元二次方程的解问题
#include<stdio.h>
#include<math.h>
intmain()
{
doublex1,x2,k,a,b,c;
printf("输入a,b,c的值 ");
scanf("%lf,%lf,%lf",&a,&b,&c);//double读入用%lf
k=b*b-4*a*c;
if(fabs(k-0)<1e-6)//double型的相等比较最好这样写
{
x1=(-b)/(2*a);//x1不求么?
printf("方程有两个相同的解x1=x2=%.2lf",x1);//double输出用%lf
}
elseif(k>0)//Δ>0才是两个解吧……
{
x1=(-b+sqrt(k))/(2*a);
x2=(-b-sqrt(k))/(2*a);
printf("方程有两个解x1=%lf,x2=%lf",x1,x2);//double输出用%lf
}
else
{
printf("方程没解");
}
}
❿ C语言解一元二次方程(包含虚数解)
表示虚数一般不用j表示,而是用i表示。输出的时候后面带上i就可以了。
判别式变量d为负时,用sqrt(-d)
形如ax²+bx+c=0的方程的完整程序如下:
#include<stdio.h>
#include<math.h>
voidmain()
{
floata,b,c,dlt;
printf("请输入a、b、c:");
scanf("%f%f%f",&a,&b,&c);
if(a)
{
dlt=b*b-a*c*4;
if(dlt>0)
printf("x1=%f x2=%f",(-b+sqrt(dlt))/(a*2),(-b-sqrt(dlt))/(a*2));
elseif(dlt<0)
printf("x1=%f+%fi x2=%f-%fi",-b/(a*2),abs(sqrt(-dlt)/(a*2)),-b/(a*2),abs(sqrt(-dlt)/(a*2)));
elseprintf("x=%f",-b/(a*2));
}
else
{
if(b)c?printf("x=%f",-c/b):printf("x=%f",abs(-c/b));
elsec?printf("方程无实数解"):printf("方程的解为任意实数");
}
}