【发布时间】:2019-03-18 19:20:34
【问题描述】:
为什么当我运行我的代码时它总是给我小于 6 的距离
通过设置 X Y 坐标来初始化程序 Flavia 到 (0,0) 以及从中心到零的当前距离。 初始化随机数生成器。
向用户询问最大值 移动次数。
然后主循环迭代直到最大移动数 达到或距中心的距离超过了腹板半径。
每个 循环的迭代选择一个最大为 5.0 cm 的随机距离和一个 0 到 360 度的随机方向。根据这些随机值,计算 X 的变化和 Y 的变化。将这些添加到 当前 X 和 Y 位置。
循环结束后,判断是否 Flavia 逃跑了,或者被吃掉了。
请注意,如上所述,每一步都会放置 Flavia 在以她的旧位置为中心的圆圈中的新位置。 这与直接选择 X 和 a 中的随机变化不同 Y 的随机变化。
您将需要: /* 返回随机双精度 [0.0, 1.0) /双 randDouble(); / 将输入极坐标转换为输出直角坐标 */ void polarToRect( double radius, double θ, 双 *x, 双 *y );
使用 randDouble() 从 C-拼图。编写您自己的 polarToRect()。
这是必需的,因为部分 目的是练习使用带有函数的指针。
计算 使用勾股定理与网络中心的距离。
您不需要为此编写函数。
初始化随机数 带有 srand() 和当前时间的生成器。
启动你的源文件 带有一个给出作者和日期并描述的 cmets 块 简要说明程序的作用。
对于每个功能,简要描述 它能做什么。 在 main() 的主体中包含一些一行 cmets 注释逻辑。
一如既往,避免混合制表符和空格。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
void polarToRect(double radius, double theta, double*x, double*y){
*x = radius*cos(theta);
*y = radius*sin(theta);
}
/* returns random double cordinates */
double randRadius(double max){
return max* ((double)rand()/RAND_MAX);
}
double randTheta(double max){
return max*((double)rand()/RAND_MAX);
}
int main(){
double x = 0;
double y = 0;
double distance;
double WebRadius = 10;
double r1, t2;
srand(time(NULL));
double tmax=360.0;
double rmax=5.0;
printf("\nBug starts at (%lf, %lf)", x,y);
int moves;
printf("\nNumber of moves Flavia can make: ");
scanf("%d", &moves);
for(; moves>0; moves--){
r1 = randRadius(rmax);
t2 = randTheta(tmax);
polarToRect(r1, t2, &x, &y);
distance = sqrt((x*x) + (y*y));
printf("\nThe bug move to: (%.2lf,%.2lf), Distance = %.2lf", x,y,distance);
}
if(distance > WebRadius){
printf("\nOh no! Flavia escapes.");
}
else{
printf("\nYum! Spider ate Flavia.");
}
return 0;
}
【问题讨论】:
-
我的意思是少于 5 个。
标签: c