gpt4 book ai didi

c - 如何通过Scanf将二次方程作为输入?

转载 作者:行者123 更新时间:2023-11-30 16:22:32 25 4
gpt4 key购买 nike

我正在上一门 C 语言类(class),其中要求我找到二次方程的根。首先,我尝试通过硬编码,它起作用了。接下来我使用 scanf(如 a、b、c)给出输入,它起作用了。但我在将整个二次表达式作为输入(即 (ax^2+bx+c))并从表达式中检索这些 a、b、c 值的情况下失败了。我花了很多时间在这上面,在网上搜索我找不到答案,所以我在这里寻求帮助。

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

#define PI 3.14

int main(void)
{

puts("---- ROOTS ----");

char equ[20]; //Quadratic Expression in an Array
float a,b,c,ope;
float root1,root2;

printf("please provide the expression :");
scanf("%d",&equ[20]);//Example : 5x^2+3x+1 as input

a == equ[0];//since ax^2+bx+c in the above expression a==5
b == equ[3];//b==3
c == equ[6];//c==1

ope = sqrt(b*b -4*a*c);
root1 = (-b + ope)/2*a;
root2 = (-b - ope)/2*a;

printf("The root 1 of the expression is : %d", root1);
printf("\nThe root 2 of the expression is : %d", root2);

return EXIT_SUCCESS;
}

输出:

PS F:\Thousand C GO> gcc 3.c
PS F:\Thousand C GO> ./a
---- ROOTS ----
please provide the expression :5x^2+3x+1//edited
The root 1 of the expression is : 0
The root 2 of the expression is : 0

我想知道用C语言是否有办法解决这个问题,如果有的话怎么解决?如果不是为什么?.

非常感谢您的帮助。谢谢。

最佳答案

您好,这是更改后的代码:

scanf("%s",equ);//Example : 5x^2+3x+1 as input NOT

a = equ[0]-48;//since ax^2+bx+c in the above expression a==5
b = equ[5]-48;//b==3
c = equ[8]-48;//c==1
//printf("\n%f %f %f",a,b,c);

ope = sqrt(b*b -4*a*c);
printf("\n%f",ope);
root1 = (-b + ope)/(2*a);
root2 = (-b - ope)/(2*a);

printf("\nThe root 1 of the expression is : %f", root1);
printf("\nThe root 2 of the expression is : %f", root2);

现在我将尝试解决这些问题

  1. 尝试使用正确的占位符输入字符数组,即“%s”而不是“%d”。
  2. 不要给出 scanf("%d",&equ[20]) 来扫描字符数组,仅给出 scanf("%s",equ)here就是解释。
  3. 索引值错误,请更正。
  4. 字符存储为 ASCII 值。 here是所有 ASCII 值的链接,请注意,1 的 ASCII 值为 49,因此在转换为浮点型 ( implicit typecasting ) 时,请转换为适当的值。在你的情况下减去 48。
  5. ==是比较运算符,将其更改为赋值运算符=
  6. (-b + ope)/(2*a)上加上括号,因为您的/2首先评估*a进行评估,这是operator precedence and associativity .
  7. 现在是主要问题,请注意,我已将方程更改为 5x^2+3x+1,这是因为在 5x^2+3x+2 的情况下code> b*b -4*a*c 的值为 -31,它是负数,并且不能在 float 类型中存储虚数。 herehere有一些关于这个主题的好读物。

掌握这一切需要一些时间,但不要放弃。

祝你编码愉快!

编辑:如第 1 点所述,正确的占位符应用于相应的数据类型。

  • 在最后两行中,我将 %d 更改为 %f 以打印 root1 和 root2,它们是 float 而不是 inthere对于初学者来说这是一本很好的读物。
  • 关于c - 如何通过Scanf将二次方程作为输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54385532/

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