简介
在本实验中,你将学习如何使用 C 语言编程中的最大公约数(GCD)算法来化简分数。本实验涵盖以下步骤:从用户输入中读取分子和分母,计算最大公约数,然后将分子和分母都除以最大公约数以获得化简后的分数。本实验旨在帮助你理解分数化简的概念,并使用 C 编程技术来实现它。
在本实验中,你将学习如何使用 C 语言编程中的最大公约数(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 的函数:
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() 实现了欧几里得算法来找到最大公约数在这一步中,你将增强分数化简程序,以处理各种输入场景并提供清晰的输出格式。
让我们更新程序,以包含更强大的分数打印功能:
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() 函数来处理分数打印在本实验中,你将学习如何从用户输入中读取分子和分母,使用欧几里得算法计算最大公约数(GCD),然后通过将分子和分母都除以最大公约数来化简分数。化简后的分数将作为输出打印出来。
关键步骤如下:1)从用户输入中读取分子和分母,2)实现 GCD 算法以找到最大公约数,3)将分子和分母都除以最大公约数以获得化简后的分数。