
又是C语言问题!!高手们帮帮忙吧!!
用max函数找出各课的最高分的同学,并且最高分的学生的信息要在主函数中输出。以下是我编的程序,有问题,但是不知道错在哪??请高手帮忙看看!!#include<std...
用max函数找出各课的最高分的同学,并且最高分的学生的信息要在主函数中输出。以下是我编的程序,有问题,但是不知道错在哪??请高手帮忙看看!!#include <stdio.h>#define N 5struct str0{ float a,b,c;};struct str1{ char no[3]; char name[15]; struct str0 chengji;};struct str1 inform[N]={ "01","ZhaoLi",{80.5,78,96}, "02","QianDuo",{67.5,69,78.5}, "03","SunMin",{95,95,95}, "04","LiQing",{78,82,86}, "05","LiYi",{79,86,66} };void max(int * max){ int i; for(i=1,*max=0;i<N;i++) { if(inform[*max].chengji.a<inform[i].chengji.a) {*max=i;} } for(i=1,*(++max)=0;i<N;i++) { if(inform[*(++max)].chengji.b<inform[i].chengji.b) {*(++max)=i;} } for(i=1,*(++max)=0;i<N;i++) { if(inform[*(++max)].chengji.c<inform[i].chengji.c) {*(++max)=i;} }}void main(){ float ave; int m[3]; max(m); printf("C 最高分:%s ,%.1f",inform[m[0]].name,inform[m[0]].chengji.a); printf("BD 最高分:%s ,%.1f",inform[m[1]].name,inform[m[1]].chengji.b); printf("电路 最高分:%s ,%.1f",inform[m[2]].name,inform[m[2]].chengji.c);}
展开
展开全部
#include <stdio.h>
#define N 5
struct str0{ float a,b,c;};
struct str1{ char no[3];char name[15];struct str0 chengji;};
struct str1 inform[N]={ "01","ZhaoLi",{80.5,78,96}, "02","QianDuo",{67.5,69,78.5}, "03","SunMin",{95,95,95}, "04","LiQing",{78,82,86}, "05","LiYi",{79,86,66} };
void max(int * max)
{
int i;
for(i=1,*max=0;i<N;i++)
{
if(inform[*max].chengji.a<inform[i].chengji.a)
{
*max=i;
}
}
for(i=1,*(max+1)=0;i<N;i++)
{
if(inform[*(max+1)].chengji.b<inform[i].chengji.b)
{
*(max+1)=i;
}
}
for(i=1,*(max+2)=0;i<N;i++)
{
if(inform[*(max+2)].chengji.c<inform[i].chengji.c)
{
*(max+2)=i;
}
}
}
void main()
{
float ave;
int m[3];
max(m);
printf("C 最高分:%s ,%.1f\n",inform[m[0]].name,inform[m[0]].chengji.a);
printf("BD 最高分:%s ,%.1f\n",inform[m[1]].name,inform[m[1]].chengji.b);
printf("电路 最高分:%s ,%.1f\n",inform[m[2]].name,inform[m[2]].chengji.c);
}
问题很简单,指针控制出错了,里面的*(++max)每循环一次指针就会移动一次,会导致指针指向溢出,改成*(p+N)形式来操作就可以了,能够输出正确的结果。
另外你的max函数里面的形参名称最后不要与函数名称相同,还有就是里面只能在已知科目数量的前提下判断,所以有待改进,可以考虑给max函数传递一个科目数量形参。
#define N 5
struct str0{ float a,b,c;};
struct str1{ char no[3];char name[15];struct str0 chengji;};
struct str1 inform[N]={ "01","ZhaoLi",{80.5,78,96}, "02","QianDuo",{67.5,69,78.5}, "03","SunMin",{95,95,95}, "04","LiQing",{78,82,86}, "05","LiYi",{79,86,66} };
void max(int * max)
{
int i;
for(i=1,*max=0;i<N;i++)
{
if(inform[*max].chengji.a<inform[i].chengji.a)
{
*max=i;
}
}
for(i=1,*(max+1)=0;i<N;i++)
{
if(inform[*(max+1)].chengji.b<inform[i].chengji.b)
{
*(max+1)=i;
}
}
for(i=1,*(max+2)=0;i<N;i++)
{
if(inform[*(max+2)].chengji.c<inform[i].chengji.c)
{
*(max+2)=i;
}
}
}
void main()
{
float ave;
int m[3];
max(m);
printf("C 最高分:%s ,%.1f\n",inform[m[0]].name,inform[m[0]].chengji.a);
printf("BD 最高分:%s ,%.1f\n",inform[m[1]].name,inform[m[1]].chengji.b);
printf("电路 最高分:%s ,%.1f\n",inform[m[2]].name,inform[m[2]].chengji.c);
}
问题很简单,指针控制出错了,里面的*(++max)每循环一次指针就会移动一次,会导致指针指向溢出,改成*(p+N)形式来操作就可以了,能够输出正确的结果。
另外你的max函数里面的形参名称最后不要与函数名称相同,还有就是里面只能在已知科目数量的前提下判断,所以有待改进,可以考虑给max函数传递一个科目数量形参。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询