输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。

题目描述

输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。

输入

三个用空格隔开的整数a、b和c。

输出

按先大后小的顺序输出a、b和c,用空格隔开。
请注意行尾输出换行。

样例输入

9 0 10

样例输出

10 9 0

方法一:

三个int型,三个指针,三次比较

#include<stdio.h>
#include<conio.h>
int main(){
  void exchange(int *p1,int *p2,int *p3);
  int a,b,c,*ptr1,*ptr2,*ptr3;
  //printf("请输入3个整数:");
  scanf("%d %d %d",&a,&b,&c);
  ptr1=&a;  ptr2=&b;  ptr3=&c;
  exchange(ptr1,ptr2,ptr3);
  printf("%d %d %d\n",a,b,c);
} 
void exchange(int *p1,int *p2,int *p3){
  void swap(int *q1,int *q2);
  if(*p1<*p2)  swap(p1,p2);
  if(*p1<*p3)  swap(p1,p3);
  if(*p2<*p3)  swap(p2,p3);
}
void swap(int *q1,int *q2){
  int temp;
  temp=*q1;
  *q1=*q2;
  *q2=temp;
} 

注意函数中exchange比较的次序,保证1比2大,1比3大,再保证2比3大,得到1>2>3

方法二:int数组,指针数组,冒泡排序

#include<stdio.h>

int main()
{
	int a[3];
	int *b[3];
	
	for(int i=0; i<3; i++)
	{
		scanf("%d",&a[i]);
		b[i]=&a[i];
	}
	
	for(int i=0; i<2; i++)
	{
		for(int j=0; j<2-i; j++)
		{
			if(*b[j] < *b[j+1]);
			int temp=*b[j];
			*b[j]=*b[j+1];
			*b[j+1]=temp;
		}
	}
	
	for(int i=0; i<3; i++)
	{
		printf("%d ",*b[i]);
	}
	printf("\n");
	return 0;
}

方法三:int数组和一个指针,三次比较

#include <stdio.h>
 
void swap2(int *p1,int *p2)
{
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
 
void swap2(int *p1,int *p2,int *p3)
{
    if(*p1 < *p2)
    {
        swap2(p1,p2);
    }
    if(*p1 < *p3)
    {
        swap2(p1,p3);
    }
    if(*p2 < *p3)
    {
        swap2(p2,p3);
    }
}
 
void main()
{
    int a[3],*p;
    for(p=a;p < a + 3; p++)
    {
        scanf("%d",p);
    }
    p = a;
    swap2(p,p+1,p+2);
 
    for(;p<=a+2;p++)
    {
        printf("%d",*p);
    }
     
}

猜你喜欢

转载自blog.csdn.net/qq_41129306/article/details/91449577