【问题标题】:How to call a function that simplifies a fraction in C?如何在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。试着用一些例子来逐步理解它。
  • 阅读 n1570Modern C 以及 C 编译器的文档,例如GCCthis C reference。从现有的开源 C 代码(如 GNU make)中汲取灵感 - 您可以下载该代码并研究它(甚至改进它)。当然使用GDB 调试器

标签: c function data-structures struct fractions


【解决方案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()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多