网易云课堂_C语言程序设计进阶_第三周:结构:结构类型定义联合_1学生成绩简单统计
Posted 邓戈麟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易云课堂_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
因为排版的缘故,你看到的表格也许不够整齐,输出时在所有的输出项之间加\t就可以了。输出格式不是评判的内容。
程序本身并不复杂,只是要求采用结构来表达每个学生的数据,并具有以下代码片段(你的代码中必须含有并使用以下部分):
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\t%s\t%s\t%s\t%s\t%s\n", "no", "name", "score1", "score2", "score3", "average");//格式 43 for (i = 0; i < 10; i++) 44 { 45 printf("%d\t", i + 1);//输出序号+1 46 student_print(pStudent);// 输出一个学生的数据,包括平均成绩 47 pStudent++;//指针移动 48 printf("\n"); 49 } 50 pStudent = pStudent_bak;//恢复指针 51 52 count_avg(pStudent, average);//每门课的平均成绩 53 printf("\t%s\t", "average");//格式 54 for (i = 0; i < 3; i++)//输出平均值 55 { 56 printf("%g\t", average[i]); 57 } 58 printf("\n");//换行 59 pStudent = pStudent_bak;//恢复指针 60 61 searchmin(pStudent, min);//每门课的最低成绩 62 printf("\t%s\t", "min");//格式 63 for (i = 0; i < 3; i++)//输出每门课的最低成绩 64 { 65 printf("%d\t", min[i]); 66 } 67 printf("\n");//换行 68 pStudent = pStudent_bak;//恢复指针 69 70 searchmax(pStudent, max);//每门课的最高成绩 71 printf("\t%s\t", "max");//格式 72 for (i = 0; i < 3; i++)//输出每门课的最高成绩 73 { 74 printf("%d\t", max[i]); 75 } 76 printf("\n");//换行 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\t", pStudent->name);//输出名字 101 102 for (i = 0; i < 3; i++) 103 { 104 printf("%d\t", 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 }
以上是关于网易云课堂_C语言程序设计进阶_第三周:结构:结构类型定义联合_1学生成绩简单统计的主要内容,如果未能解决你的问题,请参考以下文章
网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型浮点类型枚举类型
网易云课堂_C语言程序设计进阶_第五周:递归与简单算法:递归搜索二分搜索简单排序
网易云课堂_Java语言程序设计进阶_第1周 类和对象_1分数
网易云课堂_C语言程序设计进阶_第七周:文件:文件访问格式化输入输出二进制输入输出