• 締切済み

C言語についての質問です

プログラミング初心者です if関数を使用して二次方程式の解を解くプログムを作成したのですが、この作成した関数をユーザー定義関数を使用しmain 関数の中でユーザー定義関数を呼び出すことにより、 2次方程式の解を求めるプログラムへ変更したいのですが、どのように行えばいいのか分かりません… 私が作成したプログラムはこのようなものになっています #include<stdio.h> #include<stdlib.h> #include<math.h> int main(void) { double a, b, c; /*二次方程式の定数*/ double D, x1, x2, r1, r2; printf("ax^2 + bx + c = 0 の係数 a, b, c を入力してください---> \n"); scanf_s("%lf %lf %lf", &a, &b, &c); printf("2次方程式を解いた結果は次の通りとなる。\n"); if (a == 0.0) { if (b == 0.0) { printf("係数がおかしい\n"); exit(-1); } { x1 = -c / b; printf("解は%f です。\n", x1); exit(0); } } else { D = b * b - 4 * a * c; if (D >= 0) { x1 = (-b + sqrt(D)) / (2.0 * a); x2 = (-b - sqrt(D)) / (2.0 * a); if (D == 0.0) { printf("解は %f です。\n", x1); } else { printf("解は %f と %f です。¥n", x1, x2); } } else { r1 = -b / (2 * a); r2 = sqrt(-D) / (2 * a); printf("解は%.2f+%.2fi と%.2f-%.2fi \n", r1, r2, r1, r2); } } return 0; } よろしくお願いいたします

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

こんな感じですかね、例えば。 #include <stdio.h> #include <math.h> int main(void) { double a, b, c, x1, x2; int ret; printf("2次方程式ax^2 + bx + c = 0の係数a, b, cを1行で入力>"); scanf("%lf%lf%lf", &a, &b, &c); ret = solve(a, b, c, &x1, &x2); switch (ret) { case -1: printf("係数がおかしい\n"); break; case 0: printf("実数解がない\n"); break; case 1: printf("実数解 = %f\n", x1); break; case 2: printf("実数解 = %f\n", x1); printf("実数解 = %f\n", x2); break; } return 0; } int solve(double a, double b, double c, double *x1, double *x2) { double D; if (a == 0) { // 2次方程式ではないとき if (b == 0) { // 係数がおかしいとき return -1; } else { *x1 = -c / b; return 1; // 実数解1個 } } else { D = b * b - 4 * a * c; if (D > 0) { *x1 = (-b + sqrt(D)) / (2 * a); *x2 = (-b - sqrt(D)) / (2 * a); return 2; // 実数解2個 } else if (D == 0) { *x1 = -b / (2 * a); return 1; // 実数解1個 } else { return 0; // 実数解なし } } }

addaadaa
質問者

お礼

ありがとうございました

addaadaa
質問者

補足

すいません、void型の値をintのエンティティに割り当てることはできません、と出てしまいます…

関連するQ&A