⑴ 用c語言創建一個二維數組a[m][n],要求m,n從鍵盤輸入
#include <stdio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int m,n;
int** a;
int i,j;
printf("輸入m和n,空格分隔:");
scanf("%d%d",&m,&n);
a=(int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++)
{
a[i]=(int*)malloc(sizeof(int)*n);
}
srand(time(0));
printf("隨機填充數組如下:\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=rand()%100;
printf("%-4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<m;i++)
free(a[i]);
free(a);
return 0;
}
⑵ C語言如何動態分配二維數組
動態分配二維數組:
void main(int argc, char * argv[])
{
int NC=100, NR=200;
int i,j;
char **a; // a[NR][NC] -- *a[NR] -- a[j][i]
a = (char **) malloc(sizeof(char *) * NR);
for (j=0;j<NR;j++){
a[j] = (char *) malloc(sizeof(char) * NC);
}
// 釋放空間: free(a);
編譯錯誤是因為p[j]=(char *)malloc,而不是題目的(char *)malloc(n*sizeof(char))。
(2)c創造二維數組靜態擴展閱讀:
二維數組的動態分配
二維數組A[m][n],這是一個m行,n列的二維數組。設a[p][q]為A的第一個元素,即二維數組的行下標從p到m+p,列下標從q到n+q,按「行優先順序」存儲時則元素a[i][j]的地址計算為:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按「列優先順序」存儲時,地址計算為:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放該數組至少需要的單元數為(m-p+1) * (n-q+1) * t 個位元組。
⑶ C++靜態成員二維數組的初始化問題
別這么初始化,一般是用 memset(arr,0,sizeof(arr)); 初始化數組的。
你的提問應該改成:char c::arr[255][16] = {{0}}; 你試一下吧。
⑷ c語言中定義一個二維數組
簡單點說 就不給代碼了 累。。。
思路就是用for循環 兩層循環就ok了
for(int i=0;i<多少多少;i++)
{
for(int j=0;j<多少多少;j++)
{
輸入那個語句忘了。。。汗。。。
}
}
⑸ 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語言怎麼創建二維數組
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語言靜態二維數組怎麼建(如圖)
float a[10][11] ;
int i , j ;
for( i = 0 ; i < 10 ; i++) //外層循環控制行
for ( j = 0 ; j <11 ; j++) //內層循環控制列
scanf("%f",&a[i][j]);
⑻ 求解釋C語言二維數組及靜態變數
for(i=0;i<8;i++)
x+=a[i][j];
你在累加元素值的時候,j的值始終是4,而二維數組索引為4的列的元素的值你沒動過,都是初值0
⑼ C語言 如何動態創建二維數組
這樣的方法可行,不過要是題目要求輸入m和n,然後再定義二維數組a[m][n],那就行不通了。
你可以這樣做:(以int型為例)
int **a;
int m,n,i;
scanf("%d%d",&m,&n);
a=(int**)malloc(m*sizeof(int*)); /*malloc函數在stdlib.h裡面,用的時候加入這個頭文件*/
for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));
/*這樣以後你就可以把a當作二維數組a[m][n]來用了。。
⑽ c語言菜鳥求救!!! 在循環中創建新二維數組。。。好用的多給分!!
void *gridtoarray(int R, int C, int L)
{
return calloc( L, R * C * sizeof( char ) );
}