C程序中使用结构体问题,编译出错,不知道哪里错了,求解答,最好能把可以运行成功的程序给出,万分感激

某学习小组有5个人,每个人的信息包括学号、姓名和成绩。编写一个程序,要求从键盘上输入他们的信息,并求出小组的平均成绩以及最高成绩者的信息
#include<stdio.h>
struct student{
int num;
char name[20];
float score;
};
void fun1(struct student *ps)
{
int i;float ave, sum = 0;
for(i = 0; i < 5; i++)
sum += (ps + i) -> score;
ave = (sum)/5;
printf("平均成绩=%f", ave);
}
void fun2(struct student *ps)
{
int i, j, k;float temp;
for(i = 0; i < 4; i++)
for(j = 0; j < 4 - i; j++)
if((ps + j) -> score < (ps + j + 1) -> score)
{temp = (ps + j) -> score; (ps + j) -> score= (ps + j + 1) -> score; (ps + j + 1) = temp;}
printf("%d %s %f", ps -> num, ps -> name, ps -> score);
}
void main()
{int i;
struct student stu[5], *ps = stu;
for(i = 0; i < 5;i++)
scanf("%d %s %f", (ps + i) -> num, (ps + i) -> name, (ps + i) -> score);
fun1(ps);
fun2(ps);
}

Compiling...
2014122302.c
D:\编程\2014122302\2014122302\2014122302.c(21) : error C2115: '=' : incompatible types
D:\编程\2014122302\2014122302\2014122302.c(21) : error C2106: '=' : left operand must be l-value
执行 cl.exe 时出错.
2014122302.exe - 1 error(s), 0 warning(s)

编译了一下,
是这一行出错:
{temp = (ps + j) -> score; (ps + j) -> score= (ps + j + 1) -> score; (ps + j + 1) = temp;}
具体一点是:
(ps + j + 1) = temp;出错
报告赋值操作类型错误,改成:
(ps + j + 1)-> score = temp;
可正常编译,

另,不知这一段:
for(i = 0; i < 4; i++)
for(j = 0; j < 4 - i; j++)
if((ps + j) -> score < (ps + j + 1) -> score)
{temp = (ps + j) -> score; (ps + j) -> score= (ps + j + 1) -> score; (ps + j + 1) = temp;}
是否在做冒泡算法,
是的话,似应改成:
for(i = 0; i < 4; i++)
for(j = i+1; j < 4+1 ; j++)
if((ps + i) -> score < (ps + j) -> score)
{temp = (ps + i) -> score; (ps + i) -> score= (ps + j) -> score; (ps + j) = temp;}
供参考
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网