当前位置: 代码迷 >> C语言 >> [求助]这个异常反应怎么回事?
  详细解决方案

[求助]这个异常反应怎么回事?

热度:194   发布时间:2006-11-16 16:53:47.0
[求助]这个异常反应怎么回事?

这个程序是输入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 &lt;stdio.h&gt;和在求最高分的函数那加了个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,不然不会出现这个问题


----------------解决方案--------------------------------------------------------
以下是引用我不是郭靖在2006-11-16 19:48:14的发言:

除非你用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++)
.
.
.
}


----------------解决方案--------------------------------------------------------
麻烦问一下楼主,你的方差的计算方法我怎么看不懂啊?麻烦您解释一下吧。谢谢您!
----------------解决方案--------------------------------------------------------
  相关解决方案