C语言 求一元二次方程的根 openjudge

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 求一元二次方程的根 openjudge相关的知识,希望对你有一定的参考价值。

我的代码如下:
#include <stdio.h>
#include <math.h>

int main()
int n,j,i;
double a,b,c,r;
scanf("%d",&n);
i=0;
double arr[n][3];
while(i < n)
scanf("%lf %lf %lf",&a,&b,&c);
if(a == 0) continue;
arr[i][0] = a;
arr[i][1] = b;
arr[i][2] = c;
i++;

for(j=0;j<n;j++)
a = arr[j][0],b = arr[j][1],c = arr[j][2];
r = b*b-4*a*c;
if (r==0)
printf("x1=x2=%.5lf\n",(-b)/(2*a));

else if(r > 0)
printf("x1=%.5lf;x2=%.5lf\n",(-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a));

else if(r < 0)
printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",(-b/(2*a)),(sqrt(-r)/(2*a)),(-b/(2*a)),(sqrt(-r)/(2*a)));


return 0;


疑问:代码能够得出示例的3个结果,但是通不过网上验证,题目来源是openjudge,具体见截图上网址
麻烦给指出通不过的错误在哪

  求一元二次方程的根
—————————————————————
  总时间限制: 1000ms 内存限制: 65536kB
  利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。

  输入
  输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
  输出
  输出一行,表示方程的解。
若两个实根相等,则输出形式为:x1=x2=...。
若两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1
  若是两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,其中x1,x2满足以下两个条件中的一个:
1. x1的实部大于x2的实部
2. x1的实部等于x2的实部且x1的虚部大于等于x2的虚部
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
参考技术A 可以用结构数组,会简单点
#include <stdio.h>

#include <math.h>

struct FANC



float a;

float b;

float c;

;

int main()



void jian(double a,double b,double c);

int n;

printf("请输入待解方程的个数:\n");

scanf("%d",&n);

struct FANC str[n];

for(int i=0;i<n;i++)



printf("请输入方程的a,b,c:\n");

scanf("%lf,%lf,%lf",&str[i].a,&str[i].b,&str[i].c);

if(i>n)break;



for(int i=0;i<n;i++)

jian(str[i].a, str[i].b, str[i].c);

return 0;



void jian(double a,double b,double c)



int r;

r=b*b-4*a*c;

if(r<0)

printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",(-b/(2*a)),(sqrt(-r)/(2*a)),(-b/(2*a)),(sqrt(-r)/(2*a)));

else if(r==0)

printf("x1=%.5lf,x2=%.5lf\n",(-b)/(2*a),(-b)/(2*a));

else

printf("x1=%.5lf;x2=%.5lf\n",(-b+sqrt(r))/(2*a),(-b-sqrt(r))/(2*a));


里面jian函数的算法都是照搬你的,对错不知道
参考技术B scanf("%d",&n);
i=0;
double arr[n][3];
一个可能的原因就是你的编译器支持这样写未定义数组大小(忘记叫什么名字了,就是知道有这个东西,我是从来没用过,请告知一下,这个到底叫什么,我忘了)的语句,而网上不支持,就这么简单。我用VS2013编译器报错,不允许这样编写,而DEVC++却支持,主要还是要看编译器支持的标准
你可以改成。
double arr[10000000][3]; 然后用for(i=0;i<n;i++)来控制试试
参考技术C 我去是试试你的那个网址。大致问题应该是因为编译器的问题。你选择的是gcc来编译的吧。问题估计也是在这里。你的代码本身没有错。我用gcc编译也正确。但是有个问题。在引用sqrt函数是要用到math.h的头文件,gcc编译时,它有些时候是没有这个库的,需要你自己去链接。把库加入进来。我估计就是这里出问题了追问

我用的codeblocks的GCC编译器,

追答

我知道,你看看下面的图就明白了

这是直接编译提示的问题,因为库里面没有math.h

这是我自己链接math.h后才执行的。

我估计它那边也是同样的情况

本回答被提问者采纳

以上是关于C语言 求一元二次方程的根 openjudge的主要内容,如果未能解决你的问题,请参考以下文章

求一元二次方程的根c语言

C语言 求一元二次方程的根 openjudge

用c语言求一个四元二次方程解的个数

C语言编程:求1元2次方程的根

用C语言编写程序,输入一元二次方程的系数a,b,c,计算方程的根,要考虑虚根的情况,求解答

c语言解一元二次方程