#include<stdioh>
void main()
{
int a,b,c,k;
printf("\nplease a,b and c:");/提示输入三个数/
scanf("%d,%d,%d",&a,&b,&c);
if(a<b)/如果a<b,交换a与b的值/
{
k=a;
a=b;
b=k;
}
if(a<c)/如果a<c,交换a与c的值/
{
k=a;
a=c;
c=k;
}
if(b<c)/如果b<c,交换b与c的值/
{
k=b;
b=c;
c=k;
}
printf("a=%d\t,b=%d\t,c=%d\n",a,b,c);/因为比较的时候是a<b<c,交换以后
的结果是a>b>c,所以输出句子是a=%d\t,b=%d\t,c=%d这个顺序/
}
经过TC30测试完全正确。你题目也没说用不用到调用函数,或者用其它编译器的,所以只写最简单的给你
#include
<stdioh>
#include
<timeh>
#include
<stdlibh>
void
Swap(int
a,
int
b)
//
交换
{
int
t;
t
=
a;
a
=
b;
b
=
t;
}
void
AsceSort(int
begin,
int
end)
//
升序排序
{
for(int
p
=
begin;
p
!=
end;)
if(p
==
begin
||
(p-1)
<=
p)
++p;
else
Swap(p---1,
p);
}
void
DescSort(int
begin,
int
end)
//
降序排序
{
for(int
p
=
begin;
p
!=
end;)
if(p
==
begin
||
(p-1)
>=
p)
++p;
else
Swap(p---1,
p);
}
void
Print(int
a,
int
n)
//
10个一行输出
{
int
i;
for(i
=
0;
i
<
n;
++i)
{
if(i
!=
0
&&
i
%
10
==
0)
putchar('\n');
printf("%4d
",
a[i]);
}
putchar('\n');
}
#define
N
1000
int
main()
{
int
a[N],
i;
srand(time(0));
for(i
=
0;
i
<
N;
++i)
a[i]
=
rand()
%
1001
+
1;
puts("整理前排列:");
Print(a,
N);
puts("递增排列:");
AsceSort(a,
a
+
N);
Print(a,
N);
puts("递减排列:");
DescSort(a,
a
+
N);
Print(a,
N);
return
0;
}
#include <stdioh>
#include <stdlibh>
int cmp(const void a,const void b)
{
return (int )a-(int )b;
}
int main(int argc,char argv)
{
int a[]={1,-2,53,49,144,65,267,98,112};
int i;
qsort(a,sizeof(a)/sizeof(int),sizeof(int),cmp);
for(i=0;i < sizeof(a)/sizeof(int);++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}
如果要自己实现排序函数的话
#include <stdioh>void qsort(int a,int left,int right)
{
int p=(left+right)/2; //以中间数作为主元
int k=a[p];
int i=left,j=right;
while(i < j)
{
//从左边开始将大于主元的数放在主元右边
while((i <= p) && (a[i] <= k))
++i;
if(i < p)
{
a[p]=a[i];
p=i;
}
//从右边开始将小于主元的数放在左边
while((j >= p) && (a[j] >= k))
--j;
if(j > p)
{
a[p]=a[j];
p=j;
}
}
a[p]=k;
//如果左边的数大于1个则递归左边
if(p-left > 1)
qsort(a,left,p-1);
//如果右边的数大于1个则递归右边
if(right-p > 1)
qsort(a,p+1,right);
}
int main(int argc,char argv)
{
int a[]={1,-2,53,49,144,65,267,98,112};
int i;
qsort(a,0,sizeof(a)/sizeof(int)-1);
for(i=0;i < sizeof(a)/sizeof(int);++i)
printf("%d ",a[i]);
printf("\n");
return 0;
}
我这里正好有这个!
但稍微不同,你只要改一下数字就好了!
一、 大奖赛现场统分
已知:某大奖赛有n个选手参赛,m(m>2)个评委为依次参赛的选手评判打分:最高10分,最低0分。统分规则为:每个选手所得的m个得分中,去掉一个最高分,去掉一个最低分,然后平均为该选手的最后得分。要求编程:
(1)根据n个选手的最后得分,从高到低排出名次表,以便确定获奖名单;
(2)根据各选手的最后得分与各评委给该选手所评分的差距,给各个评委评分的准确性一个定量的评价。
/
变量说明:
n:n个学生
m:m个评委
score[100][20]:最多可存20个评委对100位选手的打分
num[100]:保存选手序号
sum[100]:保存每位选手的平均分
ping[20]:保存对评委打分能力的指数 用它的评分减去各先手平均分之差的绝对值。
pingnum[20]:保存评委的序号
lower:保存最低分
/
#include<stdioh>
#include<mathh>
void main()
{
int i,j,n,m,sum[100],ping[20],pingnum[20],num[100],p=0;
int score[100][20],lower,temp=0;
printf("enter n m:");
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<m;i++) /对评委指数和评委序号进行初始化/
{
ping[i]=0;
pingnum[i]=i+1;
}
for(i=0;i<n;i++) /对选手序号进行初始化/
num[i]=i+1;
for(i=0;i<n;i++)
{
printf("enter player %d score:\n",i+1); /输入每位选手的m位评委的打分/
for(j=0;j<m;j++)
{
printf("\tenter ping wei %d score:",j+1);
scanf("%d",&score[i][j]);
if(lower>score[i][j])
{
lower=score[i][j]; /保存最低分/
}
sum[i]+=score[i][j]; /计算每位选手的总分/
}
sum[i]-=lower; /减去最低分/
sum[i]/=(m-1); /计算选手的平均得分/
for(j=0;j<m;j++)
{
ping[j]+=abs(score[i][j]-sum[i]);/保存评委的打分指数/
}
}
for(i=0;i<n;i++) /根据选手的平均分进行排序/
{p=i;
for(j=i+1;j<n;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=sum[p];
sum[p]=sum[i];
sum[i]=temp;
temp=num[p];
num[p]=num[i];
num[i]=temp;
}
}
for(i=0;i<m;i++) /根据评委打分指数对评委进行排序/
{p=i;
for(j=i+1;j<m;j++)
if(sum[p]<sum[j])
p=j;
if(p!=i)
{
temp=ping[p];
ping[p]=ping[i];
ping[i]=temp;
temp=pingnum[p];
pingnum[p]=pingnum[i];
pingnum[i]=temp;
}
}
printf("print player list:\n");
for(i=0;i<n;i++)
{
printf("%d %d\n",i+1,num[i]);
}
printf("\nprint ping wei list:\n");
for(i=0;i<m;i++)
{
printf("%d %d\n",i+1,pingnum[i]);
}
}
#include <stdioh>
void main()
{
int a[10];
int i,j,t;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{ /交换从这里开始/
t=a[i];
a[i]=a[j];
a[j]=t;}
} /交换到这里结束/
for(i=0;i<=9;i++)
printf("%d ",a[i]);
printf("\n");/下一次循环时换行/
}
也没有多大的错误
小心点,C是分语句执行的,到了“;”就是一条语句,除非你用“{}”,这样可以将几个语句合并为一条语句。可以简单这么理解。
void sort(int a[],int n)
{
int x,i,j,k;
int flag=0;
printf("请输入方法(1:straisort, 2:smp_selesort):");
scanf("%d",&flag);
switch(flag){
case 1:
for(i=1;i<n;i++)
{
x=a[i];
j=i-1;
while(j>=0&&x<a[j])
{
a[j+1]=a[j];j--;
}
a[j+1]=x;
}
return;
case 2:
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++){
if(a[j]<a[k])k=j;
}
if(i!=k)
{
x=a[i];
a[i]=a[k];
a[k]=x;
}
}
return;
}
}
main()
{
int b[10]={0, 5, 1, 4, 7, 0 ,44, 55 ,4, 10};int i;
sort(b,10);
for(i=0; i<10; i++){
printf("%2d ",b[i]);
}
}
运行结果:
请输入方法(1:straisort, 2:smp_selesort):1
0 0 1 4 4 5 7 10 44 55
Press any key to continue
#include <stdioh>
int main()
{int i,j,min,temp,a[11];
printf("enter data:\n");
for (i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
printf("The orginal numbers:\n");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
for (i=1;i<=9;i++)
{min=i;
for (j=i+1;j<=10;j++)
if (a[min]>a[j]) min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\nThe sorted numbers:\n");
for (i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
扩展资料:
scanf()用法:int scanf(charformat,[argument,]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘)读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
其调用格式为:scanf(“<格式化字符串>”,<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF;
其控制串由三类字符构成:
1、格式化说明符
2、空白符
3、非空白符
格式化说明符
附加格式说明字符表:
空白字符
空白字符会使scanf()函数在读 *** 作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
非空白字符
一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。
#include <stdioh>
int main()
{ char c[6]= {'c', 'a', 't', 'd', 'o', 'g'},t;
int i,j;
for (i=0; i<5; i++)
for (j=0; j<5-i; j++)
if(c[j]>c[j+1])
{ t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
for (i=0; i<6; i++)
printf("%c ", c[i]);
printf("\n");
return 0;
}
以上就是关于C语言程序编写三个数由大到小排序全部的内容,包括:C语言程序编写三个数由大到小排序、C语言编写关于排列的程序、在C语言中 编写一个程序实现从小到大排序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)