如何用3个系数求解C中的二次方程?

如何用3个系数求解C中的二次方程?,c,loops,C,Loops,我的教授告诉我们写一个c程序来解二次方程,但他补充说,一开始他希望我们为每个a、b和c定义4组3个系数。换句话说,我必须为每个a、b和c定义4组3个不同的系数,一旦程序解出a、b和c的第一组3个系数的方程,它将继续求解下一组3个定义的系数,直到所有4组都解出来 我能够编写一个程序,通过使用scanf定义每个a、b和c系数来求解二次方程。我到处都找不到答案,你能帮忙吗 这就是我到目前为止所写的,它很简单,但很有效。我修的是工程学课程,我们每周只有2小时的实验时间,这并不反映课程内容 #includ

我的教授告诉我们写一个c程序来解二次方程,但他补充说,一开始他希望我们为每个a、b和c定义4组3个系数。换句话说,我必须为每个a、b和c定义4组3个不同的系数,一旦程序解出a、b和c的第一组3个系数的方程,它将继续求解下一组3个定义的系数,直到所有4组都解出来

我能够编写一个程序,通过使用scanf定义每个a、b和c系数来求解二次方程。我到处都找不到答案,你能帮忙吗

这就是我到目前为止所写的,它很简单,但很有效。我修的是工程学课程,我们每周只有2小时的实验时间,这并不反映课程内容

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

int as[4], bs[4], cs[4];
int a, b, c;
double root1,root2,discriminant, realpart, imaginarypart;
int main ()
{ 
    int i, n;
    printf("Enter how many coefficents do you want to eneter : ");
    scanf("%d",&n);
    for(i = 0; i < n; ++i)
    {
        printf("Enter you coefficents for a,b and c for set %d : \n", i+1);
        scanf("%d %d %d",&as[i],&bs[i],&cs[i]);
        a = as[i];
        b = bs[i];
        c = cs[i] ;
    }
    printf("a = %d %d %d\n", as[0], as[1], as[2]);
    printf("b = %d %d %d\n", bs[0], bs[1], bs[2]);
    printf("c = %d %d %d\n", cs[0], cs[1], cs[2]);

    for(i = 0; i < n; ++i)
    {
    discriminant = (b*b - 4*a*c);
    root1 = (-b - sqrt(discriminant))/(2*a);
    root2 = (-b + sqrt(discriminant))/(2*a);



    if (discriminant > 0 )
    {
    printf("Your set %d of roots is : \nroot1 = %lf\nroot2 = %lf\n", i+1,root1, root2); 
    }
    else if (discriminant == 0)  
    {
        printf("Your set %d of roots is : \nroot1 = root2 = %lf\n",i+1,root1);
    }
    else 
    {
        realpart = -b/(2*a);
        imaginarypart = sqrt(-discriminant)/(2*a);
        printf("Your set %d of roots is :\nroot1 = %lf + %lfi\nroot2 = %lf - %lfi\n",i+1,realpart, imaginarypart, realpart, imaginarypart);
    }
    }

    return 0;
}
#包括
#包括
#包括
int as[4]、bs[4]、cs[4];
INTA、b、c;
双根1,根2,判别式,实部,想象部;
int main()
{ 
inti,n;
printf(“输入要输入的系数:”);
scanf(“%d”和“&n”);
对于(i=0;i0)
{
printf(“您的根集合%d是:\nroot1=%lf\nroot2=%lf\n”,i+1,root1,root2);
}
else if(判别式==0)
{
printf(“您的根集合%d是:\nroot1=root2=%lf\n”,i+1,root1);
}
其他的
{
realpart=-b/(2*a);
图像部分=sqrt(-discriminant)/(2*a);
printf(“根的集合%d是:\nroot1=%lf+%lfi\nroot2=%lf-%lfi\n”,i+1,realpart,imaginarypart,realpart,imaginarypart);
}
}
返回0;
}
您混合了两件事:定义4个集合并从输入中读取它们(正如我从您的“使用
scanf
”中理解的那样)

(从输入中读取它们没有问题,因为新的读取值覆盖了旧的值。)

预先定义4个集合可以简单地通过数组完成:

float as[4],bs[4],cs[4];//as[0],bs[0],cs[0]为第一组,以此类推。
浮子a、b、c;
//为集合赋值:为[0]=。。。;bs[0]=…,cs[0]=。。。;
as[1]=。。。;bs[1]=…,cs[1]=。。。;
......................................
......................................
//或者在前面的声明中直接初始化它们,例如。
//浮点数为[]={1,4,-2,3},
//bs[]={0,5,1,-1},
//cs[]={2,-4,1,2};
对于(int i;i<4;++i)
{
a=a[i];
b=b[i];
c=c[i];
//用于计算和打印来自a、b、c的结果的代码(或函数调用)
}

好吧,这是一项作业,所以关键是你应该自己找到答案。如果你尝试,并且遇到一个特定的错误,我们将提供帮助,但我们不是来为你编写代码的。他并没有要求提供完整的代码,因为他告诉我他能够编写一个程序来解二次方程。他在定义一组以上的系数
a
b
c
@MarianD方面只有一个特别的问题:除非我们能看到提问者编写的一些代码,否则读者最好假设什么都没做。在这里,作出和展示努力是一个先决条件。(在边缘案例中很难做出判断,但同样地,海报需要知道我们每天都有家庭作业作弊,这意味着真正的海报需要区分他们的材料与懒惰的材料)。我必须同意你的看法。感谢你的回复,我正考虑使用数组,但没有很好的经验,但这很有帮助。
float as[4], bs[4], cs[4];        // as[0], bs[0], cs[0] is the 1st set, etc.
float a    , b    , c    ;

// Assigning values to sets: as[0] = ...; bs[0] = ..., cs[0] = ...;
                             as[1] = ...; bs[1] = ..., cs[1] = ...;
                             ......................................
                             ......................................

//  or initialize them directly in the previous declaration, e.g. 
//                           float as[] = {1,  4, -2,  3},
//                                 bs[] = {0,  5,  1, -1}, 
//                                 cs[] = {2, -4,  1,  2}; 

for (int i; i < 4; ++i)
{
    a = a[i];
    b = b[i];
    c = c[i];
    // Code (or a function call) for computing and printing result(s) from a, b, c
}