c语言 编程问题
发布网友
发布时间:2022-05-08 13:51
我来回答
共5个回答
热心网友
时间:2024-01-24 17:02
d==sqrt(b*b-4*a*c);
这句是最严重的错误.如果:
b*b-4*a*c<0,就不能开方.
所以上面的答案不能把这个改回来的都是错的.....
还有,复根也是可以求出来的.一句无解是不负责任的....
当然还应该加上一个循环语句,判断A是不是等于零....
下面是我的C++;不是为了解答你的问题,只是希望你能了解这个问题需要注意的细节!!!!!!!
#include<iostream.h>
#include<math.h>
void main()
{
cout<<"This program is to calculate the root of a quadraticequation!"<<endl;
char more='y';
while(more=='y')
{
double a,b,c,root1,root2,discriminant;
cout<<"please enter the molus of x*x:"<<endl;
cin>>a;
while(a==0)
{
cout<<"This is not a quadratiequation!"<<endl;
cout<<"Please enter a nonzero number!"<<endl;
cin>>a;
}
cout<<"Please enter the molus of x:"<<endl;
cin>>b;
cout<<"Please enter the value of constant:"<<endl;
cin>>c;
discriminant=b*b-4*a*c;
if(discriminant>=0)
{
root1=(-b+sqrt(discriminant))/(2*a);
root2=(-b-sqrt(discriminant))/(2*a);
cout<<"discriminant"<<"="<<discriminant<<endl;
cout<<"root1"<<"="<<root1<<endl;
cout<<"root2"<<"="<<root2<<endl;
}
else
{
cout<<"the root is complex!"<<endl;
cout<<"the complex root1="<<(-b)/(2*a)<<"+"<<sqrt(-discriminant)/(2*a)<<"i."<<endl;
cout<<"the complex root2="<<(-b)/(2*a)<<"-"<<sqrt(-discriminant)/(2*a)<<"i."<<endl;
}
cout<<"want to continue ? Type n/y:"<<endl;
cin>>more;
}
}
复根只是一种表示......没有数值意义.....
热心网友
时间:2024-01-24 17:03
请注意:楼上有几位是不精确的!!
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int a,b,c; //建议你改为:float a,b,c;可以使用那些非整数系数的方程;
double d,z,x; //在这里,d至少应该定义为double或者float型,因为:其一,下面的函数中,d=sqrt(b*b-4*a*c);若d定义为int,则返回平方根的整数部分,影响根的精度!其二:z=(-b+d)/(2*a); x=(-b-d)/(2*a); 在这两句话中,若a,b,d都为int,则z和x取它们商的整数部分,肯定得不到理想的值(除非根是整数)!
printf("一元二次方程三个未知项系数\n");
scanf("%d %d %d",&a,&b,&c);
d=sqrt(b*b-4*a*c); //这里,他们都指出了,先给值,然后才能计算d;
if(d>=0)
{
z=(-b+d)/(2*a);
x=(-b-d)/(2*a);
printf("一元二次方程两根");
printf("%f %f\n",z,x);}
else
{
printf("无解");
}
getch();
}
热心网友
时间:2024-01-24 17:03
楼主看我这.
你把==,=搞混了啊
==是我们平时说的等于
=是赋值
两个搞混了,当然错了.
我已经帮你改好了
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int a,b,c,d;
float z,x;
d=sqrt(b*b-4*a*c); /*等号用错了.不是==,而是=*/
if(d>=0)
{printf("一元二次方程三个未知项系数\n");
scanf("%d %d %d",&a,&b,&c);
z=(-b+d)/(2*a); /*等号用错了.不是==,而是=*/
x=(-b-d)/(2*a); /*等号用错了.不是==,而是=*/
printf("一元二次方程两根");
printf("%f %f\n",z,x);}
else
{printf("无解");}
getch();
}
热心网友
时间:2024-01-24 17:04
=与==地用法搞错了
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
int a,b,c;
double z,x,d; //d最好也设为浮点型,应为他不是证书的概率很大
printf("一元二次方程三个未知项系数\n");
scanf("%d %d %d",&a,&b,&c);
d=sqrt(b*b-4*a*c); //应该在得到a,b,c得知后再写这个语句,同时把上面的输出于具体到外面来
if(d>=0)
{
z=(-b+d)/(2*a);
x=(-b-d)/(2*a);
printf("一元二次方程两根");
printf("%f %f\n",z,x);
}
else
{
printf("无解");
}
getch();
}
热心网友
时间:2024-01-24 17:05
我帮你改了一下,编译可以通过了:
==============================================
#include<stdio.h>
#include<conio.h>
#include<math.h>
main()
{
float a,b,c,delta,x1,x2; //定义类型最好统一
printf("一元二次方程三个未知项系数\n");
scanf("%f %f %f",&a,&b,&c);
delta=b*b-4*a*c; //“==”是关系运算符
if(delta>=0)
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
printf("一元二次方程两根:x1=%f x2=%f",x1,x2);}
else
{printf("无解");}
getch();
}