① c语言,编写模拟翻硬币得程序。
#include<stdio.h>
int main(void)
{
int n;//读入一个数,为结束的次数
int i;
int a[10];//10个硬币
int biaoji = 0;//当这个标记能被3或7整除,说明恰好数了3次或7次
scanf("%d", &n);
for (i = 0; i < 10; i++) //将硬币都初始化为正面的状态,即1
a[i] = 1;
biaoji = 1;//因为a[]的下标不允许超过9,故要重置
a[biaoji - 1] = !a[biaoji - 1];//改变硬币的状态
for (i = 0; i < 10; i++)
printf("%d", a[i]);
return 0;
}
主要特点
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
② C语言程序题
修改如下,有问题hi我
#include<stdio.h>
#include<time.h>
#include <stdlib.h>
void main()
{
int a=0,b=0,i=0,j=0,sum=0;
srand((unsigned)time(0));
while(j!=3&&j!=-3)
{
i=rand()%2;
if(i==1) a++;//判断是否相等用==,=是赋值
if(i==0) b++;
j=a-b;
sum++;
printf("%d",i);//这才是打印的正确格式
}
printf("总共抛硬币次数为%d次\n",sum);
}
③ C语言编程 要求一,输入抛硬币次数,输出该次实验硬币正面的概率,要求小数点保留2位. 要求二、输入抛硬币次
简单呀。但是要求二是什么意思呢?抛硬币次数不是实验次数,最好把题目说明白,你可能不知道怎么输出保留俩位小数估计printf("%.2f",x);
④ 用c语言模拟抛硬币的过程
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: www.WuTianQi.com
* Date: 2010.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;
}
( 输出频率图:)
⑤ 用C语言编写一个程序,求掷硬币1000次,至少有一次连续出现10次正面的概率。或者讲讲算法。
有两种办法:
第一种就是用随机数进行模拟,然后进行至少100轮的模拟,取平均数
第二种就是用公式,根据概率学进行公式推导,然后使用C语言进行计算。
第一种并不能很准确,但是有说服力,模拟轮数越多越趋向于准确
第二种准确并有说服力,但是需要理论支持去计算。
公式的话:
全部可能出现的排列,是2的1000次方
特定位置可能出现满足的排列,比如前10个都是正面,剩下的随便排列,就是2的990次方
特定位置数,一共是991个
所以,几率就是:991 * 2^990 / 2^1000
(好久没有算过了,可能不太对,但是思路差不多,你好好想想吧)
因为,前11个都是正面的,同时满足第一个和第二个位置的,是重复,需要排除一个,所以还需要额外考虑排除,需要进行处理一下……实际比上述的几率小,具体公式仍需推导……非专业人员帮不到你
⑥ c++模仿十次抛硬币的随机结果,代码有些不明白
for 的最后有全角字符! 最后的)改成)就好了
⑦ 用c语言模拟抛硬币的试验
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#defineINT_MAX100
voidmain()
{
intn,zhengsum=0,fansum=0;
srand(time(NULL));
scanf("%d",&n);
while(n--)
{
if(rand()%INT_MAX*1.0/INT_MAX>0.5)
zhengsum++;
else
fansum++;
}
printf("正面数:%d反面数:%d ",zhengsum,fansum);
}
⑧ C语言抛两个硬币,都是正面我赢,都是反面你赢,一正一反重来。这个代码怎么打
代码可以这样打:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int f=1,n;
srand (time(NULL));
while(f)
{
f=0;
n=rand()%2+rand()%2;
if(n==2)
printf("都是正面,我赢了 ");
else if(n==0)
printf("都是反面,你赢了 ");
else
{
printf("一正一反,重来 ");
f=1;
}
}
return 0;
}
这是运行结果的截图:
4
⑨ 硬币游戏:写一个程序模拟反复抛硬币,直到连续出现三次正面或反面为止,此时你的程序应该显示抛硬币的总次
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int count_z = 0,count_s = 0,count_x = 0;
int flag;
srand((unsigned int)time(NULL));//以时间作为种子。
while(count_s < 3 && count_x < 3)
{
flag = rand()%2;//产生0和1两个随机数,作为正反面。
if(flag)
{
count_x++;
count_s = 0;
printf("国徽向下 !\n");
}
else
{
count_s++;
count_x = 0;
printf("国徽向上 !\n");
}
count_z++;
}
printf("========================================================\n");
printf("总共抛了 %d 次!\n", count_z);
system("pause");
return 0;
}