求大佬帮忙看看哪里错了,是依据平均分来排序
#include "stdio.h"
struct student
{
char name[20];
int sno;
int score1;
int score2;
float averscore;
}edu[4]={{'刘灿',2021015442,90,95},{'张三',2021015443,85,95},{'李四',2021015442,90,90},{'王五',2021015442,90,85}};
int main()
{
struct student m;
int i;
for(i=0;i<=3;i++)
{
edu[i].averscore=(edu[i].score1+edu[i].score2)/2;
}
m=max(edu,4);
printf("%s\t%d\t%d\t%d\t%d\n",m.name,m.sno,m.score1,m.score2,m.averscore);
return 0;
}
struct student max(struct student x[],int length)
{
int i,j;
struct student t;
for(i=0;i<=length;i++)
for(j=i+1;j<=length;j++)
{
if(x[i].averscore<x[j].averscore)
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
return(x[0]);
}
你题目的解答代码如下:
#include "stdio.h"
struct student
{
char name[20];
int sno;
int score1;
int score2;
float averscore;
} edu[4] = {{"刘灿", 2021015442, 90, 95}, {"张三", 2021015443, 85, 95}, {"李四", 2021015442, 90, 90}, {"王五", 2021015442, 90, 85}}; //字符串要用双引号
struct student max(struct student x[], int length); //要在调用前面声明
int main()
{
struct student m;
int i;
for (i = 0; i <= 3; i++)
{
edu[i].averscore = (edu[i].score1 + edu[i].score2) / 2.0;//除数改成浮点数
}
m = max(edu, 4);
printf("%s\t%d\t%d\t%d\t%f\n", m.name, m.sno, m.score1, m.score2, m.averscore);//m.averscore是浮点数要用%f输出
return 0;
}
struct student max(struct student x[], int length)
{
int i, j;
struct student t;
for (i = 0; i < length; i++)
for (j = i + 1; j < length; j++)
{
if (x[i].averscore < x[j].averscore)
{
t = x[i];
x[i] = x[j];
x[j] = t;
}
}
return (x[0]);
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
有错误提示信息吗?
edu[4]={{'刘灿',2021015442,90,95},{'张三',2021015443,85,95},{'李四',2021015442,90,90},{'王五',2021015442,90,85}};
改为
edu[4]={{"刘灿",2021015442,90,95},{"张三",2021015443,85,95},{"李四",2021015442,90,90},{"王五",2021015442,90,85}};
字符串要用双引号,不是单引号
#include "stdio.h"
struct student
{
char name[20];
int sno;
int score1;
int score2;
float averscore;
}edu[4]={{"刘灿",2021015442,90,95},{"张三",2021015443,85,95},{"李四",2021015442,90,90},{"王五",2021015442,90,85}};
struct student max(struct student x[],int length)
{
int i,j;
struct student t;
for(i=0;i<length-1;i++)
for(j=i+1;j<length;j++)
{
if(x[i].averscore<x[j].averscore)
{
t=x[i];
x[i]=x[j];
x[j]=t;
}
}
return(x[0]);
}
int main()
{
struct student m;
int i;
for(i=0;i<=3;i++)
{
edu[i].averscore=(edu[i].score1+edu[i].score2)/2.0;
}
m=max(edu,4);
printf("%s\t%d\t%d\t%d\t%.1f\n",m.name,m.sno,m.score1,m.score2,m.averscore);
return 0;
}