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

C语言程序设计-学生成绩统计[指针应用]

10074 选做题:学生成绩统计(指针)

【问题描述】某班有N(N<=30)个学生,共开设5门课程,分别用三个函数实现如下功能:
⑴ 求第一门课程的平均分;
⑵ 找出有2门及2门以上不及格的学生,并输出其学号;
⑶ 找出平均成绩在90分以上的学生,输出他们的学号。
【输入形式】第一行为一个整数N,表示本班共N个人,接下来的N行中每行包含一个学生的信息,包括学号(长度
小于10的字符串)、课程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个测试点,每个测试点0.5分,共1.0。

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char ** argv)
{
	//记录不及格学生学号
	char* no[30];
	//记录平均分学生学号
	char* nu[30];
	// float averge;//平均分

	int n,i,j;
	int k = 0;//不及格数
	int m = 0;//平均分》=90数
	scanf("%d",&n);
	float sum = 0;//记录课程1 的总成绩

	for (i=0;i<n;i++)
	{
		float count = 0;//记录每个学生的总分
		char* sno = (char *)malloc(6 * sizeof(char));
		scanf("%s",sno);
		int* nums = (int *)malloc(5 * sizeof(int));
		for (j=0;j<5;j++)
		{

			scanf("%d",(nums + j));
		}
		sum += *nums;
		int low = 0;//记录不及格成绩

		for (j=0;j<5;j++)
		{
			if (*(nums + j) < 60)
			{
				low++;
			}

			count += *(nums + j);
		}

		if(low >= 2)
		{
			no[k] = (char *)malloc(6 * sizeof(char));
			no[k++] = sno;
		}

		if (count / 5.0 >= 90.0)
		{
			nu[m] = (char *)malloc(6 * sizeof(char));
			nu[m++] = sno;
		}

	}

	printf("%.2f\n",sum/n);
	if (k==0)
	{
		printf("no\n");
	}
	else
	{
		for (i=0;i<k;i++)
		{
			printf("%s ",*(no + i));
		}
	}

	printf("\n");
	if (m==0)
	{
		printf("no\n");
	}
	else
	{
		for (i=0;i<m;i++)
		{
			printf("%s ",*(nu + i));
		}
	}
	printf("\n");

	return 0;
}