c语言 分别计算五名学生三门成绩的总分平均分以及排名

c语言 分别计算五名学生三门成绩的总分平均分以及排名,第1张

一、题目要求

/*

    直接初始化或者从键盘输入5名学生的三门成绩以及姓名
    三门成绩分别为语文、数学、英语
    
    要求设计一个小菜单,输入对应的编号或命令完成对应的功能
    首先选择初始化方式 从键盘输入 或 使用已有的值
    
    初始化完成之后需要实现的功能:
    1、计算每个人的总分
    2、计算每一科成绩的平均分
    3、能够按照总分排列名次
    4、按照单科成绩排名
            1、语文
            2、数学
            3、英语
    
    信息显示:  单科成绩排名只需显示学生姓名和单科成绩的排序
                总分成绩排名只需显示学生姓名和总分成绩的排序
                初始化后需要显示按照学生姓名首字母排序的成绩单
    初始化成绩单要求如下:
                
                姓名        语文        数学        英语
                xxx            xxx            xxx            xxx
                xxx            xxx            xxx            xxx
                xxx            xxx            xxx            xxx
                xxx            xxx            xxx            xxx
                xxx            xxx            xxx            xxx

YYY 66 67 68 UUU 89 90 91 III 44 45 46 LLL 78 79 80 PPP 100 100 100

*/

二、实现

定义一个用来存放姓名和成绩的结构体类型,然后定义一个结构体数组。分别实现上述功能。

1.计算总成绩 2.显示单科成绩平均分3.总名次表4.单科成绩排名5.显示详细成绩6.重新选择模式初始化方式7.退出

三、全部代码如下

#include 
#include 
#include 
#include 

int flag = 0;		//全局变量 
typedef struct student_score {
	char name[16];
	float score[3];		//语文成绩  数学成绩  英语成绩
	float total_score;
}STUS;

/*函数声明*/
int initialization_method_selection(int i);
void main_menu();
void printf_score_menu(STUS *stu);
void score_sum(STUS *stu);
void avarage_score(STUS *stu);
void total_score_sort(STUS *stu);
void single_subject_score_sort(STUS *stu,int k);
int single_subiect_score(STUS *stu);
void pint_snge_sbjct_scre_sort_menu();
 
int main() {
	int choose;
	char str[32] = {0};
	while(1) {
		printf("请选择数据初始化方式\n");
		printf("[1、使用初始数据]\n[2、从键盘获取数据]\n\n\n");
		printf("请输入你的方式:");
		char str[32];
		fflush(stdin);
		choose = atoi(gets(str));
		switch(choose) {
			case 1:initialization_method_selection(0);break;
			case 2:initialization_method_selection(1);break;
			default:system("cls");printf("===参数错误,返回当前菜单===\n\n");system("pause");break;
		}
	}
	return 0;
}

/* 初始化方法选择 并出现主菜单对应功能*/
int initialization_method_selection(int i) {
	char str[32]; 
	int choose;
	int j;
	STUS stu[5];
	if(i == 0) {
		stu[0] = (STUS){"Alex",98.50,97.50,87.50};
		stu[1] = (STUS){"Peter",77.50,44.50,81.50};
		stu[2] = (STUS){"Marry",86.50,76.00,91.00};
		stu[3] = (STUS){"Clis",77.00,100.00,96.50};
		stu[4] = (STUS){"Harry",94.00,63.50,89.50};
	}
	else if(i == 1) {
		system("cls");
		printf("请分别输入五位学生的姓名,语文成绩,数学成绩,英语成绩\n");
		for(j = 0;j < 5;j++) {
		scanf("%s%f%f%f",stu[j].name,&stu[j].score[0],&stu[j].score[1],&stu[j].score[2]);	
		}	
	}
	system("cls");
	STUS *p = stu;
	printf_score_menu(p);
	system("pause");
	while(1) {
		system("color 0e");
		fflush(stdin);
		main_menu();
		choose = atoi(gets(str));
		switch(choose) {
			case 1:score_sum(p);break;
			case 2:avarage_score(p);break;
			case 3:total_score_sort(p);break;	
			case 4:single_subiect_score(p);break;	
			case 5:system("cls");printf_score_menu(p);system("pause");break;
			case 6:system("cls");return 0;break;
			case 7:system("cls");exit(0);break; 
			default:system("cls");printf("===参数错误,返回当前菜单===\n\n");system("pause");break; 
		}
	}
}

/*打印初始化菜单(学生详细成绩)*/
void printf_score_menu(STUS *stu) {
	int i;	
	system("color 09");
	printf("	Name	Chinese	Math	English\n");
	printf("	=====================================\n");
	for(i = 0;i < 5;i++) {
		printf("	%s	%.2f	%.2f	%.2f\n",stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
	}
	printf("\n\n");
} 

/*总菜单*/
void main_menu() {
	system("cls");
	system("color 0e");
	printf(" 	 __________________________\n");
	printf("	| 1.计算总成绩             |\n");
	printf("	| 2.显示单科成绩平均分     |\n");
	printf("	| 3.总名次表               |\n");
	printf("	| 4.单科成绩排名           |\n");
	printf("	| 5.显示详细成绩           |\n");
	printf("	| 6.重新选择模式初始化方式 |\n");
	printf("	| 7.退出                   |\n");
	printf("	|__________________________|\n");
	printf("请输入序号:");
} 

	/*计算总成绩并将总成绩打印出来*/
void score_sum(STUS *stu) {
	flag = 1;
	system("cls");
	int i;
	for(i = 0;i < 5;i++) {
		stu[i].total_score = stu[i].score[0] + stu[i].score[1] +stu[i].score[2];
	}
	system("color 05");
	printf("#总分计算完毕\n");
	printf("	Name	Total Score\n");
	printf("	====================\n");
	for(i = 0;i < 5;i++) {
		printf("	%s	%.2f\n",stu[i].name,stu[i].total_score);
	}
	printf("\n\n");
	system("pause"); 
}

		/*显示单科成绩平均分*/
void avarage_score(STUS *stu) {
	system("cls");
	int i;
	float aver[3];
	for(i = 0;i < 3;i++) {
		aver[i] = (stu[0].score[i] + stu[1].score[i] +stu[2].score[i] +stu[3].score[i] +stu[4].score[i])/5.0;
	}
	system("color 05");
	printf("  ======平均分======\n");
	printf("Chinese:	%.2f\n",aver[0]);
	printf("Math   :	%.2f\n",aver[1]);
	printf("English:	%.2f\n\n\n",aver[2]);
	system("pause");
}

		/*名次排序(排名)*/
void total_score_sort(STUS *stu) {
	system("cls");
	int i,j;
	STUS temp;
	STUS stu_cpy[5];
	for(i = 0;i < 5;i++) {
		stu_cpy[i] = stu[i];
	}
	for(i = 0;i < 4;i++) {
		for(j = i+1;j < 5;j++) {
			if(stu_cpy[j].total_score > stu_cpy[i].total_score) {
				temp       = stu_cpy[j];
				stu_cpy[j] = stu_cpy[i];
				stu_cpy[i] = temp;
			}
		}
	}
	if(flag == 1) {
		system("color 05");
		printf("	NO.	Name	Total Score\n");
		printf("	============================\n");
		for(i = 0;i < 5;i++) {
			printf("	%d	%s	%.2f\n",i+1,stu_cpy[i].name,stu_cpy[i].total_score);
		}
		printf("\n\n"); 
		system("pause");
	}
	else if(flag == 0){
		system("color 04");
		printf("总成绩未获取,无法进行排名\n\n");
		system("pause");
	}	
}

		/* 单科成绩排序	以及打印各个人员的单科成绩 */
void single_subject_score_sort(STUS *stu,int k) {
	int i,j;
	STUS temp;
	STUS stu_cpy[5];
	char str[16] = {0};
	int choose;
	for(i = 0;i < 5;i++) {
		stu_cpy[i] = stu[i];
	}
	for(i = 0;i < 4;i++) {
		for(j = i+1;j < 5;j++) {
			if(stu_cpy[j].score[k] > stu_cpy[i].score[k]) {
				temp       = stu_cpy[j];
				stu_cpy[j] = stu_cpy[i];
				stu_cpy[i] = temp;
			}
		}
	}	
	system("cls");
	printf("	NO. Name	%s\n",k==0?strcpy(str,"Chinese"):(k==1?strcpy(str,"Math"):strcpy(str,"English")));
	printf("	============================\n");
	for(i = 0;i < 5;i++) {
		printf("	%d   %s	%.2f\n",i+1,stu_cpy[i].name,stu_cpy[i].score[k]);
	}
	printf("\n\n");
	system("pause");
	system("cls");
}

		/* 4、实现各单科成绩功能 */
int single_subiect_score(STUS *stu) {
	STUS *stu_cpy;
	char str[32] = {0};
	int choose;
	while(1) {
		fflush(stdin);
		pint_snge_sbjct_scre_sort_menu();
		choose = atoi(gets(str));
		switch(choose) {
			case 1:single_subject_score_sort(stu,0);break;
			case 2:single_subject_score_sort(stu,1);break;
			case 3:single_subject_score_sort(stu,2);break;
			case 4:system("cls");return 0;break;
			default:system("cls");printf("===参数错误,返回当前菜单===\n\n");system("pause");break;
		}
	}
}

	/* 打印单科成绩排序菜单	*/
void pint_snge_sbjct_scre_sort_menu() {
	system("color 0e");
	system("cls");
	printf("     _______________\n");
	printf("    |   1.语文      |\n");
	printf("    |   2.数学      |\n");
	printf("    |   3.英语      |\n");
	printf("    |   4.返回      |\n");
	printf("    |_______________|\n");
	printf("请输入想要查询的单科成绩的序号:");
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1499277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存