发布网友 发布时间:2022-07-01 21:30
共1个回答
热心网友 时间:2023-10-22 07:17
PT moveR()函数每调用一次,质子随机移动一次,返回移动后的位置值(注意返回的是值,不是地址,在main函数中修改坐标值是没用的)。
由于是一次一次的随机移动,r的数字不要太大,会跑很长时间。即使是同一个数值,不同次运行结果也会相差很多。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct point
{
int x;
int y;
}PT;
PT moveR();//每调用一次,随机移动一次,返回移动后的坐标值
int main()
{
int r,cnt=0;
PT p={0,0};
srand(time(NULL));
printf("请输入R的值:"),scanf("%d",&r);
while(1)
{
if(p.x*p.x+p.y+p.y==r*r)
break;
p=moveR();
cnt++;
}
printf("游动结束,共游动了%d次\n",cnt);
return 0;
}
PT moveR()
{
static PT p={0,0};
int rn;
rn=rand()%4+1;//随机数1~4,分别表示上下左右
switch(rn)
{
case 1:printf("质子向上移动\n");p.y++;break;
case 2:printf("质子向下移动\n");p.y--;break;
case 3:printf("质子向左移动\n");p.x--;break;
case 4:printf("质子向右移动\n");p.x++;break;
}
printf("移动后坐标:(%d,%d)\n\n",p.x,p.y);
return p;
}