帮小弟我看看为什么会越界

帮我看看为什么会越界?
程序中,黄色点的轨迹所成的直线应该在x=100-400,y=100-300之间显示,为什么左右下三个方向都越界了呢?哪位大虾帮忙看看。

#include <stdlib.h>
#include   <graphics.h>
#include <stdio.h>
main()
{float   pf,ps,a,j;
  int   y,n,x,i;
  int   GraphDriver=DETECT,GraphMode;
  initgraph(   &GraphDriver,   &GraphMode,   "c:\\turboc\\cgi "   );
  setbkcolor(GREEN);
  bar(100,100,400,400);
  setfillstyle(SOLID_FILL,RED);
  bar(100,300,400,400);
  printf( "\n\ninput   the   number   of   n:\n ");
  scanf( "%d ",&n);
  printf( "input   the   value   of   pf(0-1): ");
  scanf( "%f ",&pf);
  ps=(1-pf)/2;
  for(i=0;i <n;i++)
    {j=(float)rand()/32767*300+100;
      x=(int)j;
      y=100;
      while(y <=300)
        {if(x> =400)   x=100+x%400;
          if(x <100)   x=300+x%100;
          a=(float)rand()/32767;
          if(a <pf)   y++;
          else   if(a <=pf+ps)   x--;
          else   if(a <=1)   x++;
          putpixel(x,y,YELLOW);
          if(y==300)   putpixel(x,y,BLUE);
          if(getpixel(x-1,y)==1)   putpixel(x,y,BLUE);
          if(getpixel(x+1,y)==1)   putpixel(x,y,BLUE);
          if(getpixel(x,y+1)==1)   putpixel(x,y,BLUE);
        }
    }
  getch();
  closegraph;
}

------解决方案--------------------
呵呵,还是jixingzhong(瞌睡虫·星辰) 清楚明白,以前我也用过,但没有深入理解过!笨驴。。。。。。。。。


关于随机数的解释是这样的:
_ 尽管在计算机中并不存在一个真正的随机数发生器,但是可以作到使产生的数字的重复
频率很低,一致于他们看起来很随机。实现这一功能的程序<函数> 叫做伪随机数发生器。
_有关如何产生随机数的理论有很多,一致于可以用一本厚厚的书来讨论了。:)(主要是数学上的知识)所以我们关心的是如何去产生随机数。
_ _ 不管你用什么方法实现随机数发生器,你都必须要要给它提供一个被称为”种子“的
的初始值,而且这个值本身最好是随机的。这个值一般是用快速记数寄存器或移位寄存器来产生的。_但实际中我们一般用时间值来替代。
_现在的C编译器都提供一个基于ANSI标准的的伪随机数发生器函数,用来生成随机数,
MS和BORLAND都是通过srand()和rand()来支持这种标准的。
_ 它们的工作流程如下:
(1):首先,给srand()提供一个”种子 ",它是一个unsigned_int类型的值。
(2):_然后,调用rand(),它会根据提供给srand()的值返回一个随机数(范围在_0~32767之间)
(3):根据需要多次调用rand(),不断得到新的随机数。
(4):无论什么时候可以给srand()提供一个新的“种子”,从而进一步“随机化”rand()的
输出结果。

------解决方案--------------------
while 部分修改如下:(其他没有任何修改)

while(y <300) /* = 300 时候为退出条件, 所以修改为 <300 */
{
a=(float)rand()/32767;
if(a <pf) y++;
else if(a <=pf+ps) x--;
else if(a <=1) x++;

if(x> 400) x=400; /*增加三个约束条件*/
if(x <100) x=100;
if(y> 300) y=300; /*y 是单增的, 所以一个条件就足够了*/

putpixel(x,y,YELLOW);
if(y==300) putpixel(x,y,BLUE);
if(getpixel(x-1,y)==1) putpixel(x,y,BLUE);
if(getpixel(x+1,y)==1) putpixel(x,y,BLUE);
if(getpixel(x,y+1)==1) putpixel(x,y,BLUE);
}