130 likes | 251 Views
主讲 范刚. 题目 及分析. 用随机数产生器建立模拟龟兔赛跑的程序。对手从 71 个方格的第 1 格开始起跑,每格表示跑道上的一个可能位置,终点线再第 71 格处。 有一个每秒钟滴答一次的中,程序应按下列规则调整动物的位置: 动物 运动类型 时间比 移动距离
E N D
题目 及分析 • 用随机数产生器建立模拟龟兔赛跑的程序。对手从71个方格的第1格开始起跑,每格表示跑道上的一个可能位置,终点线再第71格处。 有一个每秒钟滴答一次的中,程序应按下列规则调整动物的位置: • 动物 运动类型 时间比 移动距离 • 乌龟 快速爬行 50% 3m • 滑到 20% -6m • 缓慢爬行 30% 1m • 兔子 睡觉 20% 0m • 大步跳 20% 9m • 大步滑到 10% -12m • 小步跳 30% 1m • 小步滑到 20% -2m
第一步 建立跑道 char gui[73]={“_______________________________________________________________________p”}; //71个_和* char tu[73]={"***********************************************************************P"};
第二步 随机数的产生 • 由于本题有概率问题 所以需要用的随机数 srand(time(0)); for(i=0;;++i) { a=(rand()%100);b=(rand()%100); } 注:为龟兔分别用两个随机数 ,是为了防止出现二者产生对应关系 如果用一个随机数 则 兔子睡觉的时候 乌龟一定的缓慢爬行的
第三步 确定乌龟的位置 • if(a<30) • { • printf(“缓慢爬行”); //乌龟有%20的概率缓慢爬行 • pgui+=1; • } • else if(a>=30&&a<50) • { • printf(“滑倒 ”); //有%20的概率滑倒 • pgui-=6; • } • else if(a>=50) • { • printf(“快速爬行”); //有%50的概率快速爬行 • pgui+=3; • } • if(pgui<0) //防止出界 • pgui=0; • if(pgui>71) //防止出界 • pgui=71; gui[pgui]=‘g’; //标注乌龟的位置 printf(“%s\n\n”,gui); //打印出跑道 及乌龟
第四步 确定兔子的位置 (同乌龟) • if(b<20) • { • printf("睡觉 "); • ptu+=0; • } • else if(b>=20&&b<40) • { • printf("大步跳 "); • ptu+=9; • } • else if(b>=40&&b<50) • { • printf("大滑倒 "); • ptu+=(-12); • } else if(b>=50&&b<80) { printf("小步跳 "); ptu+=1; } else if(b>=80) { printf("小步滑倒"); ptu+=(-2); } if(ptu<0) ptu=0; if(ptu>71) ptu=71; tu[ptu]='t'; printf("%s\n\n\n",tu);
第五步 判断是否胜利 • if(pgui>=71) • { • printf("\n------乌龟获胜!!"); break; • } if(ptu>=71) • { • printf("\n-------兔子获胜!!"); break; • }
第六步 完善并刷屏 • 1.要在下次输出之前 将这次打印的乌龟位置恢复到原来的样子。 • 2.清屏 要求每次执行下次打印前将上次的输出 清除 清屏函数 • 3.主动延时 • 延时 gui[pgui]='_'; tu[ptu]='*';
为什么跑道是71格 命令行界面 默认的是 80个字符宽度
Visual c++中的清屏函数 • #include <stdlib.h> void main() { system("cls"); • }
延时的方法 • 1.多次循环 • for(j=0;j<5000000;++j){} • 2.读取时间 • #include<stdio.h> • #include<time.h> • int main() • { • int time1,time2; • time1=clock(); • while(1) • { time2=clock(); • if((time2-time1)>5000) //可以做到精确控制 • break ; • } • }
睡眠函数(推荐) • 函数名: sleep 功 能: 执行挂起一段时间 • #include <stdio.h> • #include<windows.h> //非 doc.c visual c++ 用 windows.h • int main(void) • { • int i; • for (i=1; i<5; i++) • { • printf("Sleeping for %d seconds\n", i); • Sleep(i*1000); //注意是大写 单位是毫秒 • } • return 0; • }