C語言二維陣列超細講解 - 有解無憂
文章推薦指數: 80 %
這種理解方法在資料初始化和用指標表示時顯得很方便,. 在C語言中,二維陣列中元素排列的順序是按行存放的 ...
菜單
網站主頁
前端設計
後端開發
.NET開發
軟體設計
企業開發
區塊鏈
移動端開發
軟體工程
資料庫
作業系統
其他
主頁 > 後端開發 > C語言二維陣列超細講解
C語言二維陣列超細講解
2020-09-1415:27:45後端開發
用一維陣列處理二維表格,實際是可行的,但是會很復雜,特別是遇到二維表格的輸入、處理和輸出,
在你絞盡腦汁的時候,二維陣列(一維陣列的大哥)像電視劇里救美的英雄一樣顯現在你的面前,初識陣列的朋友們還等什么呢?讓我們認識一下這位武功高強的大哥吧!
1.雙下標變數
聰明的你一定能夠顧名思義了吧,簡單舉個例子:Array[2][3]
Array是陣列名,后面的兩個方括號內分別放行下標和列下標,這里的行下標和列下標就是所謂的雙下標,
這里的下標規則和一維陣列的下標規則一模一樣:
(1)可以是正的整形變數:
eg:Array[2][3];
(2)可以是字符常量:
eg:Array[‘A’][‘B’] = Array[65][66];(不清楚字符常量的同學可以點擊:
https://baike.baidu.com/item/%E5%AD%97%E7%AC%A6%E5%B8%B8%E6%95%B0?fromtitle=%E5%AD%97%E7%AC%A6%E5%B8%B8%E9%87%8F&fromid=103245)
(3)可以是有確定值的運算式:
eg:Array[i+1][j+2]、Array[A[1]][A[2]];
總而言之,這里的下標分別表示行數和列數,
接下來和小編一起感受一下雙下標變數的威力,
上下標變數可以使方程組的計算更簡單,比如:
計算一個二元一次線性方程組:
$$\left\{\begin{matrix}7*x_{1}-4*x_{2}=7\\-2*x_{1}+3*x_{2}=-1\end{matrix}\right.$$
它的一般運算式為:
$$\left\{\begin{matrix}a11*x1+a12*x2=b1\\a21*x1+a22*x2=b2\end{matrix}\right.$$
我們可以寫出一個該方程組的增廣矩陣:
$$\begin{pmatrix}a11&a12&b1\\a21&a22&b2\end{pmatrix}$$
運用克拉默法則可得:
$$x1=(b1*a22-b2*a12)/(a11*a22-a21*a12)$$
$$x2=(a11*b2-a21*b1)/(a11*a22-a21*a12)$$
因為矩陣的本質其實就是二維數表,我們可以用二維陣列來表示這個方程組的系數,
我們先定義一個二維數表:a[2][2],和一個一維數表:b[2]
那么a11可以寫成:a[0][0],a12可以寫成 a[0][1],a21,a22同理,則:
$$x1=(b[0]*a[1][1]-b[1]*a[0][1])/(a[0][0]*a[1][1]-a[1][0]*a[0][1])$$
x2道理一樣,
所以,通過雙下標變數,我們只需要為a[i][j],b[i]中的元素賦值,便可以輕松解決方程組的問題,
另外,通過雙下標變數來表示一張二維數表,使下標變數的行列下標正好與資料在表格中的位置相對應,形象直觀地反映了二維表格,
2.二維陣列定義
很簡單,由雙下標變數定義的陣列就稱為二維陣列,雙下標變數就是陣列的元素,
二維陣列定義的一般形式和一維陣列大同小異,只是下表中的常量運算式多了一個(維度加一):
[][]
例如:floata[3][4],b[5][6];
這里的float表示二維陣列中元素的型別是單精度浮點型,a、b就是給陣列取的名字,
注意:a[3][4]千萬千萬不要寫成a[3,4]!
上面我們把二維陣列理解成二維圖表,我們也可以將二維陣列看成元素是一維陣列的一維陣列,將維數降低,
比如 a[3][4],我們可以把a看成一個一維陣列,里面有三個元素:a[0]、a[1]、a[2],每個元素又包含4個元素:
a[0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[1]
a[1][1]
a[1][2]
a[1][3]
a[1][4]
a[2]
a[2][1]
a[2][2]
a[2][3]
a[2][4]
這種理解方法在資料初始化和用指標表示時顯得很方便,
在C語言中,二維陣列中元素排列的順序是按行存放的,就是說先排列第一行的資料,再排列下第二行的資料,以此類推,如圖:
陣列元素可以出現在運算式中也可以被賦值,例如:b[1][2]=a[1][3]/2,
小編在這里想提醒一下:要嚴格區分定義陣列時用的a[5][6]和參考元素時的 a[5][6]的區別哦!
3.二維陣列的初始化
對二維陣列的初始化有一下幾種辦法:
(1)分行給二維陣列賦值
這個方法用到了我們前面講的對二維陣列的降維理解,比如:
inta[2][3]={{1,2,3},{4,5,6}};
此陳述句先將第一行元素依次賦值為:1、2、3,然后將第二行元素賦值為:4、5、6,因此說是按行賦值,
(2)可以只有一個花括號,按二維陣列元素的排列順序對各元素依次賦值
比如:
inta[2][3]={1,2,3,4,5,6};
(3)對部分元素賦初值
①
inta[2][3]={{2},{4}};
此陳述句表示只給第一行第一個元素賦值為2,第二行第一個元素賦值為4,而其他元素都為0,
②
inta[2][3]={{1,2,3}};
此陳述句表示只給第一行三個元素分別賦值為:1、2、3,
③
inta[2][3]={{},{1,2,3}};
此陳述句表示只給第二行三個元素分別賦值為:1、2、3,
(4)定義陣列時對第一維的長度可以不定義,但必須定義第二維的長度
例:
inta[][3]={1,2,3,4,5,6};
系統會根據輸入的總個數分配存盤空間,易知這個二維陣列有二行;
再如:
有關二維陣列的知識就講到這里啦,歡迎小伙伴來交流哦!
預告:二維陣列的應用
2020-04-21
17:26:54
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36296.html
標籤:C
上一篇:藍橋杯-最大子陣下一篇:C語言----回圈結構2(基礎篇六)
標籤雲
其他(123570)Java(13369)Python(12729)C(7542)區塊鏈(7372)JavaScript(7051)基礎類(6313)AI(6244)腳本語言(PerlPython)(5129)非技術區(4971)Android(4120)MySQL(4012)Linux(3394)C語言(3288)C++語言(3117)Java相關(2746)疑難問題(2699)單片機工控(2479)Web開發(1951)網絡通信(1793)數據庫相關(1767)VB基礎類(1755)PHP(1727)開發(1646)系統維護與使用區(1617).NETCore(1586)基礎和管理(1579)JavaEE(1566)C++(1527)專題技術討論區(1515)Windows客戶端使用(1484)HtmlCss(1466)ASP.NET(1428)Unity3D(1354)VCL組件開發及應用(1353)HTML(CSS)(1220)其他技術討論專區(1200)WindowsServer(1192).NET技术(1165)交換及路由技術(1149)語言基礎算法系統設計(1133)WindowsSDKAPI(1124)界面(1088)JavaSE(1075)Qt(1074)VBA(1048)新手樂園(1016)其他開發語言(947)Go(907)HTML5(901)新技術前沿(898)硬件設計(872)區塊鏈技術(860)網絡編程(857)非技術版(846)一般軟件使用(839)網絡協議與配置(835)Eclipse(790)Spark(750)下載資源懸賞專區(743)
熱門瀏覽
【C++】MicrosoftC++、C和匯編程式檔案
......
uj5u.com2020-09-1000:57:23more
例外宣告
相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。
例外宣告Item1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept理由如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。
示例//不可......
uj5u.com2020-09-1000:57:27more
Codeforces1400ECleartheMultiset(貪心+分治)
鏈接:https://codeforces.com/problemset/problem/1400/E來源:Codeforces思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有0的區間進行減一的操作,操作2:將i位置上的元素歸零。
最終問:將這個陣列的全部元素歸零后操作的最少......
uj5u.com2020-09-1000:57:30more
UVA11610【ReversePrime】
本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本思考這一題,它的第一個要求是找出所有$7$位反向質數及其質因數的個數。
我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。
但是,重讀題,我們突然發現反向質數都是$7$位,而將它反過來后的數字卻是$6$位數,這就說明......
uj5u.com2020-09-1000:57:36more
統計區間素數數量
1#pragmaGCCoptimize(2)2#include
測驗代碼如下:運行結果:2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤),默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾)運行結果:......
uj5u.com2020-09-1000:58:04more
【C++犯錯記錄】VS2019MFC添加資源不懂如何修改資源宏ID
1.首先在資源視圖中,添加資源2.點擊新添加的資源,復制自動生成的ID3.在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換宏宣告4.Ctrl+Shift+F全域搜索,點擊查找全部,然后逐個替換5.為什么使用搜索替換而不使用屬性視窗直......
uj5u.com2020-09-1000:59:11more
【C++犯錯記錄】VS2019MFC不懂的批量添加資源
1.打開資源頭檔案Resource.h,在其中預先定義好宏ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可)2.在資源視圖中選中專案資源,按F7編輯資源檔案,按ID型別相對路徑的形式添加資源。
(別忘了先把檔案拷貝到專案中的res檔案......
uj5u.com2020-09-1001:00:19more
C/C++編程筆記:關于C++的參考型別,專供新手入門使用
今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。
參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。
我們可以給一個變數創建N個參考,這N+1個變數共享了同一塊記憶體區域。
(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。
雖然參考是一個物件的別名,但......
uj5u.com2020-09-1001:00:22more
【C/C++編程筆記】從頭開始學習C++:初學者完整指南
眾所周知,C++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。
您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。
C++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由......
uj5u.com2020-09-1001:00:41more
最新发布
在C#中,如何為Praxedo業務事件附件管理器創建SOAP集成?
我們使用Praxedo,需要將其與我們的其他解決方案集成。
他們的API需要使用SOAP,而且還需要MTOM和基本身份驗證。
我們已經成功地與多種服務集成,例如他們的客戶經理。
在客戶...
uj5u.com2021-10-1615:47:18more
Weblogic14c-webservice-description-name在weblogic-webservice
我使用以下注釋將我的無狀態ejb公開為Web服務:@WebService(name="MyServicePort",portName="MyServicePort",serviceName="MyService",)@SOAPBinding(...
uj5u.com2021-10-1615:45:15more
如何在docker環境中安裝yarn?
現在,我正在嘗試在docker上為Rubyonrails創建環境。
我閱讀了一些人撰寫并嘗試過的檔案和一些博客。
但是我遇到了錯誤并且無法完成。
好像我必須在docker環境中安裝yarn,...
uj5u.com2021-10-1615:40:43more
如何查詢按日期過濾的活動記錄?
如何從我的資料庫中選擇僅在5月份處于活動狀態的所有學生學生?我在活動記錄檔案中找不到它。
我只設法查詢了5月份創建的學生,而不是所有學生都激活了....Student.where(st...
uj5u.com2021-10-1615:39:52more
選擇一個Gradle任務,以便每次運行測驗
當我第一次運行測驗(方法)時,我有這個選單
但是如果我從當前選單再次運行這個測驗(第二次或更多次),它將運行我最近運行的任務。
所以我需要幫助,如何配置IntelliJIdea,使IDEA總是...
uj5u.com2021-10-1615:29:58more
cypress上的invoke()方法如果呼叫兩次就不作業了
我是Cypress的新手,我想用一個已經存在的網頁來實作一些簡單的測驗。
我對結果有點困惑,因為我呼叫了兩次invoke():第一次是檢查初始值(0%),第二次是設定一個新的值并檢查變化,但是...
uj5u.com2021-10-1615:28:48more
用jest和testing-library測驗組件內的一個函式
我是testing-library和jest的新手,我想測驗組件內部的一個函式,它能改變一個輸入的值。
這個組件是一個表單,它的另一個組件是一個輸入。
exportconstForm=()=>{
const[n...
uj5u.com2021-10-1615:28:44more
TypeScript通用型將所有的特定型別改為另一種型別
我試圖想出一種型別,即接受一個物件并將所有型別為number的鍵設定為string。
下面的方法不起作用:...
uj5u.com2021-10-1612:36:47more
當庫存數量為0時,Recyclerview專案顯示空位
當我從回應中得到庫存數量為0時,產品不顯示,但產品位置在網格回收器視圖kotlin中顯示空位。
我將整個串列傳入配接器,然后通過庫存數量過濾。
classProductListAdapter(
va...
uj5u.com2021-10-1612:36:15more
Android-從另一個片段內的回收器視圖呼叫片段
我有一個應用程式(Java),原來有5個部分。
所有這些都是片段,它們由底部導航中的5個圖示訪問。
然而,其中一個部分(Lessons)現在被一個不同的片段所取代,該片段包含一個回收器視圖。
在...
uj5u.com2021-10-1612:35:50more
友情鏈接
有解無憂
延伸文章資訊
- 16-3 二維陣列
i 上C 語言. 6-14. 而下一個敘述 int j[ ][ ] = {0, 1, 2, 3, 4, 5};. 則是錯誤的,因為沒有設定行的註標。 在二維陣列中,若有設定初始值,其中列的註標可...
- 2如何將陣列初始化為0? - 程式人生
一直以為int a[256]={0};是把a的所有元素初始化為0,int a[256]={1};是把a所有的元素初始化為1.... c++ 二維動態陣列初始化及作為引數傳遞. 學習c++動態二 ...
- 3二維陣列的宣告與使用
(※記得陣列的起始元素要從0開始). (2) int a[3][4] = {{2, 5, 7, 1}, {9, 4, 3, 15}, {6, 10, 8, 5}}; // 在宣告二維陣列時,可以...
- 4在C 語言中將陣列初始化為0 | D棧- Delft Stack
C Array. 創建時間: December-19, 2020. 使用C 的庫函式 memset(); C 中初始化陣列為 0 以外的值. 本教程介紹瞭如何在C 中將陣列初始化為0。 C 語言...
- 5第5章、陣列和指標 - C/C++
因為字串的結尾必須包含一個空字元'\0',你必須確定陣列宣告的長度足夠包含空字元。 ... 舉例來說,一個10(row) * 2(column)的二維陣列mat,指定其初始值第一縱行從 ...