PTA基础编程题目集 7-24 约分最简分式(C语言实现)

发布时间:2026/7/30 23:12:25
PTA基础编程题目集 7-24 约分最简分式(C语言实现) 摘要本题要求编写一个分数约分程序输入形如分子/分母的分数通过辗转相除法求出分子与分母的最大公约数再将两者同时除以该公约数输出最简分式。当分子大于分母或两者相等时仍保持分数形式输出。题目描述分数可以表示为分子 / 分母的形式。编写一个程序要求用户输入一个分数然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如 6/12 可以被约分为 1/2。当分子大于分母时不需要表达为整数又分数的形式即 11/8 还是 11/8而当分子分母相等时仍然表达为 1/1 的分数形式。输入格式输入在一行中给出一个分数分子和分母中间以斜杠/分隔如12/34表示 34 分之 12。分子和分母都是正整数不包含0如果不清楚正整数的定义的话。提示对于 C 语言在scanf的格式字符串中加入/让scanf来处理这个斜杠。对于 Python 语言用a, b map(int, input().split(/))这样的代码来处理这个斜杠。输出格式在一行中输出这个分数对应的最简分式格式与输入的相同即采用分子/分母的形式表示分数。如 5/6 表示 6 分之 5。输入样例66/120输出样例11/20算法流程图是否开始输入分数 (分子/分母)初始化 a分子, b分母b ! 0 ?temp bb a % ba temp最大公约数 a分子 分子 / gcd分母 分母 / gcd输出最简分式结束代码部分实现#includestdio.h// 使用辗转相除法求两个数的最大公约数// 算法原理gcd(a, b) gcd(b, a mod b)直到余数为0此时的除数即为最大公约数intgcd(inta,intb){while(b!0){inttempb;// 保存当前的除数ba%b;// 用当前除数除当前被除数得到新的余数atemp;// 将原除数作为下一轮的被除数}returna;// 当b为0时a即为最大公约数}intmain(){intnumerator,denominator;// 以分子/分母的格式输入分数scanf中的/会被自动跳过scanf(%d/%d,numerator,denominator);// 求出分子和分母的最大公约数intcommon_divisorgcd(numerator,denominator);// 分子分母同时除以最大公约数得到最简分式intsimplified_numnumerator/common_divisor;intsimplified_dendenominator/common_divisor;// 输出最简分式printf(%d/%d\n,simplified_num,simplified_den);return0;}