当前位置:首页 » 编程语言 » c语言随机函数生成布尔矩阵
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言随机函数生成布尔矩阵

发布时间: 2022-09-19 18:53:13

c语言 如何随机生成数组

使用rand()函数+循环语句可生成一组随机数组。

1、C语言提供了一些库函数来实现随机数的产生。C语言中有三个通用的随机数发生器,分别为 rand函数, random函数, randomize 函数。rand函数产生的并不是真意正义上的随机数,是一个伪随机数,是根据一个数,称之为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数。但这不是真正的随机数,C提供了srand()函数,它的原形是void srand( int a),用来设置一个种子数。在调用rand函数产生随机数前,应该先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。

2、例程:

#include<time.h>

#include<stdlib.h>

#include<stdio.h>

voidmain(){

srand((unsigned)time(NULL));//用当前系统时间设置种子

inta[100];

printf("随即初始化数组的100个数(范围是0~100). ");

for(inti=0;i<100;i++){

a[i]=rand()%101;//用rand函数生成0-100的随机数,并赋值给数组a[i]

printf("%4d",a[i]);

if(i%10==0&&i!=0)

printf(" ");

}

getchar();

}

❷ 我想用matlab 来实现以下的小程序: 随机产生一个布尔矩阵(要保证这个矩阵的每一列至少有一个1) 每次

你这个程序有问题。
问题在于你没有把握好算法。你犯的错误在于你没有明白每一次循环删除都会使得矩阵的维数发生变化:比如“for j=1:20”,这里你认为矩阵的列一直为20.显然这是错误的。
显然这是个死循环,给出参考程序:
function H = main()
A=rand(10,20);
A=fix(0.5+A);
H=A;
while 1
B=sum(H,2);
[m,i]=max(B);
t=i;
q=0;
for j=1:20
if H(t,j)==1
H(:,j)=zeros(10,1);
end
end
H(t,:)=zeros(1,20);
end

end
%这里我用0矩阵代替空矩阵,很好的解决了问题。用空矩阵是不能解决问题
的。因为就算可以循环到最后,到最后变为一空矩阵,j为0,又“for j=1:w”(其中w可变),j最小为1,这显然是不能取到的。不知道你为什么会弄个这么奇怪的程序来,呵呵。

❸ C语言如何把rand()产生的随机数存入数组

rand()函数是产生随机数的一个随机函数。

(1)使用该函数首先应在开头包含头文件stdlib.h

#include<stdlib.h>(C++建议使用#include<cstdlib>,下同)

(2)在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。

(3)rand()函数没有输入参数,直接通过表达式rand()来引用;例如可以用下面的语句来打印两个随机数:

printf("Random numbers are: %i %i ",rand(),rand());

例如:

#include<stdio.h>
#include<stdlib.h>
intmain()
{
inti,k[10];
for(i=0;i<10;i++)
k[i]=rand()%10;
for(i=0;i<10;i++)
printf("%d",k[i]);
return0;
}
/*
运行结果:
1740948824
*/

❹ 关于C语言随机函数

把 srand( time(0) ); 放在循环外每次产生随机数的种子也是一样的啊,为什么产生的随机数就不一样了?
因为随机函数只需要一个种子就能产生一系列的随机数,并不是每个随机数都需要一个种子。

你把 srand(time(0)) 放到循环前面就可以了。
原因: time(0)返回的是系统的时间(从1970.1.1午夜算起),单位:秒,而那个循环运行起来耗时连0.000001秒都不到! 也就是说,srand(time(0)) 连着4次的种子是一样的,种子一样,生产的随机数当然是一样了。

如果你在把srand()放循环里面,在中间加个sleep函数,消耗一点时间(间隔大于1秒),那么生成的rand 就不一样了.但是这样做很不好,连着两次用srand生成的种子,间隔一样,生产的随机数间隔有会有规律性。

另:因为两次运行同一程序的时间肯定是不一样的,所以把srand放在循环前面可以得不同的种子,这样才能得到你想要的。

❺ C语言编程问题 用随机函数产生一个3行5列的二维数组 (数据在100以内)求其中的最小值

#include<stdio.h>
#include<math.h>

void chansheng(int m,int n);

void main() {
chansheng(3,5);
}

void chansheng(int m,int n){
float array[m][n];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
array[i][j]=random()*100 ;
}// 产生随机数组
int min=array[0][0];//记录最小值
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{ if(min>array[i][j])
min=array[i][j];
}
for(int i=0;i<m;i++)
for(int j=0;j<n;j++){
printf("所得数组是: %f ",array[i][j]);
if(j==n-1) printf("\n");
}//显示数组
printf("最小值为 %f",min);
}

❻ 布尔矩阵(用C语言编程)

#include<stdio.h>
#include<string.h>

intmain()
{
//freopen("in.txt","r",stdin);
intn,m[100][100],r[100],c[100],i,j,x,y,R,C;
while(scanf("%d",&n)!=EOF,n)
{
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
scanf("%d",&m[i][j]);
r[i]+=m[i][j];
c[j]+=m[i][j];
}
for(R=C=i=0;i<n;i++)
{
if(r[i]%2)
{
R++;
x=i+1;
}
if(c[i]%2)
{
C++;
y=i+1;
}
}
if(!R&&!C)
puts("OK");
elseif(R==1&&C==1)
printf("Changebit(%d,%d) ",x,y);
else
puts("Corrupt");
}
return0;
}

听说回答的够长才能够自动采纳

❼ 如何用c语言实现:随机生成一个由0和1组成的矩阵,使用rand函数

while(i<=m)
{
j=1;
while(j<=n)
{
srand(time(NILL));
maze[i][j]=rand()%2;
j=j+1;i=i+1;
}
}
注意:要将srand(time(NULL));放在循环外
srand(time(NULL));
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
maze[i][j]=rand()%2;

❽ 最近在看c语言教材,我学着教材上的代码想实现一个随机数生成矩阵,并输出该矩阵的程序,但好像有问题。

被采纳后就不能继续回答追问了。
继续回答如下(程序中带//的行改过):
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void matrix(int *p,int n)//
{
int i,j;
srand((unsigned int)time(0));//
for(i=0;i<n;++i)
for(j=0;j<n;++j)
*(p+i*n+j)=rand()%10;//写成p[i*n+j]=...也对
}
void pri(int *p,int n) //
{
int i,j;
printf("随机生成的矩阵为:\n");
for(i=0;i<n;++i)
for(j=0;j<n;++j)
{ printf("%-3d ",p[i*n+j]); if(j==n-1)printf("\n");}//
}
int main()
{
int n;
printf("请输入矩阵阶数:");
scanf("%d",&n);
//int a[n][n]; 只有静态数组才能这样写,动态数组要动态分配
int *a;
a = (int*)malloc(sizeof(int)*n*n);
matrix(a,n);
pri(a,n);
free(a);
return 0;
}

❾ c语言中,如何生成一个5*5的随机矩阵,并且(重点)每行的相邻数之差在[-4,4]之间

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>

// 数组最大的尺寸常量
const int MAX_ARRAY_SIZE = 10;

// 表示一个区间的结构体
struct Range
{
// 区间的下限
int lower;
// 区间的上限
int upper;
};

//表示整个区间的一个特殊区间
const struct Range ALL_RANGE={INT_MIN,INT_MAX};
//表示空区间的一个特殊区间
const struct Range EMPTY_RANGE={INT_MAX,INT_MIN};

//取两个区间 r1,r2的交集,并返回
struct Range merge(struct Range r1,struct Range r2)
{
struct Range common;
if(r1.upper < r2.lower || r1.lower > r2.upper)
{
return EMPTY_RANGE;
}
else
{
common.lower = r1.lower > r2.lower ? r1.lower : r2.lower;
common.upper = r1.upper < r2.upper ? r1.upper : r2.upper;
return common;
}
}

//判断区间r是不是空的
int isEmpty(struct Range r)
{
return r.lower > r.upper;
}

/*
生成随机数组
参数:
rowsAmount : 要产生的随机数组的行数
colsAmount : 要产生的随机数组的列数
rowValueDifferRange : 要产生的随机数组的行元素的差范围数
colValueDifferRange : 要产生的随机数组的列元素的差范围数
randArray : 保存产生的随机数组
currentRow : 当前要产生的数组元素行位置。递归使用。
currentCol : 当前要产生的数组元素列位置。递归使用。

*/
void generate( int rowsAmount,int colsAmount,
struct Range rowValueDifferRange,struct Range colValueDifferRange,
int randArray[][MAX_ARRAY_SIZE],
int currentRow,int currentCol)
{
struct Range currentRowValueRange = ALL_RANGE;
struct Range currentColValueRange = ALL_RANGE;
struct Range currentValueRange;

if(currentRow == rowsAmount)
return;

// 第一个随机数可以任意取
if(currentRow == 0 && currentCol == 0)
{
// 生成当前的随机数
randArray[currentRow][currentCol] = rand();
}
else
{
// 根据当前已经存在的相邻列(在左边),决定要生成的随机数的范围
if(currentCol>0)
{
currentColValueRange.lower = randArray[currentRow][currentCol-1] + colValueDifferRange.lower;
currentColValueRange.upper = randArray[currentRow][currentCol-1] + colValueDifferRange.upper;
}
// 根据当前已经存在的相邻行(在上边),决定要生成的随机数的范围
if(currentRow>0)
{
currentRowValueRange.lower = randArray[currentRow-1][currentCol] + rowValueDifferRange.lower;
currentRowValueRange.upper = randArray[currentRow-1][currentCol] + rowValueDifferRange.upper;
}

// 将由列决定的取值范围,和由行决定的取值范围,取交集
currentValueRange = merge(currentRowValueRange,currentColValueRange);

// 如果合并后的区间是空的,也就是说当前无法生成一个随机数。
if(isEmpty(currentValueRange))
{
if(currentCol==0)
{
currentRow--;
currentCol = colsAmount-1;
}
else
{
currentCol--;
}

// 需要从新生成上一个随机数
return generate(rowsAmount,colsAmount,
rowValueDifferRange,colValueDifferRange,
randArray,
currentRow,currentCol);
}
// 根据求出的范围生成随机数
else
{
// 生成当前的随机数
randArray[currentRow][currentCol] =
rand()%(currentValueRange.upper - currentValueRange.lower) +
currentValueRange.lower;
}
}

if(currentCol==(colsAmount-1))
{
currentRow++;
currentCol = 0;
}
else
{
currentCol++;
}
// 生成下一个随机数
generate( rowsAmount,colsAmount,
rowValueDifferRange,colValueDifferRange,
randArray,
currentRow,currentCol);
}

int main(int argc, char *argv[])
{
// 随机数组为 5行5列
int rowsAmount=5,colsAmount=5;
//每行的相邻数之差在[-4,4]之间
struct Range rowValueDifferRange={-4,4};
//每列相邻数之差在[-10,10]之间
struct Range colValueDifferRange={-10,10};
// 随机数组
int randArray[MAX_ARRAY_SIZE][MAX_ARRAY_SIZE];

int i,j;

// 重置随机数种子
srand(time(NULL));
generate( rowsAmount,colsAmount,
rowValueDifferRange,colValueDifferRange,
randArray,
0,0);

// 输出随机数组
for(i=0;i<rowsAmount;i++)
{
for(j=0;j<colsAmount;j++)
printf("%d ",randArray[i][j]);
printf("\n");
}

return 0;
}
/*
23886 23884 23888 23879 23882
23883 23885 23886 23881 23878
23884 23881 23886 23877 23876
23887 23878 23883 23875 23878
23887 23880 23881 23871 23880
*/