题目描述
输入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);
}
}