要求总分相同时,名次相同
#include <stdio.h>
#include <stdlib.h>
/*
* 1 lili 88 99 77
2 sofa 77 88 99
3 lrtf 45 56 69
4 ipde 79 63 26
5 fghh 41 23 66
*/
struct Student{
int num;
char name[5];
int score[3];
int sum;
int count;
};
void input(struct Student *stu){
int n;
printf("please input have how much student:\n");
scanf("%d",&n);
printf("num name math yuwen english :\n");
for (int i = 0; i < n; ++i) {
scanf("%d %s",&stu[i].num,stu[i].name);
for (int j = 0; j < 3; ++j) {
scanf("%d",&stu[i].score[j]);
}
}
}
void sum(struct Student *stu,int n){
for (int i = 0; i < n; ++i) {
stu[i].sum=0;
for (int j = 0; j < 3; ++j) {
stu[i].sum+=stu[i].score[j];
}
}
for (int i = 0; i < n; ++i) {
printf("%s de zongfen shi :%4d\n",stu[i].name,stu[i].sum);
}
}
void sort(struct Student *stu,int n){
struct Student max;
for (int j = 0; j < n-1; ++j)
{
for (int i = 0; i < n-j-1; ++i) {
if (stu[i].sum < stu[i + 1].sum) {
max = stu[i];
stu[i] = stu[i + 1];
stu[i+1]= max;
}
}
}
for (int i = 0; i < 5; ++i) {
if(i==0)
stu[i].count=1;
else if(stu[i].sum==stu[i-1].sum)
stu[i].count=stu[i-1].count;
else
stu[i].count=stu[i-1].count+1;
printf("\nNO .%d : %4d%4s%4d%4d%4d%4d",stu[i].count,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
}
void readdata(struct Student *stu){
FILE *fp;
fp= fopen("student.txt","w");
if(NULL==fp){
printf("can not open the file!");
exit(-1);
}
for (int i = 0; i < 5; ++i) {
fprintf(fp,"\nNO .%d : %4s%4d%4d%4d%4d",stu[i].count,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum);
}
}
int main() {
struct Student stu[5];
input(stu);
sum(stu,5);
sort(stu,5);
readdata(stu);
return 0;
}

被折叠的 条评论
为什么被折叠?



