如何用函数实现三个数的排序(用的是C语言)

输入三个整数,要求按从小到大输出
可以用三个if语句,但是我想把if语句写成函数重复三遍,问题来了,调用函数不能改变原参数的值,书上说可以用全局变量或指针,但是我不会弄,有大神可以帮我把这两种方法都讲讲么,最好带上代码,讲详细些。
如果真的没法用函数实现,可以讲一下原因么?
这个问题想了2天了,想不通。。。。
注意是一个函数调用一次排两个数,一共调用三次,不是用一个函数全部排完

一:全局变量

#include <stdio.h>

int a,b,c;  //定义三个全局变量

void sort()  //不需要参数
{
    int t;
    if(a>b)
    {
        t=a;a=b;b=t;
    }
    if(b>c)
    {
        t=b;b=c;c=t;
    }
    if(a>b)
    {
        t=a;a=b;b=t;
    }
}

int main()
{
    printf("输入:");
    scanf("%d%d%d",&a,&b,&c);
    sort();
    printf("排序:%d < %d < %d\n",a,b,c);
    return 0;
}

二:指针

#include <stdio.h>

void sort(int *a, int *b, int *c) //参数传递方式:地址传递

  int t;
  if(*a>*b) 
  {
      t=*a;*a=*b;*b=t;
  }
  if(*b>*c)
  {
      t=*b;*b=*c;*c=t;
  }
  if(*a>*b) 
  {
      t=*a;*a=*b;*b=t;
  }

}

int main()
{
    int a,b,c;
    printf("输入:");
    scanf("%d%d%d",&a,&b,&c);
    sort(&a,&b,&c);               //把地址作为参数
    printf("排序:%d < %d < %d\n",a,b,c);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-11-07
void change(int* a,int *b)
{
int temp = a>b?a:b;
return;

}
调用函数确实不能修改原参数的值,其实质是拷贝了一份实参给形参,在这种情况下,C语言是用指向实参的指针来修改实参的,C++可以还用引用,就是第一个回答你问题的那个方法。你说书上说可以用全局变量,这个当然可以,但是,绝不推荐用全局变量或者静态变量,这是一个很不好的编程习惯!望采纳本回答被提问者和网友采纳
第2个回答  2013-09-28
#include "stdio.h"
void Mysort(int *pa,int *pb,int *pc){
int i,j,k,a[]={*pa,*pb,*pc};
for(i=0;i<3;i++){
for(k=i,j=k+1;j<3;j++)
if(a[k]>a[j]) k=j;
if(k!=i){
j=a[i];
a[i]=a[k];
a[k]=j;
}
}
*pa=a[0];
*pb=a[1];
*pc=a[2];
}
}
void main(void){
int a,b,c;
printf("Type 3 integers...a,b,c=\n");
scanf("%d%d%d",&a,&b,&c);
Mysort(&a,&b,&c);
printf("The result: %d < %d < %d\n",a,b,c);
}
第3个回答  2013-09-28
这个太简单了 。。1楼用的是引用 你也可以用指针。。。
void swap(int *a,int *b)
{
int t;
t=*a;*a=*b;*b=t;
}
void mysort(int *a,int *b,int *c)
{
if(*a>*b) swap(a,b);

if(*a>*c) swap(a,c);

if(*b>*c) swap(b,c);
}

#include<stdio.h>

void twosort(int *a,int *b)
{//执行此函数后,保证*a<*b
int t;
if(*a>*b)
{
t=*a;*a=*b;*b=t;
}

}
第4个回答  推荐于2016-04-03
调用子函数交换主函数里变量的值,需要传递指针
#include <stdio.h>
void sort(float *a,float *b,float *c)
{
float m;
if(*a>*b)
{
m=*a;
*a=*b;
*b=m;
}
if(*a>*c)
{
m=*a;
*a=*c;
*c=m;
}
if(*b>*c)
{
m=*b;
*b=*c;
*c=m;
}
}
void main()
{
float i,j,k;
printf("Input three numbers:\n");
scanf("%f%f%f",&i,&j,&k);
sort (&i,&j,&k);
printf("The sorted number is:\n%f\n%f\n%f\n",i,j,k);
}
相似回答