zoukankan      html  css  js  c++  java
  • 网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合_1学生成绩简单统计

    1

    (10分)

    学生成绩简单统计。

    写一个程序,读入10名学生的成绩。每个学生的数据,包含一个不带空格的名字(不超过19个字符),以及三门课的成绩,每门课的成绩是1到5的整数。程序要输出如下的一个列表,对每个学生输出他的录入时的序号、名字、三门课的成绩和平均成绩(浮点表示),最后输出每门课的平均成绩(浮点表示)和最低最高成绩。

     
     1 no      name    score1  score2  score3  average
     2 1       K.Weng  5       5       5       5
     3 2       T.Dixon 4       3       2       3
     4 3       V.Chu   3       4       5       4
     5 4       L.Tson  4       3       4       3.66667
     6 5       L.Lee   3       4       3       3.33333
     7 6       I.Young 4       2       5       3.66667
     8 7       K.Hiro  4       2       1       2.33333
     9 8       G.Ping  4       4       4       4
    10 9       H.Gu    2       3       4       3
    11 10      J.Jon   5       4       3       4
    12         average 3.8     3.4     3.6
    13         min     2       2       1
    14         max     5       5       5

    因为排版的缘故,你看到的表格也许不够整齐,输出时在所有的输出项之间加 就可以了。输出格式不是评判的内容。

    程序本身并不复杂,只是要求采用结构来表达每个学生的数据,并具有以下代码片段(你的代码中必须含有并使用以下部分):

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

     

    网易云课堂_C语言程序设计进阶_第三周:结构:结构、类型定义、联合_1学生成绩简单统计

      1 #define _CRT_SECURE_NO_WARNINGS
      2 
      3 #include <stdio.h>
      4 
      5 typedef struct {
      6     char name[20];
      7     int score[3];
      8 } Student;
      9 
     10 //    输入一个学生的数据
     11 Student* student_input(Student *pStudent);
     12 //    输出一个学生的数据,包括平均成绩
     13 void student_print(const Student *pStudent);
     14 //    计算一个学生的平均成绩
     15 double student_average(const Student *pStudent);
     16 //    获得学生的一个成绩
     17 int student_get_score(const Student *pStudent, int index);
     18 
     19 void count_avg(const Student *pStudent, double average[]);//每门课的平均成绩
     20 
     21 void searchmin(const Student *pStudent, int min[]);//每门课的最低成绩
     22 
     23 void searchmax(const Student *pStudent, int max[]);//每门课的最高成绩
     24 
     25 main()
     26 {
     27     Student student1[10];//创建结构数组
     28     Student *pStudent = &student1;//创建指针,指向结构数组
     29     Student *pStudent_bak = &student1;//创建指针副本,保存首地址
     30     int i;//循环下标
     31     double average[3] = { 0 };//每门课的平均成绩数组
     32     int min[3] = { 0 };//每门课的最低成绩数组
     33     int max[3] = { 0 };//每门课的最高成绩数组
     34 
     35     for (i = 0; i < 10; i++)
     36     {
     37         student_input(pStudent);//    输入一个学生的数据
     38         pStudent++;//指针移动
     39     }
     40     pStudent = pStudent_bak;//恢复指针
     41 
     42     printf("%s	%s	%s	%s	%s	%s
    ", "no", "name", "score1", "score2", "score3", "average");//格式
     43     for (i = 0; i < 10; i++)
     44     {
     45         printf("%d	", i + 1);//输出序号+1
     46         student_print(pStudent);//    输出一个学生的数据,包括平均成绩
     47         pStudent++;//指针移动
     48         printf("
    ");
     49     }
     50     pStudent = pStudent_bak;//恢复指针
     51 
     52     count_avg(pStudent, average);//每门课的平均成绩
     53     printf("	%s	", "average");//格式
     54     for (i = 0; i < 3; i++)//输出平均值
     55     {
     56         printf("%g	", average[i]);
     57     }
     58     printf("
    ");//换行
     59     pStudent = pStudent_bak;//恢复指针
     60 
     61     searchmin(pStudent, min);//每门课的最低成绩
     62     printf("	%s	", "min");//格式
     63     for (i = 0; i < 3; i++)//输出每门课的最低成绩
     64     {
     65         printf("%d	", min[i]);
     66     }
     67     printf("
    ");//换行
     68     pStudent = pStudent_bak;//恢复指针
     69 
     70     searchmax(pStudent, max);//每门课的最高成绩
     71     printf("	%s	", "max");//格式
     72     for (i = 0; i < 3; i++)//输出每门课的最高成绩
     73     {
     74         printf("%d	", max[i]);
     75     }
     76     printf("
    ");//换行
     77     pStudent = pStudent_bak;//恢复指针
     78 }
     79 
     80 //    输入一个学生的数据
     81 Student* student_input(Student *pStudent)
     82 {
     83     int i;//循环下标
     84 
     85     scanf("%s", pStudent->name);//输入名字
     86 
     87     for (i = 0; i < 3; i++)
     88     {
     89         scanf("%d", &pStudent->score[i]);//输入三门课的成绩
     90     }
     91 
     92     return pStudent;
     93 }
     94 
     95 //    输出一个学生的数据,包括平均成绩
     96 void student_print(const Student *pStudent)
     97 {
     98     int i;//循环下标
     99 
    100     printf("%s	", pStudent->name);//输出名字
    101 
    102     for (i = 0; i < 3; i++)
    103     {
    104         printf("%d	", student_get_score(pStudent, i));//输出成绩
    105     }
    106 
    107     printf("%g", student_average(pStudent));//输出平均成绩
    108 }
    109 
    110 //    计算一个学生的平均成绩
    111 double student_average(const Student *pStudent)
    112 {
    113     int i;//循环下标
    114     double average = 0;//平均成绩
    115 
    116     for (i = 0; i < 3; i++)
    117     {
    118         average += 1.0*student_get_score(pStudent, i) / 3;
    119     }
    120 
    121     return average;
    122 }
    123 
    124 //    获得学生的一个成绩
    125 int student_get_score(const Student *pStudent, int index)
    126 {
    127     return pStudent->score[index];
    128 }
    129 
    130 void count_avg(const Student *pStudent, double average[])//每门课的平均成绩
    131 {
    132     int i, j;//循环下标
    133     Student *pStudent_bak = pStudent;//创建指针副本,保存首地址
    134 
    135     for (i = 0; i < 3; i++)//外循环,三门课
    136     {
    137         for (j = 0; j < 10; j++)//内循环,10个人
    138         {
    139             average[i] += 1.0*student_get_score(pStudent, i) / 10;
    140             pStudent++;//指针移动
    141         }
    142 
    143         pStudent = pStudent_bak;//恢复指针,指向结构首地址,继续循环
    144     }
    145 }
    146 
    147 void searchmin(const Student *pStudent, int min[])//每门课的最低成绩
    148 {
    149     int i, j;//循环下标
    150     Student *pStudent_bak = pStudent;//创建指针副本,保存首地址
    151     
    152     for (i = 0; i < 3; i++)//外循环,三门课
    153     {
    154         min[i] = student_get_score(pStudent, i);//假设第0个人的该门成绩为最小值
    155 
    156         for (j = 1; j < 10; j++)//内循环,10个人
    157         {
    158             if (student_get_score(pStudent, i) < min[i])//如果找到比最小值还小的值
    159             {
    160                 min[i] = student_get_score(pStudent, i);
    161             }
    162             pStudent++;//指针移动
    163         }
    164 
    165         pStudent = pStudent_bak;//恢复指针,指向结构首地址,继续循环
    166     }
    167 }
    168 
    169 void searchmax(const Student *pStudent, int max[])//每门课的最高成绩
    170 {
    171     int i, j;//循环下标
    172     Student *pStudent_bak = pStudent;//创建指针副本,保存首地址
    173 
    174     for (i = 0; i < 3; i++)//外循环,三门课
    175     {
    176         max[i] = student_get_score(pStudent, i);//假设第0个人的该门成绩为最大值
    177 
    178         for (j = 1; j < 10; j++)//内循环,10个人
    179         {
    180             if (student_get_score(pStudent, i) > max[i])//如果找到比最大值还大的值
    181             {
    182                 max[i] = student_get_score(pStudent, i);
    183             }
    184             pStudent++;//指针移动
    185         }
    186 
    187         pStudent = pStudent_bak;//恢复指针,指向结构首地址,继续循环
    188     }
    189 }
  • 相关阅读:
    web前段学习2017.6.15
    web前段学习2017.6.13
    web前端2017.6.10
    web前段2017.6.8
    web前段学习2016.6.6
    宏任务与微任务
    浏览器兼容性问题
    TCP 和 UDP 的区别
    React如何渲染大数据量的列表?
    移动端兼容性问题
  • 原文地址:https://www.cnblogs.com/denggelin/p/5584187.html
Copyright © 2011-2022 走看看