- 締切済み
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; } よろしくお願いいたします
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
こんな感じですかね、例えば。 #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; // 実数解なし } } }
お礼
ありがとうございました
補足
すいません、void型の値をintのエンティティに割り当てることはできません、と出てしまいます…