大家晚上好
这道题有三个函数,average(),search1(),和search2(),通过它们分别实现求所有成绩的平均值,打出第n个学生的成绩,和找出至少有一门功课不及格的同学的学号并打印出全部成绩.
这道题前两个函数都可以实现,而第三和函数编译成功但执行失败.我看了好几天还是没找到原因
特求助于此,希大家不吝赐教,不胜感激!
main()
{void average();
void search1();
void search2();
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
average(*score,12);
search1(score,2);
search2(score,3);
}
void average(p,n)
float *p;int n;
{float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search1(p,n)
float (*p)[4];int n;
{int i;
printf("the scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
void search2(p,n)
float (*p)[4];int n;
{int i,j,flag;
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{printf("no.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------
大家晚上好
这道题有三个函数,average(),search1(),和search2(),通过它们分别实现求所有成绩的平均值,打出第n个学生的成绩,和找出至少有一门功课不及格的同学的学号并打印出全部成绩.
这道题前两个函数都可以实现,而第三和函数编译成功但执行失败.我看了好几天还是没找到原因
特求助于此,希大家不吝赐教,不胜感激!
main()
{void average();
void search1();
void search2();
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
average(*score,12);
search1(score,2);
search2(score,3);
}
void average(p,n)
float *p;int n;
{float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search1(p,n)
float (*p)[4];int n;
{int i;
printf("the scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
void search2(p,n)
float (*p)[4];int n;
{int i,j,flag;
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{printf("no.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}
没运行你的代码,估计调试后会有很多很多错误.
----------------解决方案--------------------------------------------------------
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{printf("no.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));]
楼主用什么编译器啊,赶快扔掉换Dev C++,你那写法现在好象都没有了,上面这段肯定有问题,我没法试,你的程序我编译器编译不了,我怕累坏了编译器
[此贴子已经被作者于2006-5-2 23:34:48编辑过]
----------------解决方案--------------------------------------------------------
void search2((*p)[4];,n)
float int n;
{int i,j,flag;
for(j=0;j<n;j++)
{flag=0;
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
if(flag==1)
{printf("no.%d is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}
估计这样就行了!
----------------解决方案--------------------------------------------------------
应该算重复定义了吧!
----------------解决方案--------------------------------------------------------
以上几楼都没命中要点,我改了下,楼主自己对照
[QUOTE]
#include "stdio.h"
void average(float *p,int n)
{
float *p_end;
float aver=0;
for(p_end=p+n-1;p<=p_end;p++)
aver+=(*p);
aver=aver/n;
printf("average=%5.2f\n",aver);
}
void search1(float (*p)[4],int n)
{
int i;
printf("\nThe scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",p[n-1][i]);
printf("\n");
}
void search2(float (*p)[4],int n)
{
int i,j,flag;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<4;j++)
if(p[i][j]<60.0)
{
flag=1;
break;
}
if(flag==1)
{
printf("\nNo.%d is fail,his scores are:\n",i+1);
for(j=0;j<4;j++)
printf("%5.2f ", p[i][j]);
printf("\n");
}
}
}
int main()
{
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
average(*score,12);
search1(score,2);
search2(score,3);
return 0;
}
[/QUOTE]
----------------解决方案--------------------------------------------------------
为什么我的帖子没了啊!
----------------解决方案--------------------------------------------------------
还是你的牛比啊,这是潭书愿题哈!
----------------解决方案--------------------------------------------------------
通过 7楼feng1256 的帮助使我这道题顺利的解决了。
主要有以下几点原因导致这道题的问题:
1、应该在for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
这个语句后面加一个break,也就是变成:
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)
{flag=1;
break;
}
不加也可以但程序不够严密。
2、也是最主要的一点就是我定义的数组元素是float,而我输出的时候
用的是%d导致出错。
以上是我对这道题的总结。
在这里我特别的感谢7楼,是你拨开迷雾,给了我启发。谢谢了
不过其他各楼层的朋友也同样给予感谢,是你们给了这张贴人气,哈哈
最后我也要说,这个程序不会累坏编译器,编译也并没有错。哈哈
这道题在潭书的185页,编译器我用的是turbo2.0,虽然老点但用的人应该
还不少,毕竟千里之行,始于足下,基础打牢还是好,慢慢来,我不急,大家晚安 明见!
[此贴子已经被作者于2006-5-3 1:21:29编辑过]
----------------解决方案--------------------------------------------------------