首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-23 
报童问题,请高人指点,老师也看不出来错#include stdio.h#include stdlib.h#include sys/types.h#inc

报童问题,请高人指点,老师也看不出来错
#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);
}

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

热点排行