这个程序是输入M个学生的,N门课的成绩....然后求平均成绩等等什么的.....下面是我写的程序....
成绩的输入我是通过input函数来实现的...但是现在出现了个问题,没有什么语法错误,但是在编译的时候,在调用INPUT函数的时候,SCANF执行不了..不知道为什么...TC下看到的结果 是这样的...
Input the score:
NO1: scanf : floating point formats not linked
Abnormal program termination
然后就自动退出了.后面不再执行.不知道是怎么回事....请各位不吝指教...谢谢
#define M 10
#define N 5
float student_average(float (*p)[N],int stuno)/*求学生平均成绩*/
{ float sum=0;
int i;
for(i=0;i<N;i++)
sum=sum+*(*(p+stuno)+i);
return sum/N;
}
float course_average(float (*p)[N],int courseno)/*求每门课的平均成绩*/
{ float sum=0;
int i;
for(i=0;i<M;i++)
sum=sum+*(*(p+i)+courseno);
return sum/M;
}
float highest(float (*p)[N]) /*计算最高分*/
{ float most=0;
int i,j;
printf("Highest score:\n");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(most<*(*(p+i)+j))
most=*(*(p+i)+j);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(*(*(p+i)+j)==most)
printf("Highest score:%3.2f NO.%d course:%d\n",most,i+1,j+1);
}
float fangcha(float (*p)[N]) /*求方差*/
{ int i;
float result,sum1=0,sum2=0;
for(i=0;i<M;i++)
{sum1=sum1+student_average(p,i)*student_average(p,i);
sum2=sum2+student_average(p,i);
}
result=sum1/N-(sum2/N)*(sum2/N);
return result;
}
void input(float (*p)[N]) /*输入成绩*/
{ int i,j;
printf("Input the score:\n");
for(i=0;i<M;i++)
{printf("NO%d:",i+1);
for(j=0;j<N;j++)
scanf("%f",*(p+i)+j);
printf("\n");
}
}
void main()
{ float stu[M][N];
int i,j;
input(stu);
for(i=0;i<M;i++)
printf("the average score of NO%d is: %3.2f\n",i+1,student_average(stu,i));
for(j=0;j<N;j++)
printf("the average score of course%d is: %3.2f\n",j+1,course_average(stu,j));
highest(stu);
printf("Fangcha: %3.2f\n",fangcha(stu));
getch();
}
[此贴子已经被作者于2006-11-16 16:59:16编辑过]
----------------解决方案--------------------------------------------------------
我在LCC下运行了下,除了加了个#include <stdio.h>和在求最高分的函数那加了个return 外,没发现错误。
----------------解决方案--------------------------------------------------------
vc下验证,一个错误没有
输入很正常
----------------解决方案--------------------------------------------------------
这样,就没有那个提示了:
#define M 10
#define N 5
float student_average(float (*p)[N],int stuno)/*求学生平均成绩*/
{ float sum=0;
int i;
for(i=0;i<N;i++)
sum=sum+*(*(p+stuno)+i);
return sum/N;
}
float course_average(float (*p)[N],int courseno)/*求每门课的平均成绩*/
{ float sum=0;
int i;
for(i=0;i<M;i++)
sum=sum+*(*(p+i)+courseno);
return sum/M;
}
float highest(float (*p)[N]) /*计算最高分*/
{ float most=0;
int i,j;
printf("Highest score:\n");
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(most<*(*(p+i)+j))
most=*(*(p+i)+j);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(*(*(p+i)+j)==most)
printf("Highest score:%3.2f NO.%d course:%d\n",most,i+1,j+1);
}
float fangcha(float *p) /*求方差*/
{ int i;
float result,sum1=0,sum2=0;
for(i=0;i<M;i++)
{sum1=sum1+student_average(p,i)*student_average(p,i);
sum2=sum2+student_average(p,i);
}
result=sum1/N-(sum2/N)*(sum2/N);
return result;
}
void input(float (*p)[N]) /*输入成绩*/
{ int i,j;
printf("Input the score:\n");
for(i=0;i<M;i++)
{printf("NO%d:",i+1);
for(j=0;j<N;j++)
scanf("%f",*(p+i)+j);
printf("\n");
}
}
void main()
{ float stu[M][N];
int i,j;
input(stu);
for(i=0;i<M;i++)
printf("the average score of NO%d is: %3.2f\n",i+1,student_average(stu,i));
for(j=0;j<N;j++)
printf("the average score of course%d is: %3.2f\n",j+1,course_average(stu,j));
highest(stu);
printf("Fangcha: %3.2f\n",fangcha(stu));
getch();
}
----------------解决方案--------------------------------------------------------
除非你用TC,不然不会出现这个问题
----------------解决方案--------------------------------------------------------
除非你用TC,不然不会出现这个问题
不会吧....WIN-TC也出现同样的问题啊...
----------------解决方案--------------------------------------------------------
回四楼的:如果那样改的话..我并不知道为什么前面部分确实可以运行了...但是到求方差的时候又出错了...因为那两个指针很明显不匹配的....我找了好长时间,,,没发现有什么错误....但是就是不能通过....晕了...既然有人说VC里面一切正常...难道这个错误是TC本身的BUG....不会吧?
[此贴子已经被作者于2006-11-16 23:01:19编辑过]
----------------解决方案--------------------------------------------------------
回复ls,试着改改指针类型或表达方法,可能就会好的
----------------解决方案--------------------------------------------------------
编译时让TC连接浮点库(8087/80286 或 仿真8087/80286)即可。
在 main() 函数出蓝色粗体标识的那两句增加上去试试(先任意输入一个 double 类型的值),这样可以让TC知道有浮点运算需要连接浮点库。
int main()
{
float stu[M][N];
int i,j;
double T;
scanf("%lf", &T);
input(stu);
for(i=0;i<M;i++)
.
.
.
}
----------------解决方案--------------------------------------------------------
麻烦问一下楼主,你的方差的计算方法我怎么看不懂啊?麻烦您解释一下吧。谢谢您!
----------------解决方案--------------------------------------------------------