C语言程序,请你编写一个程序计算每个学生的平均成绩并按降序排序

C语言程序,请你编写一个程序计算每个学生的平均成绩并按降序排序已知有50名同学考了4门课程,要求求出每个人的平均成绩,并且将平均成绩按降序输出。那位大佬帮忙看看,要详细的程序。

你这个可以用链表来写,同类型我已经写过几次链表的,需要你可以去我回答记录里找。

这次,我不用链表,直接用2维数组,冒泡排序,那你参考吧。

原理:1、数组内存的连续性   2、利用指针冒泡排序

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void prStu(float *stu);//打印学生成绩  参数:数组首地址
void jx(float *p);//降序排列
int main()
{
    float stu[50][6],*p=&stu[0][0],num[4]; //stu:50学生信息 1列为学生编号 2~5列为4科成绩 6列为平均分
    int i=0,count=0;
//--这段我是用随机数做50个学生的成绩,我懒得录入200个成绩!!,你要手输,就把这段随机数改成输入函数---
    srand(time(NULL));
    while(i++<300)
    {
        count++;
        if(count==1)//学生编号存储
            *p++=(float)i/6+1;
        if(count>1 && count<6)//随机2位数作为4科成绩
            *p++=(float)(rand()%100);
        if(count==6)
        {
            count=0;
            num[0]=*(p-1);
            num[1]=*(p-2);
            num[2]=*(p-3);
            num[3]=*(p-4);
            *p++=(num[0]+num[1]+num[2]+num[3])/4;//4科平均分
        }
    }

//------------------------------------------------------------
    prStu(&stu[0][0]);
    jx(&stu[0][0]);
    printf("\n降序排列后的数据:\n\n");
    prStu(&stu[0][0]);
    return 0;
}
void jx(float *p)//降序排列
{
    int count1=0,count2;
    float *p1=NULL,*p2=NULL,id,num[4],pj;
    while(count1++<49)
    {
        p1=p+5;//p1 p2 在迭代中分别指向前后两个学生的平均分
        p2=p1+6;
        count2=count1-1;
        while(count2++<49)
        {

            if(*p1<*p2)//冒泡排序
            {
                id=*(p1-5);
                *(p1-5)=*(p2-5);
                *(p2-5)=id;
                num[0]=*(p1-4);
                num[1]=*(p1-3);
                num[2]=*(p1-2);
                num[3]=*(p1-1);
                *(p1-4)=*(p2-4);
                *(p1-3)=*(p2-3);
                *(p1-2)=*(p2-2);
                *(p1-1)=*(p2-1);
                *(p2-4)=num[0];
                *(p2-3)=num[1];
                *(p2-2)=num[2];
                *(p2-1)=num[3];
                pj=*p1;
                *p1=*p2;
                *p2=pj;
            }
            p2+=6;
        }
        p+=6;
    }
}
void prStu(float *p)//打印学生成绩  参数:数组首地址
{
    int count=0,i=0;
    printf("%19s%16s%6s%6s%6s%8s\n","学生sID","数学","语文","外语","物理","平均分");
    while(i++<300)
    {

        count++;
        if(count==1)
             printf("编号%02d的学生4科成绩及平均分为: ",(int)*p++);
        if(count>1 && count<6)
            printf(" %02d   ",(int)*p++);
        if(count==6)
        {
            count=0;
            printf(" %.2f\n",*p++);
        }

    }
}

温馨提示:答案为网友推荐,仅供参考
相似回答