首页 > 专题系列 > C基础练习 > C语言程序设计-学生成绩统计[结构体应用]
2013
12-11

C语言程序设计-学生成绩统计[结构体应用]

10081 学生成绩统计(结构体)

【问题描述】用结构数组实现学生成绩统计各功能。
某班有N(N<=30)个学生,共开设5门课程,分别用三个函数实现如下功能:
⑴ 求第一门课程的平均分;
⑵ 找出有2门及2门以上不及格的学生,并输出其学号;
⑶ 找出平均成绩在90分及以上的学生,输出他们的学号。
【输入形式】第一行为一个整数N,表示本班共N个人,接下来的N行中每行包含一个学生的信息,包括学号(长度
小于11的字符串)、课程1成绩、课程2成绩、课程3成绩、课程4成绩、课程5成绩。成绩均为整数。
【输出形式】输出共三行:
第一行为本班第一门课程的平均成绩。(保留小数点后两位)
第二行为有2门及2门以上不及格的学生的学号,各学号之间用一个空格分隔。若不存在,则打印”no”。
第三行为平均成绩在90分及以上的学生的学号, 各学号之间用一个空格分隔。若不存在,则打印”no”。
【样例输入】3
070001 90 80 85 50 42
070002 93 95 90 88 92
070003 98 92 84 90 91
【样例输出】93.67
070001
070002 070003
【样例说明】本班有3个学生。
第1个学生学号为: 070001, 5门课程的成绩分别为: 90、80、85、50、42;
第2个学生学号为: 070002, 5门课程的成绩分别为: 93、95、90、88、92;
第3个学生学号为: 070003, 5门课程的成绩分别为: 98、92、84、90、91。
本班第1门课程的平均成绩为: 93.67; 有2门及2门以上不及格的学生的学号为: 070001;
平均成绩在90分及以上的学生的学号为: 070002、070003。
【评分标准】本题共2个测试点,每个测试点1.0分,共2.0分。

#include 

typedef struct _student
{
	char no[11];
	int courses[5];

}student;
int main()
{
	student students[30];
    int n; //输入的学生数目
	scanf("%d",&n);
	int i,j;
	for(i=0;i<n;i++)
	{
		scanf("%s",&students[i].no);
		for (j=0;j<5;j++)
		{
			scanf("%d",&students[i].courses[j]);
		}

	}

	float counts = 0;

	for (i=0;i<n;i++)
	{
		counts += students[i].courses[0];
	}
	printf("%.2f\n",counts / n);

	//统计不及格学生
	bool flag = false; //默认为不存在
	for (i=0;i<n;i++)
	{
		counts = 0;
		for (j=0;j<5;j++)
		{
			if (students[i].courses[j] < 60)
			{
				counts++;
			}
			if (counts >=2)
			{
				//存在
				flag = true;
				printf("%s ", students[i].no);
				break;
			}
		}

	}

	if (flag)
	{
		printf("\n");
	}
	else
	{
		printf("no\n");
	}

	//统计平均成绩在90分以上的
	flag = false;
	for (i=0;i<n;i++)
	{
		counts = 0;
		for (j=0;j<5;j++)
		{
			counts += students[i].courses[j];	
		}
		if (counts / 5 >= 90)
		{
			flag = true;
			printf("%s ", students[i].no);
		}

	}

	if (flag)
	{
		printf("\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

 

 


  1. 嗯 分析得很到位,确实用模板编程能让面试官对你的印象更好。在设置辅助栈的时候可以这样:push时,比较要push的elem和辅助栈的栈顶,elem<=min.top(),则min.push(elem).否则只要push(elem)就好。在pop的时候,比较stack.top()与min.top(),if(stack.top()<=min.top()),则{stack.pop();min.pop();},否则{stack.pop();}.

  2. 给你一组数据吧:29 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1000。此时的数据量还是很小的,耗时却不短。这种方法确实可以,当然或许还有其他的优化方案,但是优化只能针对某些数据,不太可能在所有情况下都能在可接受的时间内求解出答案。