❶ 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
*/