C語(yǔ)言程序設(shè)計(jì)清華大學(xué)課件第7章數(shù)組.ppt
《C語(yǔ)言程序設(shè)計(jì)清華大學(xué)課件第7章數(shù)組.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《C語(yǔ)言程序設(shè)計(jì)清華大學(xué)課件第7章數(shù)組.ppt(72頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第七章,數(shù)組,問(wèn)題:給一組數(shù)排序,這組數(shù)該如何存放呢,???這些數(shù)據(jù)如何存放才便于排序,,1,8,8,8,8,8,8,8,8,8,8,1,,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,本章要點(diǎn),掌握一維、二維數(shù)組的定義和引用方法、存儲(chǔ)結(jié)構(gòu)和初始化方法。掌握有關(guān)一維數(shù)組的有關(guān)算法掌握數(shù)組的運(yùn)算。,,主要內(nèi)容,7.1一維數(shù)組的定義和引用7.2二維數(shù)組的定義和引用7.3字符數(shù)組,7.1一維數(shù)組的定義和引用,C語(yǔ)言為這些數(shù)據(jù),提供了一種構(gòu)造數(shù)據(jù)類(lèi)型:數(shù)組。所謂數(shù)組就是一組具有相同數(shù)據(jù)類(lèi)型的數(shù)據(jù)的有序集合。,一個(gè)班學(xué)生的學(xué)習(xí)成績(jī)一行文字一個(gè)矩陣這些數(shù)據(jù)的特點(diǎn)是:1.具有相同的數(shù)據(jù)類(lèi)型2.使用過(guò)程中需要保留原始數(shù)據(jù),1.一維數(shù)組的定義格式為:類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式];例如:inta[10];它表示定義了一個(gè)整形數(shù)組,數(shù)組名為a,此數(shù)組有10個(gè)元素。,7.1.1一維數(shù)組的定義,說(shuō)明:1.數(shù)組名定名規(guī)則和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。,2.在定義數(shù)組時(shí),需要指定數(shù)組中元素的個(gè)數(shù),方括弧中的常量表達(dá)式用來(lái)表示元素的個(gè)數(shù),即數(shù)組長(zhǎng)度。3.常量表達(dá)式中可以包括常量和符號(hào)常量,但不能包含變量。也就是說(shuō),C語(yǔ)言不允許對(duì)數(shù)組的大小作動(dòng)態(tài)定義,即數(shù)組的大小不依賴(lài)于程序運(yùn)行過(guò)程中變量的值。,例如:intn;scanf(“%d″,,數(shù)組說(shuō)明中其他常見(jiàn)的錯(cuò)誤:①floata[0];/*數(shù)組大小為0沒(méi)有意義*/②intb(2)(3);/*不能使用圓括號(hào)*/③intk,a[k];/*不能用變量說(shuō)明數(shù)組大小*/,2.一維數(shù)組在內(nèi)存中的存放,每個(gè)數(shù)據(jù)元素占用的字節(jié)數(shù),就是基類(lèi)型的字節(jié)數(shù)一個(gè)元素占4個(gè)字節(jié),一維數(shù)組:floatmark[100];,,注意:定義數(shù)組時(shí)用到的“數(shù)組名[常量表達(dá)式]”和引用數(shù)組元素時(shí)用到的“數(shù)組名[下標(biāo)]”是有區(qū)別的。例如∶inta[10];t=a[6];,7.1.2一維數(shù)組元素的引用,1.數(shù)組元素的引用方式數(shù)組名[下標(biāo)]下標(biāo)可以是整型常量或整型表達(dá)式。例如:a[0]=a[5]+a[7]-a[2*3],2.一維數(shù)組元素引用的程序?qū)嵗?#includevoidmain(){inti,a[10];for(i=0;i=0;i--)printf("%d″,a[i]);printf("\n″);},運(yùn)行結(jié)果如下:9876543210程序使a[0]到a[9]的值為0~9,然后按逆序輸出。,對(duì)數(shù)組元素初始化的實(shí)現(xiàn)方法:,1.在定義數(shù)組時(shí)對(duì)數(shù)組元素賦以初值。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};將數(shù)組元素的初值依次放在一對(duì)花括弧內(nèi)。經(jīng)過(guò)上面的定義和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。,7.1.3一維數(shù)組的初始化,3.如果想使一個(gè)數(shù)組中全部元素值為0,可以寫(xiě)成:inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};不能寫(xiě)成:inta[10]={0*10};,2.可以只給一部分元素賦值。例如:inta[10]={0,1,2,3,4};定義a數(shù)組有10個(gè)元素,但花括弧內(nèi)只提供5個(gè)初值,這表示只給前面5個(gè)元素賦初值,后5個(gè)元素值為0。,4.在對(duì)全部數(shù)組元素賦初值時(shí),由于數(shù)據(jù)的個(gè)數(shù)已經(jīng)確定,因此可以不指定數(shù)組長(zhǎng)度。例如:inta[5]={1,2,3,4,5};也可以寫(xiě)成inta[]={1,2,3,4,5};inta[10]={1,2,3,4,5};只初始化前5個(gè)元素,后5個(gè)元素為0。,例7-1:用數(shù)組來(lái)處理,求解Fibonacci數(shù)列。,程序?qū)嵗?includevoidmain(){inti;intf[20]={1,1};,Fibonacci數(shù)列公式:已知:a1=a2=1an=an-1+an-2即:1,1,2,3,5,8,13,7.1.4一維數(shù)組程序舉例,for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf(″\n″);printf(″%12d″,f[i])}/*For循環(huán)結(jié)束*/}/*程序結(jié)束*/,運(yùn)行結(jié)果如下:11235813213455891442333776109871597258441816765,if語(yǔ)句用來(lái)控制換行,每行輸出5個(gè)數(shù)據(jù)。,,,程序舉例2:用起泡法對(duì)10個(gè)數(shù)排序(由小到大)。,經(jīng)過(guò)第一趟(共5次比較與交換)后,最大的數(shù)9已“沉底”。然后進(jìn)行對(duì)余下的前面5個(gè)數(shù)第二趟比較,,如果有n個(gè)數(shù),則要進(jìn)行n-1趟比較。在第1趟比較中要進(jìn)行n-1次兩兩比較,在第j趟比較中要進(jìn)行n-j次兩兩比較。,程序流程圖如下:,程序?qū)嵗?.3:#includevoidmain(){inta[10];inti,j,t;printf(″input10numbers:\n″);for(i=0;i<10;i++)scanf("%d",,for(j=0;ja[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(″thesortednumbers:\n″);for(i=0;i<10;i++)printf(″%d″,a[i]);printf(″\n″);}/*程序結(jié)束*/,程序運(yùn)行結(jié)果如下:input10numbers:10481265-76100-45123↙thesortednumbers:-76-4501481265100123,7.2二維數(shù)組的定義和引用,7.2.1二維數(shù)組的定義,二維數(shù)組定義的一般形式為類(lèi)型說(shuō)明符數(shù)組名[常量表達(dá)式][常量表達(dá)式];例如:定義a為34(3行4列)的數(shù)組,b為510(5行10列)的數(shù)組。如下:floata[3][4],b[5][10];,不能寫(xiě)成floata[3,4],b[5,10];,注意:我們可以把二維數(shù)組看作是一種特殊的一維數(shù)組:它的元素又是一個(gè)一維數(shù)組。例如:可以把a(bǔ)看作是一個(gè)一維數(shù)組,它有3個(gè)元素:a[0]、a[1]、a[2],每個(gè)元素又是一個(gè)包含4個(gè)元素的一維數(shù)組。,7.2.1二維數(shù)組的定義,二維數(shù)組中的元素在內(nèi)存中的排列順序是:按行存放,即先順序存放第一行的元素,再存放第二行的元素……,一維數(shù)組在內(nèi)存中的存放,下圖表示對(duì)a[3][4]數(shù)組存放的順序,地址值數(shù)組元素,b[0][0]b[0][1]b[0][2]b[1][0]b[1][1]b[1][2]b[2][0]b[2][1]b[2][2],3000H3002H3004H3006H3008H300AH300CH300EH3010H,例如:整型數(shù)組b[3][3]={{1,2,3},{4,5,6},{7,8,9}};,123,456,789,問(wèn)題:有了二維數(shù)組的基礎(chǔ),那么多維數(shù)組如何定義呢?,定義三維數(shù)組:floata[2][3][4];注意:多維數(shù)組元素在內(nèi)存中的排列順序:第一維的下標(biāo)變化最慢,最右邊的下標(biāo)變化最快。,7.2.1二維數(shù)組的定義,三維數(shù)組的元素排列順序,二維數(shù)組元素的表示形式為:數(shù)組名[下標(biāo)][下標(biāo)]例如:a[2][3]下標(biāo)可以是整型表達(dá)式,如a[2-1][2*2-1],數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值例如:b[1][2]=a[2][3]/2,7.2.2二維數(shù)組的引用,常出現(xiàn)的錯(cuò)誤有:inta[3][4];/*定義a為34的數(shù)組*/┆a[3][4]=3;,在使用數(shù)組元素時(shí),應(yīng)該注意下標(biāo)值應(yīng)在已定義的數(shù)組大小的范圍內(nèi)。,可以用下面4種方法對(duì)二維數(shù)組初始化:,數(shù)據(jù)類(lèi)型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2]={初始化數(shù)據(jù)};,1.分行給二維數(shù)組賦初值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};,2.可以將所有數(shù)據(jù)寫(xiě)在一個(gè)花括號(hào)內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};,7.2.3二維數(shù)組的引用,3.可以對(duì)部分元素賦初值。例如:inta[3][4]={{1},{5},{9}};,,100050009000,也可以對(duì)各行中的某一元素賦初值,如inta[3][4]={{1},{0,6},{0,0,11}};,,1000060000011,,100056000000,也可以只對(duì)某幾行元素賦初值。如:inta[3][4]={{1},{5,6}};,,,4.如果對(duì)全部元素都賦初值,則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等價(jià)于:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};,在定義時(shí)也可以只對(duì)部分元素賦初值而省略第一維的長(zhǎng)度,但應(yīng)分行賦初值。例如:inta[][4]={{0,0,3},{},{0,10}};,,0030000001000,7.2.4二維數(shù)組程序舉例,例7.4將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中。,#includevoidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(″arraya:\n″);for(i=0;i<=1;i++){for(j=0;j<=2;j++){,printf(″%5d″,a[i][j]);b[j][i]=a[i][j];}printf(″\n″);}printf(″arrayb:\n″);for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%5d″,b[i][j]);printf(″\n″);}}/*程序結(jié)束*/,運(yùn)行結(jié)果如下:arraya:123456arrayb:142536,例7.5:有一個(gè)34的矩陣,要求編程序求出其中值最大的那個(gè)元素的值,以及其所在的行號(hào)和列號(hào)。,N-S流程圖表示算法如下:,程序:#includevoidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];,for(i=0;imax){max=a[i][j];row=i;colum=j;}printf(″max=%d,row=%d,colum=%d\n″,max,row,colum);}/*程序結(jié)束*/,7.3字符數(shù)組,7.3.1字符數(shù)組的定義,定義方法與前面介紹的類(lèi)似。例如:charc[10];c[0]=′I′;c[1]=′′;c[2]=′a′;c[3]=′m′;c[4]=′′;c[5]=′h′;c[6]=′a′;c[7]=′p′;c[8]=′p′;c[9]=′y′;,對(duì)字符數(shù)組初始化,可逐個(gè)字符賦給數(shù)組中各元素。例如:charc[10]={‘I’,’a’,’m’,’h’,’a’,’p’,’p’,’y’},7.3.2字符數(shù)組的初始化,如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,則只將這些字符賦給數(shù)組中前面那些元素,其余的元素自動(dòng)定為空字符。,如果提供的初值個(gè)數(shù)與預(yù)定的數(shù)組長(zhǎng)度相同,在定義時(shí)可以省略數(shù)組長(zhǎng)度,系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。,charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′};數(shù)組c的長(zhǎng)度自動(dòng)定為10。,chardiamond[5][5]={{′′,′′,*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}},定義和初始化一個(gè)二維字符數(shù)組,7.3.3字符數(shù)組的引用,例7.6輸出一個(gè)字符串。,程序如下:#includevoidmain(){charc[10]={’I’,’’,’a’,’m’,’’,’a’,’’,’b’,’o’,′y′};inti;for(i=0;i<10;i++)printf(″%c″,c[i]);printf(″\n″);},運(yùn)行結(jié)果:Iamaboy,例7.7輸出一個(gè)鉆石圖形,#includevoidmain(){chardiamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}};inti,j;for(i=0;i<5;i++){for(j=0;j字符串2,函數(shù)值為一正整數(shù)。(3)如果字符串1str2)printf(″yes″);而只能用if(strcmp(str1,str2)>0)printf(″yes″);,6.strlen函數(shù)其一般形式為:strlen(字符數(shù)組)strlen是測(cè)試字符串長(zhǎng)度的函數(shù)。函數(shù)的值為字符串中的實(shí)際長(zhǎng)度(不包括′\0′在內(nèi))。例如:charstr[10]={″China″};printf(″%d″,strlen(str));輸出結(jié)果不是10,也不是6,而是5。也可以直接測(cè)試字符串常量的長(zhǎng)度,如strlen(″China″);,7.strlwr函數(shù)其一般形式為:strlwr(字符串)strlwr函數(shù)的作用是將字符串中大寫(xiě)字母換成小寫(xiě)字母。,8.strupr函數(shù)其一般形式為:strupr(字符串)strupr函數(shù)的作用是將字符串中小寫(xiě)字母換成大寫(xiě)字母。,例7.8輸入一行字符,統(tǒng)計(jì)其中有多少個(gè)單詞,單詞之間用空格分隔開(kāi)。,7.3.7字符數(shù)組應(yīng)用舉例,程序如下:#includevoidmain(){charstring[81];inti,num=0,word=0;charc;gets(string);for(i=0;(c=string[i])!=′\0′;i++),if(c==′′)word=0;elseif(word==0){word=1;num++;}printf(″Thereare%dwordsintheline.\n″,num);},運(yùn)行情況如下:Iamaboy.↙Thereare4wordsintheline.,例7.9有3個(gè)字符串,要求找出其中最大者,程序如下:#include#includevoidmain(){charstring[20];charstr[3][20];inti;for(i=0;i0)strcpy(string,str[0])elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf(″\nthelargeststringis∶\n%s\n″,string);},運(yùn)行結(jié)果如下:CHINA↙HOLLAND↙AMERICA↙thelargeststringis∶HOLLAND,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 語(yǔ)言程序設(shè)計(jì) 清華大學(xué) 課件 數(shù)組
鏈接地址:http://www.820124.com/p-11494864.html