用C语言求一元二次方程组遇到如下问题。

源代码如下;
但是一运行就会出现如图的错误,请指教哪里错了?

#include <stdio.h>#include <math.h>int main(void){ int repeat, ri; double a, b, c, d; scanf("%d", &repeat); for(ri = 1; ri <= repeat; ri++){ scanf("%lf%lf%lf", &a, &b, &c); d=b*b-4*a*c; if(d<0){ printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a)); } else{ if(a=0,b=0,c=0) printf("参数都为零,方程无意义!\n"); else{ if(a=0,b=0) printf("a和b为0,c不为0,方程不成立\n"); else{ if(d=0) printf("x = %0.2f\n", -c/b); else{ printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a)); printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a)); } } } } } }

#include <math.h>
int main(void)
{
    int repeat, ri;
    double a, b, c, d;

    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat; ri++){
        scanf("%lf%lf%lf", &a, &b, &c);
        d=b*b-4*a*c;
        if(d<0){
            printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
            printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
        }
        else{
            if(a==0&&b==0&&c==0) //判断三个条件都成立,要用&&运算,  比较时用==,下同!
printf("参数都为零,方程无意义!\n");
            else{
                if(a==0&&b==0) //
printf("a和b为0,c不为0,方程不成立\n");
                else{
                    if(d==0) //
printf("x = %0.2f\n", -c/b);
                    else{
                        printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a));
                        printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a));
                    }
                }
            }
            
        }
    } 
    return 0;
}

严格来说,代码应该进行如下优化:
#include <stdio.h>
#include <math.h>
int main(void)
{
    int repeat, ri;
    double a, b, c, d;

    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat; ri++){
        scanf("%lf%lf%lf", &a, &b, &c);
if(a==0&&b==0&&c==0) //先进行有效性检查
printf("参数都为零,方程无意义!\n");
else{
if(a==0&&b==0) //同上
printf("a和b为0,c不为0,方程不成立\n");
else{
d=b*b-4*a*c; //检查通过,再进行运算
if(d<0){
printf("x1 = %0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
printf("x2 = %0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
}
else{
                    if(d==0) //
printf("x = %0.2f\n", -c/b);
                    else{
                        printf("x1 = %0.2f\n", (-b+sqrt(d))/(2*a));
                        printf("x2 = %0.2f\n", (-b-sqrt(d))/(2*a));
                    }
                }
            }
            
        }
    } 
    return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-09
判断条件写的不对
比如 if(a=0,b=0,c=0) 应该是 if(a==0&&b==0&&c==0)
其他类似
if(a=0,b=0) =》 if(a==0&&b==0)
if(d=0) =》 if(d==0)本回答被提问者采纳

C语言编程:求一元二次方程的解,要求如下图,咋编?
void f0(double a,double b){ printf("x1=x2 = %g\\n",-b\/(a+a));} int main(int argc,char *argv[]){ double a,b,c,t;printf("Enter a, b, c(R:)...\\n");if(scanf("%lf%lf%lf",&a,&b,&c)==3 && a)(t=b*b-4*a*c)>0 ? fp(a,b,t) : t<0 ? fn(...

c语言算一元二次方程的解出错
x1,x2); return 0;}

C语言 求一元二次方程的解所遇到的问题,求大神帮助?
printf("这个方程的解是x=%f或x=%f",(0-b+d)\/(2*a),(0-b-d)\/(2*a));成功的结果:

C语言编程求一元二次方程问题,请大家看一下下面的C语言程序哪里出错了...
void yyecfc(double a,double b,double c);\/\/声明函数 char judge;double a,b,c;printf("求一元二次方程的解\\n");loop:printf("输入参数a,b,c\\n");\/\/设置循环跳转标号 scanf("%lf%lf%lf",&a,&b,&c);yyecfc(a,b,c);\/\/调用函数 printf("是否继续?(Y\/N)\\n");scanf("%c...

c语言解一元二次方程
c语言解一元二次方程如下:c语言一元二次方程编程是#include <iostream> 。#include <cmath>。using namespace std。int main()。{float a,b,c;float x1,x2; cin>a>>b>>c;float dlt=b*b-4*a*c;if(dlt>=0){x1=-b\/2\/a+sqrt(dlt)。\/2\/ax2=-b\/2\/a-sqrt(dlt)\/2\/a。形如x...

C语言编程求一元二次方程问题,请大家看一下下面的C语言程序哪里出错了...
scanf("%c",&judge);3.if(deita<0)printf("该方程无解\\n");deita<0,只是说没有实根,不能说人家无解啊!!! 人家还有虚跟啊! 呵呵……4.附程序:(仅供参考)include <stdio.h> include <math.h> include <stdlib.h> void main(){ char ch;double a,b,c,x1,x2,p,m ,n;l...

c语言求解一元二次方程,我写的输出时有3个小问题
你把代码文本贴上来才容易改啊。第2个问题:if(d<0)if(e)printf("x1=%lf+%lfi\\nx2=%lf-%lfi\\n",e,f,e,f);else printf("x1=%lfi\\nx2=-%lfi\\n",f,f);else if(d==0)...

C语言解一元二次方程程序的问题
int main(){ int a,b,c,x,y;scanf("%d %d %d",&a,&b,&c);m=b*b-4*a*c;if (m>0) x=(b+sqrt(m))\/(2*a);y=(b+sqrt(m))\/(2*a);printf("x=%d y=%d",x,y);if(m==0) x=b\/(2*a);y=b\/(2*a);printf("x=%d y=%d",x,y);if(m<0)printf("方程根不...

c语言题目,求解一元二次方程,错在哪里?
见下scanf的介绍:1. 函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。2.如果scanf中%d是连着写的如“%d%d%d”,在输入数据时,数据之间不可以用逗号...

用c语言解一元二次方程,求大神看看错在哪,怎么改
\/*若判别式=0则只有一个解*\/{x1=(-b+sqrt(d))\/(2*a);printf("方程有一个解 x=%f\\n",x1);}else if(d > 0) \/*若判别式>0则有两个解*\/{x1=(-b+sqrt(d))\/(2*a);x2=(-b-sqrt(d))\/(

相似回答
大家正在搜