// 既約分数の分母naと分子nbをグローバル変数として, // main関数で既約分数の表示を行うプログラム。 // 分数を約分してグローバル変数 na, nb に格納する関数 #include int na, nb; // 既約分数の分子(na)と分母(nb)をグローバル変数として定義 // 最大公約数を求める関数(ユークリッドの互除法) int gcd(int n, int r){ while (r != 0) { int temp = [ ア ]; n = r; r = temp; } return n; } void reduceFrac(int a, int b){ int common = gcd(a, b); // 分子と分母の最大公約数を求める na = a / common; // 約分した分子をグローバル変数に代入 nb = b / common; // 約分した分母をグローバル変数に代入 } int main(void){ int n1, n2; printf("分数を入力して下さい。\n"); while(1){ printf("分子:"); if (scanf("%d", &n1) != 1) break; // 数値以外が入力されたら終了 printf("分母:"); if (scanf("%d", &n2) != 1 || n2 == 0) { printf("エラー:分母に0は入力できません。\n"); continue; } // 約分を実行(結果はグローバル変数 na, nb にセットされる) reduceFrac(n1, n2); // キーボードから入力した分数とその既約分数を表示します。 if(nb != 1) { printf("%d/%d の既約分数は %d/%d です。\n", n1, n2, na, nb); } else { // 分母が1になった場合は整数として表示 printf("%d/%d は %d です。\n", n1, n2, na); } printf("\n"); // 見やすくするための改行 } return 0; } // 6 15 // 6/15の既約分数は2/5です。 // 63 7 // 63/7の既約分数は9です。