使用“结构”统计学生成绩

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/46555033 设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出 学生信息的函数。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/46555033

设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出
学生信息的函数。在输入一组学生信息后,以学生成绩的总分从高
到低顺序输出学生信息。

这个相对来说比较简单,可以创建一个学生的结构体,结构体里面有三个成员:学号,姓名和五门功课的成绩。下面请看一下我的整体代码。这个思路也比较简单,主要是为了练习使用结构体。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 200
#define SCORES 5
#define NUMLEN 10

/**
 * 设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出
 * 学生信息的函数。在输入一组学生信息后,以学生成绩的总分从高
 * 到低顺序输出学生信息。
 */

struct student{
    char number[NUMLEN]; /* 学号 */
    char *name; /* 学生姓名 */
    int scores[SCORES]; /* 学生五门功课的成绩 */
};

struct student stus[N];
int order[N];
int total[N];

int readstu(struct student *stu){
    int len,j;
    char buf[120]; //缓冲区

    printf("Number    : ");
    if(scanf("%s",buf) == 1){
        strncpy(stu->number,buf,NUMLEN-1);
    }else{
        return 0; //ctrl+z退出
    }

    printf("Name    : ");
    if(scanf("%s",buf) == 1){
        len = strlen(buf);
        stu->name = (char *)malloc(len+1);
        strcpy(stu->name,buf);
    }else{
        return 0;
    }

    printf("Scores    : ");
    for(j = 0;j < SCORES;j++)
        if(scanf("%d",stu->scores+j) != 1)
            break;

        if(j == 0){  //一个成绩也没有录入,清空name所占有的内存
            free(stu->name);
            return 0;
        }

        for(;j<SCORES;j++)
            stu->scores[j] = 0;

    return 1;
}

/* 输出学生信息 */
void writeStu(struct student *stu){
    int i;

    printf("Number    : %s\n",stu->number);
    printf("Name    : %s\n",stu->name);

    printf("Scores    : ");
    for(i = 0;i < SCORES;i++)
        printf("%4d ",stu->scores[i]);
    printf("\n\n");
}


int main()
{
    int n,i,j,t;

    //获取学生信息
    for(n = 0; readstu(stus+n); n++);

    for(i = 0;i < n;i++){
        order[i] = i;

        for(t = 0,j = 0;j < SCORES;j++){
            t += stus[i].scores[j];
        }

        total[i] = t;
    }

    //冒泡排序输出
    for(i = 0;i < n;i++){
        for(j = 0;j < n-1;j++){
            if(total[order[j]] < total[order[j+1]]){
                //交换
                t = order[j];
                order[j] = order[j+1];
                order[j+1] = t;
            }
        }
    }

    for(j = 0;j <n;j++){
        writeStu(stus+order[j]);
    }

    return 0;
}

下面是我的输出的结果:

这里写图片描述

目录
相关文章
|
29天前
|
索引 Python
Excel学习笔记(一):python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩
这篇文章是关于如何使用Python读取Excel文件中的学生成绩数据,并进行计算平均成绩、成绩等级划分、统计分数大于70的次数以及找出最优成绩等操作的教程。
53 0
|
30天前
|
C++
【九度 02】N个学生数据成绩排序
【九度 02】N个学生数据成绩排序
16 0
|
1月前
有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据【姓名,学号,3门课成绩】,计算平均成绩,将原有 数据和计算的平均分数存放磁盘文件stud.dat中
有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据【姓名,学号,3门课成绩】,计算平均成绩,将原有 数据和计算的平均分数存放磁盘文件stud.dat中
61 0
|
5月前
1038 统计同成绩学生 (20 分)
1038 统计同成绩学生 (20 分)
|
C++
成绩统计
小蓝给学生们组织了一场考试,卷面总分为100分,每个学生的得分都是一个0到100的整数。如果得分至少是60分,则称为及格。
83 0
|
12月前
某学科成绩的录入并显示出最高分,最低分,平均值。
某学科成绩的录入并显示出最高分,最低分,平均值。
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
成绩排序 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。
610 0
|
C语言
输入学生成绩转化为等级
用C语言编写。输入学生成绩转化为等级。
313 0
定义数组,存放5个学生的成绩(成绩值自己设定),将成绩从大到小排序,计算并显示输出成绩总和,平均成绩,最小成绩,最大成绩。
定义数组,存放5个学生的成绩(成绩值自己设定),将成绩从大到小排序,计算并显示输出成绩总和,平均成绩,最小成绩,最大成绩。
430 0