㈠ c語言如何定義二維數組
二維數組定義的一般形式是:
dataType arrayName[length1][length2];
其中,dataType 為數據類型,arrayName 為數組名,length1 為第一維下標的長度,length2 為第二維下標的長度。
例如:
int a[3][4];
定義了一個 3 行 4 列的二維數組,共有 3×4=12 個元素,數組名為 a,即:
a[0][0], a[0][1], a[0][2], a[0][3]
a[1][0], a[1][1], a[1][2], a[1][3]
a[2][0], a[2][1], a[2][2], a[2][3]
㈡ 急急!!!如何用c語言輸入和輸出一個二維數組
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[2][2];
int i,j;
for (i=0;i<2;i++)
{
for (j=0;j<2;j++)
{
scanf("%d ",&a[i][j]);
}
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
printf("%d",a[i][j]);
return 0;
}
運行成功
㈢ C語言編程,如何自動生成一個二維數組
程序主要通過malloc函數動態生成數組,srand和rand函數配合生成隨機數據,代碼如下,
//程序功能,實現自定義m*n二維數組,隨機生成給定范圍max-min的數組元素
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i=0,j=0;
int m=0,n=0;//數組維數
int max=0,min=0;//數組數據范圍
int **p=NULL;//二維指針,存放m*n個元素
int tmp;
printf("請輸入數組維數m和n:");
scanf("%d %d",&m,&n);
printf("請輸入數組元素最大最小值max和min:");
scanf("%d %d",&max,&min);
if(max<min)//保證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;i<m;i++)
for(j=0;j<n;j++)
p[i][j]=rand()%(max-min+1)+min;
printf("%d*%d二維數組為:\n",m,n);
for(i=0;i<m;i++)
{
for(j=0;j<n;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 );如果分配成功則返回指向被分配內存的指針,指針指向一個大小為size的內存空間;如果錯誤發生返回NULL。
一般srand和rand配合使用產生偽隨機數序列。rand函數在產生隨機數前,需要系統提供的生成偽隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。如果系統提供的種子沒有變化,每次調用rand函數生成的偽隨機數序列都是一樣的。srand(unsigned seed)通過參數seed改變系統提供的種子值,從而可以使得每次調用rand函數生成的偽隨機數序列不同,從而實現真正意義上的「隨機」。通常可以利用系統時間來改變系統的種子值,即srand(time(NULL)),可以為rand函數提供不同的種子值,進而產生不同的隨機數序列。
㈣ c語言怎麼創建二維數組
int a[m][n];//就表示一個m行n列的整型二維數組
在c語言中數組的下標是從0開始的所以,數組a的元素個數可以表示為:a[0][0]-a[m-1][n-1]
例如:
#include<stdio.h>
intmain()
{
inta[3][2],i,j;//定義一個3行2列的整型二維數組a
for(i=0;i<3;i++)//依次給二維數組賦值
for(j=0;j<2;j++)
scanf("%d",&a[i][j]);
printf(" ");
for(i=0;i<3;i++){//輸出二維數組
for(j=0;j<2;j++)
printf("%d",a[i][j]);
printf(" ");
}
return0;
}
/*
運行結果:
12
34
45
12
34
45
*/
㈤ c語言如何動態創建二維數組
既然是動態創建,那麼,所創建的二維數組的行、列數應該具有「普適」性,即,應由「用戶」確定二維數組的規模。這是有難度的。因為,二維數組要牽扯行指針,且需要固定每行的列元素個數,用這種思路就沒有辦法達到「普適」。
為此,必須清醒地知道,所謂二維數組,其元素在內存中依然是以一維的方式存放的。說實話,二維數組本質上是不存在的。
既然如此,那麼,「構造」一個所謂的二維數組,只要能提供足夠實用的函數(工具)操作這個二維數組就可以了。
綜上,接受由用戶決定的二維數組行、列值,申請一個一維數組的空間,按照二維數組方式進行定位和操作就可以了。
為簡便起見,我用如下定義,你可以更改裡面的類型,以適應自己的需要:
typedef int USER_TYPE;
// 定義一個控制二維數組(矩陣)的「控制頭」,由三個成員組成
typedef struct MATRIX
{
USER_TYPE *data; // 真正用來存儲二維數組元素的空間
int Row; // 二維數組行數
int Col; // 二維數組列數
}MATRIX;
MATRIX *initMatrix(int row, int col); // 初始化二維數組
USER_TYPE getElementAt(MATRIX matrix, int i, int j); // 取得指定下標的元素
void setElementAt(MATRIX matrix, int i, int j, USER_TYPE val); // 給指定下標的元素賦值
void destroyMatrix(MATRIX *matrix); // 銷毀二維數組
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;
}
把上面的函數當成工具,完成二維數組初始化、賦值、取值等一系列操作,如果需要比較,還需要編寫比較的函數。
㈥ c語言二維數組
這個就是指針數組和數組指針的區別了,我當年也在這里轉了很久,希望我下面所說得可以幫到你。
首先,明確編譯器是怎麼識別*s[]和(*s)[]兩種形式的代碼的。對於*s[],編譯器會以默認的右結合的方式進行識別,所以首先識別s[],這是一個數組,然後再識別*,說明這個數組的元素都是指針。所以最後的結果就是:這是一個「以指針為元素的數組」,簡稱指針數組。而對於(*s)[],由於()的優先順序高於*,所以編譯器會先識別()裡面的,也就是先識別*s,所以它是一個指針,然後()說明這個指針指向的是一個數組,所以最後的結果是:這是一個「指向數組的指針」,簡稱數組指針。
好吧,我承認一點,就是這兩個東西看起來復雜,但是其實用起來區別不大,最本質的東西就是,指針數組用到多個指針,數組指針就完全是一個指針跑天下。
看下面一段代碼(我偷懶用C++寫的,反正這個不是重點):
#include
using
namespace
std;
int
main()
{
//指針數組
*a[2]
int
t1[3]
=
{0,1,2};
int
t2[3]
=
{3,4,5};
int
t3[3]
=
{6,7,8};
int
*a[3];
a[0]
=
t1;
//一個指針賦值
a[1]
=
t2;
//第二個指針賦值
a[2]
=
t3;
//第三個指針賦值
//數組指針
(*b)[3]
int
(*b)[3]
=
new
int[3][3];
for(int
i=0;i<3;i++)
for(int
j=0;j<3;j++)
*(*(b+i)+j)
=
i*3+j;
//一個指針跑天下
cout
<<
*((*b)+1)
<<
"
"
<<
*(*(b+1))
<<
endl;
system("pause");
return
0;
}
最後我想說,其實這個做題的時候有用,自己寫的時候還是盡量直接用int[n][m]的方式比較方便,稍微浪費點空間問題不大,重要的是看起來好看,不容易出錯。
㈦ C語言中如何定義一個二維數組,數組長度由輸入值確定
可以通過malloc()函數動態分配,示例:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
datatype **na(const int m,const int n) /*創建一個m行n列的datatype類型數組,返回首地址,如果創建失敗則返回NULL*/
{
int i;
datatype **a=(datatype**)malloc(sizeof(datatype *)*m);
if (!a) {
return NULL;
}
else
for (i = 0; i<m; i++) {
a[i]=(datatype*)malloc(sizeof(datatype)*n);
if (!a[i]) {
return NULL;
}
}
return a;
}
void dela(datatype **a,const int m) /*刪除用na()函數創建的並且有m行元素的二維數組a*/
{
int i;
for (i = 0; i<m; i++)
free(a[i]);
free(a);
}
int main(void)
{
datatype **dta=na(3,2); /*創建一個3行2列的datatype數組*/
int i,j;
if (!dta) { /*如果創建失敗,則輸出錯誤信息並結束程序*/
fprintf(stderr,"MEMORY ERROR\n");
return -1;
}
else
{
for (i=0; i<3; i++) { /*使用剛才創建的二維數組*/
for (j=0; j<2; j++) {
dta[i][j]=i*j;
printf("%d ",dta[i][j]);
}
putchar('\n');
}
}
dela(dta,3); /*動態創建的數組要手動刪除*/
return 0;
}
//---------------------------------------------------------------------------
㈧ C語言如何建立一個二維數組
剛剛看錯了,原來是C語言,這樣就好了.
輸入m,n
int m,n;
int i,j;
scanf("%d%d",&m,&n);
int **mm=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
mm[i]=(int*)malloc(n*sizeof(int));
這就建了一個二維數組mm[m][n]了.
使用時,就直接mm[i][j]就可以了.
先輸入行數m,列數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;i<m;i++)
mm[i]=(int*)malloc(sizeof(n*sizeof(int)));
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
scanf("%d",&mm[i][j]);
}
for(i=0;i<m;i++) {
for(j=0;j<n;j++)
printf("%d ",mm[i][j]);
printf("\n");
}
}
㈨ c語言中定義一個二維數組
簡單點說 就不給代碼了 累。。。
思路就是用for循環 兩層循環就ok了
for(int i=0;i<多少多少;i++)
{
for(int j=0;j<多少多少;j++)
{
輸入那個語句忘了。。。汗。。。
}
}
㈩ C語言設計二維數組
想學c的話,建議下載個c語言的chm格式幫助文檔,裡面都有很詳細的講解
二維數組簡單的說,就好比10隻母豬,沒只母豬又生n只小豬,組成的數組。