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的主要内容,如果未能解决你的问题,请参考以下文章