3975 - 计算一方程的根
有如下表示的方程式ax^2+bx=c,求其根
题目输入
本题的输入有多行,
第一行输入n,表示接下来有n组数据分别输入abc的值。输入abc时以空格隔开,abc的值可能为实数。
题目输出
本题有多行输出,分别对应n个abc输入构成方程式的根
如果当方程无实根的时候,输出“no real root”;
若方程有且只有一个根,直接输出保留4位小数的实根;
如果方程有两个根,按负根在前,正根在后的格式输出以空格为分隔的两个保留4位小数的根;
如果abc输入的是字母、符号或者abc输入的值使得方程不成立的比如a=b=0,输出“illegal inputs!”;
最后一行行尾输出换行。
输入/输出样例
题目输入
2 0 1 2.3 a c 3
题目输出
2.3000 illegal inputs!
提示
abc输入的时候请使用double或float
如何判断并处理输入非法数据?去查询c语言手册中的scanf函数部分,重点关注返回值。
C语言解答
#include<stdio.h> #include<math.h> int main() { float a,b,c,disc,x1,x2; a=1;b=2,c=-6; disc=b*b-4*a*c; if(disc>=0) { x1=((-b)+sqrt(disc))/(2.0*a); x2=((-b)-sqrt(disc))/(2.0*a); printf("%.4f\n",x2); printf("%.4f\n",x1); } else printf("无实根\n"); }
C++解答
/* ================== Ex 3-18, p59 ================== */ #include <stdio.h> #include <math.h> void root (double a, double b, double c) { double tmp, d = b*b + 4*a*c; if (a==0.) { if(b==0.) printf("illegal inputs!\n"); else printf("%.4f\n", -c/b); } else if (d > 0) { tmp = sqrt(d); printf("%.4f, %.4f\n", (-b - tmp)/2./a, (-b + tmp)/2./a); } else if (d == 0) printf("%.4f\n", -b/2./a); else printf("no real root\n"); } int main() { double a,b,c; int i,n; scanf("%d",&n); for(i=1;i<=n;i++) { if((scanf("%lf %lf %lf", &a,&b,&c)!=3)) { printf("illegal inputs!\n"); fflush(stdin); } else root(a, b, c); } return 0; }
提示
abc输入的时候请使用double或float
如何判断并处理输入非法数据?去查询c语言手册中的scanf函数部分,重点关注返回值。