c语言用函数总分排序 c语言成绩排序数组

用函数的调用编程:输入n个学生的m门成绩,并按总分由高到低将名字排序第一步:抽象出算法数据结构 。首先学生总数是n , 而每个学生拥有m个成绩,即对应一个n中的i,有m个数据与之对应 。因此可以得到结论,采用二维数组来储存n个学生m门成绩 。按照总分排序,即将每个i对应的m门成绩加起来进行排序即可 。
第二步:具体算法(c语言伪代码)
#include stdio.h
#include stdlib.h
#define MaxVertexNum 100
void order(int num[][],int n,in m)
{
int i,j;
for(i=0;in;i)
{
for(j=2;jm;j)
{
num[i][1]=num[i][1] num[i][j]
}
}
int temp;
for(i=0;in;i)
{
for(j=0;jn;j)
{
if(num[0][1]num[i][1])
{
num[0][1]= num[i][1];
}
}
}
}
int main(int argc, char *argv[])
{
int n,m,i,j;
printf("请输入学生的个数n和成绩门数m,用空格分开\n");
scanf("%d %d",n,m);
int scores[n-1][m];
//输入成绩
for(i=0;in;i){
printf("请输入第%d个学生的成绩:\n",i);
scores[i][0]=i;
for(j=1;jm;j)
{
scanf("%d",scores[i][j]);
}
}
//开始排序
system("PAUSE");
return 0;
}
要求用c语言编写,将总分排序(由高到低),并按总分从高到低输出成绩表#include "stdio.h"
#include "string.h"
struct student
{
int id;
char name[30];
char birth[30];
int score[3];
}stu[10];
void input(int num)//输入记录
{
for(int i=0;inum;i)
{
printf("开始输入第%d个学生记录\n",i 1);
printf("输入第%d个学生记录的学号:",i 1);
scanf("%d",stu[i].id);
printf("输入第%d个学生记录的姓名:",i 1);
scanf("%s",stu[i].name);
printf("输入第%d个学生记录的生日:",i 1);
scanf("%s",stu[i].birth);
printf("输入第%d个学生记录的第一门功课成绩:",i 1);
scanf("%d",stu[i].score[0]);
printf("输入第%d个学生记录的第二门功课成绩:",i 1);
scanf("%d",stu[i].score[1]);
printf("输入第%d个学生记录的第三门功课成绩:",i 1);
scanf("%d",stu[i].score[2]);
}
}
void output(int num)//输出记录
{
for(int i=0;inum;i)
{
printf("开始输出第%d个学生记录\n",i 1);
printf("id:%d\n",stu[i].id);
printf("name:%s\n",stu[i].name);
printf("birth:%s\n",stu[i].birth);
printf("score1:%d\n",stu[i].score[0]);
printf("score2:%d\n",stu[i].score[1]);
printf("score3:%d\n",stu[i].score[2]);
}
}
void meansore(int num)//求每门课程平均值
{
int i,j;
int mean[3];mean[0]=0;mean[1]=0;mean[2]=0;
for(i=0;inum;i)
{
for(j=0;j3;j)
{
mean[j] =stu[i].score[j];
}
}
for(i=0;i3;i)
{
printf("第%d门功课的平均成绩:%.2f\n",i 1,mean[i]*1.0/num);
}
}
void sortmean(int num)//按学生平均分由小到大排序
{
student temp;
【c语言用函数总分排序 c语言成绩排序数组】int i,j;
int maxt,index;
for(i=0;inum-1;i)
{
index=i;
maxt=stu[i].score[0] stu[i].score[1] stu[i].score[2];
for(j=i 1;jnum;j)
{
if(stu[j].score[0] stu[j].score[1] stu[j].score[2]maxt)
{
maxt=stu[j].score[0] stu[j].score[1] stu[j].score[2];
index=j;
}
}
temp=stu[i];
stu[i]=stu[index];
stu[index]=temp;
}
}
void printfail(int num)//打印不及格
{
int i,j;
int no=0;
for(i=0;inum;i)
{
for(j=0;j3;j)
{
if(stu[i].score[j]60)
{
no;
printf("输出第%d个不及格学生记录\n",no);
printf("id:%d\n",stu[i].id);
printf("name:%s\n",stu[i].name);
printf("birth:%s\n",stu[i].birth);
printf("score1:%d\n",stu[i].score[0]);
printf("score2:%d\n",stu[i].score[1]);
printf("score3:%d\n",stu[i].score[2]);
break;
}
}
}
if(no==0)
{
printf("没有不及格的学生\n");
}
}
void sortage(int num)//按年龄排序
{
student temp;
int i,j;
int index;
char birthtemp[30];
for(i=0;inum-1;i)
{
index=i;
strcpy(birthtemp,stu[i].birth);
for(j=i 1;jnum;j)
{
if(strcmp(birthtemp,stu[j].birth)0)
{
strcpy(birthtemp,stu[j].birth);
index=j;
}
}
temp=stu[i];
stu[i]=stu[index];
stu[index]=temp;
}
}
int main()
{
int n=2;//指定要输入的学生记录数目 这取2个为例
input(2);
output(2);
meansore(2);
printfail(2);
sortmean(2);
output(2);
sortage(2);
output(2);
return 0;
}
我机器上是可以运行的 。
C语言如何把已经录入的学生各科成绩的总成绩计算出并调用去排序?要看你数据类型,用冒泡排序思路循环比较总分 , 交换对应各科成绩:
一、比如,一个学生的各科成绩用数组保存 , 那么,n个学生就是二维数组 。总分再定义一个一维数组用行下标将两者对应 。冒泡排序时比较总分,需交换时 , 两个数组分别同时交换(行下标一样) 。
二、这种多属性表示一个对象,定义成结构体更好 , 各科成绩和总分都定义成学生结构体的成员变量,还可根据需求增加姓名年龄等属性 。n个学生就是结构数组 , 排序的时候要用总分这个成员变量来比较,交换直接用结构变量相交换 。
三、对第二点升级做法 , 当学生人数很多且经常增删,且人数不定,那么把结构数组改成结构链表就更方便 。排序时,保留结构指针的值,交换其余成员变量 。
c语言怎么用自定义函数排序#include stdio.h
#include string.h#define NUM 3
struct student
{
char name[20];/*姓名*/
long num;/*12位学号*/
double sum;/*总分*/
};
void Create_Students(struct student stu[NUM])
{
struct student *p;
printf("请输入学生姓名 学号(12位) 总分:\n");
for( p = stu; p stu NUM; p)
{
scanf("%s %d %lf",p-name,p-num,p-sum); }
}
void Order_Students(struct student stu[NUM])//起泡法
{
int i,j;
struct student temp;
for(i=NUM-1;i=0;i--)
for(j=0;ji;j)
if(stu[j].sumstu[j 1].sum)
{
temp = stu[j];
stu[j] = stu[j 1];
stu[j 1]=temp;
}
}
void main()
{
int i=1;
struct student *p;
struct student stu[NUM];
Create_Students(stu);
Order_Students(stu);
printf("%-20s %-13s %-6s %4s\n","姓名","学号(12位)","总成绩","名次");
for(p=stu;pstu NUM;p,i)
{
printf("%-20s %-13.0d %-8.2f -\n",p-name,p-num,p-sum,i);
}
}//你参考参考,嘿
c语言用函数总分排序的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于c语言成绩排序数组、c语言用函数总分排序的信息别忘了在本站进行查找喔 。

    推荐阅读