永发信息网

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

答案:2  悬赏:30  手机版
解决时间 2021-11-17 23:35
C语言程序,请你编写一个程序计算每个学生的平均成绩并按降序排序
最佳答案
你这个可以用链表来写,同类型我已经写过几次链表的,需要你可以去我回答记录里找。
这次,我不用链表,直接用2维数组,冒泡排序,那你参考吧。
原理:1、数组内存的连续性   2、利用指针冒泡排序

#include
#include
#include
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("
降序排列后的数据:

");
    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
","学生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
",*p++);
        }

    }
}
全部回答
有偿?追问呵呵呵,我已经会了追答呵呵
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
夸张不切实际的话表示什么词语
荣华印务部(清毕路)地址在哪,我要去那里办事
晟雅广告地址在什么地方,想过去办事,
北京五华通科技有限公司怎么样?
老是讲不清楚,说话也特别快.怎么办
四个横杠,八个竖杠,打一成语
Shader的编写到底应该是美术的事情还是程序的
10年期美债收益率破3%,为什么会给美联储以外
现在到底是鼠年还是猪年啊
巨人连锁网吧(乐逍遥店)地址在哪,我要去那里
形容女人漂亮的叠词
上海市青浦区到上海市闵行区万源路399号
TPLINK TL-R478+双WLAN口路由如何设置?办公
今晚电视剧桃花运几点播出哪个台?
健身教练这一行有前途吗
推荐资讯
炒西芹用不用水焯
请问在洗碗时有两只碗吸在一起,有什么办法可
我的眼泪划过蓝色的天空是哪首歌的歌词
(-x+3y)(-x-3y)
有朋友作dds理疗,跟我说很好我不知道是不是
大众朗行和朗逸有什么区别
请问er后加ed和ing该怎么念?
什么问题,怎么的回事,醉酒后手臂麻木
隆鼻六天后鼻翼还是很大正常吗
股市仍未见底,何时见底
世间最好的风水究竟在哪
如果你的闺蜜一直和你说你男朋友怎样不好 而
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?