| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2502 人关注过本帖
标题:萌新求助,输入一元二次方程的系数a,b,c,求出根,里面的逻辑错误(考虑虚部 ...
只看楼主 加入收藏
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
结帖率:80%
收藏
 问题点数:0 回复次数:9 
萌新求助,输入一元二次方程的系数a,b,c,求出根,里面的逻辑错误(考虑虚部)修改版问题
#include<stdio.h>
#include<math.h>
int main()
{
  double a,b,c;
  scanf("%lf,%lf,%lf",&a,&b,&c);
  double g=b*b-4*a*c;
  if(g>=0)
  {
   printf("x1=%f\n",(-b+sqrt(g))/(2*a));
   printf("x2=%f\n",(-b-sqrt(g))/(2*a));
  }
  else
  {
   printf("x1=%f+%lfi\n",-b/(2*a),sqrt(-g)/(2*a));
   printf("x2=%f-%lfi\n",-b/(2*a),sqrt(-g)/(2*a));
   
  }
   return 0;

}
感谢大家给我提供一些解决的思路,我试着按照自己的想法进行了一些修改,
我的目的是 以这样方式输入
1,3,1
x1=-0.381966
x2=-2.618034
3,1,2
x1=-0.166667+0.799305i
x2=-0.166667-0.799305i

可结果是:
1,3,1
x1=-0.000000+0.000000i
x2=-0.000000-0.000000i
3,1,2
x1=-0.000000+0.000000i
x2=-0.000000+0.000000i
这是为什么呢?



[此贴子已经被作者于2017-10-11 12:01编辑过]

搜索更多相关主题的帖子: 输入 错误 修改 printf sqrt 
2017-10-11 00:16
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
求根公式分子缺少括号,虚根分母缺少括号,打印输出不能按整型数据输出。
2017-10-11 00:27
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
i作为虚数单位应定义为字符,不能定义为实型数据。打印输出不能和数据相乘,应该作为字符直接输出。否则,i未赋初值,则按0参与运算。
2017-10-11 00:32
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
回复 3楼 zbjzbj
怎样作为字符直接输出呢?
2017-10-11 09:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
代码错误容易改(比如scanf格式错误、公式错误、i、未化简),但……
但为什么你说“输出的结果永远是x1=0,x2=-1,这是为什么呢?”之前不说你输入什么呢?随便说个输入,比如"1 2 3",比如"1,2,3",比如“1,2,3”,别人就能知道你输入对不对。

程序代码:
#include <stdio.h>
#include <math.h>

int main( void )
{
    double a, b, c;
    if( scanf("%lf , %lf , %lf",&a,&b,&c)!=3 || a==0 )
    {
        puts( "fuck" );
        return 1;
    }

    double delta = b*b-4*a*c;
    if( delta >= 0 )
    {
        printf( "x1 = %f\n", (-b+sqrt(delta))/(2*a) );
        printf( "x2 = %f\n", (-b-sqrt(delta))/(2*a) );
    }
    else
    {
        printf( "x1 = %f + %lfi\n", -b/(2*a), sqrt(-delta)/(2*a) );
        printf( "x2 = %f - %lfi\n", -b/(2*a), sqrt(-delta)/(2*a) );
    }

    return 0;
}

输入
1, 2, 3
输出
x1 = -1.000000 + 1.414214i
x2 = -1.000000 - 1.414214i

输入
3, 6, 0
输出
x1 = 0.000000
x2 = -2.000000

程序代码:
#include <stdio.h>
#include <complex.h>

int main(void)
{
    double a, b, c;
    if( scanf("%lf , %lf , %lf",&a,&b,&c)!=3 || a==0 )
    {
        puts( "fuck" );
        return 1;
    }

    double _Complex x1 = (-b+csqrt(b*b-4*a*c))/(2*a);
    double _Complex x2 = (-b-csqrt(b*b-4*a*c))/(2*a);
    if( cimag(x1) == 0 )
    {
        printf( "x1 = %f\n", creal(x1) );
        printf( "x2 = %f\n", creal(x2) );
    }
    else
    {
        printf( "x1 = %f%+fi\n", creal(x1), cimag(x1) );
        printf( "x2 = %f%+fi\n", creal(x2), cimag(x2) );
    }

    return 0;
}

2017-10-11 09:28
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c;
scanf("%lf,%lf,%lf",&a,&b,&c);
double g=b*b-4*a*c;
if(g>=0)
{
printf("x1=%f\n",(-b+sqrt(g))/(2*a));
printf("x2=%f\n",(-b-sqrt(g))/(2*a));
}
else
{
printf("x1=%f+%lfi\n",-b/(2*a),sqrt(-g)/(2*a));
printf("x2=%f-%lfi\n",-b/(2*a),sqrt(-g)/(2*a));

}
return 0;

}
感谢大家给我提供一些解决的思路,我试着按照自己的想法进行了一些修改,
我的目的是 以这样方式输入
1,3,1
x1=-0.381966
x2=-2.618034
3,1,2
x1=-0.166667+0.799305i
x2=-0.166667-0.799305i

可结果是:
1,3,1
x1=-0.000000+0.000000i
x2=-0.000000-0.000000i
3,1,2
x1=-0.000000+0.000000i
x2=-0.000000+0.000000i
这是为什么呢?


[此贴子已经被作者于2017-10-11 12:05编辑过]

2017-10-11 12:01
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 

出现这种问题我真的无从下手,身边没有了解这方面的人,网上也查不到,我应该怎么办呢?

[此贴子已经被作者于2017-10-11 12:58编辑过]

2017-10-11 12:01
pydlq
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:129
专家分:488
注 册:2017-9-5
收藏
得分:0 
double a,b,c;
scanf("%lf,%lf,%lf",&a,&b,&c);
double g=b*b-4*a*c;
改成
double a,b,c,g;
scanf("%lf,%lf,%lf",&a,&b,&c);
g=b*b-4*a*c;
这样就行了
2017-10-11 13:23
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
谢谢大家,问题解决了
2017-10-11 13:45
凌若寒曦
Rank: 1
等 级:新手上路
帖 子:70
专家分:0
注 册:2017-10-5
收藏
得分:0 
回复 8楼 pydlq
多谢
2017-10-11 13:45
快速回复:萌新求助,输入一元二次方程的系数a,b,c,求出根,里面的逻辑错误(考 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.088845 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved