如何在C中调用简化分数的函数?
Posted
技术标签:
【中文标题】如何在C中调用简化分数的函数?【英文标题】:How to call a function that simplifies a fraction in C? 【发布时间】:2021-06-28 02:30:46 【问题描述】:这是我需要做的:
定义一个名为“fraction”的结构,其中包含整数成员“numerator”和 “分母。”提示用户以“#/#”的形式输入分数。调用一个函数 “simplFrac”通过将分子和分母除以最大分数来简化分数 公因子并将简化的分数返回给调用函数。打印结果 主要()。
这是我的代码:
#include <stdio.h>
struct fraction
int numerator;
int denominator;
;
struct fraction simplFrac(struct fraction x);
int main(void)
struct fraction a;
printf("Enter a fraction in the form #/#: ");
scanf("%i/%i",&a.numerator,&a.denominator);
printf("\n");
printf("The simplified fraction is: %i/%i\n",);
return 0;
struct fraction simplFrac(struct fraction x)
int gcf,remainder;
while (x.numerator != 0)
remainder = x.denominator % x.numerator;
x.denominator = x.numerator;
x.numerator = remainder;
gcf = x.denominator;
x.numerator = x.numerator / gcf;
x.denominator = x.denominator / gcf;
return x;
【问题讨论】:
这是一些代码,但有什么问题?struct fraction result; result = simplFrac(a);
。其他变体是可能的(在同一语句中声明和初始化,将结果分配回a
等),就像任何其他返回值的函数一样。
我不认为你的 simplFrac
算法是正确的;我认为它总是会返回0/1
。试着用一些例子来逐步理解它。
阅读 n1570 和 Modern C 以及 C 编译器的文档,例如GCC 和 this C reference。从现有的开源 C 代码(如 GNU make)中汲取灵感 - 您可以下载该代码并研究它(甚至改进它)。当然使用GDB 调试器
【参考方案1】:
请您尝试以下方法:
#include <stdio.h>
struct fraction
int numerator;
int denominator;
;
struct fraction simplFrac(struct fraction x);
int gcf(int, int);
int main(void)
struct fraction a;
char buf[BUFSIZ];
printf("Enter a fraction in the form #/#: ");
fgets(buf, BUFSIZ, stdin);
sscanf(buf, "%i/%i", &a.numerator, &a.denominator);
a = simplFrac(a);
printf("The simplified fraction is: %i/%i\n", a.numerator, a.denominator);
return 0;
struct fraction simplFrac(struct fraction x)
int factor = gcf(x.denominator, x.numerator);
x.numerator /= factor;
x.denominator /= factor;
return x;
int gcf(int a, int b)
if (b == 0) return a;
else return gcf(b, a % b);
计算gcf的算法被分离为一个函数gcf()。
【讨论】:
以上是关于如何在C中调用简化分数的函数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 bash -c 调用 bash 脚本函数 [重复]