鱼C论坛

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

[已解决]函数初步 求助

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

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

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

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

int main()
{
        int a,b;
        scanf("%d %d",&a,&b);
        printf("%d\t%d",max(a,b),min(a,b)); 
} 
 
int max(int a,int b){
        int ret,t;
        while(b){
                t = a % b;
                a = b;
                b = t;
        }
        ret = a;
        return ret;
}

int min(int a,int b){
        int ret;
        ret = a * b / max(a,b);
        return ret;
}

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

使用道具 举报

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

回帖奖励 +10 鱼币

不用怎么改
把你定义在max和min里的ret放到函数外面,然后把函数返回值去掉,
也就是直接对ret进行修改,在main里打印出来就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

void max1(int a, int b);
void min1(int a, int b);

int ret1, ret2;

int main()
{
        int a, b;
        scanf("%d %d", &a, &b);
        max1(a, b);
        min1(a, b);
        printf("%d\t%d", ret1, ret2);
}

void max1(int a, int b)
{
        int  t;
        while (b) {
                t = a % b;
                a = b;
                b = t;
        }
        ret1 = a;
}

void min1(int a, int b) 
{
        ret2 = a * b / max(a, b);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

编译失败了...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不会啊,我这里好好的
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> 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再试试
我刚刚看它和宏定义重了就改了名字
记得上面改了下面也要改
想知道小甲鱼最近在做啥?请访问 -> 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
还有一个错误
想知道小甲鱼最近在做啥?请访问 -> 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
还有一个错误

你用的啥编译器?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


gcc 4.9.2  ISOc99
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

void max(int a, int b);
void min(int a, int b);

int ret1, ret2;

int main()
{
        int a, b;
        scanf("%d %d", &a, &b);
        max(a, b);
        min(a, b);
        printf("%d\t%d", ret1, ret2);
}

void max(int a, int b)
{
        int  t;
        while (b) {
                t = a % b;
                a = b;
                b = t;
        }
        ret1 = a;
}

void min(int a, int b) 
{
        ret2 = a * b / max(a, b);
}
这样的不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

int ret1,ret2;
int main()
{
        int a,b;
        scanf("%d %d",&a,&b);
        max(a,b);
        min(a,b);
        printf("%d\t%d",ret1,ret2); 
} 
 
void max(int a,int b){
        int t;
        while(b){
                t = a % b;
                a = b;
                b = t;
        }
        ret1 = a;
}

void min(int a,int b){
        ret2 = a * b / ret1;
}
这样就可以了 是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


因为max没有返回值了
它的返回值被全局变量替换了
我刚发现
min里改成
        ret2 = a * b / ret1;
就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

现在改成全局变量,(各个函数)大家都能用,你修改你的,我修改我的就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 13:40:34 | 显示全部楼层
解决了记得设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +10 鱼币

不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-5 16:14:46 | 显示全部楼层
我只是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 16:15:27 | 显示全部楼层
哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-5 16:16:03 | 显示全部楼层
谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +10 鱼币

1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 11:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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