1)设计一个保存学生成绩信息的结构,包括学号、姓名、课程名、
平时成绩、考试成绩、总评成绩。分别用函数实现以下功能:
①输入n个学生的信息(平时和考试成绩)
②要求计算并输出学生的总分(平时20%,考试80%)并输出;
③输出总分最高和最低的学生信息。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include<string.h>
typedef struct student
{
char stu_number[20];
char classname[20];
char stu_name[20];
float usual_mark;
float exam_mark;
float overall_mark;
}Student;
void inputInformation(Student*stus,int N)
{
printf("输入各学生学号,姓名,课程名,该门课平时、考试成绩(中间用空格隔开):\n");
int i;
for(i=0;i<N;i++){
scanf("%s %s %s %f %f",stus[i].stu_number,stus[i].stu_name,stus[i].classname,&stus[i].usual_mark,&stus[i].exam_mark);
}
}
void outputInformation(Student *stus,int N)
{
int i,m,n;
float max=0,min=100;
printf("学号\t姓名\t课程名\t\t平时成绩\t考试成绩\t总评\n");
for(i=0;i<N;i++){
stus[i].overall_mark=stus[i].usual_mark*0.2+stus[i].exam_mark*0.8;
printf("%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n",stus[i].stu_number,stus[i].stu_name,stus[i].classname,stus[i].usual_mark,stus[i].exam_mark,stus[i].overall_mark);
if(max<stus[i].overall_mark){
max=stus[i].overall_mark;
m=i;
}
if(min>stus[i].overall_mark){
min=stus[i].overall_mark;
n=i;
}
}
printf("************总评最低学生信息如下************\n");
printf("学号\t姓名\t课程名\t\t平时成绩\t考试成绩\t总评\n");
printf("%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n",stus[n].stu_number,stus[n].stu_name,stus[n].classname,stus[n].usual_mark,stus[n].exam_mark,stus[n].overall_mark);
printf("************总评最高学生信息如下************\n");
printf("学号\t姓名\t课程名\t\t平时成绩\t考试成绩\t总评\n");
printf("%s\t%s\t%s\t%.2f\t\t%.2f\t\t%.2f\n",stus[m].stu_number,stus[m].stu_name,stus[m].classname,stus[m].usual_mark,stus[m].exam_mark,stus[m].overall_mark);
}
int main()
{
Student stus[200];
int N;
printf("学生人数N=");
scanf("%d",&N);
inputInformation(stus,N);
printf("全部学生、总评最低和最高学生信息如下:\n");
outputInformation(stus,N);
return 0;
}
运行结果: