新聞中心
C語言編程,如何自動(dòng)生成一個(gè)二維數(shù)組
程序主要通過malloc函數(shù)動(dòng)態(tài)生成數(shù)組,srand和rand函數(shù)配合生成隨機(jī)數(shù)據(jù),代碼如下,
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、申請域名、網(wǎng)頁空間、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
//程序功能,實(shí)現(xiàn)自定義m*n二維數(shù)組,隨機(jī)生成給定范圍max-min的數(shù)組元素
#includestdio.h
#include stdlib.h
#include time.h
void main()
{
int i=0,j=0;
int m=0,n=0;//數(shù)組維數(shù)
int max=0,min=0;//數(shù)組數(shù)據(jù)范圍
int **p=NULL;//二維指針,存放m*n個(gè)元素
int tmp;
printf("請輸入數(shù)組維數(shù)m和n:");
scanf("%d %d",m,n);
printf("請輸入數(shù)組元素最大最小值max和min:");
scanf("%d %d",max,min);
if(maxmin)//保證max大于min
{
tmp=max;
max=min;
min=max;
}
p=(int**)malloc(m*sizeof(int*));//先分配m個(gè)一維指針
if(NULL==p)
exit(1);
for (i = 0; i n ; i++)
{
p[i] = (int*)malloc(n*sizeof(int));//為m個(gè)一維指針分配n個(gè)整型大小的空間
if (NULL==p[i])
exit(1);
}
srand(time(NULL));
for(i=0;im;i++)
for(j=0;jn;j++)
p[i][j]=rand()%(max-min+1)+min;
printf("%d*%d二維數(shù)組為:\n",m,n);
for(i=0;im;i++)
{
for(j=0;jn;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
for (i = 0; i n; i++)
{
free(p[i]);
p[i]=NULL;
}
free(p);
p=NULL;
}
void *malloc( size_t size );如果分配成功則返回指向被分配內(nèi)存的指針,指針指向一個(gè)大小為size的內(nèi)存空間;如果錯(cuò)誤發(fā)生返回NULL。
一般srand和rand配合使用產(chǎn)生偽隨機(jī)數(shù)序列。rand函數(shù)在產(chǎn)生隨機(jī)數(shù)前,需要系統(tǒng)提供的生成偽隨機(jī)數(shù)序列的種子,rand根據(jù)這個(gè)種子的值產(chǎn)生一系列隨機(jī)數(shù)。如果系統(tǒng)提供的種子沒有變化,每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列都是一樣的。srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值,從而可以使得每次調(diào)用rand函數(shù)生成的偽隨機(jī)數(shù)序列不同,從而實(shí)現(xiàn)真正意義上的“隨機(jī)”。通??梢岳孟到y(tǒng)時(shí)間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。
c語言如何動(dòng)態(tài)創(chuàng)建二維數(shù)組
既然是動(dòng)態(tài)創(chuàng)建,那么,所創(chuàng)建的二維數(shù)組的行、列數(shù)應(yīng)該具有“普適”性,即,應(yīng)由“用戶”確定二維數(shù)組的規(guī)模。這是有難度的。因?yàn)?,二維數(shù)組要牽扯行指針,且需要固定每行的列元素個(gè)數(shù),用這種思路就沒有辦法達(dá)到“普適”。
為此,必須清醒地知道,所謂二維數(shù)組,其元素在內(nèi)存中依然是以一維的方式存放的。說實(shí)話,二維數(shù)組本質(zhì)上是不存在的。
既然如此,那么,“構(gòu)造”一個(gè)所謂的二維數(shù)組,只要能提供足夠?qū)嵱玫暮瘮?shù)(工具)操作這個(gè)二維數(shù)組就可以了。
綜上,接受由用戶決定的二維數(shù)組行、列值,申請一個(gè)一維數(shù)組的空間,按照二維數(shù)組方式進(jìn)行定位和操作就可以了。
為簡便起見,我用如下定義,你可以更改里面的類型,以適應(yīng)自己的需要:
typedef int USER_TYPE;
// 定義一個(gè)控制二維數(shù)組(矩陣)的“控制頭”,由三個(gè)成員組成
typedef struct MATRIX
{
USER_TYPE *data; // 真正用來存儲(chǔ)二維數(shù)組元素的空間
int Row; // 二維數(shù)組行數(shù)
int Col; // 二維數(shù)組列數(shù)
}MATRIX;
MATRIX *initMatrix(int row, int col); // 初始化二維數(shù)組
USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下標(biāo)的元素
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 給指定下標(biāo)的元素賦值
void destroyMatrix(MATRIX *matrix); // 銷毀二維數(shù)組
void destroyMatrix(MATRIX *matrix)
{
free(matrix-data);
free(matrix);
}
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val)
{
matrix.data[i*matrix + j] = val;
}
USER_TYPE getElementAt(MATRIX matrix, int i, int j)
{
return matrix.data[i*matrix.Col + j];
}
MATRIX *initMatrix(int row, int col)
{
MATRIX *mp;
mp = (MATRIX *)malloc(sizeof(MATRX));
mp-data = (USER_TYPE *)malloc(sizeof(USER_TYPE) * row * col);
mp-Row = row;
mp-Col = col;
return mp;
}
把上面的函數(shù)當(dāng)成工具,完成二維數(shù)組初始化、賦值、取值等一系列操作,如果需要比較,還需要編寫比較的函數(shù)。
C語言 如何動(dòng)態(tài)創(chuàng)建二維數(shù)組
這樣的方法可行,不過要是題目要求輸入m和n,然后再定義二維數(shù)組a[m][n],那就行不通了。
你可以這樣做:(以int型為例)
int **a;
int m,n,i;
scanf("%d%d",m,n);
a=(int**)malloc(m*sizeof(int*)); /*malloc函數(shù)在stdlib.h里面,用的時(shí)候加入這個(gè)頭文件*/
for(i=0;im;i++)
a[i]=(int*)malloc(n*sizeof(int));
/*這樣以后你就可以把a(bǔ)當(dāng)作二維數(shù)組a[m][n]來用了。。
c語言怎么創(chuàng)建二維數(shù)組
int a[m][n];//就表示一個(gè)m行n列的整型二維數(shù)組
在c語言中數(shù)組的下標(biāo)是從0開始的所以,數(shù)組a的元素個(gè)數(shù)可以表示為:a[0][0]-a[m-1][n-1]
例如:
#includestdio.h
int?main()
{
int?a[3][2],i,j;//定義一個(gè)3行2列的整型二維數(shù)組a?
for(i=0;i3;i++)//依次給二維數(shù)組賦值?
for(j=0;j2;j++)
scanf("%d",a[i][j]);
printf("\n");
for(i=0;i3;i++){//輸出二維數(shù)組?
for(j=0;j2;j++)
printf("%d?",a[i][j]);
printf("\n");
}
return?0;
}
/*
運(yùn)行結(jié)果:
1?2
3?4
4?5
1?2
3?4
4?5?
*/
文章名稱:c語言函數(shù)中創(chuàng)建二維數(shù)組 c語言定義二維數(shù)組
網(wǎng)站地址:http://biofuelwatch.net/article/doesigs.html