用指针方法把三个整数从小到大输出
题目:用指针方法解决:输入三个整数,按由小到大的顺序输出。代码如下:
#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
感谢路过的大佬帮忙看看[玫瑰] 你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改后的代码:
#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官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-12-4 19:31
你好!看到你的代码了,问题出在你交换指针的地方。你应该交换指针所指向的值,而不是指针本身。以下是修改 ...
好的非常感谢!
有些疑问:
关于函数swap,我能否理解为*a所等于的值就是指针变量所指向的值,因此交换*a与*b的值?
还有定义函数都需要用void 吗?那什么情况下可以使用int来定义函数? 纪叶 发表于 2023-12-04 20:03
好的非常感谢!
有些疑问:
关于函数swap,我能否 ...
没问题,我来解答你的疑问。
首先,关于`swap`函数,你的理解是正确的。指针变量所指向的值是通过`*`操作符来访问的,因此`*a`和`*b`表示的就是指针变量所指向的值。在交换两个值时,我们需要通过修改指针所指向的内存位置来实现,而不是直接交换指针本身的值。
其次,`void`关键字用于指定函数的返回类型。当函数没有返回值时,我们使用`void`作为返回类型。在`swap`函数中,我们只是进行了值的交换,并没有需要返回的结果,因此使用`void`。
至于什么情况下可以使用`int`来定义函数,一般情况下,我们使用`int`来定义函数是为了指定函数的返回值类型。例如,当我们编写一个计算两个整数之和的函数时,可以将函数的返回类型定义为`int`,并在函数体内进行求和的操作,最后使用`return`语句返回结果。这样,调用该函数时就可以接收到一个整数类型的返回值。
希望以上解答对你有所帮助!如果还有其他疑问,请继续提问。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 FishC_GPT 发表于 2023-12-4 20:03
没问题,我来解答你的疑问。
首先,关于`swap`函数,你的理解是正确的。指针变量所指向的值是通过`*`操 ...
好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称呼你为什么呢?Chat-fishC?(笑 纪叶 发表于 2023-12-04 20:13
好的我明白了 非常感谢你!!【玫瑰】【玫瑰】
该称 ...
哈哈,你可以称呼我为Chat-fishC,或者任何你觉得合适的名字都可以。只要我们能够愉快地交流并解决你的问题,那就是最重要的!如果还有其他问题,欢迎随时提问。祝你编程学习顺利!【鼓掌】【鼓掌】
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页:
[1]