C語言 程式設計 寫數學算式

考試的題目 有點不懂

試使用下列定義的巨集,求下列公式的實根,先由鍵盤輸入a、b、c值

先檢查 (b²-4ac) 是否 大於等於 0,如果是,進行下列公式的計算求實根

否則,顯示 "b*b-4*a*c < 0 無法計算 "

-b±√ b²-4ac

Root1&Root2 = ——————

2a

#define SQR(x) ((x)*(x))

#define ADD(a,b) (a+b)

#define SUB(a,b) (a-b)

#define MUL(a,b) (a*b)

#define DIV(a,b) (a/b)

#define DISCRIMINANT(a,b,c)(SQR(b)-MUL(4,MUL(a,c)))

求完整程式碼 謝謝

1 個解答

評分
  • 6 年前
    最佳解答

    #define SQR(x) ((x)*(x))

    #define ADD(a,b) ((a)+(b))

    #define SUB(a,b) ((a)-(b))

    #define MUL(a,b) ((a)*(b))

    #define DIV(a,b) ((a)/(b))

    #define DISCRIMINANT(a,b,c)(SQR(b)-MUL(4,MUL(a,c)))

    巨集內的變數都要加上()

    例如#define MUL(a,b) (a*b) <===這個例子比較好舉

    當使用者輸入參數為MUL(2+3, 5)

    展開變為2+3*5=17 而不是想像中的25

    float a,b,c;

    float ans1,ans2;

    printf("Input:a,b,c\n");

    scanf("%f %f %f",&a,&b,&c);

    if(DISCRIMINANT(a,b,c)>=0)

    {

    ans1=DIV(-1*b+sqrt(DISCRIMINANT(a,b,c)) ,2*a);

    ans2=DIV(-1*b-sqrt(DISCRIMINANT(a,b,c)) ,2*a);

    printf("實根解:%f, %f",ans1, ans2);

    }else printf("無法計算\n");

還有問題?馬上發問,尋求解答。