小木研 发表于 2021-1-6 11:16:30

c语言编程题

描述
求一元二次方程“ax^2+bx+c=0”的根,其中a不等于0。结果要求精确到小数点后5位。

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

若两个实根不等,需满足根小者在前的原则,中间用分号隔开,输出形式为:“x1=XX.XXXXX;x2=XX.XXXXX";

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

格式
输入格式
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程a的系数。
输出格式
输出一行,表示方程的解。 所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
我打的::不知道问题出哪了
#include<stdio.h>
#include<math.h>
int main()
{
        int a,b,c,g,x;
       double x1,x2;
        scanf("%d %d %d",&a,&b,&c);
        if(0==a*x*x+b*x+c)
        {
        g=b*b-4*a*c;
        if(g<0)
        printf("No answer");
        while(g>=0)
        {
                if(g>0)
                {
                x1=(-b+sqrt(g))/2*a;
                x2=(-b-sqrt(g))/2*a;
        }
      if(g==0)
      {
              x1=(-b)/2*a;
              x2=x1;
          }
    return(0);
}
    printf("%lf;%lf",x1,x2);
}
}

jackz007 发表于 2021-1-6 11:43:56

本帖最后由 jackz007 于 2021-1-6 11:50 编辑

         int a,b,c,g,x;
. . . . . .
      if(0==a*x*x+b*x+c)
       x 未赋值就引用,这个逻辑条件怕是永远也无法满足。后面计算 x1、x2 的代码根本没有机会得到执行!
#include<stdio.h>
#include<math.h>
int main()
{
      int a , b , c , d                                                       ;
      double x1 , x2                                                          ;
      scanf("%d%d%d" , & a , & b , & c)                                       ;
      d = b * b - 4 * a * c                                                   ;
      if(d >= 0) {
                x1 = 1.0 * (- b + sqrt(d)) / (2 * a)                            ;
                x2 = 1.0 * (- b - sqrt(d)) / (2 * a)                            ;
                if(x2 < x1) printf("x1 = %.5lf ; x2 = %.5lf\n" , x2 , x1)       ;
                else if (x2 > x1) printf("x1 = %.5lf ; x2 = %.5lf\n" , x1 , x2) ;
                else printf("x1 = x2 = %.5lf\n" , x1 , x2)                      ;
      } else {
                printf("No answer")                                             ;
      }
}
      编译、运行实况
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
5 3 2
No answer
D:\0002.Exercise\C>x
2 5 3
x1 = -1.50000 ; x2 = -1.00000

D:\0002.Exercise\C>x
2 -5 3
x1 = 1.00000 ; x2 = 1.50000

D:\0002.Exercise\C>

小木研 发表于 2021-1-6 11:51:15

哇 谢谢你啊 谢谢谢谢 大佬 你qq多少呐明天c语言考试 救救孩子吧{:5_111:}

小木研 发表于 2021-1-6 12:10:45

呃呃 我把x改成d d=b*b-4*a*c还是不行{:5_100:}
#include<stdio.h>
#include<math.h>
int main()
{
        int g;
        int a,b,c;
       double x1,x2;
        scanf("%d %d %d",&a,&b,&c);
        g=b*b-4*a*c;
        if(g<0)
        printf("No answer");
        while(g>=0)
        {
                if(g>0)
                {
                x1=1.0*(-b+sqrt(g))/(2*a);
                x2=1.0*(-b-sqrt(g))/(2*a);
        }
      if(g==0)
      {
              x1=(-b)/(2*a);
              x2=x1;
          }
    return(0);
}
    printf("%.5lf;%.5lf",x1,x2);
}

心驰神往 发表于 2021-1-6 13:11:34

小木研 发表于 2021-1-6 11:51
哇 谢谢你啊 谢谢谢谢 大佬 你qq多少呐明天c语言考试 救救孩子吧

问题解决了,请给最佳答案

风过无痕1989 发表于 2021-1-6 13:18:10

#include <stdio.h>
#include <math.h>
int main()
{
        int a, b, c, delta;
        double p, q, x1, x2;
        printf("请输入三位数:");
        scanf("%d%d%d", &a, &b, &c);

        if (a < 0)
        {
                a = -a;
                b = -b;
                c = -c;
        }
        else if (a > 0)
        {
                delta = b * b - 4 * a * c;
                if (delta > 0)
                {
                        p = -b / (2.0 * a);
                        q = sqrt(delta) / (2.0 * a);
                        x1 = p + q;
                        x2 = p - q;
                        printf("该方程有两个不同的解为:\nx1 = %.2f\nx2 = %.2f\n", x1, x2);
                }
                else if (delta == 0)
                {
                        p = -b / (2.0 * a);
                        x1 = p;
                        printf("该方程有两个相同的解为:\nx1 = x2 = %.2\n", p);
                }
                else
                {
                        p = -b / (2.0 * a);
                        delta = -delta;
                        q = sqrt(delta) / (2.0 * a);
                        printf("该方程有两个共轭复根为:\nx1 = %.2f + %.2fi\nx2 = %.2f - %.2fi\n", p, q, p, q);
                }
        }
        else
        {
                printf("该方程不是一元二次方程\n");
        }
        return 0;
}
页: [1]
查看完整版本: c语言编程题