鱼C论坛

 找回密码
 立即注册
查看: 536|回复: 5

[已解决]用指针方法把三个整数从小到大输出

[复制链接]
发表于 2023-12-4 19:31:01 | 显示全部楼层 |阅读模式

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

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

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

代码如下:
#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

感谢路过的大佬帮忙看看[玫瑰]
最佳答案
2023-12-4 19:31:21
你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改后的代码:
  1. #include <stdio.h>
  2. void swap(int *a, int *b) {
  3.     int temp = *a;
  4.     *a = *b;
  5.     *b = temp;
  6. }
  7. int main() {
  8.     int a, b, c;
  9.    
  10.     scanf("%d %d %d", &a, &b, &c);
  11.    
  12.     if (a > b) {
  13.         swap(&a, &b);
  14.     }
  15.     if (a > c) {
  16.         swap(&a, &c);
  17.     }
  18.     if (b > c) {
  19.         swap(&b, &c);
  20.     }
  21.    
  22.     printf("%d %d %d\n", a, b, c);
  23.    
  24.     return 0;
  25. }
复制代码

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

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-4 19:31:21 | 显示全部楼层    本楼为最佳答案   
你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改后的代码:
  1. #include <stdio.h>
  2. void swap(int *a, int *b) {
  3.     int temp = *a;
  4.     *a = *b;
  5.     *b = temp;
  6. }
  7. int main() {
  8.     int a, b, c;
  9.    
  10.     scanf("%d %d %d", &a, &b, &c);
  11.    
  12.     if (a > b) {
  13.         swap(&a, &b);
  14.     }
  15.     if (a > c) {
  16.         swap(&a, &c);
  17.     }
  18.     if (b > c) {
  19.         swap(&b, &c);
  20.     }
  21.    
  22.     printf("%d %d %d\n", a, b, c);
  23.    
  24.     return 0;
  25. }
复制代码

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

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的非常感谢!

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

还有定义函数都需要用void 吗?那什么情况下可以使用int来定义函数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-4 20:13:46 | 显示全部楼层
FishC_GPT 发表于 2023-12-4 20:03
没问题,我来解答你的疑问。

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

好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称呼你为什么呢?Chat-fishC?(笑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-4 20:14:01 | 显示全部楼层
纪叶 发表于 2023-12-04 20:13
好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称 ...

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

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 16:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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