‘壹’ 【c语言】关于概率计算的方法
我想是因为for (i=1;b>=1;i++)这一句无效。
前面b=0,循环条件是b>=1,所以不循环的。
另外b=b+0.1*pow(0.9,i-1);这句的0.1后面应该加上f,否则类型不对。
这个是改动过的代码
#include <stdio.h>
#include <math.h>
int main()
{
int i;
long double b;
b=0;
for (i=1;b<=1;i++)
{
b=b+0.1f*pow(0.9,i-1);
}
printf("%d ", i);
return 0;
}
时间有些晚了,答题有点仓促,不知道能不能行,如果出现问题,希望海涵。
‘贰’ c语言求概率
这是典型的古典概型,直接用穷举法计算即可。
计算思路是遍历1到10共10个数的所有组合(用goNext函数),统计出组合总数count与7个数之和等于20的组数successNumber,这两个数的商successNumber/count就是所求的概率。
计算结果为:
总次数: 10000000, 成功次数: 26544, 概率: 0.0026544
程序可以如下实现:
#include <stdio.h>
int data[7];
int goNext()
{
int i;
for ( i = 0; i < 7 && ++data[i] > 10; ++i ) data[i] = 1;
if ( i == 7 ) return 0;
return 1;
}
void main()
{
int i, m;
double p;
long count = 0, successNumber = 0;
for ( i = 0; i < 7; ++i) data[i] = 1;
do
{
++count;
for ( i = 0, m = 0; i < 7; ++i ) m += data[i];
if ( 20 == m ) ++ successNumber;
} while ( goNext() );
p = (double) successNumber / (double) count;
printf("总次数: %d, 成功次数: %d, 概率: %.7lf\n", count, successNumber, p);
}
‘叁’ 如何用c语言随机生成一个概率
随机生成一个数倒是可以,概率的话,直接用1除以生成的数就可以了
‘肆’ C语言 随机数 概率
计算机里的取随机数函数是均匀分布的随机数。
0.0005的概率,相当于2000个数里取一个。
所以我们可以 在0到1999范围里取随机数,如果取到数值 1000,我们就得1(并响铃),否则得0。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void main()
{
long int i,y;
double x, r, M = 2000.0;
srand((unsigned)time(NULL));
for (i=0;i<5000;i++) // 取5000个
{
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
x = (r * M);
y = (long int) x;
if (y == 1000) {
printf("1 ");printf("\007"); // 如果得1,就响铃!
} else printf("0 ");
};
}
‘伍’ C语言中如何计算概率,为什么计算不了
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (){
int a,b,c,i;
int j=0;
int sum=0;
double k=0.0;
srand((unsigned int) time(NULL));
for(i=1;i<=500;i++){
a=rand()%7+1;
b=rand()%7+1;
c=rand()%7+1;
printf("所抽到的三个球为:%d%d%d\n",a,b,c);
sum=a+b+c;
if (sum>=15){j++;}
k=j/500.0;
}
printf("\n%lf\n",k);
return 0;
}
你看这个程序,可以运行出来K的值。你那个程序就是在k=j/500这里出问题了,以为k定义的是double型,所以要强制转换一下改成k=j/500.0或者k=(double)j/500就行了,以后遇到这个问题要注意
‘陆’ c语言 求随机数分布概率
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stddef.h>
intmain(){
floata,sum;
inti,j,n,m;
//100次求0-1之间的随机数之和在0-11-2之间的概率分布次数
for(i=0;i<100;i++){
srand(time(NULL));
for(j=0;j<10;j++){
a=(float)rand()/RAND_MAX;
sum+=a;
}
if(sum>=0&&sum<=1)
n++;
}
if(sum>1&&sum<=2){
m++;
}
}
printf("01=%d12=%d ",n,m);
return0;
}
‘柒’ C语言中如何表示概率
现成的函数没有,可以通过产生随机数实现概率。
srand((unsigned)time(NULL));
int m,r=0;
m=rand()%10;
if(m==1||m==2||m==3||m==4||m==5||m==6||m==7)
{
r=r+1;
}
这段代码中,执行r=r+1的概率就是0.7
希望可以帮到你
‘捌’ 如何用C语言实现求概率期望
用一个数组存放这100个概率。然后随机生成N个0~99的数。以随机生成的数为下标读取数组里的数。然后相乘。。
‘玖’ C语言求教 一个算概率的问题
呵呵。大家的好像都很专业。如果我没记错,这是一个高考数学题,你应该是个高中生吧。
可以用深度优先搜索(递归回溯),这样比较简单。
大致的思路是这样
用一个数组 f[6],f[1]~f[5]代表那5袋方便面。
用递归或者循环的方法生成123 放到这5个位置(就是穷举这total(=243)种可能)
然后写一个判断累计函数judge()
每生成一个排列就送到judge去判断一次
如果满足条件则ok加1
最后给出概率百分数 float percent = ok*100.0/total
//--------------------------------
递归的代码我已经写好了。通过适当修改相关参数(把方便面袋数量和卡片种类设置为变量提示用户输入),可以计算不同方便面袋数和卡片种类数的中奖概率。如果使用循环的话针对这个题需要5重循环,我想你应该会,我就不写了。
//--------------------------------
放代码:
//--------------------------------
#include <stdio.h>
#include <conio.h>
//----------------------
int f[6],ok,total;
void judge()
{ int card[4]={0},i; //card[]表示是否有第i张卡片
for(i=1;i<=5;i++)
card[f[i]]++;
for(i=1;i<=3;i++)
if(!card[i]) return;
ok++;
}//-------------------------
void put(int nxi)//往第nxi袋方便面袋里放卡片
{ if(nxi == 6)
{ total++;
judge();
return; //回溯
}
int i;
for(i=1;i<=3;i++)
{ f[nxi] = i;
put(nxi+1);//递归
}
}//-------------------------
main()
{
float per;
char c = '%';
put(1);
per = 100.0 * ok/total;
printf("概率为:%d/%d\n",ok,total);
printf("百分数: %.2f%c",per,c);
getch();
}//-------------------------
运行结果:
150/243
61.73%
当然,你还可以加一个约分函数使得结果为最简分数。这里就不再讨论了。