版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第四章
數(shù)組(一)1研究式學習—C程序設計(第四章)上講主要內(nèi)容什么是循環(huán)結構?循環(huán)語句語法練習編程練習2研究式學習—C程序設計(第四章)本章主要內(nèi)容一維數(shù)組◆概念的引入◆一維數(shù)組的定義、引用及初始化程序舉例二維數(shù)組3研究式學習—C程序設計(第四章)數(shù)組—問題的提出
在程序設計中,常常需要處理以整體形式出現(xiàn)的一批數(shù)據(jù),比如求一個班級(或?qū)W院)學生的某科成績的平均分,這樣需要存儲所有學生的成績(90,85,67,77,…),這樣的數(shù)據(jù)在程序中如何處理?如果仍然用簡單變量來存放,那么當這批數(shù)據(jù)的數(shù)量較大時,程序?qū)o法編寫。c語言使用了一種新的數(shù)據(jù)類型——數(shù)組,來處理這種有一定順序關系且以整體出現(xiàn)的一組數(shù)據(jù)。問題:求某班學生某科成績高于平均分的人數(shù)。4研究式學習—C程序設計(第四章)數(shù)組-—問題分析(1)假設有n個學生,n個學生的學習成績按學號順序排列(成績分只取到整數(shù)位數(shù))。要完成題目要求,需要解決以下問題:如何存儲n個學生的成績(分數(shù))在此基礎上如何求出平均分如何求出高于平均分的人數(shù)5研究式學習—C程序設計(第四章)數(shù)組-—問題分析(2)1成績存儲形式n個學生的成績分數(shù)可視為一組n個類型相同的數(shù)據(jù)。在C語言中,允許用一個名字來命名同類型的一組數(shù)據(jù),并把這樣的數(shù)據(jù)類型稱為數(shù)組。例如score[0],score[1]……score[i](0<i<n),其中score為數(shù)組名,i為某個學生成績數(shù)據(jù)存放數(shù)組score中的順序號,也稱為下標表達式。C語言規(guī)定下標從0開始計數(shù),因此數(shù)組score的最大下標為n-1。1成績存儲形式與使用普通(基本類型)變量一樣,使用數(shù)組存放數(shù)據(jù)之前,要對數(shù)組進行定義。存儲n個成績數(shù)據(jù)的數(shù)組score可以定義如下:
int
score[100];這里,score是數(shù)組名,而int表明數(shù)組類型,即所有數(shù)組元素的數(shù)據(jù)類型都是int型。方括號中的100是數(shù)組的大小(長度)。即數(shù)組score有100個元素。6研究式學習—C程序設計(第四章)數(shù)組-—問題分析(3)
2成績數(shù)據(jù)的輸入每一個數(shù)組元素可以存放一個成績分數(shù)。要輸入n個學生的成績就應當執(zhí)行n次輸入函數(shù):
for(i=0;i<100;i++) scanf(“%d”,&score[i]);
在上述語句中,scanf函數(shù)將被執(zhí)行100次,score[i]表示下標為i的元素,當i從0變到99時,每次輸入的數(shù)據(jù)(成績分數(shù))被依次存入score[0],score[1],……score[99]這100個數(shù)組元素中。
7研究式學習—C程序設計(第四章)數(shù)組-—問題分析(4)
3求出平均分首先需要把100個同學的分數(shù)累加來,也就是把100個數(shù)組元素的值相加后,再求平均值。
for(i=0;i<100;i++) sum=sum+score[i]; averange=sum/100;
i=0:sum=0+score[0]i=1:sum=score[0]+score[1]i=2:sum=+score[2]i=3:sum=+score[3]...i=99:sum=+score[99]4求出高于平均分的學生人數(shù)用平均分與各數(shù)組元素逐一比較,并記下大于平均分的數(shù)組元素的個數(shù)。
for(i=0;i<100;i++)if(score[i]>averange)count++;8研究式學習—C程序設計(第四章)數(shù)組—程序#defineN10main(){ inti,count,sum,average;intscore[N]; count=0;sum=0; printf("Input%dscores:"N); for(i=0;i<N;i++) {scanf("%d",&score[i]);/*輸入N個學生的成績*/ sum+=score[i]; } /*求總分*/ average=sum/N; /*求平均分*/ for(i=0;i<N;i++) if(score[i]>average)/*比較當前成績是否高于平均分*/ count++; /*若高于平均分,計數(shù)器加1*/ printf("\naverage=%d,conut=%d",average,count);}Input10scores:70806892887696605690average=77,count=5程序9研究式學習—C程序設計(第四章)一維數(shù)組的概念數(shù)組用于組織具有順序關系的一組同類型數(shù)據(jù)。數(shù)組是一種整體定義,個別使用的數(shù)據(jù)結構。數(shù)組中每個變量被稱為數(shù)組元素,用數(shù)組名加寫在分括號中的序號來標識。順序號也稱為下標。只需要一個下標便可識別一個數(shù)組元素的數(shù)組稱一維數(shù)組。與使用普通(基本類型)變量一樣,使用數(shù)組存放數(shù)據(jù)之前,要對數(shù)組進行定義。10研究式學習—C程序設計(第四章)一維數(shù)組的定義一維數(shù)組定義的一般形式為:
類型名
數(shù)組名[常量表達式]例如:int
a[10];其中:(1)數(shù)組名取名要符合標識符取名規(guī)則(2)數(shù)組名后只能用方括號(3)常量表達式表示元素個數(shù),即數(shù)組長度。其中只可包含常量或符號常量,不可包含變量。
1、定義了一個名為a的一維數(shù)組。2、方括號中的10規(guī)定了a數(shù)組長度為10,即有10個元素,它們分別是a[0]、a[1]、a[2]、a[3]、……a[7]、a[8]、a[9]。3、類型名int規(guī)定了a數(shù)組中每個元素都是整型,在每個元素中只能存放整型數(shù)。4、每個元素只有一個下標,C語句規(guī)定數(shù)組第一個元素的下標為0(下標的下限),因此,a數(shù)組最后一個元素的下標是4(下標的上限)。5、C編譯程序?qū)閍數(shù)組在內(nèi)存中開辟10個連續(xù)的存儲單元,各元素按照下標遞增的順序存放,如下所示:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a11研究式學習—C程序設計(第四章)一維數(shù)組的引用只能逐個引用數(shù)組元素,而不能一次引用整個數(shù)組(字符數(shù)組除外)。引用形式如下:
數(shù)組名[下標表達式]其中,下標可以是整型表達式。例如定義了b數(shù)組:int
b[100];則b[0]、b[i]、b[i+k]都是對b數(shù)組元素的合法引用,其中0,i,i+k,稱為下標表達式。由于定義了b數(shù)組有100個元素,因此下標表達式必須大于等于零并小于100。注意:b[i+k]中,i+k只是一個下標表達式。要建立以下概念:1.一個數(shù)組元素實質(zhì)上就是一個同類型變量。因此,對基本數(shù)據(jù)類型的變量能進行的運算或操作,也適用于同類型數(shù)組元素。2.一個數(shù)組不能整體引用。例如不能用b代表b[0]到b[99]這100個元素。C語言中,數(shù)組名是一地址常量。它代表整個數(shù)組的首地址。關于這方面的內(nèi)容將在第六章指針中詳細討論。12研究式學習—C程序設計(第四章)一維數(shù)組的初始化在定義數(shù)組的同時給數(shù)組賦初值,稱為初始化
。1、對數(shù)組的全部元素賦初值。如:
inta[5]={0,1,2,3,4}/*依次把花括弧中數(shù)據(jù)賦給a[0]到a[4]*/對數(shù)組全部元素賦初值時,可不指定長度。例如:
inta[]={1,2,3,4,5,6,7,8}編譯系統(tǒng)按初值個數(shù)確定該數(shù)組長度。上數(shù)組等價于:
inta[8]={1,2,3,4,5,6,7,8}2、對數(shù)組的部分元素賦初值。如:inta[5]={1,2,3};初值個數(shù)為3少于數(shù)組元素個數(shù)5,表示只給數(shù)組前三個元素賦值,后兩個元素a[3],a[4]編譯系統(tǒng)給賦初值0。3、如果程序中沒有為靜態(tài)數(shù)組賦初值,則編譯系統(tǒng)自動為其賦初值0。13研究式學習—C程序設計(第四章)一維數(shù)組—應用舉例例1一維數(shù)組的定義和引用。
main(){inta[5]={9};/*定義整數(shù)型數(shù)組a并初始化*/inti;
a[1]=8;/*給數(shù)組a的第二個元素賦值*/
for(i=2;i<4;i++)/*對數(shù)組a的第3,4兩個元素賦值*/
a[i]=9-i;printf(“輸入數(shù)組第五個元素的值:”);scanf(“%d”,&a[4]);/*從鍵盤輸入第5個元素的值*/printf(“該數(shù)組五個元素的值分別為:”);for(i=0;i<5;i++)printf(“%3d”,a[i]);}
程序運行結果為:
輸入數(shù)組第五個元素的值:5該數(shù)組五個元素的值分別為:98765程序14研究式學習—C程序設計(第四章)一維數(shù)組—應用舉例例2輸入100個整型數(shù)據(jù),找出其中最大值并顯示出來。main(){intbuffer[100],max,i;
for(i=0;i<100;i++)
scanf(“%d”,&buffer[i]);max=buffer[0];
for(i=1;i<100;i++)if(max<buffer[i])max=buffer[i];
printf(“max=%d\n”,max);}輸入數(shù)組元素找最大輸出最大值max賦初值15研究式學習—C程序設計(第四章)一維數(shù)組—應用舉例例2找出一維整型數(shù)組中具有最小值的元素及其所在位置。main(){inta[5]={9,8,11,6,22};inti,k,min;min=a[0]/*將數(shù)組中第一個元素的值作為比較基準*/k=0;/*將a[0]下標值賦給變量k*/for(i=1;i<5;i++)/*循環(huán)完成選出數(shù)組元素中*/if(min>a[i])/*的最小值和最小值對應下標*/{min=a[i];k=i;}
printf("數(shù)組中最小值的元素下標為%d,其值是:%4d",k,min);}
程序程序運行結果為:數(shù)組中最小值的元素下標為3,其值是:616研究式學習—C程序設計(第四章)一維數(shù)組—應用舉例例3
將數(shù)組中數(shù)據(jù)按逆序存放后輸出,不允許再另外開辟新數(shù)組。分析:逆序存放數(shù)組的算法為:假設數(shù)組有n個元素,則第一個元素與最后一個元素交換,第二個元素與倒數(shù)第二個元素交換,依次類推直到交換n/2次后,逆序存放完成。當n為偶數(shù)時進行兩兩交換;當n為奇數(shù)時,中間那個數(shù)不用交換。如圖所示。a[0],a[1],a[2],…a[n-3],a[n-2],a[n-1]交換for(i=0;i<n/2;i++){t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}程序清單看教科書例4.3程序17研究式學習—C程序設計(第四章)二維數(shù)組—問題的提出問題:某小組有3人,要求計算每人考試成績總分,期末考試成績?nèi)缦拢簩W號語文數(shù)學總分外語24001240022400397.287.578.687.792.381.993.690.791.918研究式學習—C程序設計(第四章)二維數(shù)組—問題分析學生成績表是一個由3行和5列組成的表格或矩陣。其中每一行記錄一個學生各科成績及總分。而每一列是某門課成績或總分。存儲這樣由3行5列共15個數(shù)據(jù)組成的表格,可以使用二維數(shù)組。所謂二維數(shù)組,是指數(shù)組中的每個元素都有兩個下標。其中第一個下標為行下標。第二個下標為列下標。由于數(shù)組只能存儲相同類型的數(shù)據(jù),在本題中,把學號及各門課成績定義為實型,都能兼顧。假設用二維數(shù)組a來存儲數(shù)據(jù):
floata[3][5];
floata[3][5];a數(shù)組的邏輯結構可視為具有如下形式的3行4列的矩陣(或表格): 第0列第1列第2列第3列第4列第0行a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]第1行 a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]第2行 a[2][0]a[2][1]a[2][2]a[2][3]a[2][4]19研究式學習—C程序設計(第四章)main(){inti,j;
floats[3][5]={{24001,97.2,87.7,93.6,0}, {24002,87.5,91.3,90.7,0}, {24003,78.6,81.9,91.9,0}};printf(“\nNo.YWMTENTOTAL\n”);printf(“--------------------------------------------------\n”);for(i=0;i<3;i++){ printf(“\n%6.0f”,s[i][0]); /*輸出學生學號*/
for(j=1;j<4;j++)
{
s[i][4]+=s[i][j]; /*求第i個學生總分*/ printf(“%6.1f”,s[i][j]);}/*輸出單科成績*/printf(“%6.1f”,s[i][4]); /*輸出第i個學生總分*/ }}二維數(shù)組—程序運行結果為:No.YWMHENTOTAL2400197.287.793,6278.52400287.591.390.7269.52400378.681.991.9252.4程序20研究式學習—C程序設計(第四章)如果數(shù)組中每個元素都需要兩個下標來標識,則稱這樣的數(shù)組為二維數(shù)組。在邏輯上可把二維數(shù)組看成是具有行和列的一張表格和一個矩陣。一.二維數(shù)組的定義在C語言中,二維數(shù)組的定義語句形式如下:
類型名
數(shù)據(jù)名[常量表達式1][常量表達是2]其中,常量表達式1(為第一維的大小)看為表格(或矩陣)的行數(shù)。常量表達式2(為第二維的大?。┛礊槭潜砀瘢ɑ蚓仃嚕┑牧袛?shù)。例如有下定義:
int
a[3][4]inta[3][4];定義了二維整型數(shù)組a,a數(shù)組中共有3*4(12)個元素。a數(shù)組的元素在內(nèi)存中占12個連續(xù)的存儲單元,元素存儲的順序是:按行存放,即在內(nèi)存中先順序存放第一行元素,在存放第二行……如下順序:
a00a01a02a03a10a11a12a13a20a21a22a23二維數(shù)組—概念及定義21研究式學習—C程序設計(第四章)二維數(shù)組—概念及定義在C語言中,可以把一個二維數(shù)組看作是一種特殊的一維數(shù)組,它們每個元素又是一個一維數(shù)組。例如,以上數(shù)組可以看成是由a[0]、a[1]、a[2]三個元素組成的一維數(shù)組,其中每個元素又是由4個整型元素組成的一維數(shù)組。a[0]——a00a01a02a03a[1]——a10a11a12a13
a[2]——a20a21a22a23a可以理解為:建立起這樣的概念是十分重要的,因為C編譯系統(tǒng)確實是把二維數(shù)組a中的a[0]、a[1]、a[2]作為數(shù)組來處理的。這種處理方法在對數(shù)組初始化及用指針表示時顯得很方便,這在以后會體會到。22研究式學習—C程序設計(第四章)二維數(shù)組元素的表示形式為:
類型名
數(shù)組名[下標表達式1][下標表達式2]例如,若有以下定義語句:
float
c[2][4];
則c[0][1],c[i][j],c[k+i][k+j]都是合法的數(shù)組元素引用形式。只是每個下標表達式的值都必須是整數(shù),而且不能超越數(shù)組定義中的上、下限。與一維數(shù)組一樣,二維數(shù)組中兩個下標的下限為另,上限為其長度減1。上例中,c數(shù)組行、列下標各為1和3。與一維數(shù)組一樣,二維數(shù)組也是一種整體定義,個別使用的數(shù)據(jù)結構,其每一個二維數(shù)組元素都是一個同類型變量,而二維數(shù)組的名字是一地址常量,代表整個數(shù)組的首地址。二維數(shù)組—引用23研究式學習—C程序設計(第四章)二維數(shù)組—初始化1
對全部元素賦初值,例如:intd[3][3]={{1,2,3},{4,5,6,},{7,8,9}}intd[3][3]={1,2,3,4,5,6,7,8,9};2對部分元素初始化,例如:intd[3][3]={{1,2},{4,5},{7,8};};
intd[2][3]={{1,2},{3,4}};
intd[3][3]={1,2,3,4,5};
3在對全部元素賦初值的情況下,可以省略第一維大小。
intd[][3]={{1,2,3},{4,5},{6,7}};intd[][3]={1,2,3,4,5,6,7};
詳細內(nèi)容參看教科書有關部分24研究式學習—C程序設計(第四章)二維數(shù)組—應用舉例例4
從鍵盤上為一個3*3的整形數(shù)組賦值,然而找出其中最大值及其所在行和列。分析:要在程序執(zhí)行過程中順序為二維數(shù)組元素賦值,可使用二重循環(huán)來完成。要對3*3的9個數(shù)進行比較,可按行來進行,先比較第一行,再比較第二行,最后比較第三行,仍用二重循環(huán)來完成。二重循環(huán)中外層循環(huán)對行進行控制,內(nèi)層循環(huán)對列進行控制。main(){intx[3][3],i,j,max,r,c;printf("\nInput3*3numbers:\n");
for(i=0;i<3;i++)/*用二重循環(huán)為數(shù)組賦值*/for(j=0;j<3;j++)scanf("%d",&x[i][j]);max=x[0][0];r=0;c=0;
for(i=0;i<3;i++)/*用二重循環(huán)尋找最大值*/for(j=0;j<3;j++)if(x[i][j]>max) {max=x[i][j];r=i;c=j;}printf("\nThemaxis:%d,rowis:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 餐飲廣場租賃協(xié)議樣本范本
- 建筑養(yǎng)護工程的施工合同客體是
- 市內(nèi)環(huán)保產(chǎn)業(yè)發(fā)展扶持政策
- 船舶制造設備管理辦法
- 動漫制作投標保密承諾書
- 環(huán)境質(zhì)量改善
- 換牌車牌租賃合同范本模板
- 電力工程混凝土施工合同
- 電子元器件招投標注意事項
- 2024年建筑工程設計合同標的及安全協(xié)議
- 森林防火應對工作預案
- 電器設備安裝安全操作規(guī)程
- 氣液兩相流講稿
- 北師大版(2019)高中英語必修第三冊單詞表默寫練習(英譯中、中譯英)
- 2023鐵礦石 釷含量的測定偶氮胂Ⅲ分光光度法
- 《中國藥典》2023年版目錄
- 第五章一元一次方程微專題-應用題表格類訓練 (北師大版數(shù)學七年級上冊)
- 改革開放簡史智慧樹知到課后章節(jié)答案2023年下北方工業(yè)大學
- 我的家鄉(xiāng)-黑龍江-英語PPT
- 新產(chǎn)品風險分析報告
- 改革開放史學習通超星課后章節(jié)答案期末考試題庫2023年
評論
0/150
提交評論