Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修改C中的二次公式程序,使其在整个程序中只计算一次平方根?_C_Root_Equation_Quadratic - Fatal编程技术网

如何修改C中的二次公式程序,使其在整个程序中只计算一次平方根?

如何修改C中的二次公式程序,使其在整个程序中只计算一次平方根?,c,root,equation,quadratic,C,Root,Equation,Quadratic,我对这个网站相当陌生,我正在尝试一个挑战,以改进我已经在这里的二次方程程序。它已经按照我所需要的方式运行了,但是我试图学习如何在不利用我的课程还没有完全涵盖的东西的情况下尽我所能地改进它 我的指导老师声称有多种方法可以实现这一点,而不需要使用sqrt函数编写超过一行的代码,对此我已经被难住了一段时间。如果没有至少两行包含sqrt()的代码,我似乎无法找到执行此程序的方法 如果有人有任何建议或介意指导我朝着正确的方向前进,那将不胜感激 // Quadratic formula program re

我对这个网站相当陌生,我正在尝试一个挑战,以改进我已经在这里的二次方程程序。它已经按照我所需要的方式运行了,但是我试图学习如何在不利用我的课程还没有完全涵盖的东西的情况下尽我所能地改进它

我的指导老师声称有多种方法可以实现这一点,而不需要使用sqrt函数编写超过一行的代码,对此我已经被难住了一段时间。如果没有至少两行包含sqrt()的代码,我似乎无法找到执行此程序的方法

如果有人有任何建议或介意指导我朝着正确的方向前进,那将不胜感激

// Quadratic formula program redone
// Filename: quadeq3.cpp

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

main()
{
    float a,b,c,r1,r2,root = 0,disc,disc2,denom,real;

    while(1)
    {
        // Get the values for a, b, c

        printf("\nEnter value for a: ");
        scanf("%f",&a);
        if (a == 0) break;                   // Break the loop if a == 0

        printf("Enter value for b: ");
        scanf("%f",&b);

        printf("Enter value for c: ");
        scanf("%f",&c);

        denom = 2*a;                         // Calculate 2a
        disc = (b*b)-(4*a*c);                // Calculate the discriminant
        real = -b / denom;                   // Calculate the real (left) root

        disc2 = -disc;                       // Used for case 3 imaginary roots
        if (disc >= 0) root = sqrt(disc);    // If not imaginary, use disc
        if (disc < 0) root = sqrt(disc2);    // If imaginary, use disc2

        printf("\na = %2.1f",a);
        printf("\nb = %2.1f",b);
        printf("\nc = %2.1f",c);

        // Case 1: discriminant > 0, 2 real roots

        if (disc > 0)
        {
            r1 = (-b-root)/denom;
            r2 = (-b+root)/denom;
            printf("\n\n2 Real Roots:\n");
            printf("\n%2.1f, %2.1f\n",r1,r2);
            continue;
        }

        // Case 2: discriminant == 0, 1 real root

        if (disc == 0)
        {
            printf("\n\n1 Real Root:\n");
            printf("\n%2.1f\n",real);
            continue;
        }

        // Case 3: discriminant < 0, imaginary roots

        r2 = root/denom;
        printf("\n\nImaginary Roots:\n");
        printf("\n%2.1f + %4.3fi,%2.1f - %4.3fi\n",real,r2,real,r2);
    }

    // End the program

    printf("\nNot a quadratic formula, program terminated!\n");
    return(0);
}
//二次公式程序重做
//文件名:quadeq3.cpp
#包括
#包括
main()
{
浮点数a,b,c,r1,r2,根=0,圆盘,圆盘2,分母,实数;
而(1)
{
//获取a、b、c的值
printf(“\n输入a:”的值);
scanf(“%f”、&a);
如果(a==0)中断;//如果a==0,则中断循环
printf(“输入b的值:”);
scanf(“%f”和“b”);
printf(“输入c:”的值);
scanf(“%f”、&c);
denom=2*a;//计算2a
disc=(b*b)-(4*a*c);//计算判别式
real=-b/denom;//计算实(左)根
disc2=-disc;//用于情况3的虚根
如果(disc>=0)root=sqrt(disc);//如果不是虚构的,则使用disc
如果(disc<0)root=sqrt(disc2);//如果是虚构的,则使用disc2
printf(“\na=%2.1f”,a);
printf(“\nb=%2.1f”,b);
printf(“\nc=%2.1f”,c);
//情况1:判别式>0,2个实根
如果(光盘>0)
{
r1=(-b根)/denom;
r2=(-b+根)/denom;
printf(“\n\n2实根:\n”);
printf(“\n%2.1f,%2.1f\n”,r1,r2);
继续;
}
//情况2:判别式==0,1实根
如果(disc==0)
{
printf(“\n\n1实根:\n”);
printf(“\n%2.1f\n”,实数);
继续;
}
//情况3:判别式<0,虚根
r2=根/名称;
printf(“\n\n数字根:\n”);
printf(“\n%2.1f+%4.3fi,%2.1f-%4.3fi\n”,实数,r2,实数,r2);
}
//结束节目
printf(“\n不是二次公式,程序终止!\n”);
返回(0);
}

当程序实际运行时,实际上只计算一次平方根

如果只想在程序源代码中查看一次
sqrt
,请使用

root=sqrt(fabs(disc))


相反
fabs
计算浮点数的绝对值。

如果要保持当前的代码结构:

if (disc < 0) disc2 = -disc;
else disc2 = disc;
root = sqrt(disc2);
if(disc<0)disc2=-disc;
else disc2=盘;
根=sqrt(disc2);

由于您没有具体的问题,而且这是一个开放式的问题,所以这个问题更适合您。也就是说,如果(Disc我下次会记住这一点——这是我第一次在这个网站上发布帖子,所以我为这个错误道歉。谢谢你的帮助!谢谢!有时候这是最简单的事情让我陷入困境。我现在知道有多种方法可以解决这个问题。哦,我想我搞错了我原来帖子的措辞;我知道相互排斥的if stat这意味着计算只进行了一次,但我想说的是,sqrt函数本身在程序中应该只显示一次。很抱歉,我没有说清楚。我也没有想过为此寻找一个绝对值函数,谢谢你指导我正确的方向!