首页 > 专题系列 > C基础练习 > C语言程序设计-学生成绩管理[数组应用]
2013
11-19

C语言程序设计-学生成绩管理[数组应用]

10043 学生成绩管理

【问题描述】学生信息包括:学号、姓名、数学成绩、英语成绩、计算机成绩。共有N个人(N<=10,可在程序内部定义,
          如用#define  N 3) 的信息。要求计算每人的总成绩,并按总成绩由高到低的顺序输出所有人的信息。最后
          输出各门课程平均成绩(保留2位小数)。(此题只按照3个学生考虑)
【输入形式】输入分N行,每行为一个学生的学号、姓名、数学成绩、英语成绩、计算机成绩信息。
【输出形式】输出为N+4行。第一行为固定字符串;第2~N+1行为按总成绩由高到低顺序输出的所有人信息;最后3行输
           出各门课程的平均成绩。
           要求:1、输出的第一行,每个元素的后面空3个空格,“Total”后不加空格。
                2、输出的第二行到第N+1行,每个元素后面空4个空格,最后一个元素,如“258”后面不加空格,
                   且每行以回车符结束。
                3、输出的最后三行没有空格,每行仅以回车符结束。
                   提醒:由于本题格式比较麻烦,请同学务必按照规定输出,不然你的程序将会被判错。
【样例输入】1001   zhang    90    80    88
           1002   huang    78     80    82
           1003   xiong    88     85    80
【样例输出】NO   Name   Maths   English   Computer   Total 
           1001    zhang    90    80    88    258
           1003    xiong    88     85    80    253
           1002    huang    78    80    82    240
           average of Maths:85.33
           average of English:81.67
           average of Computer:83.33 
【样例说明】实际上这个结果应该是下面的样子:
           NO(3个空格)Name(3个空格) Maths(3个空格)English(3个空格)Computer(3个空格)Total
           1001(4个空格)zhang(4个空格)90(4个空格)80(4个空格)88(4个空格)258
           1003(4个空格)xiong(4个空格)88(4个空格)85(4个空格)80(4个空格)253
           1002(4个空格)huang(4个空格)78(4个空格)80(4个空格)82(4个空格)240
           average of Maths:85.33
           average of English:81.67
           average of Computer:83.33               
【评分标准】本题共2个测试点,通过得1.0分。

#include <stdio.h>
#define N 3
char names[3][15];
int ids[N],ms[N],ens[N],com[N],total[N], totalM=0,totalE=0,totalC=0;
int index[3] = {0,1,2};
int main() {
	puts("NO   Name   Maths   English   Computer   Total");
	for(int i=0; i<N; i++){
		scanf("%d%s%d%d%d", &ids[i], names[i], &ms[i], &ens[i], &com[i]);
		total[i] = ms[i]+ ens[i]+com[i];
		totalM += ms[i];
		totalE += ens[i];
		totalC += com[i];
	}
	//排序,并记录索引
	for(int i=0; i<N-1; i++){
		for(int j=i; j<N; j++){
			if(total[j] > total[i]){
				int tmp = total[i];
				total[i] = total[j];
				total[j] = tmp;

				tmp = index[i];
				index[i] = index[j];
				index[j] = tmp;
			}
		}
	}

	for(int i=0; i<N; i++) {
		int k = index[i]; //k即为索引
		printf("%d    %s    %d    %d    %d    %d\n",ids[k], names[k], ms[k], ens[k], com[k], total[i]);
	}
	printf("average of Maths:%.2lf\n", 1.0*totalM/N);
	printf("average of English:%.2lf\n", 1.0*totalE/N);
	printf("average of Computer:%.2lf\n", 1.0*totalC/N);
	return 0;
}

 


  1. 因为是要把从字符串s的start位到当前位在hash中重置,修改提交后能accept,但是不修改居然也能accept