版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C語(yǔ)言程序設(shè)計(jì)
2023翻轉(zhuǎn)課堂實(shí)用教程7.2二維數(shù)組1234導(dǎo)入二維數(shù)組導(dǎo)入案例二維數(shù)組的定義引用初始化存儲(chǔ)方式知識(shí)點(diǎn)二維數(shù)組的使用案例案例分析練習(xí)二維數(shù)組的使用練習(xí)題導(dǎo)入案例案例7.2.1:將C字母保存到矩陣中,并將該矩陣輸出到屏幕上?,F(xiàn)有一個(gè)C字母的黑白像素圖片,下圖,在該圖片中,C字母的像素點(diǎn)使用黑色表示,其他地方用白色顯示。試用矩陣的形式將該圖片輸出出來(lái)。導(dǎo)入案例案例7.2.1:將C字母保存到矩陣中,并將該矩陣輸出到屏幕上。為了方便輸出,黑色的像素點(diǎn)的矩陣值用1來(lái)表示,白色像素點(diǎn)的矩陣值用0來(lái)表示。C字母對(duì)應(yīng)的矩陣如何保存矩陣中各個(gè)元素的值?9行8列二維數(shù)組導(dǎo)入案例#include<stdio.h>#defineM9//宏定義,M表示行數(shù),9行#defineN8//N為列數(shù),8列intmain(){/*9行8列的矩陣,需要9行8列的二維數(shù)組來(lái)存放,初值為0*/intpic[M][N]={0};inti,j;//1行3、4、5、6列為C字母的一部分,值為1for(i=3;i<=6;i++)pic[1][i]=1;
/*同樣,2行2列、3行1列、4行1列、5行1列、6行2列為C字母一部分,值為1*/pic[2][2]=1,pic[3][1]=1,pic[4][1]=1,pic[5][1]=1;pic[6][2]=1;for(i=3;i<=6;i++) pic[7][i]=1;/*以上代碼將C字母的矩陣保存到了二維數(shù)組中,下面將該二維數(shù)組輸出即可。*/for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%2d",pic[i][j]); printf("\n");}return0;}運(yùn)行結(jié)果案例7.2.1程序代碼對(duì)矩陣的操作可以用對(duì)二維數(shù)組的操作來(lái)實(shí)現(xiàn)。1、二維數(shù)組的定義二維數(shù)組的定義方式為:
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度];舉例:
//定義一個(gè)10行10列的二維整型數(shù)組rect,共10*10=100個(gè)元素。intrect[10][10];//定義一個(gè)10行20列的二維字符數(shù)組names,共有10*20=200個(gè)字符元素。charnames[10][20];7.2.1二維數(shù)組知識(shí)點(diǎn)二維數(shù)組可被看作一個(gè)矩陣,有行也有列。定義時(shí),第一個(gè)[]內(nèi)指出的是二維數(shù)組的總行數(shù),第二個(gè)[]內(nèi)指出的是該二維數(shù)組的總列數(shù),均為整型常量。每個(gè)元素的類(lèi)型合法標(biāo)識(shí)符2、二維數(shù)組的引用二維數(shù)組中各個(gè)元素的引用方式:
數(shù)組名[元素的行下標(biāo)][元素的列下標(biāo)];7.2.1二維數(shù)組知識(shí)點(diǎn)(1) 先定義,再引用。(2) 二維數(shù)組中的元素,需要通過(guò)其所在的行和列來(lái)唯一確定。(3) 行、列下標(biāo)均為整型表達(dá)式,行下標(biāo)取值范圍:0~行長(zhǎng)度-1;列下標(biāo)取值范圍:0~列長(zhǎng)度-1,不在這個(gè)范圍內(nèi)的下標(biāo)值為越界,越界會(huì)導(dǎo)致溢出。上溢或者下溢會(huì)導(dǎo)致程序出現(xiàn)不可預(yù)料的錯(cuò)誤。(4) 只能逐個(gè)引用數(shù)組元素,不能一次性引用整個(gè)數(shù)組。對(duì)數(shù)組元素的引用是自由的,通過(guò)數(shù)組名和元素的行下標(biāo)、列下標(biāo)可唯一確定一個(gè)數(shù)組元素。在引用,需要給定該元素的行下標(biāo)和列下標(biāo)。第一個(gè)[]中的數(shù)值為元素的行下標(biāo)。第二個(gè)[]中數(shù)值為元素的列下標(biāo)。2、二維數(shù)組的引用二維數(shù)組中各個(gè)元素的引用方式:
數(shù)組名[元素的行下標(biāo)][元素的列下標(biāo)];7.2.1二維數(shù)組知識(shí)點(diǎn)舉例:intrect[4][3];//定義了一個(gè)4行3列的二維數(shù)組rect,共4*3=12個(gè)元素。一維數(shù)組rect[0]一維數(shù)組rect[1]一維數(shù)組rect[2]一維數(shù)組rect[3]二維數(shù)組邏輯存儲(chǔ)方式0行1232、二維數(shù)組的引用二維數(shù)組中各個(gè)元素的引用方式:
數(shù)組名[元素的行下標(biāo)][元素的列下標(biāo)];7.2.1二維數(shù)組知識(shí)點(diǎn)舉例:intrect[4][3];//定義了一個(gè)4行3列的二維數(shù)組rect,共4*3=12個(gè)元素。二維數(shù)組按行存儲(chǔ)示意圖rect[0][0]rect[0][1]rect[0][2]rect[1][0]rect[1][1]rect[1][2]rect[2][0]rect[2][1]rect[2][2]rect[3][0]rect[3][1]rect[3][2]rect[0]
rect[1]
rect[2]
rect[3]在實(shí)際內(nèi)存中的存放方式是按行存儲(chǔ)3、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)根據(jù)元素初值表中給出的元素的個(gè)數(shù),分三種情況為數(shù)組進(jìn)行初始化:①元素初值表給所有元素賦值②元素初值表給部分元素賦值③沒(méi)有元素初值表3、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)①元素初值表給所有元素賦值舉例1:
intrect[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};該行代碼采用按行分段賦值的方法對(duì)rect數(shù)組進(jìn)行初始化。12345678910111201230123、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)①元素初值表給所有元素賦值舉例2:
intrect[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
第0行所有元素
第1行所有元素
第2行所有元素該行代碼采用先按行再按列連續(xù)賦值的方法對(duì)rect數(shù)組進(jìn)行初始化。123456789101112
0123
012在定義數(shù)組時(shí)如果對(duì)所有元素賦值,可以省略行長(zhǎng)度。3、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)②元素初值表給部分元素賦值若按行連續(xù)賦值,則將初始表中給出的初值先按行再按列依次賦值給數(shù)組元素,其余元素自動(dòng)賦值為0。舉例:intrect[3][4]={1,2,3,4,5,6};12345600000001230123、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)②元素初值表給部分元素賦值按行分段賦值,舉例:
intrect[3][4]={{1,2,3,4},{5,6}};
第0行元素
第1行的元素
intrect[10][10]={8};
intrect[3][4]={0};//所有元素賦值為0123456000000
0123
0123、二維數(shù)組的初始化(1)在定義數(shù)組時(shí)初始化
數(shù)據(jù)類(lèi)型名數(shù)組名[行長(zhǎng)度][列長(zhǎng)度]={元素初值表};7.2.1二維數(shù)組知識(shí)點(diǎn)③沒(méi)有元素初值表分兩種情況:普通數(shù)組intarr[2][3];
//動(dòng)態(tài)數(shù)組,所有元素的值是一個(gè)隨機(jī)值。定義時(shí)加上static關(guān)鍵字的靜態(tài)數(shù)組staticintarr[2][3];//若沒(méi)有對(duì)靜態(tài)數(shù)組元素賦初值,所有元素自動(dòng)被賦初值0。3、二維數(shù)組的初始化(2)在定義數(shù)組后,單獨(dú)對(duì)數(shù)組元素賦值7.2.1二維數(shù)組知識(shí)點(diǎn)此時(shí)需要挨個(gè)為數(shù)組元素賦值,可以一個(gè)一個(gè)元素賦值,也可以用雙重循環(huán)賦值。舉例:intarr[2][3];arr[0][0]=80,arr[0][1]=90,arr[0][2]=85,arr[1][0]=78,arr[1][1]=94,arr[1][2]=75;4、多維數(shù)組7.2.1二維數(shù)組知識(shí)點(diǎn)在前面講解二維數(shù)組的引用時(shí),我們講到二維數(shù)組可以理解為多個(gè)一維數(shù)組,C語(yǔ)言允許這樣解釋。同樣的,多維數(shù)組可以由二維數(shù)組類(lèi)推而得到,此書(shū)不再講解多維數(shù)組的問(wèn)題。一維數(shù)組rect[0]一維數(shù)組rect[1]一維數(shù)組rect[2]一維數(shù)組rect[3]二維數(shù)組邏輯存儲(chǔ)方式0行123案例分析二維數(shù)組的編程方法7.2.3判斷下三角矩陣7.2.4求矩陣每行的最大值,以及每列的最小值演示遍歷二維數(shù)組中每個(gè)元素的方法分別用行下標(biāo)、列下標(biāo)作為外層循環(huán)對(duì)矩陣的不同訪(fǎng)問(wèn)。行列下表作為循環(huán)變量,雙層循環(huán),遍歷數(shù)組演示矩陣的下三角位置行列下標(biāo)的關(guān)系。7.2.2二維數(shù)組案例分析7.2.2數(shù)據(jù)a與矩陣相乘二維數(shù)組的編程:二維數(shù)組涉及到兩個(gè)下標(biāo),將數(shù)組行下標(biāo)和列下標(biāo)分別作為循環(huán)變量,雙重循環(huán),遍歷數(shù)組。行下標(biāo)作為外循環(huán)變量、列下標(biāo)作為內(nèi)循環(huán)變量,就會(huì)按照行來(lái)遍歷數(shù)組;相反的,就會(huì)按照列來(lái)遍歷數(shù)組。C語(yǔ)言中二維數(shù)組是按行存儲(chǔ)的,按行遍歷數(shù)組,程序執(zhí)行效率最高。7.2.2二維數(shù)組案例分析案例7.2.2:將一個(gè)數(shù)a與矩陣相乘,并將結(jié)果保存到二維數(shù)組中,然后輸出。要求:輸入第一行為三個(gè)整數(shù)a、m和n,中間用空格隔開(kāi),m和n分別為矩陣的行和列(1≤m,n≤10)。隨后的m行,每行輸入n個(gè)整數(shù),每個(gè)整數(shù)間用空格隔開(kāi)。輸出a與該矩陣相乘后的矩陣,并保存到二維數(shù)組中,然后輸出。問(wèn)題分析:在輸入時(shí),矩陣中的元素值是按行給出的,所以在讀取矩陣中的元素值,也是要按行存放在二維數(shù)組中,按行存放時(shí),行下標(biāo)作為外循環(huán)變量,列下標(biāo)作為內(nèi)循環(huán)變量。7.2.2二維數(shù)組案例分析#include<stdio.h>intmain(){ intrect[10][10]={0}; inta,m,n,i,j,value; scanf("%d",&a); scanf("%d%d",&m,&n); for(i=0;i<m;i++){
for(j=0;j<n;j++){//按行來(lái)讀取矩陣中的數(shù)據(jù)
scanf("%d",&value);/*將矩陣中的所有元素*a后存在相應(yīng)位置的二維數(shù)組中*/ rect[i][j]=a*value;
} } for(i=0;i<m;i++){
for(j=0;j<n;j++)//將第i行所有元素輸出,中間用空格隔開(kāi) printf("%d",rect[i][j]);
//當(dāng)?shù)趇行的所有元素輸出后,需要換行,準(zhǔn)備下一次循環(huán)輸出第i+1行的元素
printf("\n"); } return0;}運(yùn)行結(jié)果:輸入:232↙12↙34↙5
6↙輸出:24681012運(yùn)行結(jié)果案例7.2.2程序代碼7.2.2二維數(shù)組案例分析案例7.2.3:判斷下三角矩陣要求:輸入第一行為一個(gè)整數(shù)m(1≤m≤10),表示方陣的行數(shù)和列數(shù)。隨后m行數(shù)據(jù),每一行都有m個(gè)整數(shù),用空格隔開(kāi),試判斷該方陣是否為下三角矩陣:如果一個(gè)方陣的主對(duì)角線(xiàn)上方的元素全部為0,這個(gè)矩陣就成為下三角矩陣。7.2.2二維數(shù)組案例分析用二維數(shù)組a表示m*m方陣時(shí),對(duì)應(yīng)關(guān)系:a[0][0]a[0][1]a[0][2]
a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]主對(duì)角線(xiàn):i==j副對(duì)角線(xiàn):i+j==m-1上三角:i<=j下三角:i>=j#include<stdio.h>#defineMAX10intmain(){ intrect[MAX][MAX]={0}; intm,i,j; intflag=1;
//flag為1:為下三角矩陣,flag為0:不為下三角矩陣。 scanf("%d",&m); for(i=0;i<m;i++){ for(j=0;j<m;j++)
//按行來(lái)讀取矩陣中元素,并存在數(shù)組中 scanf("%d",&rect[i][j]); } for(i=0;i<m;i++){ for(j=i+1;j<m;j++){ if(rect[i][j]!=0){ flag=0; break; } } } if(flag==1) printf("lowertriangularmatrix!"); else printf("notlowertriangularmatrix!"); return0;}運(yùn)行結(jié)果1:5↙10000↙10000↙12000↙12300↙12340↙lowertriangularmatrix!運(yùn)行結(jié)果2:5↙10010↙10010↙12000↙12300↙12340↙notlowertriangularmatrix!運(yùn)行結(jié)果案例7.2.3程序代碼7.2.2二維數(shù)組案例分析若刪除break,結(jié)果如何?案例7.2.4:求矩陣每行的最大值,以及每列的最小值要求:輸入第一行為兩個(gè)整數(shù)m和n(1≤m,n≤10),表示矩陣的行數(shù)和列數(shù)。隨后m行數(shù)據(jù),每一行都有n個(gè)整數(shù),用空格隔開(kāi),試輸出該矩陣每行的最大值,以及每列的最小值。
問(wèn)題分析:用二維數(shù)組來(lái)保存此矩陣,該矩陣有m行n列,那么共有m個(gè)最大值,n個(gè)最小值,所以可以定義兩個(gè)數(shù)組max和min來(lái)保存所有的最大值和最小值。其中求每行最大值時(shí),需要先按行遍歷二維數(shù)組,求每列最小值時(shí),需要按列遍歷二維數(shù)組。7.2.2二維數(shù)組案例分析#include<stdio.h>#defineMAX10intmain(){
intrect[MAX][MAX];
//max保存每行最大值,min保存每列最小值inti,j,m,n,max[MAX]={0},min[MAX]={0};scanf("%d%d",&m,&n);for(i=0;i<m;i++){//讀取矩陣,保存到二維數(shù)組中for(j=0;j<n;j++)scanf("%d",&rect[i][j]);}
/*求每一行的最大值存到max數(shù)組中,共m行,所以max數(shù)組中有m個(gè)值*/for(i=0;i<m;i++){//先假設(shè)第i行的第0列元素最大,再和后面列的數(shù)據(jù)進(jìn)行比較max[i]=rect[i][0];for(j=1;j<n;j++){if(max[i]<rect[i][j])max[i]=rect[i][j];}}
案例7.2.4程序代碼7.2.2二維數(shù)組案例分析
/*求每一列的最小值存到min數(shù)組中,共n列,mim數(shù)組中有n個(gè)值*/for(j=0;j<n;j++){min[j]=rect[0][j];for(i=1;i<m;i++)if(min[j]>rect[i][j])min[j]=rect[i][j];}printf("每行最大值如下:");for(i=0;i<m;i++) printf("%d",max[i]);printf("\n每列最小值如下:");for(i=0;i<n;i++) printf("%d",min[i]);return0;}運(yùn)行結(jié)果1:45↙34539↙1020487↙2454913↙634547↙每行最大值如下:9202434每列最小值如下:34437運(yùn)行結(jié)果//有錯(cuò)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- pcr技術(shù)課件簡(jiǎn)短
- 教案對(duì)數(shù)函數(shù)及其性質(zhì)
- 玉溪師范學(xué)院《通信原理》2022-2023學(xué)年第一學(xué)期期末試卷
- 玉溪師范學(xué)院《數(shù)學(xué)課件設(shè)計(jì)與制作》2021-2022學(xué)年第一學(xué)期期末試卷
- 五下語(yǔ)文第1課教學(xué)課件教學(xué)課件教學(xué)
- 兒童畫(huà)課件教學(xué)
- 2024年苯甲醇項(xiàng)目成效分析報(bào)告
- 《說(shuō)說(shuō)委屈的事》心理健康教學(xué)設(shè)計(jì)
- 倉(cāng)庫(kù)主管協(xié)議書(shū)
- 采購(gòu)談判記錄 合同條款范本
- 2024年畜牧業(yè)經(jīng)營(yíng)管理教案:轉(zhuǎn)型與升級(jí)
- 浙江省紹興市建功中學(xué)教育集團(tuán)2024-2025學(xué)年八年級(jí)上學(xué)期10月份學(xué)科素養(yǎng)競(jìng)賽語(yǔ)文試卷
- 北洋政府的統(tǒng)治與軍閥割據(jù) 統(tǒng)編版八年級(jí)歷史上冊(cè)
- 【單元練】(必考題)高中物理必修3第十三章【電磁感應(yīng)與電磁波初步】習(xí)題(答案解析)
- 二年級(jí)排球教案
- 小數(shù)乘除法豎式計(jì)算專(zhuān)項(xiàng)練習(xí)題大全(每日一練共15份)
- 天津市和平區(qū)2024-2025學(xué)年九年級(jí)上學(xué)期期中考試英語(yǔ)試題
- 政府采購(gòu)代理服務(wù)方案
- 2024版抗菌藥物DDD值速查表
- 小學(xué)二年級(jí)數(shù)學(xué)上冊(cè)期中試卷(全套)
- 卡牌行業(yè)專(zhuān)題報(bào)告:熱潮背后的IP效應(yīng)與市場(chǎng)潛力
評(píng)論
0/150
提交評(píng)論