结构体作业

结构体作业

从键盘上输入 N 个学生的姓名及 M 科考试成绩,找出成绩最高/低的学生,显示该学生的姓名及他的总分和平均分。要求考虑成绩相同的情况。
程序设计要求:
main 函数完成数据结构的定义,调用自定义函数完成题目要求的工作,并输出最终的结果;学生姓名必须经过“去空格”的处理;可以设计相应的自定义函数,并创建新的.H 文件;可以使用在前面实验所生成的.H 文件中的自定义函数。
※函数调用的实际参数传递的数据若是指针,形式参数必须是指针变量的形态。

#include<stdio.h>
#include <string.h>
#define N 3
#define M 3
typedef struct student{
    char name[20];
	float score[M];
	float sum;
	float aver;
}Student;
void del_space(char *c){
    char *q = c;
	while(*c){
        if(*c != ' ') *q++ = *c;
		c++;
	}
	*q = '\0';
}
void input(Student stu[]){
    int i;
	char c[10];
	printf("请输入%d名学生的信息,输入格式为:\n姓名(输入完姓名后按enter键)\n%d门成绩(成绩之间用空格分开)\n", N, M);
	for(i = 0; i < N; i++){
		while(1){
		    gets(c);
		    del_space(c);
		    if(strlen(c) == 0){
		    	continue;
	    	}else{
		    	break;
	    	}
		}
		strcpy(stu[i].name, c);
		printf("请输入成绩,每门课之间加空格\n");
	    scanf("%f %f %f", &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
	    stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
        stu[i].aver = stu[i].sum / 3;
	}
}
float max(Student stu[]){
    int i, m = 0;
	for(i = 0; i < N; i++){
	    if(stu[i].sum > stu[m].sum) m = i;
	}
    return stu[m].sum;
}
float min(Student stu[]){
    int i, m = 0;
	for(i = 0; i < N; i++){
	    if(stu[i].sum < stu[m].sum) m = i;
	}
    return stu[m].sum;
}
void print(Student stud){
	printf("姓名:%s 总分是:%5.1f 平均分:%5.1f\n",stud.name,stud.sum,stud.aver);
}
void printf_val(float a, Student stu[]){
     int i;
	 for(i = 0; i < N; i++){
		 if(stu[i].sum == a)print(stu[i]);
	 }
}
int main(){
	int i;
	char c;
	float max_sum, min_sum;
    Student stu[N],*p = stu;
	input(p);
	max_sum = max(p);
	min_sum = min(p);
	printf("总分成绩最高为:%5.1f的学生有:\n", max_sum);
	printf_val(max_sum, p);
	printf("总分成绩最低为:%5.1f的学生有:\n", min_sum);
    printf_val(min_sum, p);
    return 0;
}

版权声明:本文为qq_45948139原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。