作业题,不知道问题在哪,大家帮我看看
代码就这样,输入两行学生数据后就自动结束了
#include <stdio.h>
#include <stdlib.h>
struct S
{
float s1;
float s2;
float s3;
};
struct m
{
int num;
char n[20];
struct S s;
float a;
};
int main()
{
struct m a[5],*p=a;
void inpute(struct m p[]);
float average(float p1,float p2,float p3,float p4,float p5);
int max(struct m p[]);
int k;
float j;
printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
inpute(p);
printf("总平均分:\n");
j=average((*p).a,(*(p+1)).a,(*(p+2)).a,(*(p+3)).a,(*(p+4)).a);
printf("%f",j);
printf("最高分者:\n");
k=max(p);
printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n",(*(p+k)).num,(*(p+k)).n,(*(p+k)).s.s1,(*(p+k)).s.s2,(*(p+k)).s.s3,(*(p+k)).a);
return 0;
}
void inpute(struct m p[])
{
int i;
for(i=0;i<5;i++)
{
scanf("%d,%s,%f,%f,%f",p[i].num,p[i].n,p[i].s.s1,p[i].s.s2,p[i].s.s3);
p[i].a=(p[i].s.s1+p[i].s.s2+p[i].s.s3)/3.0;
}
}
float average(float p1,float p2,float p3,float p4,float p5)
{
float p;
p=p1+p2+p3+p4+p5;
return p;
}
int max(struct m p[])
{
int i,k=0;
for(i=0;i<5;i++)
{
if(p[i].a>p[k].a)
k=i;
}
return k;
}
修改处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
struct S
{
float s1;
float s2;
float s3;
};
struct m
{
int num;
char n[20];
struct S s;
float a;
};
int main()
{
struct m a[5], * p = a;
void inpute(struct m p[]);
float average(float p1, float p2, float p3, float p4, float p5);
int max(struct m p[]);
int k;
float j;
printf("请输入学生信息:学号,姓名,成绩1,成绩2,成绩3\n");
inpute(p);
printf("总平均分:\n");
j = average((*p).a, (*(p + 1)).a, (*(p + 2)).a, (*(p + 3)).a, (*(p + 4)).a)/5.0;//修改
printf("%f\n", j);
printf("最高分者:\n");
k = max(p);
printf("学号:%d 姓名:%s 科目1:%f 科目2:%f 科目3:%f 平均分:%f\n",
(*(p + k)).num, (*(p + k)).n, (*(p + k)).s.s1, (*(p + k)).s.s2, (*(p + k)).s.s3, (*(p + k)).a);
return 0;
}
void inpute(struct m p[])
{
int i;
for (i = 0; i < 5; i++)
{
scanf("%d%s%f%f%f", &p[i].num, p[i].n, &p[i].s.s1, &p[i].s.s2, &p[i].s.s3);//修改
//scanf("%d,%s,%f,%f,%f", p[i].num, p[i].n, p[i].s.s1, p[i].s.s2, p[i].s.s3);
p[i].a = (p[i].s.s1 + p[i].s.s2 + p[i].s.s3) / 3.0;
}
}
float average(float p1, float p2, float p3, float p4, float p5)
{
float p;
p = p1 + p2 + p3 + p4 + p5;
return p;
}
int max(struct m p[])
{
int i, k = 0;
for (i = 0; i < 5; i++)
{
if (p[i].a > p[k].a)
k = i;
}
return k;
}
1 输入时加逗号了吗
2 p为指针,应像p[i]->num这样使用,后续s结构体用.
3 你代码风格好怪