求大佬救个命,万分感谢
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)按成绩由高到低排出名次;
(4)打印出名次表,表格内包括学生编号、成绩;
(5)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
#include<stdio.h> #define N 30 typedef struct student { char name[10]; int score; }STU; void main() { STU s[N]; int n=0; int i; int n1=0; int n2=0; int n3=0; int n4=0; int n5=0; int n6=0; int total=0; float aver; printf("请输入学生姓名与成绩:"); do { scanf("%s",&s[n].name); scanf("%d",&s[n].score); n++; }while(s[n-1].score>=0); n--; for(i=0;i<n;i++) { total+=s[i].score; if(s[i].score<60) n1++; else if(s[i].score<70) n2++; else if(s[i].score<80) n3++; else if(s[i].score<90) n4++; else n5++; } printf("不及格人数为:%d,名单如下:\n",n1); for(i=0;i<n;i++) { if(s[i].score<60) printf("%s\t %d\n",s[i].name,s[i].score); } aver=(float)total/n; for(i=0;i<n;i++) { if(s[i].score>aver) n6++; } printf("平均分为:%.1f,分数在平均分以上的人数为:%d,名单如下:\n",aver,n6); for(i=0;i<n;i++) { if(s[i].score>aver) printf("%s\t %d\n",s[i].name,s[i].score); } printf("分数段\t学生人数\t图形\n"); printf("<60\t%d(%.1f%%)\t",n1,(float)n1*100/n); for(i=0;i<n1;i++) printf("*"); printf("\n"); printf("60~69\t%d(%.1f%%)\t",n2,(float)n2*100/n); for(i=0;i<n2;i++) printf("*"); printf("\n"); printf("70~79\t%d(%.1f%%)\t",n3,(float)n3*100/n); for(i=0;i<n3;i++) printf("*"); printf("\n"); printf("80~89\t%d(%.1f%%)\t",n4,(float)n4*100/n); for(i=0;i<n4;i++) printf("*"); printf("\n"); printf(">=90\t%d(%.1f%%)\t",n5,(float)n5*100/n); for(i=0;i<n5;i++) printf("*"); printf("\n"); }
#include <stdio.h> #include <stdlib.h> #define MENU_STU \ "1 get_mes\n" \ "2 not_pass\n" \ "3 up_ave\n" \ "4 rank_by_score\n" \ "5 find_by_id\n" typedef struct student { int id; char name[32]; float score; int rankNo; }STU; STU stus[30]; void get_mes(int *stuNum) { int wkCount = 0; printf("学生成绩录入:\n"); do { printf("num %d id : ", wkCount + 1); scanf("%d", &(stus[wkCount].id)); while (!getchar()); printf("num %d name : ", wkCount + 1); scanf("%s", stus[wkCount].name); while (!getchar()); printf("num %d score : ", wkCount + 1); scanf("%f", &(stus[wkCount].score)); while (!getchar()); if (stus[wkCount].score > 100.0) { printf("请输入有效成绩(0-100)\n"); continue; } else if (stus[wkCount].score < 0.0) { *stuNum = wkCount; printf("共计录入%d人\t", wkCount); break; } else { ++wkCount; } } while (1); } void up_ave(int stuNum) { float totalscore = 0; float avescore = 0; int notPassCount = 0; for (int i = 0; i < stuNum;++i) { totalscore += stus[i].score; } avescore = totalscore / stuNum; printf("班级平均分为%.2f,高于平均分的学生有:\n",avescore); for (int i = 0; i < stuNum; ++i) { if (stus[i].score > avescore) { notPassCount++; printf("%d\t%s\n",notPassCount,stus[i].name); } } if (0 == notPassCount) printf("班级所有同学成绩一致\n"); } void not_pass(int stuNum) { float passScore = 60; int notPassCount = 0; //printf("Input the pass score:"); //scanf("%f", &passScore); for (int i = 0; i < stuNum; ++i) { if (stus[i].score < passScore) { notPassCount++; if (1 == notPassCount) printf("不及格人员名单:\n"); printf("%d\t%s\n", notPassCount, stus[i].name); } } if (0 == notPassCount) printf("无不及格人员\n"); } void rank_by_score(int stuNum) { STU stuTemp; for (int i = 0; i < stuNum - 1; ++i) { for (int j = 0; j < stuNum - i; ++j) { if (stus[j].score < stus[j + 1].score) { stuTemp = stus[j]; stus[j] = stus[j + 1]; stus[j + 1] = stuTemp; } } } for (int i = 0; i < stuNum; ++i) { stus[i].rankNo = i + 1; } printf("班级成绩名次单:\n"); for (int i = 0; i < stuNum; ++i) { printf("%d\t%s\t%.2f\t%d\n", stus[i].id, stus[i].name, stus[i].score, stus[i].rankNo); } } void find_by_id(int stuNum) { bool ret = false; int findId = 0; printf("Input the id what you want to find : "); scanf("%d",&findId); while (!getchar()); for (int i = 0; i < stuNum; ++i) { if (findId == stus[i].id) { ret = true; printf("id\tname\tscore\trankNo\n"); printf("%d\t%s\t%.2f\t%d\n", stus[i].id, stus[i].name, stus[i].score, stus[i].rankNo); break; } } if (!ret) printf("There is no this id\n"); } int main() { int stuNum = 0; int sel; do { system("cls"); printf(MENU_STU); printf("Input your choice : "); scanf("%d", &sel); while (!getchar()); switch (sel) { case 1: get_mes(&stuNum); getchar(); break; case 2: not_pass(stuNum); getchar(); break; case 3: up_ave(stuNum); getchar(); break; case 4: rank_by_score(stuNum); getchar(); break; case 5: find_by_id(stuNum); getchar(); break; default: printf("There is no this choice\n"); getchar(); break; } } while (1); }