读书人

报童有关问题请高人指点老师也看不

发布时间: 2012-03-23 12:06:21 作者: rapoo

报童问题,请高人指点,老师也看不出来错
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/timeb.h>
abc()
{
int i,k=0,m;
double j;
float h=0,a[9]={0.025,0.05,0.1,0.175,0.3,0.175,0.1,0.005,0.025};

unsigned int seedVal;
struct timeb timeBuf;
ftime(&timeBuf);
seedVal=((((unsigned int)timeBuf.time&0xFFFF)+
(unsigned int)timeBuf.millitm)^
(unsigned int)timeBuf.millitm);
srand((unsigned int)seedVal);
i=rand();
j=((double)i/(double)RAND_MAX);
do
{h=h+a[k];
k++;
}while(h <j);
m=k+1;
return(m);
}
main()
{
int Tm,G,T,z,z1,r;
double s,s1;
printf( "Tm= ");
scanf( "%d ",&Tm);
printf( "G= ");
scanf( "%d ",&G);
printf( "s= ");
scanf( "%f ",&s);
for(z=1;z <G;z++)
{
s1=0;
for(T=1;T <=Tm;T++)
{
r=abc();
printf( "%d ",r);
if(r <z)
s1=s1+(z-r)*1;
else
s1=s1+(r-z)*2;}
printf( "%f ",s1);
if(s> (double)(s1/Tm))
{s=(double)(s1/Tm);
z1=z;}
}
printf( "z1=%ds=%f\n ",z1,s);
}


不明白为什么逐行读都没有问题,但最后输出总是不对,S的值总为零

[解决办法]
在每次输入完一次数据后执行fflush(stdin);清除流状态
比如:scanf( "%d ",&Tm);
fflush(stdin); //add
printf( "G= ");
scanf( "%d ",&G);
[解决办法]
你这个代码是有问题的

main()
{
int Tm,G,T,z,z1,r;
double s,s1;
printf( "Tm= ");
scanf( "%d ",&Tm);
printf( "G= ");
scanf( "%d ",&G);
printf( "s= ");
scanf( "%f ",&s);//这行代码也有问题,输入的数据你会发现没有输入进去,结果是一个未初始化的值,因为类型不匹配,该行结果只是把数据放入前面的四个字节,scanf( "%lf ",&s)才正确
for(z=1;z <G;z++)
{
s1=0;
for(T=1;T <=Tm;T++)
{
r=abc();
printf( "%d ",r);
if(r <z)
s1=s1+(z-r)*1;
else
s1=s1+(r-z)*2;}


printf( "%f ",s1);
//这个判断是有问题的,如果s <=的时候怎么办,那么z1时没有初始化,可能会产生一个非常奇怪数,这个数在不同的编译器不同。
if(s> (double)(s1/Tm))
{
s=(double)(s1/Tm);
z1=z;}
}
printf( "z1=%ds=%f\n ",z1,s);
}

除了上面的两个情况,其他的情况都正确

读书人网 >C语言

热点推荐