程序主要通過malloc函數(shù)動態(tài)生成數(shù)組,srand和rand函數(shù)配合生成隨機(jī)數(shù)據(jù),代碼如下,
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、北流網(wǎng)絡(luò)推廣、微信平臺小程序開發(fā)、北流網(wǎng)絡(luò)營銷、北流企業(yè)策劃、北流品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供北流建站搭建服務(wù),24小時服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
//程序功能,實(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個元素
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個一維指針
if(NULL==p)
exit(1);
for (i = 0; i n ; i++)
{
p[i] = (int*)malloc(n*sizeof(int));//為m個一維指針分配n個整型大小的空間
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)存的指針,指針指向一個大小為size的內(nèi)存空間;如果錯誤發(fā)生返回NULL。
一般srand和rand配合使用產(chǎn)生偽隨機(jī)數(shù)序列。rand函數(shù)在產(chǎn)生隨機(jī)數(shù)前,需要系統(tǒng)提供的生成偽隨機(jī)數(shù)序列的種子,rand根據(jù)這個種子的值產(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)時間來改變系統(tǒng)的種子值,即srand(time(NULL)),可以為rand函數(shù)提供不同的種子值,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列。
剛剛看錯了,原來是C語言,這樣就好了.
輸入m,n
int m,n;
int i,j;
scanf("%d%d",m,n);
int **mm=(int**)malloc(m*sizeof(int*));
for(i=0;im;i++)
mm[i]=(int*)malloc(n*sizeof(int));
這就建了一個二維數(shù)組mm[m][n]了.
使用時,就直接mm[i][j]就可以了.
先輸入行數(shù)m,列數(shù)n
然后輸入一個m*n的矩陣
然后輸出這個矩陣.
#include stdio.h
#include malloc.h
void main() {
int m,n;
int i,j;
scanf("%d%d",m,n);
int **mm=(int**)malloc(sizeof(m*sizeof(int*)));
for(i=0;im;i++)
mm[i]=(int*)malloc(sizeof(n*sizeof(int)));
for(i=0;im;i++) {
for(j=0;jn;j++)
scanf("%d",mm[i][j]);
}
for(i=0;im;i++) {
for(j=0;jn;j++)
printf("%d ",mm[i][j]);
printf("\n");
}
}
int a[m][n];//就表示一個m行n列的整型二維數(shù)組
在c語言中數(shù)組的下標(biāo)是從0開始的所以,數(shù)組a的元素個數(shù)可以表示為:a[0][0]-a[m-1][n-1]
例如:
#includestdio.h
int?main()
{
int?a[3][2],i,j;//定義一個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?
*/
既然是動態(tài)創(chuàng)建,那么,所創(chuàng)建的二維數(shù)組的行、列數(shù)應(yīng)該具有“普適”性,即,應(yīng)由“用戶”確定二維數(shù)組的規(guī)模。這是有難度的。因?yàn)?,二維數(shù)組要牽扯行指針,且需要固定每行的列元素個數(shù),用這種思路就沒有辦法達(dá)到“普適”。
為此,必須清醒地知道,所謂二維數(shù)組,其元素在內(nèi)存中依然是以一維的方式存放的。說實(shí)話,二維數(shù)組本質(zhì)上是不存在的。
既然如此,那么,“構(gòu)造”一個所謂的二維數(shù)組,只要能提供足夠?qū)嵱玫暮瘮?shù)(工具)操作這個二維數(shù)組就可以了。
綜上,接受由用戶決定的二維數(shù)組行、列值,申請一個一維數(shù)組的空間,按照二維數(shù)組方式進(jìn)行定位和操作就可以了。
為簡便起見,我用如下定義,你可以更改里面的類型,以適應(yīng)自己的需要:
typedef int USER_TYPE;
// 定義一個控制二維數(shù)組(矩陣)的“控制頭”,由三個成員組成
typedef struct MATRIX
{
USER_TYPE *data; // 真正用來存儲二維數(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ù)。
這樣的方法可行,不過要是題目要求輸入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里面,用的時候加入這個頭文件*/
for(i=0;im;i++)
a[i]=(int*)malloc(n*sizeof(int));
/*這樣以后你就可以把a(bǔ)當(dāng)作二維數(shù)組a[m][n]來用了。。