读书人

TC2.0中有关运行出现floating point e

发布时间: 2012-02-15 12:09:44 作者: rapoo

TC2.0中有关运行出现floating point error:domain
写了个程序,运行时出现floating point error:domain
源程序如下: 望高手支招
#include <conio.h>
#define size 100

main()
{

int i,j,m,n,pp[size]; /*********变量**************/
float p[size]; /**********各单位人数********/
float seat[size]; /****各单位分配的席位*******/
float q[size]; /*******相对公平度***********/
float max; /*****相对公平度的最大值*****/
int pos; /****相对公平度最大的单位****/
int sum=0; /*****已分配席位总数*********/
clrscr();

printf( "Input the number of units(m):\n ");
scanf( "%d ",&m); /***输入参加分配席位的单位数**/
printf( "Input the total number of seats(n):\n ");
scanf( "%d ",&n); /******输入席位总数***********/
printf( "Input the number of each unit:\n ");
for(i=0;i <m;i++)
scanf( "%d ",&pp[i]); /*****输入各单位人数**********/
for(i=0;i <m;i++)
{seat[i]=1.0;p[i]=pp[i];}

while(sum <n-1) /***循环条件:席位未分配完时**/
{
sum=0; /**本次已分配席位总数清空为0**/


for(i=0;i <m;i++)
sum=sum+seat[i]; /*****计算本次分配席位总数****/
for(j=0;j <m;j++)
q[j]=pp[j]*pp[j]/(seat[j]*(seat[j]+1)); /*计算各单位相对公平度*/

for(j=0,max=q[0],pos=0;j <n;j++)
if (q[j]> max)
{
max=q[j];
pos=j;
} /*****求相对公平度最大的单位********/
seat[pos]=seat[pos]+1; /*给相对公平度最大的单位增加1个席位*/
}
printf( "people:\n ");
for(i=0;i <m;i++)
printf( "%5d ",pp[i]); /*****输出各单位人数****/
printf( "\nseat:\n%5d\nresult:\n ",n); /*****输出席位总数*****/
for(i=0;i <m;i++)
printf( " seat[%d]=%.0f\n ",i+1,seat[i]); /*******输出分配结果****/
}

[解决办法]
LS的
for(i=0;i <m;i++)
{seat[i]=1.0;p[i]=pp[i];}
这里seat[]数组初始化了。。。
[解决办法]
lz单步跟踪一下,对于这种runtime error,我们没有数据,也帮不了你
[解决办法]
winTC,
没有修改任何代码,
输入 m=3,n=21,pp[3]={103,63,34}
输出:
seat[1]=11
seat[2]=6
seat[3]=4 //这个席位分配和人数比例也吻合

[解决办法]
float p[size];
==》
float p[size]={0.0}; //试试加个初始化看看,是否是 浮点库 的连接问题
[解决办法]
溢出

读书人网 >C语言

热点推荐