1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > c语言写的投掷硬币的程序 用c语言模拟抛硬币的过程

c语言写的投掷硬币的程序 用c语言模拟抛硬币的过程

时间:2022-11-29 17:49:27

相关推荐

c语言写的投掷硬币的程序 用c语言模拟抛硬币的过程

满意答案

AAA009AA

.07.01

采纳率:54%等级:12

已帮助:26276人

C++:

class Program

{

int neg = 0, pos = 0;

int turn = 0;

public Program(int turn)

{

this.turn = turn;

}

public void start()

{

Random rand = new Random();

for (int i = 0; i < turn; i++)

{

result(rand.Next(0, 2));

}

}

public void result(int i)

{

if (i == 0)

neg++;//正面的次数

else if (i == 1)

pos++;//反面的次数

else

Console.WriteLine("error!");

}

public void print()

{

Console.WriteLine("抛硬币的次数:{0}", turn);

Console.WriteLine("正面出现的次数:{0}", neg);

Console.WriteLine("正面出现的概率:{0}%", neg * 100 / turn);

Console.WriteLine("反面出现的次数:{0}", pos);

Console.WriteLine("反面出现的概率:{0}%", pos * 100 / turn );

}

public void process()

{

int j;

Console.WriteLine("请输入1开始抛硬币");

j = Convert.ToInt32(Console.ReadLine());

if (j == 1)

{

Console.WriteLine("请输入抛硬币的次数:");

turn = Convert.ToInt32(Console.ReadLine());

start();

Console.WriteLine("输入数字2显示抛掷的结果:");

j = Convert.ToInt32(Console.ReadLine());

}

if (j == 2)

print();

}

static void Main(string[] args)

{

Program play = new Program(0);

play.process();

Console.Read();

}

}

C:

抛10次硬币构成一个事件,每次事件记录得到正面的个数。反复模拟这个事件50,000次,然后对这50,000L次进行输出频率图,比较每次事件得到正面次数的比例。

以下是总的代码:

头文件 RandomNumber.h:

代码

// RandomNumber.h

const unsigned long maxshort = 65535L;

const unsigned long multiplier = 1194211693L;

const unsigned long adder = 12345L;

#ifndef RANDOMNUMBER_H

#define RANDOMNUMBER_H

class RandomNumber{

private:

// 当前种子

unsigned long randSeed;

public:

// 构造函数,默认值0表示由系统自动产生种子

RandomNumber(unsigned long s = 0);

// 产生0 ~ n-1之间的随机整数

unsigned short Random(unsigned long n);

// 产生[0, 1) 之间的随机实数

double fRandom();

};

#endif

类实现文件RandomNumber.cpp :

代码

// RandomNumber.cpp

#include "RandomNumber.h"

#include

#include

#include

using namespace std;

// 产生种子

RandomNumber::RandomNumber(unsigned long s)

{

if(s == 0)

randSeed = time(0); //用系统时间产生种子

else

randSeed = s;

}

// 产生0 ~ n-1 之间的随机整数

unsigned short RandomNumber::Random(unsigned long n)

{

randSeed = multiplier * randSeed + adder;

return (unsigned short)((randSeed >> 16) % n);

}

// 产生[0, 1)之间的随机实数

double RandomNumber::fRandom()

{

return Random(maxshort) / double(maxshort);

}

主文件Main :

代码

// 主文件main

/*

* Author: Tanky woo

* Blog:

* Date: .12.7

* 代码来至《计算机算法设计与分析》

*/

#include "RandomNumber.h"

#include

#include

#include

using namespace std;

int TossCoins(int numberCoins)

{

// 随机抛硬币

static RandomNumber coinToss;

int i, tosses = 0;

for(i = 0; i < numberCoins; ++i)

tosses += coinToss.Random(2);

return tosses;

}

int main()

{

// 模拟随机抛硬币事件

const int NCOINS = 10;

const long NTOSSES = 50000L;

// heads[i]得到的i次正面的次数

long i, heads[NCOINS+1];

int j, position;

// 初始化数组heads

for(j = 0; j < NCOINS+1; ++j)

heads[j] = 0;

// 重复50,000次模拟事件

for(i = 0; i < NTOSSES; ++i)

heads[TossCoins(NCOINS)] ++;

// 输出频率图

for(i = 0; i <= NCOINS; ++i)

{

position = int (float(heads[i]) / NTOSSES*72);

cout << setw(6) << i << " ";

for(j = 0; j< p>

cout << " ";

cout << "*" << endl;

}

return 0;

}

( 输出频率图:)

20分享举报

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。