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

设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出

学生信息的函数。在输入一组学生信息后,以学生成绩的总分从高

到低顺序输出学生信息。

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

#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;
}

下面是我的输出的结果:

时间: 2024-10-10 17:17:06

使用“结构”统计学生成绩的相关文章

班主任好帮手之统计学生成绩

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

scala统计学生成绩

scala统计学生成绩 学生的成绩清单格式如下所示,第一行为表头,各字段意思分别为学号.性别.课程名 1.课程名 2 等,后面每一行代表一个学生的信息,各字段之间用空白符隔开 Id gender Math English Physics 301610 male 80 64 78 301611 female 65 87 58 ... 给定任何一个如上格式的清单(不同清单里课程数量可能不一样),要求尽可能采用函 数式编程,统计出各门课程的平均成绩,最低成绩,和最高成绩:另外还需按男女同学分开, 分别

Hadoop MapReduce编程 API入门系列之统计学生成绩版本1(十七)

不多说,直接上代码. 代码 package zhouls.bigdata.myMapReduce.ScoreCount; import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FSDataInputStream;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;

分支-17. 统计学生成绩(15)

本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布.百分制成绩到五分制成绩的转换规则: 大于等于90分为A: 小于90且大于等于80为B: 小于80且大于等于70为C: 小于70且大于等于60为D: 小于60为E. 输入格式: 输入在第1行中给出1个正整数N(<=1000),即学生人数:第2行中给出N个学生的百分制成绩,其间以空格分隔. 输出格式: 在一行中输出A.B.C.D.E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格. 输入样例: 7 77 54 92 73

实验3-7 统计学生成绩 (15分)

本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布.百分制成绩到五分制成绩的转换规则: 大于等于90分为A: 小于90且大于等于80为B: 小于80且大于等于70为C: 小于70且大于等于60为D: 小于60为E. 输入格式: 输入在第一行中给出一个正整数N(≤1000),即学生人数:第二行中给出N个学生的百分制成绩,其间以空格分隔. 输出格式: 在一行中输出A.B.C.D.E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格. 输入样例: 7 77 54 92 73

Hadoop MapReduce编程 API入门系列之统计学生成绩版本2(十八)

不多说,直接上代码. 统计出每个年龄段的 男.女 学生的最高分 这里,为了空格符的差错,直接,我们有时候,像如下这样的来排数据. 代码 package zhouls.bigdata.myMapReduce.Gender; import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.conf.Configured;import org.apache.hadoop.fs

算法题:统计学生成绩

题目描述 本题要求读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入描述: 输入在第1行给出不超过105的正整数N,即学生总人数.随后1行给出N名学生的百分制整数成绩,中间以空格分隔.最后1行给出要查询的分 数个数K(不超过N的正整数),随后是K个分数,中间以空格分隔. 输出描述: 在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格. 输入例子: 10 60 75 90 55 75 99 82 90 75 50 3 75 90 88 输出例子: 3

按等级统计学生成绩

https://pintia.cn/problem-sets/12/problems/349 1 int set_grade(struct student *p, int n) 2 { 3 int i, count; 4 5 count = 0; 6 for (i = 0; i < n; i++) 7 { 8 if ((p + i)->score >= 85) 9 { 10 (p + i)->grade = 'A'; 11 } 12 else if ((p + i)->sco

学生成绩的排名

package com.paixu; public class Student { String name; int score; public Student(String name, int score) { super(); this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name;