习题3-4 统计学生成绩

习题3-4 统计学生成绩 (15 分)

本题要求编写程序读入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

 分析:我开始的思路是-->由于人数是1000以内的任意数字,所以如果设立一个大小为1000的数组用于存储输入的每个人分数,开销颇大,所以最终用数组存放等级。

方法一:(数组存等级)

仔细思考,无论输入多少个人的成绩,等级都是确定的(只有5个),所以只用设立一个大小为5的数组就可以,其中下标0、1、2、3、4分别代表等级A、B、C、D、E;每输入一个分数,判断等级,随之对应数组下标位置的值++。最后依次遍历数组中的值,即可统计出每个等级对应的人数。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{ 
        int a[5] = { 0 };//定义一个大小为5的数组,a[i]的值即对应等级的人数个数
	int count = 0;//统计人数的个数
	int score = 0;//分数
	int n = 0;//总人数
	int m = 0;//等级对应数组下标
	scanf("%d", &n);
	while (count < n)
	{
		scanf("%d", &score);
		if (score >= 90)
		{
			m = 0;//A
		}
		else if (score >= 80)
		{
			m = 1;//B
		}
		else if (score >= 70)
		{
			m = 2;//C
		}
		else if (score>=60)
		{
			m = 3;//D
		}
		else
		{
			m = 4;//E
		}
		a[m]++;
		count++;
	}

	//打印
	int i;
	for (i = 0; i < 4; i++)
	{
		printf("%d ", a[i]);
	}
	printf("%d", a[i]);
        system("pause");
	return 0;
}

测试结果:

习题3-4 统计学生成绩_第1张图片

方法二:(数组存每个人的分数,变量统计等级人数)

定义一个大小为1000的数组,定义5个变量分别统计每一个成绩对应的等级

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
int c = 0;//C
	int d = 0;//D
	int e = 0;//E
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
		if (arr[i] >= 90)
		{
			a++;
		}
		else if (arr[i] >= 80)
		{
			b++;
		}
		else if (arr[i] >= 70)
		{
			c++;
		}
		else if (arr[i] >= 60)
		{
			d++;
		}
		else
		{
			e++;
		}
	}
	printf("%d %d %d %d %d", a, b, c, d, e);
        system("pause");
	return 0;

}

测试结果:

习题3-4 统计学生成绩_第2张图片

总结:通过两种方法的测试结果可以也比较孰优孰劣

 

 

你可能感兴趣的:(PTA)