计算机仿真建模实验报告
中南大学
计算机仿真与建模 实验报告
实 验 题 目:题3 射击命中率
班 级:
姓 名:
学 号:
指 导 老 师:
实验题目及要求
用Matlab, C/C++, Java 编小程序
题3 射击命中率
在我方某前沿防守地域,敌人以一个炮排(含两门火炮)为单位对我方进行干扰和破坏.为躲避我方打击,敌方对其阵地进行了伪装并经常变换射击地点.经过长期观察发现,我方指挥所对敌方目标的指示有50%是准确的,而我方火力单位,在指示正确时,有1/3的射击效果能毁伤敌人一门火炮,有1/6的射击效果能全部消灭敌人.
现在希望能用某种方式把我方将要对敌人实施的20次打击结果显现出来,确定有效射击的比率及毁伤敌方火炮的平均值。
仿真思路
指示的正确与否
抛硬币,正面---指示错误;
反面---
摧毁敌机数目
摸球, 3白2黑,1红
白-未能摧毁敌方火炮
黑-摧毁敌方一门火炮
红-摧毁敌方两门火炮
仿真过程:
抛硬币,若为正面,表示指令错误,不能进行打击;
抛硬币,若为反面,表示指令正确,进行对敌打击,摸球若摸到白球,打击失败;
抛硬币,若为反面,表示指令正确,进行对敌打击,摸球若摸到黑球,打掉一门敌炮;
抛硬币,若为反面,表示指令正确,进行对敌打击,摸球若摸到白球,打掉两门火炮;
实验展示
实验源代码
#include
#include
#include
#include
int main()
{
int a,ar,b,br;
int t=0,e=0;
int dir[2]={1,2};
int dis[6]={1,1,2,2,2,3};
srand((unsigned)time(0));
for(int i=1;i<=20;i++)
{
printf("第%d次探测",i);
a=rand()%2;
ar=dir[a];
b=rand()%6;
br=dir[b];
if(ar==1)
{
printf("指令错误\n");
}
else
if(ar==2&&br==2)
{
printf("指令正确将\n");
printf("本次射击未能摧毁目标\n");
}
else
if(ar==2&&br==1)
{
printf("指令正确将\n ");
printf("本次射击摧毁一台敌机\n");
e=e+1;
t=t+1;
}
else
{
printf("指令正确将\n ");
printf("本次射击摧毁两台敌机\n");
e=e+1;
t=t+2;
}
printf("\n");
}
printf("有效率:%f\n",(float)e/(float)20);
printf("平均一次摧毁敌机数目:%f\n",(float)t/(float)40);
system("pause");
return 0;
}
1