(1)输入每个学生的学号、姓名和 3 门课成绩(学生数自己确定); (2)分别计算每个学生的总分,并输出; (3)分别计算每门课的平均分,并输出; (4)按每个学生的总分由高到低排出名次表,并输出; (5)按姓名查询学生的信息,并输出; (6)输出每个学生的信息,每个学生的信息占据一行。
2条回答 默认 最新
- 技术专家团-小桥流水 2021-12-26 15:32关注
参考如下:
#include <stdio.h> struct student { int id; //学号 char name[30]; //姓名 float score[3]; //5门课成绩 float total; //总分 float ave; //平均分 }; //录入 void input(struct student stu[],int n) { int i,j; for (i=0;i<n;i++) { printf("请输入学生%d的学号:",i+1); scanf("%d",&stu[i].id); getchar(); printf("请输入学生%d的姓名:",i+1); scanf("%s",stu[i].name); printf("请输入学生%d的3门课成绩:"); for(j=0;j<3;j++) scanf("%f",&stu[i].score[j]); } } //计算总分、平均分 void caculate(struct student stu[],int n) { int i,j; for (i=0;i<n;i++) { stu[i].total = 0; //总分 for(j=0;j<3;j++) { stu[i].total += stu[i].score[j]; } //平均分 stu[i].ave = stu[i].total/3; printf("学生%d的总分:%.1f,平均分:%.1f\n",i+1,stu[i].total,stu[i].ave); } } //查询 void findbyid(struct student stu[],int n) { int id,i,j; printf("请输入需要查找的学号:"); scanf("%d",&id); for (i=0;i<n;i++) { if(stu[i].id == id) { printf("学号:%d\n",stu[i].id); printf("姓名:%s\n",stu[i].name); printf("成绩:"); for(j=0;j<3;j++) printf("%.1f ",stu[i].score[j]); printf("\n"); printf("总分:%.1f\n",stu[i].total); printf("平均分:%.1f\n",stu[i].ave); break; } } if(i==n) printf("未找到该学号的学生\n"); } //根据学分排序 void sortbyxf(struct student stu[],int n) { int i,j; struct student tt; for (i=0;i<n-1;i++) { for (j=0;j<n-1-i;j++) { if(stu[j].total < stu[j+1].total) { tt = stu[j]; stu[j]=stu[j+1]; stu[j+1]=tt; } } } } //显示 void show(struct student stu[],int n) { int id,i,j; for (i=0;i<n;i++) { printf("学号:%d\n",stu[i].id); printf("姓名:%s\n",stu[i].name); printf("成绩:"); for(j=0;j<3;j++) printf("%.1f ",stu[i].score[j]); printf("\n"); printf("总分:%.1f\n",stu[i].total); printf("平均分:%.1f\n",stu[i].ave); } } int main() { struct student stu[100]; int nmb = 0; printf("请输入学生人数:"); scanf("%d",&nmb); //(1) input(stu,nmb); //(2) caculate(stu,nmb); //(4) findbyid(stu,nmb); //(5) sortbyxf(stu,nmb); //显示 show(stu,nmb); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 4无用