新手求助!程序为何不对?

WYHMingMing 2021-02-06 07:15:21
最近正在跟着一本书——《第五版信息学奥赛一本通(C++版)》学习C++,书后有一道题如下:
【题目描述】
利用公式x1=−b+b2−4ac√2a,x2=−b−b2−4ac√2a,求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。

【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax2+bx+c=0的系数。

【输出】
输出一行,表示方程的解。

若两个实根相等,则输出形式为:“x1=x2=...”;

若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=...;x2=...“;

若无实根输出“No answer!”。

所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。

【输入样例】
-15.97 19.69 12.02
【输出样例】
x1=-0.44781;x2=1.68075

我的程序如下:
# include <cstdio>
# include <cmath>
using namespace std;
int main()
{
double a, b, c, sqrtn, x1, x2; //创建abc常数,
scanf("%lf %lf %lf", &a, &b, &c);
sqrtn = (b * b) - (4 * a * c);
if (sqrtn < 0)
{
printf("%s", "No answer!");
}
else
{
x1 = (sqrt(sqrtn) - b) / (2 * a);
x2 = ((-b) - sqrt(sqrtn)) / (2 * a);
if (x1 == x2)
{
printf("%s%.5lf", "x1=x2=", x1);
}
else
{
if (x1 < x2)
{
printf("%s%.5lf%s%.5lf", "x1=", x1, ";x2=", x2);
}
else
{
printf("%s%.5lf%s%.5lf", "x1=", x2, ";x2=", x1);
}
}
}
return 0;
}

那本书有一个配套的测评网站http://ybt.ssoier.cn:8088/,我把我的程序传上去之后它用十组数测试了十遍,其他九变都对了,就有一组数它说答案错误,我也不能看到我到底哪里错了,回头又看了代码很迷茫,在此请教各位大神!

望各位大佬们回答,感谢!!!感谢!!!
...全文
314 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐胖电工 2021-02-12
  • 打赏
  • 举报
回复
兄弟,用调试模式一步一步看看,哪里数据错误。
WYHMingMing 2021-02-11
  • 打赏
  • 举报
回复
引用 4 楼 qzjhjxj 的回复:
再试试,供参考:
# include  <cstdio>
# include  <cmath>

#define EXP 0.00000001
using namespace std;
int main()
{
    double a, b, c, sqrtn, x1, x2;//创建abc常数,
    scanf("%lf %lf %lf", &a, &b, &c);
    if((a >= -EXP)&&(a <= EXP)) return -1;
    sqrtn = (b * b) - (4 * a * c);
    if(( sqrtn >= -EXP)&&( sqrtn <= EXP))
       {
         printf("x1=x2=%.5lf",(-b)/(2*a) + EXP);
       }
    else if(sqrtn > 0.0)
       {
         x1 = (-b + sqrt(sqrtn))/(2 * a) + EXP;
         x2 = (-b - sqrt(sqrtn))/(2 * a) + EXP;
         if (x1 < x2)
            {
                printf("x1=%.5lf;x2=%.5lf",x1,x2);
            }
         else
            {
                printf("x1=%.5lf;x2=%.5lf",x2,x1);
            }
       }
    else
       {
         printf("No answer!");
       }
    return 0;
}
感谢,我试试!!
WYHMingMing 2021-02-09
  • 打赏
  • 举报
回复
有人吗?求助各位大佬!!!
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <math.h>

int main()
{
for (double a, b, c, d, x1, x2; scanf("%lf%lf%lf", &a, &b, &c) == 3;)
if ((d = b * b - 4 * a * c) < 0 || fabs(a) < 1E-15)
puts("No answer!");
else
{
x1 = (-b + sqrt(d)) / a / 2, x2 = (-b - sqrt(d)) / a / 2;
d > 0 ?
printf("x1=%.5f;x2=%.5f\n", x1 <= x2 ? x1 : x2, x1 <= x2 ? x2 : x1) :
printf("x1=x2=%.5f\n", x1);
}

return 0;
}

qzjhjxj 2021-02-09
  • 打赏
  • 举报
回复
再试试,供参考:
# include  <cstdio>
# include  <cmath>

#define EXP 0.00000001
using namespace std;
int main()
{
    double a, b, c, sqrtn, x1, x2;//创建abc常数,
    scanf("%lf %lf %lf", &a, &b, &c);
    if((a >= -EXP)&&(a <= EXP)) return -1;
    sqrtn = (b * b) - (4 * a * c);
    if(( sqrtn >= -EXP)&&( sqrtn <= EXP))
       {
         printf("x1=x2=%.5lf",(-b)/(2*a) + EXP);
       }
    else if(sqrtn > 0.0)
       {
         x1 = (-b + sqrt(sqrtn))/(2 * a) + EXP;
         x2 = (-b - sqrt(sqrtn))/(2 * a) + EXP;
         if (x1 < x2)
            {
                printf("x1=%.5lf;x2=%.5lf",x1,x2);
            }
         else
            {
                printf("x1=%.5lf;x2=%.5lf",x2,x1);
            }
       }
    else
       {
         printf("No answer!");
       }
    return 0;
}
WYHMingMing 2021-02-07
  • 打赏
  • 举报
回复
引用 1 楼 qzjhjxj 的回复:
供参考:
//【输入样例】
//-2 5 0
//【输出样例】
//x1=-0.00000  x2=2.50000

# include  <cstdio>
# include  <cmath>
using namespace std;
int main()
{
    double a, b, c, sqrtn, x1, x2;//创建abc常数,
    scanf("%lf %lf %lf", &a, &b, &c);
    if(a==0)return -1;
    sqrtn = (b * b) - (4 * a * c);
    if (sqrtn < 0)
       {
         printf("%s", "No answer!");
       }
    if(sqrtn == 0)
       {
         printf("%s%.5lf", "x1=x2=", (-b)/(2*a)+0.0000001);////防止输出-0.00的情况 
       }
    if(sqrtn > 0)
       {
         x1 = (sqrt(sqrtn) - b) / (2 * a)+ 0.0000001;
         x2 = ((-b) - sqrt(sqrtn)) / (2 * a)+0.0000001;
         if (x1 < x2)
            {
                printf("%s%.5lf%s%.5lf", "x1=", x1, ";x2=", x2);
            }
           else
            {
                printf("%s%.5lf%s%.5lf", "x1=", x2, ";x2=", x1);
            }
       }
    
    return 0;
}
十分感谢!我觉得有道理但是还是不对……
qzjhjxj 2021-02-06
  • 打赏
  • 举报
回复
供参考:
//【输入样例】
//-2 5 0
//【输出样例】
//x1=-0.00000  x2=2.50000

# include  <cstdio>
# include  <cmath>
using namespace std;
int main()
{
    double a, b, c, sqrtn, x1, x2;//创建abc常数,
    scanf("%lf %lf %lf", &a, &b, &c);
    if(a==0)return -1;
    sqrtn = (b * b) - (4 * a * c);
    if (sqrtn < 0)
       {
         printf("%s", "No answer!");
       }
    if(sqrtn == 0)
       {
         printf("%s%.5lf", "x1=x2=", (-b)/(2*a)+0.0000001);////防止输出-0.00的情况 
       }
    if(sqrtn > 0)
       {
         x1 = (sqrt(sqrtn) - b) / (2 * a)+ 0.0000001;
         x2 = ((-b) - sqrt(sqrtn)) / (2 * a)+0.0000001;
         if (x1 < x2)
            {
                printf("%s%.5lf%s%.5lf", "x1=", x1, ";x2=", x2);
            }
           else
            {
                printf("%s%.5lf%s%.5lf", "x1=", x2, ";x2=", x1);
            }
       }
    
    return 0;
}

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧