鱼C论坛

 找回密码
 立即注册
查看: 2009|回复: 8

[已解决]求大神

[复制链接]
发表于 2018-12-17 22:06:01 | 显示全部楼层 |阅读模式
6鱼币

大佬有注释就写写吧

大佬有注释就写写吧
最佳答案
2018-12-17 22:06:02
  1. #include <stdio.h>

  2. typedef struct
  3. {
  4.         size_t numerator;
  5.         size_t denominator;
  6. } Fraction;

  7. size_t GetGreatestCommonDivisor(Fraction fraction)
  8. {
  9.         size_t greatest_common_divisor;
  10.         if(fraction.numerator > fraction.denominator)
  11.         {
  12.                 greatest_common_divisor = fraction.denominator;
  13.         }
  14.         else
  15.         {
  16.                 greatest_common_divisor = fraction.numerator;
  17.         }

  18.         while((fraction.numerator % greatest_common_divisor != 0) || (fraction.denominator % greatest_common_divisor != 0))
  19.                 --greatest_common_divisor;
  20.         return greatest_common_divisor;
  21. }

  22. Fraction Reduce(Fraction fraction)
  23. {
  24.         size_t greatest_common_divisor = GetGreatestCommonDivisor(fraction);
  25.         Fraction result = {fraction.numerator / greatest_common_divisor, fraction.denominator / greatest_common_divisor};
  26.         return result;
  27. }

  28. void PrintFraction(Fraction fraction)
  29. {
  30.         printf("%u/%u\n", fraction.numerator, fraction.denominator);
  31. }

  32. int main(void)
  33. {
  34.         Fraction fraction;
  35.         printf("请输入: ");
  36.         scanf("%u/%u", &fraction.numerator, &fraction.denominator);
  37.         PrintFraction(Reduce(fraction));
  38.         return 0;
  39. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-17 22:06:02 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>

  2. typedef struct
  3. {
  4.         size_t numerator;
  5.         size_t denominator;
  6. } Fraction;

  7. size_t GetGreatestCommonDivisor(Fraction fraction)
  8. {
  9.         size_t greatest_common_divisor;
  10.         if(fraction.numerator > fraction.denominator)
  11.         {
  12.                 greatest_common_divisor = fraction.denominator;
  13.         }
  14.         else
  15.         {
  16.                 greatest_common_divisor = fraction.numerator;
  17.         }

  18.         while((fraction.numerator % greatest_common_divisor != 0) || (fraction.denominator % greatest_common_divisor != 0))
  19.                 --greatest_common_divisor;
  20.         return greatest_common_divisor;
  21. }

  22. Fraction Reduce(Fraction fraction)
  23. {
  24.         size_t greatest_common_divisor = GetGreatestCommonDivisor(fraction);
  25.         Fraction result = {fraction.numerator / greatest_common_divisor, fraction.denominator / greatest_common_divisor};
  26.         return result;
  27. }

  28. void PrintFraction(Fraction fraction)
  29. {
  30.         printf("%u/%u\n", fraction.numerator, fraction.denominator);
  31. }

  32. int main(void)
  33. {
  34.         Fraction fraction;
  35.         printf("请输入: ");
  36.         scanf("%u/%u", &fraction.numerator, &fraction.denominator);
  37.         PrintFraction(Reduce(fraction));
  38.         return 0;
  39. }
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
理想小青年 + 2 + 2 无条件支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-17 22:51:54 | 显示全部楼层
就相当于求最大公约数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-17 23:31:02 | 显示全部楼层

第42行有错误,编译不出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-18 01:45:21 | 显示全部楼层
HJX54088 发表于 2018-12-17 23:31
第42行有错误,编译不出来。

在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。”   ???
这是我的反应
42行有什么错误?我把代码贴上来了,说明在我这边可以通过编译

你问 “xxx有错误”,那么一定会有人对这个问题再次提问“xxx有什么错误?”
为什么会这样?因为你的问题不够完整

问问题时要详细描述你遇到的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-18 01:48:00 | 显示全部楼层
本帖最后由 Croper 于 2018-12-18 02:03 编辑
第42行有错误,编译不出来。

你把scanf改成scanf_s试试

另外提一下。。求最大公约数用辗转相除法比较快
  1. int GetGCD(int p,int q) //辗转相除法求最大公约数
  2. {
  3.         int a;
  4.         do                        
  5.         {
  6.                 a = p % q;
  7.                 p = q;
  8.                 q = a;
  9.         } while (a != 0);

  10.         return p;
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-18 07:52:58 | 显示全部楼层
人造人 发表于 2018-12-18 01:45
在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。” ...

嗯,好的,可能是编译器不一样的问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-18 08:13:36 | 显示全部楼层
Croper 发表于 2018-12-18 01:48
你把scanf改成scanf_s试试

另外提一下。。求最大公约数用辗转相除法比较快

思路比较清晰,代码有点不完整,我用的是C++的编译器。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-18 08:14:52 | 显示全部楼层
人造人 发表于 2018-12-18 01:45
在你问问题时先问自己一个问题,你问的这个问题别人看到后是什么反应?
“第42行有错误,编译不出来。” ...

抱歉,我没有事先说清楚。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-15 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表