优化此程序段,并添加中文注释,要求占比以百分比形式输出:void gradelist(struct student *list, int amount) { int i = 0; printf("等级 人数 百分比 \n"); int grades[5] = { 0 }; // 用数组记录每个等级的人数 for (i = 0; i < amount; i++) { switch (list[i].grade) { case 'A': grades[0]++; break; case 'B': grades[1]++; break; case 'C': grades[2]++; break; case 'D': grades[3]++; break; case 'E': grades[4]++; break; } // 统计每个等级的人数 } char grade_labels[5] = { 'A', 'B', 'C', 'D', 'E' }; // 存放等级标签的数组 for (i = 0; i < 5; i++) { printf("\t\t %c %d %6.3lf \n", grade_labels[i], grades[i], (double)grades[i] / amount); // 输出每个等级的人数和占比 } printf("\n\n\n ****** 请摁任意键继续! ******"); getch(); // 等待用户按键 }
时间: 2024-03-28 15:40:54 浏览: 55
CustomComparator:此 jar 可帮助您根据对象内的字符串值对对象进行排序
下面是优化后的程序段:
void gradelist(struct student *list, int amount) {
int i;
printf("等级 人数 百分比 \n");
int grades[5] = {0}; // 用数组记录每个等级的人数
for (i = 0; i < amount; i++) {
switch (list[i].grade) {
case 'A':
grades[0]++;
break;
case 'B':
grades[1]++;
break;
case 'C':
grades[2]++;
break;
case 'D':
grades[3]++;
break;
case 'E':
grades[4]++;
break;
default:
break;
} // 统计每个等级的人数
}
char grade_labels[5] = {'A', 'B', 'C', 'D', 'E'}; // 存放等级标签的数组
for (i = 0; i < 5; i++) {
double percentage = (double)grades[i] / amount * 100;
printf("\t\t %c %d %.2f%% \n", grade_labels[i], grades[i], percentage); // 输出每个等级的人数和占比
}
printf("\n\n\n ****** 请按任意键继续! ******");
getch(); // 等待用户按键
}
优化内容:
1. 添加 default 分支,避免无法识别的等级字符导致的错误;
2. 将计算百分比的过程提前,避免重复计算;
3. 在输出百分比时使用 %.2f 格式化,保留两位小数;
4. 更改提示信息,使其更加友好。
输出结果示例:
等级 人数 百分比
A 5 33.33%
B 3 20.00%
C 3 20.00%
D 2 13.33%
E 2 13.33%
****** 请按任意键继续! ******
阅读全文