#include <stdio.h>
struct student
{
int number;
char name[20];
int age;
char address[50];
float class1grade;
float class2grade;
float class3grade;
float avegrade;
char ranklevel;
int rank;
};
student schoolstu[100];
void input(int n) //学生人数n。
{
for(int i=0;i<n;i++)
{
scanf("%d%s%d%s",&schoolstu[i].number,schoolstu[i].name,&schoolstu[i].age,schoolstu[i].address);
scanf("%f%f%f",&schoolstu[i].class1grade,&schoolstu[i].class2grade,&schoolstu[i].class3grade);
}
}
void average(int n)
{
for(int i=0;i<n;i++)
{
schoolstu[i].avegrade=(schoolstu[i].class1grade+schoolstu[i].class2grade+schoolstu[i].class3grade)/3;
}
}
void gradeclass(int n)
{
for(int i=0;i<n;i++)
{
if(schoolstu[i].avegrade>=90) schoolstu[i].ranklevel = 'A';
else if(schoolstu[i].avegrade>=80 && schoolstu[i].avegrade<90) schoolstu[i].ranklevel = 'B';
else if(schoolstu[i].avegrade>=70 && schoolstu[i].avegrade<80) schoolstu[i].ranklevel = 'C';
else if(schoolstu[i].avegrade>=60 && schoolstu[i].avegrade<70) schoolstu[i].ranklevel = 'D';
else schoolstu[i].ranklevel = 'E';
}
}
void rank(int n)
{
int temp=1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(schoolstu[i].avegrade<schoolstu[j].avegrade)
temp++;
}
schoolstu[i].rank = temp;
}
}
void print(int n)
{
for(int i=0;i<n;i++)
{
printf("%d %s %d %s ",schoolstu[i].number,schoolstu[i].name,schoolstu[i].age,schoolstu[i].address);
printf("%f %f %f %f ",schoolstu[i].class1grade,schoolstu[i].class2grade,schoolstu[i].class3grade,schoolstu[i].avegrade);
printf("%c %d\n",schoolstu[i].ranklevel,schoolstu[i].rank);
}
}
int main()
{
int n=0;
scanf("%d",&n);
input(n);
average(n);
gradeclass(n);
rank(n);
print(n);
return 0;
}
追问运行出错
追答不知道具体是什么错误:不能编译还是结果错误呢?
排名函数确实有点问题:rank()中,应该把 int temp=1;放在第一个for循环里面。
如果是编译错误。就得看你的编译器了:VC++6.0写的,这个程序没有什么特别库函数,应该都是支持的。
新代码:
void rank(int n)
{
for(int i=0;i<n;i++)
{
int temp=1;
for(int j=0;j<n;j++)
{
if(schoolstu[i].avegrade<schoolstu[j].avegrade)
temp++;
}
schoolstu[i].rank = temp;
}
}
void print(int n)
{
for(int i=0;i<n;i++)
{
printf("%d %s %d %s ",schoolstu[i].number,schoolstu[i].name,schoolstu[i].age,schoolstu[i].address);
printf("%.2f %.2f %.2f %.2f ",schoolstu[i].class1grade,schoolstu[i].class2grade,schoolstu[i].class3grade,schoolstu[i].avegrade);
printf("%c %d\n",schoolstu[i].ranklevel,schoolstu[i].rank);
}
}
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/a8ec8a13632762d0e6d38908a3ec08fa503dc693?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
第一行,输入学生数: n
第二到n+1行,输入学生信息即可。
完整代码见附件。