算法笔记 Problem B: C语言10.2
Description
输入a、b、c三个整数,按先大后小的顺序输出a、b和c。注意请使用指针变量的方式进行比较和输出。
Input
三个用空格隔开的整数a、b和c。
Output
按先大后小的顺序输出a、b和c,用空格隔开。
请注意行尾输出换行。
Sample Input
9 0 10
Sample Outpu
10 9 0
略微有些复杂,还有个疑问,但输出没问题,想知道:函数调用cmp,输出时printf里面a*和a都可以得到正确答案,换成a不是地址吗,应该出错啊
#include<cstdio>
#include<cstring>
void cmp(int* a,int* b,int* c){
if(*a>*b){
if(*b>*c)
printf("%d %d %d\n",*a,*b,*c);
else{
if(*a>*c){
printf("%d %d %d\n",*a,*c,*b);
}
else{
printf("%d %d %d\n",*c,*a,*b);
}
}
}
else{
if(*a>*c)
printf("%d %d %d\n",*b,*a,*c);
else{
if(*b>*c){
printf("%d %d %d\n",*b,*c,*a);
}
else{
printf("%d %d %d\n",*c,*b,*a);
}
}
}
}
int main(){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
int* p1=&a;
int* p2=&b;
int* p3=&c;
cmp(p1,p2,p3);
return 0;
}
还有一种稍微简单点的写法,注意:主函数内调用的顺序要一定!!!
#include<cstdio>
#include<cstring>
void compare(int* a,int* b){
//大的放在第一个参数
int temp;
if(*a<*b){
temp=*a;
*a=*b;
*b=temp;
}
}
int main() {
int a=0,b=0,c=0;
scanf("%d %d %d",&a,&b,&c);
compare(&a,&b);//比较时一定要先比较a与b,再a与c,最后b与c,才能保证a>b>c
compare(&a,&c);
compare(&b,&c);
printf("%d %d %d\n",a,b,c);
return 0;
}