1. c語言中如何獲取一個二維數組的行列數
有兩種方式:
1 二維數組的行列數在定義的時候就是確定好的,所以編程人員是知道二維數組的大小以及行列數的。 所以可以直接使用行列數的值。
為方便維護,可以將行列數定義為宏,直接調用對應的宏名作為行列值。
2 動態獲取。
對於type array[A][B];形式的二維數組,可以通過計算sizeof獲取行列數。
sizeof(array[0][0])為一個元素佔用的空間,
sizeof(array[0])為一行元素佔用的空間,
sizeof(array)為整個數組佔用的空間,
於是:
行數 = sizeof(array)/sizeof(array[0]);
列數 = sizeof(array[0])/sizeof(array[0][0]);
2. C語言二維數組。行列轉換
#include "stdio.h"
#include "malloc.h"
void main()
{
int **a;
int row,col;
int i,j;
printf("Please input row:\n");
scanf("%d",&row);
fflush(stdin);
printf("Please input col:\n");
scanf("%d",&col);
fflush(stdin);
printf("Please input data:\n");
a=(int**)malloc(row*sizeof(int));
for(i=0;i<row;i++)
a[i]=(int*)malloc(col*sizeof(int));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
scanf("%d",&a[i][j]);
fflush(stdin);
}
printf("Result:\n");
for(i=0;i<col;i++)
{
for(j=0;j<row;j++)
printf("%d ",a[j][i]);
printf("\n");
}
}
3. C語言中如何取二維數組的一行(一列)
沒有簡單的函數或表示方法,只能使用循環輸出或者使用數組中的值。
#include <stdio.h>
int main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int b[3],n=3;
printf("輸出第三行: ");
for(int i=0;i<3;i++)
{b[i]=a[n-1][i];printf("%d ",b[i]);}
}
數組b中存儲的就是第n行的數據。
(3)c語言二維數組行列擴展閱讀:
數組的使用規則:
1.可以只給部分元素賦初值。當{ }中值的個數少於元素個數時,只給前面部分元素賦值。例如:static int a[10]={0,1,2,3,4};表示只給a[0]~a[4]5個元素賦值,而後5個元素自動賦0值。
2.只能給元素逐個賦值,不能給數組整體賦值。例如給十個元素全部賦1值,只能寫為:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能寫為:static int a[10]=1;請注意:在C、C#語言中是這樣,但並非在所有涉及數組的地方都這樣,資料庫是從1開始。
3.如不給可初始化的數組賦初值,則全部元素均為0值。
4.如給全部元素賦值,則在數組說明中, 可以不給出數組元素的個數。例如:static int a[5]={1,2,3,4,5};可寫為:static int a[]={1,2,3,4,5};動態賦值可以在程序執行過程中,對數組作動態賦值。這時可用循環語句配合scanf函數逐個對數組元素賦值。
網路-數組
4. c語言中二維數組哪個是行,哪個是列
1、二維數組的第一個參數是行,第二個參數是列。二維數組定義的一般形式是: 類型說明符 數組名[常量表達式1][常量表達式2],其中常量表達式1表示第一維下標的長度,常量表達式2 表示第二維下標的長度。
2、C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。C是高級語言:它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。C語言一共只有40個關鍵字,9種控制語句,程序書寫形式自由,區分大小寫。把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作。
3、在C語言中,二維數組是按行排列的。即,先存放a[0]行,再存放a[1]行,最後存放a[2]行。每行中有四個元素也是依次存放。由於數組a說明為int類型,該類型占兩個位元組的內存空間,所以每個元素均佔有兩個位元組。
4、二維數組在概念上是二維的,即是說其下標在兩個方向上變化,下標變數在數組中的位置也處於一個平面之中,而不是象一維數組只是一個向量。但是,實際的硬體存儲器卻是連續編址的,也就是說存儲器單元是按一維線性排列的。如何在一維存儲器中存放二維數組,可有兩種方式:一種是按行排列, 即放完一行之後順次放入第二行。另一種是按列排列, 即放完一列之後再順次放入第二列。
5、二維數組本質上是以數組作為數組元素的數組,即"數組的數組",類型說明符 數組名[常量表達式][常量表達式]。二維數組又稱為矩陣,行列數相等的矩陣稱變方陣。對稱矩陣a[i][j] = a[j][i],對角矩陣:n階方陣主對角線外都是零元素。
6、二維數組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 個位元組。
5. c語言 二維數組 但不知道其中的行和列
可以動態分配內存。
tdary = (int**)malloc(rows*cols*sizeof(int))。
然後tdary[0]=(int*)tdary, tdary[1]=(int*)tdary+cols,依次類推。這樣可以把上面分配的空間當成數組來用。
6. c語言 怎樣用程序知道二維數組行數和列數
比如有這樣一個二維數組:
int
a[3][5];
求數組元素的總數:
sizeof(a)
/
sizeof(int)
求數組列數:
sizeof(a[0])/sizeof(int)
而數組行數則為
:(
sizeof(a)
/
sizeof(int)
)/
(
sizeof(a[0])
/
sizeof(int)
)
不知道你明白了么?
7. c語言:二維數組行列互換
由於行、列不確定,所以要動態處理。舉例代碼如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"stdlib.h"
intmain(void){
int**a,**b,m,n,i,j;
while(1){//保證輸入的行、列數為正數
printf("Pleaseenterm&n(intm>0,n>0)... ");
if(scanf("%d%d",&m,&n),m>0&&n>0)
break;
printf("Error,redo:");
}
a=(int**)malloc((j=sizeof(int))*m);
b=(int**)malloc(j*n);
if(a==NULL||b==NULL){
printf("Applicationmemoryfailure... ");
exit(0);
}
for(i=0;i<m;i++)
if((a[i]=(int*)malloc(j*n))==NULL){
printf("Failedtocreatethearray... ");
exit(0);
}
for(i=0;i<n;i++)
if((b[i]=(int*)malloc(j*m))==NULL){
printf("Failedtocreatethearray... ");
exit(0);
}
for(i=0;i<m;i++)
for(j=0;j<n;scanf("%d",a[i]+j++));
printf(" ");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d",b[i][j]=a[j][i]);//a的行、列互換後存入b
printf(" ");
}
for(i=0;i<m;free(a[i++]));
free(a);
for(i=0;i<n;free(b[i++]));
free(b);
return0;
}
8. C語言 如何對二維數組進行按列排序
在C語言中,二維數組按行存儲,對每一行排序很方便,可以把每一行當成一個一維數組,使用排序函數直接進行排序。
然而對每一列進行排序,就不能直接當成一維數組進行排序。但是仍然可以把第j列a[0...M-1][j]在邏輯上當成一維數組進行排序,下面以使用冒泡排序為例對其排序。
對二維數組按列排序後,進一步展示了如何調用快速排序函數按行進行排序。
程序源碼:
#include<stdio.h>
#include<stdlib.h>
#defineM3
#defineN3
//輸出二維數組的函數
voidprint(inta[][N])
{
inti,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%d",a[i][j]);
}
printf(" ");
}
}
//qsort的cmp函數
intcmp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}
intmain(intargc,char*argv)
{
inta[M][N]={3,2,1,9,8,7,6,5,4};
printf("按列排序前的二維數組是: ");
print(a);
printf(" ");
intj;
for(j=0;j<N;j++)//對每一列進行升序排序
{
//對第j列進行排序
intm,n;
intt;
for(m=M-1;m>0;m--)
{
for(n=0;n<m;n++)
{
if(a[n][j]>a[n+1][j])
{
t=a[n][j];
a[n][j]=a[n+1][j];
a[n+1][j]=t;
}
}
}
}
printf("按列排序後二維數組變為: ");
print(a);
printf(" ");
//對按列排序後的二維數組按行升序排序(調用快速排序函數)
inti;
for(i=0;i<M;i++)
{
qsort(a[i],N,sizeof(a[i][0]),cmp);
}
printf("按列排序後再按行排序後二維數組變為: ");
print(a);
printf(" ");
system("pause");
return0;
}
編譯運行後的結果如下:
9. c語言如何將二維數組行列循環移位
#include<stdio.h>
#defineN5
intmain(){
inti,j,m,n,a[N][N];
printf("inputmn:");
scanf("%d%d",&m,&n);
while(m>0)m-=N;
while(n>0)n-=N;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=i*N+j+1;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%-3d",a[(N-m+i)%N][(N-n+j)%N]);
printf(" ");
}
return0;
}
input m n:1 1
25 21 22 23 24
5 1 2 3 4
10 6 7 8 9
15 11 12 13 14
20 16 17 18 19
10. 二維數組行列求平均c語言編程
假如有這樣一個數組num[i][j]
for(i=0;i<行數;i++)
{
n=0;
for(j=0;j<列數;j++)
{
n=n+num[i][j];//各行之和
}
n=n/列數;//各行平均值
}
//內外for 調換求出的就是各列平均值。
for(j=0;j<列數;j++)
{
n=0;
for(i=0;i<行數;i++)
{
n=n+num[i][j];//各列之和
}
n=n/行數;//各列平均值
}