程序运行以后结果不是很正确。
题目的课件:
随机游走问题.rar
(127.97 KB)
我写的程序:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define PI 3.14159265
void main()
{
int i,j,flag,box1,box2,box3,box4;
double Direction,x1,y1,x,y;
box1=box2=box3=box4=0;
srand((unsigned)time(NULL));
for(i=0;i<10000;i++) //循环一万次。
{
x=y=0.0; //每个粒子都是从坐标轴原点出发。所以粒子对应的x轴的初值和y轴的初值都是0
flag=1;
for(j=0;j<500&&flag;j++) //每个粒子行走500个单位长度。由flag来判断要是进入小球了就消失。
{
Direction=(((float)rand())/32766)*2*PI; //随机抽取0到2π之间的任何一个角度来决定随机方向
x1=cos(Direction); //计算出来随机方向粒子坐标的x轴的改变量
y1=sin(Direction); //计算出来随机方向粒子坐标的y轴的改变量
if(x+x1>=60) //判断是否到x为正的最大值时候的碰壁
{
x=60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=y+(60-x-x1)/x1*y1; //计算出来反弹的粒子坐标的y轴的改变量 }
else if((x+x1>=60)&&(y+y1>=50)) //判断是否到x为正的最大值时候并且y为正的最大值时候的碰壁
{
x=60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if((x+x1>=60)&&(y+y1<=-50)) //判断是否到x为正的最大值时候并且y为负的最小值时候的碰壁
{
x=60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=-50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if(y+y1>=50) //判断是否到y为正的最大值时候的碰壁
{
x=x+(60-y-y1)/y1*x1; //计算出来反弹的粒子坐标的x轴的改变量
y=50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if((x+x1<=-60)&&(y+y1>=50)) //判断是否到x为负的最小值时候并且y为正的最大值时候的碰壁
{
x=-60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if(x+x1<=-60) //判断是否到x为负的最小值时候碰壁
{
x=-60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=y+(60-x-x1)/x1*y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if((x+x1<=-60)&&(y+y1<=-50)) //判断是否到x为负的最小值时候并且y为负的最小值时候的碰壁
{
x=-60-x1; //计算出来反弹的粒子坐标的x轴的改变量
y=-50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else if(y+y1<=-50) //判断是否到y为负的最小值时候的碰壁
{
x=x+(60-y-y1)/y1*x1; //计算出来反弹的粒子坐标的x轴的改变量
y=-50-y1; //计算出来反弹的粒子坐标的y轴的改变量
}
else {
x+=x1; //粒子x轴坐标值发生改变
y+=y1; //粒子y轴坐标值发送改变
}
if(((x-40)*(x-40)+(y-40)*(y-40))<=0.25) {box1++;flag=0;} //判断粒子是否在第一个小球内,是的话就小球一的注入率加一。然后让开光flag置零
if(((x-20)*(x-20)+(y+20)*(y+20))<=0.25) {box2++;flag=0;} //判断粒子是否在第二个小球内,是的话就小球二的注入率加一。然后让开光flag置零
if(((x+45)*(x+45)+(y-50)*(y-50))<=0.25) {box3++;flag=0;} //判断粒子是否在第三个小球内,是的话就小球三的注入率加一。然后让开光flag置零
if(((x+30)*(x+30)+(y-42)*(y-42))<=0.25) {box4++;flag=0;} //判断粒子是否在第四个小球内,是的话就小球四的注入率加一。然后让开光flag置零
}
}
printf("小球注入率分别是:\n"); printf(" box1=%d\n box2=%d\n box3=%d\n box4=%d\n" ,box1,box2,box3,box4); //输出结果
getch();
}
运行的结果来是第一第三和第四个小球的注入率是5之内 有的时候甚至是0 第二个小球的注入率基本上在150以上。虽然是随机的游走。不过答案也错的太厉害了点。 大家给看看 。