随机数产生学号c语言,[转载]产生随机数源程序
问题1:随机事件的C/C++语言实现。
第1题:产生随机数
(1)函数说明
rand()会返回一随机数值,范围在0至RAND_MAX
间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。
0<= rand()<=RAND_MAX
试问:产生0到100之间的随机数的C表达式是什么?
(2)参考“原型”
#include "iostream.h"
#include "stdlib.h"
#include "time.h"
void out_rand()
{
srand(time(0)); //随机种子
for(int i=0;i<10;i++)
{
cout<<100*rand()/RAND_MAX<
}
}
void main()
{
int n;
while(1)
{
cout<
2----退出系统"<
cin>>n;
if(n==1) out_rand();
if(n==2) break;
} }
(3)设计任务(“好”的算法:时间代价——语句、空间代价——占用“内存”)
利用产生随机数的编程技术,产生一个随机系统50个550到649之间的“需求量”随机数,并按间距为10统计各“需求量”区间的数据个数。
int a[50],i;
for(i=0;i<50;i++)
a[i]=( 649-550+1)* rand()/RAND_MAX+550
550----559:
560----569:
570----579:
……
第2题:可达矩阵——《系统工程》P43(汪应洛,机械工业出版社)
(1)参考“原型”
#include "iostream.h"
#include
#define N 3 //宏定义"数组"的大小,即"矩阵"的"阶数"。
void keda(int *pa,int *pb,int *pc,int n)
{
int i,j,k,f;
for(i=0;i
for(j=0;j
if(j==i) *(pb+n*i+j)=*(pa+n*i+j)+1;
else *(pb+n*i+j)=*(pa+n*i+j);
while(1) //利用矩阵幂运算求可达矩阵
{
for(i=0;i
for(j=0;j
{
*(pc+n*i+j)=0;
for(k=0;k
*(pc+n*i+j)+=(*(pb+n*i+k))*(*(pb+n*k+j));
if(*(pc+n*i+j)>1) *(pc+n*i+j)=1; //归"1"化处理
}
f=0;
for(i=0;i
for(j=0;j
if(*(pc+n*i+j)==*(pb+n*i+j)) f++;
if(f>=n*n) break; //两个矩阵相等,停止计算,得到可达矩阵。
else {for(i=0;i
for(j=0;j
}
}
}
void main()
{
int a[N][N],b[N][N],c[N][N];
int i,j,n=N;
for(i=0;i
for(j=0;j
cin>>a[i][j];
keda(&a[0][0],&b[0][0],&c[0][0],n); //调用求"可达矩阵"的自定义函数
for(i=0;i
{for(j=0;j
cout<
cout<
}
getche(); //暂停,等待从键盘输入任何一个字符而退出系统。
}
测试数据:
0 1 1
0 0 1
0 1 0
(2)设计任务
利用产生随机数的编程技术,产生一个随机系统的“7阶邻接矩阵”,并求解其可达矩阵,最后输出该“邻接矩阵”与其“可达矩阵”。
提示:可以考虑利用rand()产生0到100之间的随机数a[i][j];如果a[i][j]>50,则a[i][j]=1,否则a[i][j]=0。
注意:“邻接矩阵”的“主对角线”元素值是0
//参考答案
#include "iostream.h"
#include
#include "stdlib.h"
#include "time.h"
#define N 7 //宏定义"数组"的大小,即"矩阵"的"阶数"。
void keda(int *pa,int *pb,int *pc,int n)
{
int i,j,k,f;
for(i=0;i
for(j=0;j
if(j==i) *(pb+n*i+j)=*(pa+n*i+j)+1;
else *(pb+n*i+j)=*(pa+n*i+j);
while(1) //利用矩阵幂运算求可达矩阵
{
for(i=0;i
for(j=0;j
{
*(pc+n*i+j)=0;
for(k=0;k
*(pc+n*i+j)+=(*(pb+n*i+k))*(*(pb+n*k+j));
if(*(pc+n*i+j)>1) *(pc+n*i+j)=1; //归"1"化处理
}
f=0;
for(i=0;i
for(j=0;j
if(*(pc+n*i+j)==*(pb+n*i+j)) f++;
if(f>=n*n) break; //两个矩阵相等,停止计算,得到可达矩阵。
else {for(i=0;i
for(j=0;j
}
}
}
void main()
{
int a[N][N],b[N][N],c[N][N];
int i,j,n=N;
int flag;
while(1)
{
srand(time(0)); //随机种子
for(i=0;i
for(j=0;j
{
a[i][j]=100*rand()/RAND_MAX;
if(a[i][j]>50)
a[i][j]=1; else a[i][j]=0;
if(j==i) a[i][j]=0;
}
cout<
for(i=0;i
{for(j=0;j
cout<
cout<
}
keda(&a[0][0],&b[0][0],&c[0][0],n); //调用求"可达矩阵"的自定义函数
cout<
for(i=0;i
{for(j=0;j
cout<
cout<
}
cout<
cin>>flag;
if(flag==1) break;
}
getche(); //暂停,等待从键盘输入任何一个字符而退出系统。
}
问题2:数据排序的C/C++语言实现。
第1题:起泡法(上推排序法)
1、“原型”
#include "iostream.h"
void bubble_sort(int *item,int count)
{
register int i,j;
int t;
for(i=0;i
for(j=count-1;j>=i;--j)
if(item[j-1]>item[j])
{t=item[j-1];item[j-1]=item[j];item[j]=t;}
}
void main()
{
int a[]={6,8,3,9,7,4,5,1,2};
bubble_sort(a,9);
for(int i=0;i<9;i++)
cout<