minamikotori 发表于 2020-12-5 12:08:23

函数初步 求助

本帖最后由 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里打印出来就好了

昨非 发表于 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)
{
        intt;
        while (b) {
                t = a % b;
                a = b;
                b = t;
        }
        ret1 = a;
}

void min1(int a, int b)
{
        ret2 = a * b / max(a, b);
}

minamikotori 发表于 2020-12-5 13:19:13

昨非 发表于 2020-12-5 13:12
如果你写的函数对的话,这么改就没问题

编译失败了...

昨非 发表于 2020-12-5 13:20:04

minamikotori 发表于 2020-12-5 13:19
编译失败了...

不会啊,我这里好好的

minamikotori 发表于 2020-12-5 13:21:41

昨非 发表于 2020-12-5 13:12
如果你写的函数对的话,这么改就没问题


30        9                implicit declaration of function 'max' [-Wimplicit-function-declaration]
                      In function `min1':
30                        undefined reference to `max'
D:\c\collect2.exe        ld returned 1 exit status

昨非 发表于 2020-12-5 13:23:17

minamikotori 发表于 2020-12-5 13:21
30        9                implicit declaration of function 'max' [-Wimplicit-function-declaration]
              ...

这样,你把max1和min1改成max和min再试试
我刚刚看它和宏定义重了就改了名字
记得上面改了下面也要改

minamikotori 发表于 2020-12-5 13:26:18

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

30        9        D:\c\test9.c        void value not ignored as it ought to be
还有一个错误

昨非 发表于 2020-12-5 13:28:46

minamikotori 发表于 2020-12-5 13:26
30        9        D:\c\test9.c        void value not ignored as it ought to be
还有一个错误

你用的啥编译器?

minamikotori 发表于 2020-12-5 13:29:34

昨非 发表于 2020-12-5 13:28
你用的啥编译器?

gcc 4.9.2ISOc99

minamikotori 发表于 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)
{
      intt;
      while (b) {
                t = a % b;
                a = b;
                b = t;
      }
      ret1 = a;
}

void min(int a, int b)
{
      ret2 = a * b / max(a, b);
}
这样的不行

minamikotori 发表于 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;
}
这样就可以了 是为什么呢

昨非 发表于 2020-12-5 13:34:01

minamikotori 发表于 2020-12-5 13:32


因为max没有返回值了
它的返回值被全局变量替换了
我刚发现
min里改成
        ret2 = a * b / ret1;
就好了

昨非 发表于 2020-12-5 13:37:23

因为原来ret在max和min函数中是局部变量,所以需要返回值return来相互传递

现在改成全局变量,(各个函数)大家都能用,你修改你的,我修改我的就好了

昨非 发表于 2020-12-5 13:40:34

解决了记得设置最佳答案

象棋爱好者 发表于 2020-12-5 16:14:09

不会

象棋爱好者 发表于 2020-12-5 16:14:46

我只是来领鱼币的

象棋爱好者 发表于 2020-12-5 16:15:27

哈哈哈

象棋爱好者 发表于 2020-12-5 16:16:03

谢谢你

不完美小孩 发表于 2020-12-5 21:58:15

1
页: [1]
查看完整版本: 函数初步 求助