如何用C语言编写一个排序程序

如何用C语言编写一个排序程序,第1张

楼上的用的是C++

若单纯的用C那就是这样

#include<stdio.h>

#define

print

"NO.%d

%d

%d

%d

%d

%3.2f

%3.2f\n",1+i,stu[i].num,stu[i].mat,stu[i].ENG,stu[i].com,stu[i].aver,stu[i].total//宏定义节约时间

struct

student

{

int

num

int

mat

int

ENG

int

com

float

aver

float

total

}stu[10]//定义结构体变量

void

main()

{

int

i

void

take_turn_print(struct

student

stu1[10])

float

sum(int

x,int

y,int

z)//声明求和函数

for(i=0i<10i++)

scanf("%d%d%d%d",&stu[i].num,&stu[i].mat,&stu[i].ENG,&stu[i].com)

for(i=0i<10i++)

{

stu[i].total=sum(stu[i].mat,stu[i].ENG,stu[i].com)//调用求和函数

stu[i].aver=stu[i].total/3

}

take_turn_print(stu)//调用排序

打印函数

}

void

take_turn_print(struct

student

stu1[10])

{

void

change(int

*x,int

*y)//声明换位函数

void

change1(float

*x,float

*y)//声明换位函数

int

i,j

for(j=0j<9j++)//冒泡排序

为理解简单

就没用别的排序方法

哈哈

{

for(i=0i<9-ji++)

{

if(stu1[i].aver<stu1[i+1].aver)

{

change(&stu1[i].num,&stu1[i+1].num)//

值交换

change(&stu1[i].mat,&stu1[i+1].mat)//

值交换

change(&stu1[i].ENG,&stu1[i+1].ENG)//

值交清埋换

change(&stu1[i].com,&stu1[i+1].com)//

值交换棚正辩

change1(&stu1[i].aver,&stu1[i+1].aver)//

值交换

change1(&stu1[i].total,&stu1[i+1].total)//

值交换

}

}

}

for(i=0i<10i++)

printf(print)//打印

}

void

change(int

*x,int

*y)

{

int

i

i=*x

*x=*y

*y=i//利用指针做变量链缺替换

}

void

change1(float

*x,float

*y)

{

float

i

i=*x

*x=*y

*y=i//利用指针做变量替换

}

float

sum(int

x,int

y,int

z)

{

float

i

i=(float)(x+y+z)

return(i)

}

前几天也是帮同学做这样的题

一模一样

看来你也是WH大学的

#include <stdio.h>

void main()

{

int a[10]

int i,j,t

for(i=0i<=9i++)

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

for(i=0i<9i++)

for(j=i+1j<10j++)

{

if(a[i]>a[j])

{ /*交换庆仿从这里开始*/

t=a[i]

a[i]=a[j]

a[j]=t}

} /*交换到这里结束*/

for(i=0i<=9i++)

printf("%d ",a[i])

printf("\n")/*下一次循环时换行*/

}

也雹差闷没有多大源弯的错误

小心点,C是分语句执行的,到了“;”就是一条语句,除非你用“{}”,这样可以将几个语句合并为一条语句。可以简单这么理解。

程序如下: #include<stdio.h>

void main()

{

float student[100][7]

//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,

//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名

int n,i,j,k,p,t,count,flag

int a[100],b[100],c[100]

//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据

printf("输入学生的个数:\n")

scanf("%d",&n)

for(i=0i<=n-1i++)

{

printf("输入第%d个学生的学号:",i+1)

scanf("%f",&student[i][0])

for(j=0,student[i][5]=0j<=3j++)

{

printf("输入第%d个学生的第%d门成绩:",i+1,j+1)

scanf("%f",&student[i][j+1])

student[i][5]+=student[i][j+1] //计算总分

}

b[i]=student[i][5] //把总分再赋给b[]数组,以后排序用

student[i][6]=student[i][5]/4//计算平均分

}

for(i=0i<=n-2i++)//对数组b[](即总分)进行排序

for(j=0j<=n-2-ij++)

{

if(b[j]<b[j+1])

{

t=b[j]

b[j]=b[j+1]

b[j+1]=t

}

}

for(i=0,k=0i<=n-1i++)//用数组a[]取得排序后总分的下标

{

for(j=0,flag=0j<=n-1j++)

{

if(b[i]==student[j][5])

{

if(0==k) //如果数组a[]中有零个元素,就把j直答凳衫接赋给a[]

{

a[k]=j

k++

flag=1

}

else //如清腔果数组a[]中有元素了,则判断

{

for(p=0p<=k-1p++)

if(a[p]!=j)

{

a[k]=j

k++

flag=1

break

}

}

}

if(1==flag)

break

}

}

for(count=1,i=0i<=n-1i++) //对c[](排名)进行处理

{

if(b[i]==b[i+1])

{

c[i]=count

}

else

if(b[i]>b[i+1])

{

c[i]=count

count++

}

}

printf("\n以下是统计结果:\n")

printf("学号粗旁 s[1]s[2]s[3]s[4] 总分 平均分排名\n")

for(i=0i<=n-1i++)

{

printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i])

}

} 有疑问提出


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12560573.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存