输入三个整数用函数按从小到大排序,为什么我这个代码实现不了交换?
#include<stdio.h>
void change(int a,int b)****
{
int i;
i=a;
a=b;
b=i;
}
int main()
{
void change(int a,int b);
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a>b) change(a,b);
if(a>c) change(a,c);
if(b>c) change(b,c);
printf("%d %d %d",a,b,c);
return 0;
}
您的代码中,change
函数只是简单地交换了两个局部变量 a
和 b
的值,并不会改变 main
函数中 a
和 b
的值。因此,在 main
函数中调用 change
函数后,a
和 b
的值并没有被交换,而是保持原样。
要解决这个问题,您可以将 change
函数的参数改为指向整型变量的指针,这样就可以通过指针来改变 main
函数中的变量的值。修改后的代码如下所示:
#include <stdio.h>
void change(int *a, int *b)
{
int i;
i = *a;
*a = *b;
*b = i;
}
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
change(&a, &b);
if (a > c)
change(&a, &c);
if (b > c)
change(&b, &c);
printf("%d %d %d", a, b, c);
return 0;
}
在这个修改后的代码中,change
函数的参数为指向整型变量的指针 a
和 b
,并且在函数内部使用指针来交换变量的值。在 main
函数中,我们使用 &a
和 &b
来传递变量的地址给 change
函数,这样在 change
函数中使用指针 a
和 b
就可以直接改变 main
函数中的变量的值了。
将change(int a, int b)修改为change( int *a, int *b);
因为参数值不能作为返回值,需要用到指针类型!有问题可以私聊!