gpt4 book ai didi

c - 在 Linux 上用 C 语言运行二次方程求解器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:46:22 24 4
gpt4 key购买 nike

我对编程有点陌生,我正在尝试编写一个程序来求解二次方程,这是我的代码:

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

void main (){
int a, b, c, delta;
float root1, root2;
delta = ( b * b ) - ( 4 * a * c );
printf("enter a, b, c, in such syntax ax^2 + bx + c:\n");
scanf("%d%d%d", &a, &b, &c);
printf("You mean %dx^2 + %dx + %d, delta=%f\n\n", a, b, c, delta);

if ( delta < 0 )
printf("The equation has no roots.\n");
if ( delta == 0 ){
root1 = -b / (2*a);
printf("The equaion has one root: %d\n", root1);
}
if ( delta > 0 ){
root1 = (-b + sqrt(delta)) / (2*a);
root2 = (-b - sqrt(delta)) / (2*a);
printf("root 1 = %f\nroot 2 = %f\n", root1, root2);
}
}

它编译没有错误,问题是每次我运行它,使用相同的输入,我得到不同的答案!

$ ./qe
enter a, b, c, in such syntax ax^2 + bx + c:
2
4
2
You mean 2x^2 + 4x + 8, delta=0.000000

The equation has no roots.
$ ./qe
enter a, b, c, in such syntax ax^2 + bx + c:
2
4
2
You mean 2x^2 + 4x + 8, delta=0.000000

root 1 = 6543.122070
root 2 = -6545.122070
$ ./qe
enter a, b, c, in such syntax ax^2 + bx + c:
2
4
2
You mean 2x^2 + 4x + 8, delta=0.000000

root 1 = 8342.037109
root 2 = -8344.037109
$ ./qe
enter a, b, c, in such syntax ax^2 + bx + c:
2
4
2
You mean 2x^2 + 4x + 8, delta=0.000000

The equation has no roots.
.
.

我很困惑。有什么问题?我的 gcc 版本:6.3.1 20170306 (GCC)
我该如何解决这个问题?
谢谢。

最佳答案

TL;DR 您的代码导致 undefined behavior .

详细说明,在案例中

 delta = ( b * b ) - ( 4 * a * c );

abc 未初始化使用。他们

  • 可以有陷阱表示
  • 他们的地址没有被盗用。

因此,这会调用 UB。


你需要

  • 首先检查scanf()调用是否成功
  • 在成功扫描相关操作数的值后移动 delta 的计算。

此外,要添加,对于托管环境,main() 的一致签名将是 int main(void),而不是 void main ()

关于c - 在 Linux 上用 C 语言运行二次方程求解器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44108949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com