结构体作业
从键盘上输入 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版权协议,转载请附上原文出处链接和本声明。