鱼C论坛

 找回密码
 立即注册
查看: 1147|回复: 19

[已解决]函数初步 求助

[复制链接]
发表于 2020-12-5 12:08:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 minamikotori 于 2020-12-5 12:12 编辑
  1. #include <stdio.h>
  2. int max(int a,int b);
  3. int min(int a,int b);

  4. int main()
  5. {
  6.         int a,b;
  7.         scanf("%d %d",&a,&b);
  8.         printf("%d\t%d",max(a,b),min(a,b));
  9. }

  10. int max(int a,int b){
  11.         int ret,t;
  12.         while(b){
  13.                 t = a % b;
  14.                 a = b;
  15.                 b = t;
  16.         }
  17.         ret = a;
  18.         return ret;
  19. }

  20. int min(int a,int b){
  21.         int ret;
  22.         ret = a * b / max(a,b);
  23.         return ret;
  24. }
复制代码


第二小问该如何实现呢
最佳答案
2020-12-5 13:02:30
不用怎么改
把你定义在max和min里的ret放到函数外面,然后把函数返回值去掉,
也就是直接对ret进行修改,在main里打印出来就好了
QQ截图20201205120548.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 13:02:30 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +10 鱼币

不用怎么改
把你定义在max和min里的ret放到函数外面,然后把函数返回值去掉,
也就是直接对ret进行修改,在main里打印出来就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:12:59 | 显示全部楼层
如果你写的函数对的话,这么改就没问题

  1. #include <stdio.h>

  2. void max1(int a, int b);
  3. void min1(int a, int b);

  4. int ret1, ret2;

  5. int main()
  6. {
  7.         int a, b;
  8.         scanf("%d %d", &a, &b);
  9.         max1(a, b);
  10.         min1(a, b);
  11.         printf("%d\t%d", ret1, ret2);
  12. }

  13. void max1(int a, int b)
  14. {
  15.         int  t;
  16.         while (b) {
  17.                 t = a % b;
  18.                 a = b;
  19.                 b = t;
  20.         }
  21.         ret1 = a;
  22. }

  23. void min1(int a, int b)
  24. {
  25.         ret2 = a * b / max(a, b);
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:19:13 | 显示全部楼层
昨非 发表于 2020-12-5 13:12
如果你写的函数对的话,这么改就没问题

编译失败了...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:20:04 | 显示全部楼层

不会啊,我这里好好的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:21:41 | 显示全部楼层
昨非 发表于 2020-12-5 13:12
如果你写的函数对的话,这么改就没问题


30        9                [Warning] implicit declaration of function 'max' [-Wimplicit-function-declaration]
                        In function `min1':
30                        undefined reference to `max'
D:\c\collect2.exe        [Error] ld returned 1 exit status
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:23:17 | 显示全部楼层
minamikotori 发表于 2020-12-5 13:21
30        9                [Warning] implicit declaration of function 'max' [-Wimplicit-function-declaration]
              ...

这样,你把max1和min1改成max和min再试试
我刚刚看它和宏定义重了就改了名字
记得上面改了下面也要改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:26:18 | 显示全部楼层
昨非 发表于 2020-12-5 13:23
这样,你把max1和min1改成max和min再试试
我刚刚看它和宏定义重了就改了名字
记得上面改了下面也要改

30        9        D:\c\test9.c        [Error] void value not ignored as it ought to be
还有一个错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:28:46 | 显示全部楼层
minamikotori 发表于 2020-12-5 13:26
30        9        D:\c\test9.c        [Error] void value not ignored as it ought to be
还有一个错误

你用的啥编译器?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:29:34 | 显示全部楼层
昨非 发表于 2020-12-5 13:28
你用的啥编译器?


gcc 4.9.2  ISOc99
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:31:46 | 显示全部楼层
  1. #include <stdio.h>

  2. void max(int a, int b);
  3. void min(int a, int b);

  4. int ret1, ret2;

  5. int main()
  6. {
  7.         int a, b;
  8.         scanf("%d %d", &a, &b);
  9.         max(a, b);
  10.         min(a, b);
  11.         printf("%d\t%d", ret1, ret2);
  12. }

  13. void max(int a, int b)
  14. {
  15.         int  t;
  16.         while (b) {
  17.                 t = a % b;
  18.                 a = b;
  19.                 b = t;
  20.         }
  21.         ret1 = a;
  22. }

  23. void min(int a, int b)
  24. {
  25.         ret2 = a * b / max(a, b);
  26. }
  27. 这样的不行
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-5 13:32:23 | 显示全部楼层
  1. #include <stdio.h>
  2. void max(int a,int b);
  3. void min(int a,int b);

  4. int ret1,ret2;
  5. int main()
  6. {
  7.         int a,b;
  8.         scanf("%d %d",&a,&b);
  9.         max(a,b);
  10.         min(a,b);
  11.         printf("%d\t%d",ret1,ret2);
  12. }

  13. void max(int a,int b){
  14.         int t;
  15.         while(b){
  16.                 t = a % b;
  17.                 a = b;
  18.                 b = t;
  19.         }
  20.         ret1 = a;
  21. }

  22. void min(int a,int b){
  23.         ret2 = a * b / ret1;
  24. }
  25. 这样就可以了 是为什么呢
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:34:01 | 显示全部楼层


因为max没有返回值了
它的返回值被全局变量替换了
我刚发现
min里改成
        ret2 = a * b / ret1;
就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:37:23 | 显示全部楼层
因为原来ret在max和min函数中是局部变量,所以需要返回值return来相互传递

现在改成全局变量,(各个函数)大家都能用,你修改你的,我修改我的就好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:40:34 | 显示全部楼层
解决了记得设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 16:14:09 | 显示全部楼层

回帖奖励 +10 鱼币

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

使用道具 举报

发表于 2020-12-5 16:14:46 | 显示全部楼层
我只是来领鱼币的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 16:15:27 | 显示全部楼层
哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 16:16:03 | 显示全部楼层
谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 21:58:15 | 显示全部楼层

回帖奖励 +10 鱼币

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-8 21:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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