這裡我將在二維陣列中的一些基本操作進行一次整理:
編碼思路:
1.inputtwoarry 輸入函式 用於二維陣列的初始化。(也就是賦值)
2.outputtwoarry1 輸出函式 用於二維陣列列印輸出。(一般實現方法,需要先確定二維陣列的列數 a[n])
實現:類似輸入函式與其引數相同。也用了兩層迴圈將陣列中每乙個元素列印輸出。用a[i][j]的方式獲取元素並輸出。
3.outouttwoarr2 輸出函式 也是用於二維陣列的列印輸出。(以指標的方式列印輸出,不需要傳入指定的列數。便於轉置後輸出)
實現:傳參發生變化,將陣列引數改為了指標。增強了函式的靈活性。用此函式即可以輸出原陣列也可以輸出轉置後的陣列。
[首先需要理解一下,二維陣列其實際意義上就是一維陣列的集合。如 a[m][n] 是乙個m行n列的陣列。可以看做是乙個二維陣列內儲存了 m個 一維陣列,而這個一維陣列a[m]中的每乙個元素空間裡面儲存的又是 乙個長度為n的一維陣列。或者可以將 a[i] 看做是該行元素的陣列名。即此二維陣列中的第乙個陣列是a[0][n],第二個陣列是a[1][n],a[0]、a[1]就是相應陣列的陣列名。]
(在我看來能夠理解以上所述,會對理解二維陣列有很大的幫助。甚至其他的多維陣列都可以這樣理解,然後化繁從簡的去使用陣列。其實所有的多維陣列都是由一維陣列,組合得來的!)
其實遍歷二維陣列都是一行一行遍歷。從a[0]~a[m-1],遍歷第一行時就是從a[0][0]~a[0][n-1]。所以只要知道了陣列的大小是m*n也可以指標的方式(*p)來乙個個遍歷陣列元素。也就變成了用一層迴圈輸出m*n個元素。只要確定傳入的m為行,n為列。在輸出時用n的值來確定換行即可,達到與上乙個輸出函式一樣的輸出效果。另外注意在呼叫時,第乙個引數應該傳入給陣列的首位址
即outtwoarr2(a[0],m,n);//此處a[0][0]和a[0]傳入的位址值相同。所以均可使用。
4.reverse 函式 用於二維陣列的轉置。函式宣告為:void reverse(int a[n],int b[m],int m,int n);
a[n]為原陣列,b[m]用於儲存轉置陣列的元素。m,n用於確定陣列的大小,即陣列元素的個數。
我在寫完這個函式後,在函式輸出時發現無法使用outtwoarr1對轉置後的陣列進行輸出,因為outtwoarr1函式,在傳參時用的是二維陣列,要先確定列數。而原始二陣列轉置後 陣列行列數發生了變化,無法對轉置後的陣列輸出。所以才想到outtwoarr2 以指標的形式輸出。這樣在傳參時無需確定列數,那麼也就是只要確定了陣列大小,傳參正確。原始陣列和轉置後的陣列都能用outtwoarr2函式輸出。
編碼實現:
#include const int m=3;
const int n=4;
//二維陣列輸入
void inputtwoarry(int a[n],int m,int n);
//輸出 限定陣列大小
void outputtwoarry1(int a[n],int m,int n);
//輸出 不限陣列大小
void outputtwoarry2(int *a,int m,int n);
//轉置
void reverse(int a[n],int b[m],int m,int n);
int main(int argc, char* argv)
//輸入
void inputtwoarry(int a[n],int m,int n)
{ for(int i=0;i執行結果:
二維陣列轉置
輸入乙個n行m列的陣列,輸出他的轉置,具體來說 輸出的第i行第j個數字,應是輸入的第j行第i個數字。1 n 100 1 m 100 1 aij 1000 input 第一行兩個整數n,m表示陣列的行數和列數 接下來n行,每行m個整數表示陣列內容。output 第一行先輸出m,n。接下來輸出轉置的結果...
二維陣列的轉置
首先我們預設 表示轉置符號那麼行列轉置有 0 0 0 0 0 1 1 0 0 2 2 0 1 0 0 1 1 1 1 1 1 2 2 1 2 0 0 2 2 1 1 2 2 2 2 2 1.我們觀察到行列轉置在表面上是行列交換 2.但是我們發現,對角線是不用處理的所以有 0 0 0 0 1 1 1 ...
c 二維陣列轉置程式
include main else if x 2 else scanf s sz3 輸入陣列的各個元素 switch x for i 0 i for j 0 j printf d sz1 i j break case2 for i 0 i 判斷陣列型別之後進入替換 for j 0 j zh2 j b...