はじめに
この実験では、C プログラミングで最大公約数 (GCD) アルゴリズムを使用して分数簡約化する方法を学びます。この実験では、以下の手順をカバーします:ユーザー入力から分子と分母を読み取る、GCD を計算する、そして GCD で分子と分母を割って簡約化された分数を得る。この実験は、分数の簡約化の概念を理解し、C プログラミング技術を使用して実装するのに役立ちます。
分子と分母の入力
このステップでは、分数の簡約化を行う C プログラムで、ユーザー入力から分子と分母を読み取る方法を学びます。
まず、分数の簡約化プログラム用の新しい C ファイルを作成しましょう。
cd ~/project
nano fraction_simplify.c
次に、分子と分母を読み取るための以下のコードを追加します。
#include <stdio.h>
int main() {
int numerator, denominator;
printf("分子を入力してください:");
scanf("%d", &numerator);
printf("分母を入力してください:");
scanf("%d", &denominator);
printf("分子:%d\n", numerator);
printf("分母:%d\n", denominator);
return 0;
}
プログラムをコンパイルして実行してみましょう。
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
実行例:
分子を入力してください: 12
分母を入力してください: 18
分子: 12
分母: 18
コードの説明:
scanf()は、ユーザーから整数を入力を読み取るために使用されます。%dは整数の書式指定子です。&numeratorと&denominatorは、入力値を格納するためのメモリアドレスを渡します。printf()は、入力された分子と分母を表示するために使用されます。
GCD の計算と両方の値の除算
このステップでは、最大公約数 (GCD) アルゴリズムを実装し、それを用いて分数を簡約化します。
前のプログラムを修正して GCD 計算関数を追加しましょう。
cd ~/project
nano fraction_simplify.c
以下の実装でコードを更新します。
#include <stdio.h>
// ユークリッドの互除法を用いた GCD の計算関数
int computeGCD(int a, int b) {
// 正の値にする
a = (a > 0) ? a : -a;
b = (b > 0) ? b : -b;
// ユークリッドの互除法
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int numerator, denominator, gcd;
printf("分子を入力してください:");
scanf("%d", &numerator);
printf("分母を入力してください:");
scanf("%d", &denominator);
// GCD を計算する
gcd = computeGCD(numerator, denominator);
// 分数を簡約化する
int simplified_numerator = numerator / gcd;
int simplified_denominator = denominator / gcd;
printf("元の分数:%d/%d\n", numerator, denominator);
printf("簡約化された分数:%d/%d\n", simplified_numerator, simplified_denominator);
return 0;
}
プログラムをコンパイルして実行します。
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
実行例:
分子を入力してください: 12
分母を入力してください: 18
元の分数: 12/18
簡約化された分数: 2/3
コードの説明:
computeGCD()は、ユークリッドの互除法を使用して最大公約数を求めます。- この関数は正の数と負の数を処理します。
- 分数はその GCD で分子と分母を割ることで簡約化されます。
- ゼロや負の数などの特殊なケースも処理します。
簡約化された分数の表示
このステップでは、分数の簡約化プログラムを強化し、様々な入力状況に対応し、出力形式を明確にします。
プログラムを更新して、より堅牢な分数の表示機能を追加しましょう。
cd ~/project
nano fraction_simplify.c
以下の実装でコードを更新します。
#include <stdio.h>
// ユークリッドの互除法を用いた GCD の計算関数
int computeGCD(int a, int b) {
a = (a > 0) ? a : -a;
b = (b > 0) ? b : -b;
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 分数を表示する関数(特殊ケース処理付き)
void printFraction(int numerator, int denominator) {
// ゼロ除算の処理
if (denominator == 0) {
printf("エラー: ゼロ除算は許可されていません。\n");
return;
}
// GCD を計算する
int gcd = computeGCD(numerator, denominator);
// 分数を簡約化する
int simplified_numerator = numerator / gcd;
int simplified_denominator = denominator / gcd;
// 符号の処理
if (simplified_denominator < 0) {
simplified_numerator = -simplified_numerator;
simplified_denominator = -simplified_denominator;
}
// 結果を表示する
printf("元の分数:%d/%d\n", numerator, denominator);
// 整数と分数の異なる出力
if (simplified_denominator == 1) {
printf("簡約化された分数:%d\n", simplified_numerator);
} else {
printf("簡約化された分数:%d/%d\n",
simplified_numerator, simplified_denominator);
}
}
int main() {
int numerator, denominator;
printf("分子を入力してください:");
scanf("%d", &numerator);
printf("分母を入力してください:");
scanf("%d", &denominator);
// 分数表示関数を呼び出す
printFraction(numerator, denominator);
return 0;
}
プログラムをコンパイルして実行します。
gcc fraction_simplify.c -o fraction_simplify
./fraction_simplify
実行例:
分子を入力してください: 12
分母を入力してください: 18
元の分数: 12/18
簡約化された分数: 2/3
分子を入力してください: 15
分母を入力してください: 5
元の分数: 15/5
簡約化された分数: 3
分子を入力してください: -12
分母を入力してください: 18
元の分数: -12/18
簡約化された分数: -2/3
コードの説明:
- 分数表示を処理する
printFraction()関数を追加しました。 - ゼロ除算などの特殊なケースを処理します。
- 簡約化された分数の符号を管理します。
- 分母が 1 の場合、整数として表示します。
- 分数の元の符号を保持します。
まとめ
この実験では、ユーザー入力から分子と分母を読み取り、ユークリッドの互除法を用いて最大公約数 (GCD) を計算し、分子と分母を GCD で割ることで分数を簡約化する方法を学びます。簡約化された分数が出力として表示されます。
主な手順は次のとおりです。1) ユーザー入力から分子と分母を読み取る、2) 最大公約数を求める GCD アルゴリズムを実装する、3) GCD で分子と分母を割って簡約化された分数を得る。



