c语言实现截断二进制指数避退算法.docVIP

  • 8
  • 0
  • 约1.58千字
  • 约 3页
  • 2017-06-07 发布于重庆
  • 举报
c语言实现截断二进制指数避退算法

/******************************** writor; liuyong time ; 2014.3.11 Hubei University *********************************/ #includestdio.h #includestdlib.h #includetime.h #define CONTENTION_PERIOD 51.20 //以太网中争用期时间 2T(单位为微秒) int GetRand(int min, int max) //得到min到 max { // SYSTEMTIME t; // GetSystemTime(t); //取系统时间,格林威治时间之间的一个随机数 // srand(t.wMilliseconds); int r=rand()%(max-min+1)+min; return r; } int TwoPowerK(int k) //二的k次幂 { int a=2; int f=1; while(k--) { f*=a; } return f; } int Resend(int i) //第i次重传操作,计算重传退避时间,等待后重传 //(具休实现未定义,仅用于演示,显示退避时间) { int r,MAX; double BackTime; printf(开始退避操作!); if(i=10) MAX=TwoPowerK(i)-1; if(i10) { printf(重传次数超过10,从10截止。\n); MAX=TwoPowerK(10)-1; } printf(随机数范围:0到%d\n,MAX); r=GetRand(0,MAX); printf(得到的随机数r为:%d\n,r); BackTime=r*CONTENTION_PERIOD; printf(退避时间为:51.2*BackTime=%f微秒\n,BackTime); printf(退避完成,开始重传!\n); return 0; } void main() { int k=0; //用以表示重传的次数 int p; //用于自己设置发生碰撞的概率 printf(***截断二进制退避指数算法演示***\n); printf(每次传送发生碰撞的概率为p%,请输入p的值,范围为0到100之间的整数:); scanf(%d,p); while(1) { if(GetRand(1,100)=p) //如果发生碰撞,其概率为p% { k++; if(k=16) //最大重传送次数为16 { printf(***发生碰撞!,准备进行第%d次重传!***\n,k); Resend(k); continue; } if(k16) { printf(重传16次仍未成功,丢弃本帧,向高层报告!\n); break; } } if(GetRand(1,100)p) //如果没有发生碰撞,其概率为1-p% { printf(本次未发生碰撞,传送成功!!共重传%d次。\n,k); break; } } }

文档评论(0)

1亿VIP精品文档

相关文档