纪叶 发表于 2023-12-4 19:31:01

用指针方法把三个整数从小到大输出

题目:用指针方法解决:输入三个整数,按由小到大的顺序输出。

代码如下:
#include <stdio.h>

int main()
{
        int *p1, *p2, *p3, *p;
        int a, b, c;
       
        scanf("%d %d %d",&a ,&b ,&c );
       
        p1 = &a;
        p2 = &b;
        p3 = &c;
       
        if(a >= b)
        {
                p = p1;
                p1 = p2;
                p2 = p;
        }
        if(a >= c)
        {
                p = p1;
                p1 = p3;
                p3 = p;
        }
        if(b >= c)
        {
                p = p2;
                p2 = p3;
                p3 = p;
        }
       
        printf("%d %d %d\n",*p1, *p2, *p3);
       
        return 0;
}

输入: 5 1 2
输出:2 5 1

感谢路过的大佬帮忙看看[玫瑰]

FishC_GPT 发表于 2023-12-4 19:31:21

你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改后的代码:

#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a, b, c;
   
    scanf("%d %d %d", &a, &b, &c);
   
    if (a > b) {
      swap(&a, &b);
    }
    if (a > c) {
      swap(&a, &c);
    }
    if (b > c) {
      swap(&b, &c);
    }
   
    printf("%d %d %d\n", a, b, c);
   
    return 0;
}

这个程序使用了一个名为`swap`的函数,它接受两个指针参数,并交换它们所指向的值。在主函数中,我们输入三个整数,然后通过比较和调用`swap`函数来实现从小到大排序。

希望对你有所帮助!如果还有其他问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

纪叶 发表于 2023-12-4 20:03:32

FishC_GPT 发表于 2023-12-4 19:31
你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改 ...

好的非常感谢!

有些疑问:
关于函数swap,我能否理解为*a所等于的值就是指针变量所指向的值,因此交换*a与*b的值?

还有定义函数都需要用void 吗?那什么情况下可以使用int来定义函数?

FishC_GPT 发表于 2023-12-4 20:03:49

纪叶 发表于 2023-12-04 20:03
好的非常感谢!

有些疑问:
关于函数swap,我能否 ...

没问题,我来解答你的疑问。

首先,关于`swap`函数,你的理解是正确的。指针变量所指向的值是通过`*`操作符来访问的,因此`*a`和`*b`表示的就是指针变量所指向的值。在交换两个值时,我们需要通过修改指针所指向的内存位置来实现,而不是直接交换指针本身的值。

其次,`void`关键字用于指定函数的返回类型。当函数没有返回值时,我们使用`void`作为返回类型。在`swap`函数中,我们只是进行了值的交换,并没有需要返回的结果,因此使用`void`。

至于什么情况下可以使用`int`来定义函数,一般情况下,我们使用`int`来定义函数是为了指定函数的返回值类型。例如,当我们编写一个计算两个整数之和的函数时,可以将函数的返回类型定义为`int`,并在函数体内进行求和的操作,最后使用`return`语句返回结果。这样,调用该函数时就可以接收到一个整数类型的返回值。

希望以上解答对你有所帮助!如果还有其他疑问,请继续提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

纪叶 发表于 2023-12-4 20:13:46

FishC_GPT 发表于 2023-12-4 20:03
没问题,我来解答你的疑问。

首先,关于`swap`函数,你的理解是正确的。指针变量所指向的值是通过`*`操 ...

好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称呼你为什么呢?Chat-fishC?(笑

FishC_GPT 发表于 2023-12-4 20:14:01

纪叶 发表于 2023-12-04 20:13
好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称 ...

哈哈,你可以称呼我为Chat-fishC,或者任何你觉得合适的名字都可以。只要我们能够愉快地交流并解决你的问题,那就是最重要的!如果还有其他问题,欢迎随时提问。祝你编程学习顺利!【鼓掌】【鼓掌】

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 用指针方法把三个整数从小到大输出