【问题标题】:Using structures to find the GCD of a fraction (Simple C program)使用结构找到分数的 GCD(简单 C 程序)
【发布时间】:2016-08-23 21:07:45
【问题描述】:

正如标题所说,我正在编写一个程序来查找分数的 GCD。该程序有一个找到它的功能,但我遇到了一些问题。

我希望函数接受两个结构变量(分母和分子)并返回 GCD(整数)

这是我的代码:

#include <stdio.h>


struct fraction{
    int numerator,denominator;
};

int find_gcd(struct fraction s1, struct fraction s1);

int main(void)
{
    struct fraction d1;
    int gcd;

    d1.numerator= 20;
    d1.denominator= 100;

    printf("Fraction: %d/%d\n",d1.numerator,d1.denominator);

    gcd= find_gcd(d1.numerator, d1.denominator);

   printf("In lowest terms: %d/%d",d1.numerator/gcd,d1.denominator/gcd);
}

int find_gcd(struct fraction s1, struct fraction s1)
{
    int remainder=0;

    while (s1.denominator !=0)
    {
        remainder = s1.numerator/s1.denominator;
        s1.numerator= s1.denominator;
        s1.denominator= remainder;
    }

    return s1.numerator;        //this is the gcd
}

我收到以下错误:

GCD_structures.c:8:50: error: redefinition of parameter 's1'
 int find_gcd(struct fraction s1, struct fraction s1);
                                                  ^
GCD_structures.c:8:30: note: previous definition of 's1' was here
 int find_gcd(struct fraction s1, struct fraction s1);
                              ^
GCD_structures.c: In function 'main':
GCD_structures.c:20:10: error: incompatible type for argument 1 of 'find_gcd'
     gcd= find_gcd(d1.numerator, d1.denominator);

任何帮助将不胜感激。

【问题讨论】:

  • find_gcd 正在使用结构,但您正在传递它ints...阅读错误!它正在为打印它。
  • 如果第一个参数和第二个参数都命名为s1,你想如何区分它们?
  • 谢谢,我觉得自己像个白痴。
  • 你的 GCD 算法失败了(即使你整理了参数列表)。例如,给定 1 和 1,它不会终止。

标签: c structure greatest-common-divisor


【解决方案1】:

在函数的签名中,两个参数都命名为s1

解决这个问题,也许通过将参数之一重命名为 s2

【讨论】:

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