c语言关于输入三个数,输出排列大小的算法

如题所述

#include<stdio.h>
#include<stdlib.h>
int com(const void*a,const void*b)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[3],i;
for(i=0;i<3;i++)
scanf("%d",a+i);
qsort(a,3,sizeof(int),com);
for(i=0;i<3;i++)
printf("%d ",a+i);
printf("\n");
return 0;
}追问

不是吧,

只是一个排列,用不到数组吧

追答

#include
#include
int com(const void*a,const void*b)
{
return *(int*)b-*(int*)a;
}
int main()
{
int a[3],i;
for(i=0;i<3;i++)
scanf("%d",a+i);
qsort(a,3,sizeof(int),com);
for(i=0;i<3;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

PS:刚才不小心把输出达成输入了。
现在是正确的

追问

我认为我是问的,

追答

看了你的答案
你是想让三个数排序交换哈
不过么。。。
你错在这里
你先ab之间比较、交换
bc之间比较、交换
已经把ac之间排序出来了
(a>b,b>c=>a>c)
不能确定的是ab之间
因为bc可能经过交换不是原来的bc了
所以,正确的写法:
if(a<b)

{
t=a;
a=b;
b=t;
}
if(b<c)

{
t=c;
c=b;
b=t;
}
if(a<b)

{
t=a;
a=b;
b=t;
}

你的细节问题是大括号和t的声明

追问

就是这种,但是我怎么也不理解,就用第一个来说,如果a<b,接下来,就把a赋值给一个代替值,再把b付给a,最后又把代替值付给b,那不是就说明a=t=b了吗?好难理解

追答

不是
t是临时变量
t=a,现在t的值是a的值
a=b,现在a的值是b的值,原先a的值被替换掉了
b=t,由于t已经储存了a的值,相当于b的值现在变成原先a的值
所以不是简单的所有都相等

追问

我缕缕!

哎呀,弄明白了,搞了我几天都在想这个,谢谢啊!

追答

不客气

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-08-03
#include <stdio.h>
int main(){
int max,min,middle;
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a>b){
max=a;
min=b;
}
else{
max=b;
min=a;
}
if(max<c){
middle=max;
max=c;
}
else{
middle=c;
if(min>c){
middle=min;
min=c;
}
}
printf("%d,%d,%d",max,min,middle);
getchar();
return 0;
}

你要的是这种?追问

#include
int main(void)
{
int a,b,c,t;
printf("请输入三个数");
scanf("%d%d%d",&a,&b,&c);
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;}
printf("从大到小:%d %d %d",a,b,c);

system("pause");
return 0;
}

这种

追答

#include
int main(){
int a,b,c;
scanf("%d %d %d",&a,&b,&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;}
printf("%d,%d,%d",a,b,c);
getchar();
return 0;
}

第2个回答  2014-08-03
#include<stdio.h>
main(){
int a[3];

int i ;

for(i=0;i<3;i++)

{
scanf("%d",&a[i])

}

for(i=0)

// 下边就是个简单的选择排序,你懂得。不想写了,太简单。
}追问

丫的,你这是什么啊

输入三个数,保存到数组,我想问的是排列算法

编写一个程序,从键盘输入3个数字,输出它们按从小到大
printf("请输入三个数:");scanf("%d%d%d",&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf("从小到大的顺序是:%d %d %d\\n",a,b,c);return0;}

用C语言描述对于输入的任意三个整数,将它们按从小到大的顺序输出?_百 ...
1、输入三个整数x,y,z,请把这三个数由小到大输出。2、所需要的开头代码,#include "stdio.h"#include "conio.h",预处理命令,表示程序包含conio.h库文件conio.h库文件定义了通过控制台进行数据输入和数据输出的函数。3、下面这个代码是关键 int x,y,z,t; scanf("%d%d%d",&x,&y,&z)...

c语言:3个数abc,按大小顺序输出
if(a<b){ t=a,a=b,b=t;} if(a<c){ t=a,a=c,c=t;} if(b<c){ t=b, b=c, c=t;} printf("%d %d %d\\n",a,b,c);return 0;} 原理就是运用冒泡算法,把最大的数浮在最上面,而小的数就下沉,最后就输出。

C语言题 输入三个数,分别按照从小到大和从大到小的的顺序输出
if(a<b){ t=a,a=b,b=t;} if(a<c){ t=a,a=c,c=t;} if(b<c){ t=b, b=c, c=t;} printf("%d %d %d\\n",a,b,c);return 0;} 原理就是运用冒泡算法,把最大的数浮在最上面,而小的数就下沉,最后就输出。

c语言,输入三个不同的数字,按从从大到小输出
1、参考2楼,修改两个语法错误:scanf("%d,%d,d%",&x,&y,&z);应该是:scanf("%d,%d,%d",&x,&y,&z);输出语句:printf("输入的三个数字由大到小排列为:%d,%d,%d",z,y,x);2、算法太乱,应该先对x,y,z排序,排序的算法是两两相比较,如果前者大就交换,最后得到x,y,z是从小到...

c语言编程: 从键盘任意输入三个数,按照从小到大的顺序输出.
include<stdio.h> void main(){ int a,b,c,t;printf("请输入三个整数:a b c\\n");scanf("%d%d%d",&a,&b,&c);if(a>b){ t=a;a=b;b=t;} if(a>c){ t=a;a=c;c=t;} if(b>c){ t=b;b=c;c=t;} printf("排序后的三个整数为:%d,%d,%d\\n",a,b,c);} ...

有3个数a、b、c,要求按大小顺序把它们输出(用C来写)
输入3个数a,b,c,要求按由小到大的顺序输出;用伪代码写出解此题的算法:if a>b 将a和b对换 (a是a,b中的小者)if a>c 将a和c对换 (a是a,c中的小者,因此a是三者中最小者)if b>c 将b和c对换 (b是b,c中的小者,也是三者中次小者)然后顺序输出a,b,c即可。...

C语言,输入三个整数,按从大到小的顺序输出
include "stdio.h"int main(int argc,char *argv[]){int x,y,z;printf("Please enter 3 integers...\\n");scanf("%d%d%d",&x,&y,&z);if(x>y)x^=y,y^=x,x^=y;if(x>z)x^=z,z^=x,x^=z;if(y>z)y^=z,z^=y,y^=z;printf("\\n%d %d %d\\n",x,y,z);return 0...

用C语言设计个算法,比较三个数的算法从大到小输出
include int main(void){ int i,a[3];printf("enter 3 numbers:");\/\/输入3个书 for(i=0;i { scanf("%d",&a[i]);if(a[i]>a[0])a[i]=a[0]+a[i]-(a[0]=a[i]);\/\/把最大的放在a〔0〕,就只要比较一次就行了。} if(a[1]printf("the number from max to low:");...

用C语言设计个算法,比较三个数的算法从大到小输出
int main(void){ int i,a[3];printf("enter 3 numbers:");\/\/输入3个书 for(i=0;i<3;i++){ scanf("%d",&a[i]);if(a[i]>a[0]) a[i]=a[0]+a[i]-(a[0]=a[i]);\/\/把最大的放在a〔0〕,就只要比较一次就行了。} if(a[1]<a[2]) a[1]=a[2]+a[1]-(a[...

相似回答