C语言结构学习-学生成绩简单统计

/*本次作业对于我还是很有难度的,经过不断失败、尝试,总算通过了。由于自己的不算规范,以下标出自己的环境:
Linux 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
stustruct.c: In function ‘student_input’:
stustruct.c:57:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[20]’ [-Wformat=]
  scanf("%s", &pStudent->name);
  ^
stustruct.c: In function ‘student_get_score’:
stustruct.c:82:2: warning: writing into constant object (argument 2) [-Wformat=]
  scanf("%d", &pStudent->score[index]);
  ^
 K.Weng 5 5 5
T.Dixon 4 3 2
V.Chu 3 4 5
L.Tson 4 3 4 
L.Lee 3 4 3
I.Young 4 2 5
K.Hiro 4 2 1
G.Ping 4 4 4
H.Gu 2 3 4
J.Jon 5 4 3
数据保存为studata文件一次输入。
*/
#include <stdio.h>

typedef struct {
    char name[20];
    int score[3];
    } Student;
   
//    输入一个学生的数据
Student* student_input(Student *pStudent);
//    输出一个学生的数据,包括平均成绩
void student_print(const Student *pStudent);
//    计算一个学生的平均成绩
double student_average(const Student *pStudent);    
//    获得学生的一个成绩
int student_get_score(const Student *pStudent, int index);

int main(int argc, char const *argv[])
{
    double avgs[3],sum[3];
    int min[3], max[3];
    int i,j;
    Student St[10];
    for(i=0;i<10;i++){
    //printf("Input a Student data:");    
        student_input(&St[i]);
        for(j=0;j<3;j++){
            St[i].score[j]=student_get_score(&St[i], j);
        }
    }
    printf("no\tname\t\tscore1\tscore2\tscore3\taverage\n");
    for(i=0;i<10;i++){
        printf("%d\t", i+1);
        student_print(&St[i]);
    }
    
    for(j=0;j<3;j++){
        sum[j]=min[j]=max[j]=St[0].score[j];
        for(i=1;i<10;i++){
            if(St[i].score[j]<min[j]){
                min[j]=St[i].score[j];
            } else if(St[i].score[j]>max[j]){
                max[j]=St[i].score[j];
            }    
            sum[j] +=St[i].score[j];    
        }
        avgs[j]=sum[j]/10;
    
    }
    printf("  \taverage\t\t%.1f\t%.1f\t%.1f\n", avgs[0], avgs[1], avgs[2]);
    printf("  \tmin\t\t%d\t%d\t%d\n", min[0], min[1], min[2]);
    printf("  \tmax\t\t%d\t%d\t%d\n", max[0], max[1], max[2]);
    return 0;    
}

Student* student_input(Student *pStudent) {
    scanf("%s", &pStudent->name);
    return pStudent;
}

void student_print(const Student *pStudent) {
    int j;
    double avg;
    printf("%s\t", pStudent->name);
    for(j=0;j<3;j++){
        printf("\t%d", pStudent->score[j]);    
        avg=student_average(pStudent);
    }
    printf("\t%.5lg\n", avg);
}

double student_average(const Student *pStudent) {
    double sum=0;
    int i;
    for(i=0;i<3;i++){
        sum += pStudent->score[i];
    }
    return sum/3;
}   

int student_get_score(const Student *pStudent, int index) {
    scanf("%d", &pStudent->score[index]);
    return pStudent->score[index];
}
/*
./stustruct <studata 
no    name        score1    score2    score3    average
1    K.Weng        5    5    5    5
2    T.Dixon        4    3    2    3
3    V.Chu        3    4    5    4
4    L.Tson        4    3    4    3.6667
5    L.Lee        3    4    3    3.3333
6    I.Young        4    2    5    3.6667
7    K.Hiro        4    2    1    2.3333
8    G.Ping        4    4    4    4
9    H.Gu        2    3    4    3
10    J.Jon        5    4    3    4
      average        3.8    3.4    3.6
      min        2    2    1
      max        5    5    5
*/
时间: 2024-11-08 23:07:59

C语言结构学习-学生成绩简单统计的相关文章

C语言文件实现学生成绩管理

C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文件,然后将数据读入内存,再允许用户的操作. 程序简示图 功能介绍 1. 加密数据: 程序结束时,现将生成的链表,写入二进制的临时文Temp.dat,再运用加密函数,将Temp.dat加密到文件Data.dat(就相当于数据库),并删除文件Temp.dat.程序开始运行时,先获取文件Data.dat的

C语言实现---学生成绩管理系统

C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct person //定义结构体 { char num[10]; //学号 char name[20]; //姓名 float cyuyan; //C语言成绩 float en; //物理学成绩 float ji; //原子物理成绩

C语言结构体训练

结构体大小和内存结构 1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 //结构体需要根据数据类型进行内存对齐 7 //struct stus 8 //{ 9 // char name[20];//20 10 // unsigned int age;//4 11 // char tel[15];//15 12 // cha

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

设学生信息包括学号,姓名和五门功课的成绩,要求编写输入输出 学生信息的函数.在输入一组学生信息后,以学生成绩的总分从高 到低顺序输出学生信息. 这个相对来说比较简单,可以创建一个学生的结构体,结构体里面有三个成员:学号,姓名和五门功课的成绩.下面请看一下我的整体代码.这个思路也比较简单,主要是为了练习使用结构体. #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 200 #defin

学生成绩管理程序(C语言dos程序)

在昨天写的一个血生成绩管理程序 给大家分享一下 本程序仅供学习交流 代码如下: 1 /*本程序为简单的学生信息管理系统,作为技术交流,并不作为其它用途*/ 2 #include<stdio.h> 3 #include<string.h> 4 5 void rank1(float b[]); 6 int count = 1; 7 //结构体 8 struct student 9 { 10 char name[10]; //学生的姓名 11 char subject[10]; //学生

【学生成绩管理系统】 大二c语言作业

几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值... #include <cstdio> #include <conio.h> #include <iostream> #include <process.h> #include <stdlib.h> #include <algorithm> #include <cstring> #include <cmath> #define N 5 con

[项目记录] 用c语言完成的一个学生成绩管理系统

一.要求: 学生成绩管理系统 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).使用链表编程实现如下菜单驱动的学生成绩管理系统. 从文件读入每个学生个人信息和成绩信息,可以由键盘输入文件名.读入成功提示读入学生记录的个数,不成功提示相应出错信息. 增量式手动录入每个学生的学号.姓名和各科考试成绩.不考虑中文姓名,但需要考虑重名情况下的处理,学生的学号是唯一的. 计算每门课程的总分和平均分: 计算每个学生的总分和平均分: 按每个学生的总分由高到低排出名

《C语言编写 学生成绩管理系统》

/* (程序头部凝视開始)* 程序的版权和版本号声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名: 学生成绩管理系统 * 作 者: 刘江波 * 完毕日期: 2012 年 6 月 23 日* 版 本 号: v.623 * 对任务及求解方法的描写叙述部分 * 程序头部的凝视结束 */ #include "stdio.h" #include"string" /*定义学生结构体*/ struc

学生成绩管理C语言版

[标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数据和5组有问题的数据,查看程序能否运行正确 [测试结果]基本功能运行正确,异常输入无法处理(关于性能对比测试,查看C++版:http://www.cnblogs.com/forerve/p/3908716.html) [详细设计] 1 #include<stdio.h> 2 #include<