本题要求编写程序读入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 60 65 69
输出样例:
1 0 2 3 1
代码:
# include <stdio.h>
# include <stdlib.h>
# define LENGTH 1000
int main() {
int N,i,j,m = 0;
scanf("%d",&N);
int scores[LENGTH];
int persons[5] = {0};
for (i=0;i<N;i++) {
// 依次输入N个学生的成绩到数组中
scanf("%d",&scores[i]);
}
// 注意此时的i和N一样大,所以j要小于i
for (j=0;j<i;j++) {
if (scores[j] >= 90) persons[0] += 1;
else if (scores[j] >= 80) persons[1] += 1;
else if (scores[j] >= 70) persons[2] += 1;
else if (scores[j] >= 60) persons[3] += 1;
else persons[4] += 1;
}
while(m < 5) {
if (m < 1) {
printf("%d",persons[m]);
}
else {
printf(" %d",persons[m]);
}
m += 1;
}
return 0;
}
提交截图:
解题思路:
这道题解法很多的,除了可以用数组来接收值外,也可以使用字符串操作(本质上是字符数组……),其中要注意的一点是i
第一层循环最后一次是i=N
这时候下层循环要注意j<i
,不能是j <= i
,否则会导致输出的数值之和比N
大了1!这显然是不对的!