![C語(yǔ)言程序設(shè)計(jì)-第5章-數(shù)組_第1頁(yè)](http://file4.renrendoc.com/view/1fe5410f53ba356a1c271516f70c1278/1fe5410f53ba356a1c271516f70c12781.gif)
![C語(yǔ)言程序設(shè)計(jì)-第5章-數(shù)組_第2頁(yè)](http://file4.renrendoc.com/view/1fe5410f53ba356a1c271516f70c1278/1fe5410f53ba356a1c271516f70c12782.gif)
![C語(yǔ)言程序設(shè)計(jì)-第5章-數(shù)組_第3頁(yè)](http://file4.renrendoc.com/view/1fe5410f53ba356a1c271516f70c1278/1fe5410f53ba356a1c271516f70c12783.gif)
![C語(yǔ)言程序設(shè)計(jì)-第5章-數(shù)組_第4頁(yè)](http://file4.renrendoc.com/view/1fe5410f53ba356a1c271516f70c1278/1fe5410f53ba356a1c271516f70c12784.gif)
![C語(yǔ)言程序設(shè)計(jì)-第5章-數(shù)組_第5頁(yè)](http://file4.renrendoc.com/view/1fe5410f53ba356a1c271516f70c1278/1fe5410f53ba356a1c271516f70c12785.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
授課教師:廈門理工學(xué)院軟件學(xué)院C語(yǔ)言程序設(shè)計(jì)第一頁(yè),編輯于星期六:五點(diǎn)三十六分。1第5章數(shù)組C
語(yǔ)言程序設(shè)計(jì)第二頁(yè),編輯于星期六:五點(diǎn)三十六分。2第5章數(shù)組
本章重點(diǎn)介紹:一維數(shù)組二維數(shù)組字符數(shù)組與字符串第三頁(yè),編輯于星期六:五點(diǎn)三十六分。35.1概述
1.用案例說(shuō)明為什么使用數(shù)組【例5-1】設(shè)計(jì)一個(gè)程序,將n個(gè)人某門課程的成績(jī)輸入計(jì)算機(jī),求平均成績(jī)和高于平均成績(jī)的人數(shù)。如果不使用數(shù)組,以5個(gè)人的成績(jī)?yōu)槔?,使用a1、a2、a3、a4、a5來(lái)存放5個(gè)成績(jī),程序代碼如下:
第四頁(yè),編輯于星期六:五點(diǎn)三十六分。4程序代碼:#include"stdio.h"voidmain(){intn=0;floats,ave,a1,a2,a3,a4,a5;scanf("%f%f%f%f%f",&a1,&a2,&a3,&a4,&a5);s=a1+a2+a3+a4+a5;ave=s/5;if(a1>ave)n++;if(a2>ave)n++;if(a3>ave)n++;if(a4>ave)n++;if(a5>ave)n++;printf("%f%d\n",ave,n);}如果要統(tǒng)計(jì)10個(gè)人的成績(jī)呢?第五頁(yè),編輯于星期六:五點(diǎn)三十六分。5
#include"stdio.h"voidmain(){intn=0,i;floats=0,ave,a[10];for(i=0;i<10;i++) {scanf("%f",&a[i]);s=s+a[i]; }ave=s/10;for(i=0;i<10;i++)if(a[i]>ave)n++;printf("平均成績(jī)?yōu)椋?.1f\n高于平均成績(jī)的人數(shù)為:%d\n",ave,n);}使用數(shù)組來(lái)存儲(chǔ)10個(gè)人的數(shù)據(jù),用循環(huán)結(jié)構(gòu)實(shí)現(xiàn)!程序代碼如下:第六頁(yè),編輯于星期六:五點(diǎn)三十六分。65.1概述(續(xù))2.?dāng)?shù)組與數(shù)組元素的概念數(shù)組:是用一個(gè)名字表示的一組相同類型的數(shù)據(jù)的集合,這個(gè)名字就稱為數(shù)組名。如定義:floata[10];a是數(shù)組名。下標(biāo)變量(或數(shù)組元素):數(shù)組中的數(shù)據(jù)分別存儲(chǔ)在用下標(biāo)區(qū)分的變量中,這些變量稱為下標(biāo)變量或數(shù)組元素。如:a[0]、a[1]…a[i]。每個(gè)下標(biāo)變量相當(dāng)于一個(gè)簡(jiǎn)單變量,數(shù)組的類型也就是該數(shù)組的下標(biāo)變量的數(shù)據(jù)類型。數(shù)組屬于構(gòu)造類型。構(gòu)造類型的數(shù)據(jù)是由基本類型數(shù)據(jù)按一定規(guī)則構(gòu)成的。第七頁(yè),編輯于星期六:五點(diǎn)三十六分。75.2一維數(shù)組例如:
inta[10];
floatscore[5];
“數(shù)據(jù)類型”:是數(shù)組元素的數(shù)據(jù)類型?!皵?shù)組名”:遵循C語(yǔ)言標(biāo)識(shí)符規(guī)則?!俺A勘磉_(dá)式”:表示數(shù)組中有多少個(gè)元素,即數(shù)組的長(zhǎng)度。它可以是整型常量、整型常量表達(dá)式或符號(hào)常量。
5.2.1一維數(shù)組的定義數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];第八頁(yè),編輯于星期六:五點(diǎn)三十六分。8以下數(shù)組定義是正確的:#defineN10……floatscore1[N],score2[N];intnum[10+N];charc[26];以下數(shù)組定義是不正確的:intarray(10);intn;floatscore[n];charstr[];5.2.1一維數(shù)組的定義(續(xù))第九頁(yè),編輯于星期六:五點(diǎn)三十六分。9數(shù)組在內(nèi)存的存放數(shù)組下標(biāo)從0開(kāi)始。一維數(shù)組的數(shù)組元素在內(nèi)存里按順序存放。數(shù)組名代表數(shù)組的首地址,即score的值與score[0]的地址值(&score[0])相同。
score[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0低地址高地址score數(shù)組第十頁(yè),編輯于星期六:五點(diǎn)三十六分。105.2.2一維數(shù)組元素的引用1.一維數(shù)組元素的表示形式例如:輸入學(xué)生成績(jī)
for(i=0;i<5;i++)
scanf("%f",&score[i]);例如:n=3;fib[n]=fib[n-1]+fib[n-2];其中:“下標(biāo)表達(dá)式”:只能是整型常量或整型表達(dá)式。
數(shù)組名[下標(biāo)表達(dá)式
]第十一頁(yè),編輯于星期六:五點(diǎn)三十六分。115.2.2數(shù)組元素的引用(續(xù))2.說(shuō)明①下標(biāo)從0開(kāi)始(下界為0),數(shù)組的最大下標(biāo)(上界)是數(shù)組長(zhǎng)度減1。例如:
inta[10],i;scanf("%d",&a[10]);/*下標(biāo)越界*/
C編譯系統(tǒng)不做越界檢查。第十二頁(yè),編輯于星期六:五點(diǎn)三十六分。125.2.2數(shù)組元素的引用(續(xù))
②
[]是下標(biāo)運(yùn)算符如:x=score[2];(1)計(jì)算score[2]地址:
2000+2*4=2008(2)取出2008的內(nèi)容(67.5)賦給x2000H2004H2008H200CH2010Hscore[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0如果引用的數(shù)組元素超出數(shù)組范圍會(huì)破壞其他變量的值。第十三頁(yè),編輯于星期六:五點(diǎn)三十六分。135.2.3一維數(shù)組的初始化初始化:在定義數(shù)組時(shí)給數(shù)組元素賦初值。1.在定義數(shù)組時(shí),對(duì)全部數(shù)組元素賦初值例如:inta[5]={0,1,2,3,4};此時(shí)可以省略數(shù)組長(zhǎng)度,例如:inta[]={0,1,2,3,4};
2.在定義數(shù)組時(shí),對(duì)部分?jǐn)?shù)組元素賦初值例如:inta[5]={1,2,3};系統(tǒng)為其余元素賦0。3.當(dāng)初值的個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù)時(shí),編譯出錯(cuò)例如:
inta[5]={0,1,2,3,4,5};
第十四頁(yè),編輯于星期六:五點(diǎn)三十六分。145.2.4一維數(shù)組應(yīng)用舉例【例5-2】設(shè)計(jì)一個(gè)程序,將n個(gè)人某門課程的成績(jī)輸入計(jì)算機(jī)后輸出最高分和最低分。思路:首先將n個(gè)人的成績(jī)輸入到一個(gè)一維數(shù)組中。求若干個(gè)數(shù)的最大值或最小值常采用打擂臺(tái)的方法:首先指定某數(shù)為最大值或最小值的擂主:如:max=a(0),min=a(0)將其他各數(shù)依次與擂主進(jìn)行比較(循環(huán)嵌套分支),當(dāng)所有的數(shù)都比較完之后,輸出max和min的值。
第十五頁(yè),編輯于星期六:五點(diǎn)三十六分。15程序如下:#include"stdio.h"#defineN5voidmain(){inta[N],max,min,i;for(i=0;i<N;i++)scanf("%d",&a[i]);min=max=a[0];for(i=1;i<N;i++)if(a[i]<min)min=a[i];/*min存放最小值*/elseif(a[i]>max)max=a[i];/*max存放最大值*/printf("最高分:%d最低分:%d",max,min);printf("\n");}程序運(yùn)行情況如下:7898658245
最高分:98最低分:45第十六頁(yè),編輯于星期六:五點(diǎn)三十六分。165.2.4一維數(shù)組應(yīng)用舉例(續(xù))【例5-3】將5個(gè)數(shù)存放到一維數(shù)組中,再將這5個(gè)數(shù)按逆序存放在同一數(shù)組中并輸出。交換n/2次a[0]a[1]a[2]a[3]a[4]1357997531交換前交換后a[i]與a[n-1-i]交換第十七頁(yè),編輯于星期六:五點(diǎn)三十六分。17程序如下:#defineN5#include"stdio.h"voidmain(){inti,t,a[N];for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-1-i];a[N-1-i]=t;}…'輸出數(shù)據(jù)}程序運(yùn)行情況如下:1113151719
逆序存放后的結(jié)果是:
1917151311第十八頁(yè),編輯于星期六:五點(diǎn)三十六分。185.2.4一維數(shù)組應(yīng)用舉例(續(xù))【例5-4】用冒泡法(也稱起泡法)對(duì)輸入的一組成績(jī)按從低分到高分的順序排序并輸出。
例如將6個(gè)數(shù):4、7、5、6、8、1按從小到大順序用冒泡法排序,方法如下:第一趟排序情況如下:
475681第一次4和7比較,不交換475681第二次7和5比較,交換457681第三次7和6比較,交換456781第四次7和8比較,不交換456781第五次8和1比較,交換456718在第一趟排序中,6個(gè)數(shù)比較了5次,把6個(gè)數(shù)中的最大數(shù)8排在最后。第十九頁(yè),編輯于星期六:五點(diǎn)三十六分。19冒泡法排序(續(xù))第二趟排序情況如下:
456718第一次4和5比較,不交換456718第二次5和6比較,不交換456718第三次6和7比較,不交換456718第四次7和1比較,交換456178在第二趟排序中,最大數(shù)8不用參加比較,其余的5個(gè)數(shù)比較了4次,把其中的最大數(shù)7排在最后,排出78。以此類推:第三趟比較4次,排出678第四趟比較2次,排出5678第五趟比較1次,排出45678最后還剩下1個(gè)數(shù)1,不需再比較,得到排序結(jié)果:145678第二十頁(yè),編輯于星期六:五點(diǎn)三十六分。20冒泡法排序(續(xù))從上述過(guò)程可以看到:n個(gè)數(shù)要比較n-1趟,而在第j趟比較中,要進(jìn)行n-j次兩兩比較。冒泡法排序for(i=0;i<N;i++)輸入a[i]for(j=1;j<N;j++)for(i=0;i<N-j;i++)a[i]>a[i+1]TFa[i]與a[i+1]交換輸出a[0]~a[N-1]第二十一頁(yè),編輯于星期六:五點(diǎn)三十六分。21程序如下:#defineN6#include"stdio.h"voidmain(){inta[N];inti,j,t;printf("請(qǐng)輸入%d個(gè)成績(jī),用空格隔開(kāi):\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);
冒泡法排序(續(xù))第二十二頁(yè),編輯于星期六:五點(diǎn)三十六分。22for(j=1;j<=N-1;j++)for(i=0;i<N-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("成績(jī)從低分到高分的順序是:\n");for(i=0;i<N;i++)printf("%d",a[i]);printf("\n");}程序運(yùn)行情況如下:請(qǐng)輸入6個(gè)成績(jī),用空格隔開(kāi):785696837288
成績(jī)從低分到高分的順序是:567278838896冒泡法排序(續(xù))第二十三頁(yè),編輯于星期六:五點(diǎn)三十六分。23以6個(gè)數(shù):3、7、5、6、8、0為例,介紹選擇法排序方法。思路:第一趟:將第一個(gè)數(shù)(擂主)依次和后面的數(shù)比較,如果后面的某數(shù)小于第一個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第一個(gè)數(shù)則是最小的數(shù)。第二趟:將第二個(gè)數(shù)(擂主)依次和后面的數(shù)比較,如果后面的某數(shù)小于第二個(gè)數(shù),則兩個(gè)數(shù)交換,比較結(jié)束后,第二個(gè)數(shù)則是次小的數(shù);……?!纠?-5】用選擇法對(duì)輸入的一組成績(jī)按從低分到高分的順序排序并輸出。5.2.4一維數(shù)組應(yīng)用舉例(續(xù))第二十四頁(yè),編輯于星期六:五點(diǎn)三十六分。24【例5-5】選擇法排序(續(xù))
選擇法排序for(i=0;i<N;i++)輸入a[i]for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)a[j]>a[i]TFa[j]與a[i]交換輸出a[0]~a[N-1]第二十五頁(yè),編輯于星期六:五點(diǎn)三十六分。25【例5-5】選擇法排序(續(xù))程序如下:#defineN6#include"stdio.h"voidmain(){inta[N];inti,j,t;printf("請(qǐng)輸入%d個(gè)成績(jī),用空格隔開(kāi):\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);第二十六頁(yè),編輯于星期六:五點(diǎn)三十六分。26for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}printf("成績(jī)從低分到高分的順序是:\n");for(i=0;i<N;i++)printf("%d",a[i]);printf("\n");}程序運(yùn)行情況如下:請(qǐng)輸入6個(gè)成績(jī),用空格隔開(kāi):785696837288
成績(jī)從低分到高分的順序是:567278838896【例5-5】選擇法排序(續(xù))第二十七頁(yè),編輯于星期六:五點(diǎn)三十六分。275.2.5一維數(shù)組作函數(shù)參數(shù)
數(shù)組名作函數(shù)的實(shí)參,傳遞的是數(shù)組的首地址,此時(shí)形參也應(yīng)定義為數(shù)組形式,但形參數(shù)組的長(zhǎng)度可以省略。例如,在主函數(shù)中調(diào)用sort函數(shù),實(shí)現(xiàn)將整型數(shù)組a中的10個(gè)數(shù)據(jù)排序,調(diào)用語(yǔ)句如下:sort(a,10);sort函數(shù)定義如下:voidsort(intb[],intn){…}第二十八頁(yè),編輯于星期六:五點(diǎn)三十六分。28voidsort(intb[],intn);voidprintarr(intb[]);main(){inta[10]={11,22,63,97,58,80,45,32,73,36};printf("Beforesort:\n");
printarr(a);
sort(a,10);
printf("Aftersort:\n");
printarr(a);}voidprintarr(intb[10]){inti;for(i=0;i<10;i++)printf("%5d",b[i]);printf("\n");}voidsort(intb[],intn){inti,j,t;for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}}第二十九頁(yè),編輯于星期六:五點(diǎn)三十六分。29
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11226397588045327336(a)排序前a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11223236455863738097(b)排序后2000b形參b實(shí)際是一個(gè)可以存放地址的變量a:2000實(shí)參賦給形參首地址:
2000首地址:
2000第三十頁(yè),編輯于星期六:五點(diǎn)三十六分。305.3二維數(shù)組
數(shù)據(jù)類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];
例如:
floatx[2][3];
5.3.1二維數(shù)組的定義
X[0][0]X[0][1]X[0][2]X[1][0]X[1][1]X[1][2]inta[3,4],b(3,4),c[][],d(3)(4);第三十一頁(yè),編輯于星期六:五點(diǎn)三十六分。31x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]2000H2004H2008H200cH2010H2014H地址值數(shù)組元素二維數(shù)組元素在內(nèi)存中的排列順序:按行存放5.3二維數(shù)組(續(xù))第三十二頁(yè),編輯于星期六:五點(diǎn)三十六分。32二維數(shù)組可看作是一種特殊的一維數(shù)組x[0]是數(shù)組名,是元素x[0][0]的地址x[1]是數(shù)組名,
是元素x[1][0]的地址x[0]——x[0][0],x[0][1],x[0][2]x[1]----
x[1][0],x[1][1],x[1][2]例如,可以把x數(shù)組看作是包含二個(gè)大元素的一維數(shù)組,每個(gè)元素又是一個(gè)含有三個(gè)元素的一維數(shù)組。5.3二維數(shù)組(續(xù))第三十三頁(yè),編輯于星期六:五點(diǎn)三十六分。33a[3][4]=3;/*下標(biāo)越界*/a[1,2]=1;/*應(yīng)寫(xiě)成a[1][2]=1;*/5.3.2二維數(shù)組元素的引用例:inta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;數(shù)組名[行下標(biāo)表達(dá)式][列下標(biāo)表達(dá)式]
數(shù)組元素的表示形式:第三十四頁(yè),編輯于星期六:五點(diǎn)三十六分。345.3.3二維數(shù)組的初始化例:inta[2][3]={1,2,3,4,5,6}
1.按行賦初值例:inta[2][3]={{1,2,3},{4,5,6}}初始化后結(jié)果:123456
2.按數(shù)組元素在內(nèi)存中排列的順序?qū)Ω髟刭x初值3.給部分元素賦初值例:inta[2][3]={{1},{4}};初始化后結(jié)果:100400第三十五頁(yè),編輯于星期六:五點(diǎn)三十六分。355.3.3二維數(shù)組的初始化(續(xù))4.?dāng)?shù)組初始化時(shí),行長(zhǎng)度可省,列長(zhǎng)度不能省
例如:inta[][3]={1,2,3,4,5,6,7};
intb[][4]={{1},{4,5}};初始化結(jié)果:a
結(jié)果:a[0]:123a[1]:456a[2]:700b
結(jié)果:b[0]:1000b[1]:4500第三十六頁(yè),編輯于星期六:五點(diǎn)三十六分。36下面對(duì)二維數(shù)組的定義都是錯(cuò)誤的:5.3.3二維數(shù)組的初始化(續(xù))
floatx[3][]={1.0,2.0,3.0,4.0,5.0,6.0};
inta[][],b[][2],c[3][];
intm[2][4]={1,2,3,4,5,6,7,8,9};
/*初值個(gè)數(shù)多于數(shù)組元素的個(gè)數(shù),編譯出錯(cuò)*/
第三十七頁(yè),編輯于星期六:五點(diǎn)三十六分。375.3.4二維數(shù)組應(yīng)用舉例【例5-7】將表5-1中4人的學(xué)號(hào)及4門課的成績(jī)輸入計(jì)算機(jī)后再按行輸出。表5-1某宿舍期末考試成績(jī)學(xué)號(hào)高數(shù)物理英語(yǔ)計(jì)算機(jī)100187757266100298859283100367785376100448607667第三十八頁(yè),編輯于星期六:五點(diǎn)三十六分。38程序如下:#include"stdio.h"voidmain(){inta[4][5],i,j;for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);printf("\n");printf("學(xué)號(hào)\t高數(shù)\t物理\t英語(yǔ)\t計(jì)算機(jī)\n");【例5-7】(續(xù))第三十九頁(yè),編輯于星期六:五點(diǎn)三十六分。39【例5-7】(續(xù))for(i=0;i<4;i++){for(j=0;j<5;j++) printf("%d\t",a[i][j]);printf("\n");}printf("\n");}程序運(yùn)行情況如下:100187757266
100298859283
100367785376
100448607667
學(xué)號(hào)高數(shù)物理英語(yǔ)計(jì)算機(jī)100187757266100298859283100367785376100448607667第四十頁(yè),編輯于星期六:五點(diǎn)三十六分。405.3.4二維數(shù)組應(yīng)用舉例(續(xù))【例5-8】某班有N名學(xué)生,期末考試課程有高數(shù)、物理、英語(yǔ)和計(jì)算機(jī)。設(shè)計(jì)一個(gè)程序?qū)崿F(xiàn)如下功能:(1)統(tǒng)計(jì)每個(gè)學(xué)生的平均分。(2)統(tǒng)計(jì)每門課程的最高分。程序如下:#defineNUM4#include"stdio.h"voidmain(){inta[NUM][6],i,j,sum,max;第四十一頁(yè),編輯于星期六:五點(diǎn)三十六分。41【例5-8】(續(xù))printf("請(qǐng)按行輸入數(shù)據(jù),數(shù)據(jù)之間用空格分開(kāi):\n");for(i=0;i<NUM;i++)for(j=0;j<5;j++) scanf("%d",&a[i][j]);for(i=0;i<NUM;i++)/*求每人的總分和平均分*/{sum=0; for(j=1;j<5;j++)sum=sum+a[i][j];/*求某一學(xué)生的總成績(jī)*/a[i][5]=(int)(sum/4.0+0.5);/*將平均成績(jī)四舍五入*/}第四十二頁(yè),編輯于星期六:五點(diǎn)三十六分。42【例5-8】(續(xù))printf("\n學(xué)號(hào)\t高數(shù)\t物理\t英語(yǔ)\t計(jì)算機(jī)\t平均分\n");for(i=0;i<NUM;i++){for(j=0;j<=5;j++) printf("%d\t",a[i][j]); printf("\n");}
第四十三頁(yè),編輯于星期六:五點(diǎn)三十六分。43【例5-8】(續(xù))printf("最高分\t");/*求每門課程的最高分*/for(j=1;j<=5;j++){max=a[0][j];for(i=1;i<NUM;i++)if(a[i][j]>max) max=a[i][j];printf("%d\t",max);}printf("\n");}第四十四頁(yè),編輯于星期六:五點(diǎn)三十六分。44【例5-8】(續(xù))程序運(yùn)行情況如下:請(qǐng)按行輸入數(shù)據(jù),數(shù)據(jù)之間用空格分開(kāi):100187757266
100298859283
100367785376
100448607667
學(xué)號(hào)高數(shù)物理英語(yǔ)計(jì)算機(jī)平均分10018775726675100298859283901003677853766910044860766763最高分9885928390第四十五頁(yè),編輯于星期六:五點(diǎn)三十六分。455.3.5二維數(shù)組作函數(shù)參數(shù)用二維數(shù)組名作實(shí)參時(shí),與之相對(duì)應(yīng)的形參也應(yīng)該定義為一個(gè)二維數(shù)組形式。在被調(diào)函數(shù)中對(duì)形參數(shù)組定義時(shí)可以指定每一維的大小,也可以省略第一維大小的說(shuō)明。例如:定義形參intarray[3][10]與intarray[][10]等價(jià)。而定義形參intarray[][]不合法。由于實(shí)參數(shù)組的首地址和形參數(shù)組的首地址相同,因此,實(shí)參數(shù)組和形參數(shù)組實(shí)際上是同一個(gè)數(shù)組,它們?cè)趦?nèi)存中占據(jù)同一段存儲(chǔ)空間。第四十六頁(yè),編輯于星期六:五點(diǎn)三十六分。465.3.5二維數(shù)組作函數(shù)參數(shù)(續(xù))【例5-9】修改例5-8的程序,定義兩個(gè)函數(shù)分別實(shí)現(xiàn)如下功能:(1)統(tǒng)計(jì)每個(gè)學(xué)生的平均分。(2)統(tǒng)計(jì)每門課程的最高分。程序如下:#defineNUM4#include"stdio.h"voidaver(intb[][6]);voidmaxa(intb[][6],intmax[6]);voidmain()第四十七頁(yè),編輯于星期六:五點(diǎn)三十六分。47【例5-9】(續(xù)){inta[NUM][6],i,j,max[6];printf("請(qǐng)按行輸入數(shù)據(jù),數(shù)據(jù)之間用空格分開(kāi):\n");for(i=0;i<NUM;i++)for(j=0;j<5;j++) scanf("%d",&a[i][j]);aver(a);/*求每人的平均分*/printf("\n學(xué)號(hào)\t高數(shù)\t物理\t英語(yǔ)\t計(jì)算機(jī)\t平均分\n");
第四十八頁(yè),編輯于星期六:五點(diǎn)三十六分。48【例5-9】(續(xù))
for(i=0;i<NUM;i++){for(j=0;j<=5;j++) printf("%d\t",a[i][j]); printf("\n");}maxa(a,max);/*求每門課程的最高分*/printf("\n最高分\t");for(j=1;j<=5;j++) printf("%d\t",max[j]);printf("\n");}第四十九頁(yè),編輯于星期六:五點(diǎn)三十六分。49【例5-9】(續(xù))voidaver(intb[][6]){inti,j,sum;for(i=0;i<NUM;i++){sum=0; for(j=1;j<5;j++)sum=sum+b[i][j];/*求某一學(xué)生的總成績(jī)*/b[i][5]=(int)(sum/4.0+0.5);/*求某一學(xué)生的平均成績(jī)*/}}第五十頁(yè),編輯于星期六:五點(diǎn)三十六分。50【例5-9】(續(xù))voidmaxa(intb[][6],intmax[6]){inti,j;for(j=1;j<=5;j++){max[j]=b[0][j];for(i=1;i<NUM;i++)if(b[i][j]>max[j]) max[j]=b[i][j];}}第五十一頁(yè),編輯于星期六:五點(diǎn)三十六分。515.3.5二維數(shù)組作函數(shù)參數(shù)(續(xù))【例5-10】編程序,將矩陣轉(zhuǎn)置。設(shè)轉(zhuǎn)置前為a矩陣,轉(zhuǎn)置后為b矩陣,如下所示:
思路:矩陣轉(zhuǎn)置就是將一個(gè)二維數(shù)組的行和列元素互換。將a[0][0]
b[0][0],a[0][1]
b[1][0],a[0][2]
b[2][0],a[1][0]
b[0][1],…,a[i][j]
b[j][i],…。a=123456789101112159261037114812b=第五十二頁(yè),編輯于星期六:五點(diǎn)三十六分。52程序如下:voidturn(intarra[][4],intarrb[][3]);/*函數(shù)聲明*/#include"stdio.h"voidmain(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inti,j,b[4][3];printf("轉(zhuǎn)置前的矩陣:\n");for(i=0;i<3;i++) /*輸出轉(zhuǎn)置前的矩陣*/{for(j=0;j<4;j++)printf("%5d",a[i][j]);printf("\n");}第五十三頁(yè),編輯于星期六:五點(diǎn)三十六分。53【例5-10】(續(xù))turn(a,b); /*調(diào)用函數(shù)完成轉(zhuǎn)置*/printf("轉(zhuǎn)置后的矩陣:\n");for(i=0;i<4;i++) /*輸出轉(zhuǎn)置后的矩陣*/{for(j=0;j<3;j++)printf("%5d",b[i][j]);printf("\n");}printf("\n");}第五十四頁(yè),編輯于星期六:五點(diǎn)三十六分。54【例5-10】(續(xù))/*矩陣轉(zhuǎn)置函數(shù)*/voidturn(intarra[][4],intarrb[][3])/*arra、arrb分別接收數(shù)組a、b的首地址*/{intr,c;for(r=0;r<3;r++)/*矩陣轉(zhuǎn)置*/for(c=0;c<4;c++)arrb[c][r]=arra[r][c];}第五十五頁(yè),編輯于星期六:五點(diǎn)三十六分。55【例5-10】(續(xù))程序輸出結(jié)果:轉(zhuǎn)置前的矩陣:
123456789101112轉(zhuǎn)置后的矩陣:
159261037114812第五十六頁(yè),編輯于星期六:五點(diǎn)三十六分。565.4字符數(shù)組與字符串字符數(shù)組可以存放若干個(gè)字符,也可以存放字符串。字符數(shù)組與字符串的概念China\0字符串字符串的末尾必須有’\0’字符,’\0’的ASCII值為0。China不是字符串是字符串第五十七頁(yè),編輯于星期六:五點(diǎn)三十六分。57再例如:chara[3][5];a數(shù)組是一個(gè)二維的字符數(shù)組,可以存放15個(gè)字符或3個(gè)長(zhǎng)度不大于4的字符串。5.4.2字符數(shù)組的定義
例如:chars[10];s數(shù)組是一維字符數(shù)組,它可以存放10個(gè)字符或一個(gè)長(zhǎng)度不大于9的字符串。注意:字符串只能存放在字符數(shù)組中。第五十八頁(yè),編輯于星期六:五點(diǎn)三十六分。585.4.3字符數(shù)組的初始化China1.用字符常量賦初值例如:charc[5]={'C','h','i','n','a'};再例如:charc[6]={'C','h','i','n','a','\0'};China\0是字符串不是字符串第五十九頁(yè),編輯于星期六:五點(diǎn)三十六分。595.4.3字符數(shù)組的初始化(續(xù))再例如:chara[3][10]={"basic","pascal","c"};astring\0\02.用字符串常量賦初值例如:charstr[10]={"astring"};或charstr[10]="astring";basic\0\0\0\0\0pascal\0\0\0\0c\0\0\0\0\0\0\0\0\0是字符串嗎?第六十頁(yè),編輯于星期六:五點(diǎn)三十六分。605.4.3字符數(shù)組的初始化(續(xù))例如:chars3[7]={'s','t','r','i','n','g'};Goodmorning!\03.初始化時(shí)長(zhǎng)度的省略例如:chars1[]="Goodmorning!";s1[0]s1[13]例如:chars2[]={'s','t','r','i','n','g'};stringstring\0思考:哪個(gè)數(shù)組存放的是字符串?第六十一頁(yè),編輯于星期六:五點(diǎn)三十六分。615.4.4字符數(shù)組的引用
【例5-11】對(duì)字符數(shù)組c1賦‘0’~‘9’,對(duì)字符數(shù)組c2賦‘A’~‘Z’,然后輸出c1和c2數(shù)組中的數(shù)據(jù)。程序如下:#include"stdio.h"voidmain()
1.對(duì)字符數(shù)組元素的引用第六十二頁(yè),編輯于星期六:五點(diǎn)三十六分。62程序如下:{charc1[10],c2[26];inti;
for(i=0;i<10;i++)c1[i]=i+48;
/*'0'~'9'的ASCII碼值賦給c1[i]*/
for(i=0;i<26;i++)c2[i]=i+'A';
/*'A'~'Z'的ASCII碼值賦給c2[i]*/
for(i=0;i<10;i++)printf("%c",c1[i]);printf("\n");for(i=0;i<26;i++)printf("%c",c2[i]);printf("\n");}第六十三頁(yè),編輯于星期六:五點(diǎn)三十六分。632.對(duì)字符數(shù)組的整體引用⑴輸出字符串例如:charc[]="China";printf("%s",c);輸出結(jié)果為:ChinaC是數(shù)組首地址第六十四頁(yè),編輯于星期六:五點(diǎn)三十六分。642.對(duì)字符數(shù)組的整體引用(續(xù))⑵輸入字符串例如:charc[10];scanf("%s",c);輸入:beijing
beijing\0c第六十五頁(yè),編輯于星期六:五點(diǎn)三十六分。65再例如:charstr1[10],str2[10],str3[10];scanf("%s%s%s",str1,str2,str3);輸入:pascalbasicc
注意:不可以為數(shù)組整體賦值,例如:
charc[10];c="beijing"
;因?yàn)閏是數(shù)組首地址,是常量!三個(gè)字符串用空格隔開(kāi),分別賦給str1、str2、str3三個(gè)數(shù)組。
2.對(duì)字符數(shù)組的整體引用(續(xù))第六十六頁(yè),編輯于星期六:五點(diǎn)三十六分。665.4.5字符串處理函數(shù)說(shuō)明:(1)在調(diào)用以下字符串處理函數(shù)的程序里,在程序的前面要加入#include"stdio.h"或#include"string.h"預(yù)處理命令。(2)在字符串處理函數(shù)中,凡是用數(shù)組名或字符串首地址作參數(shù)的地方,都可以用指針變量作參數(shù)。指針變量的概念在第6章介紹。第六十七頁(yè),編輯于星期六:五點(diǎn)三十六分。671.字符串輸出函數(shù)puts()調(diào)用格式:puts(str)功能:輸出一個(gè)字符串,輸出后自動(dòng)換行。說(shuō)明:str可以是字符數(shù)組名或字符串常量。例如:charstr1[]="China";charstr2[]="Beijing";puts(str1);puts(str2);輸出結(jié)果:ChinaBeijing第六十八頁(yè),編輯于星期六:五點(diǎn)三十六分。682.字符串輸入函數(shù)gets()調(diào)用格式:gets(str)功能:從鍵盤(pán)讀入一個(gè)字符串存入str數(shù)組中,并且得到一個(gè)函數(shù)值,該函數(shù)值是str數(shù)組的首地址。說(shuō)明:str是數(shù)組名。程序運(yùn)行情況如下:Howareyou?
Finethankyou.
Howareyou?Finethankyou.
例如:main(){charc1[20],c2[20];gets(c1);gets(c2);puts(c1);puts(c2);}第六十九頁(yè),編輯于星期六:五點(diǎn)三十六分。693.字符串連接函數(shù)strcat()調(diào)用格式:strcat(str1,str2)功能:把str2中的字符串連接到str1字符串的后面,結(jié)果放在str1數(shù)組中.函數(shù)值:str1的首地址。beijingandshanghai\0str1必須足夠大輸出結(jié)果:beijingandshanghai例如:charstr1[21]="beijingand";charstr2[]="shanghai";printf("%s",strcat(str1,str2));第七十頁(yè),編輯于星期六:五點(diǎn)三十六分。704.字符串復(fù)制函數(shù)strcpy()調(diào)用格式:strcpy(str1,str2)功能:將str2中的字符串復(fù)制到str1數(shù)組中。函數(shù)值:
str1的首地址。Beijing\0s1必須足夠大思考:這樣賦值s1="Beijing";或s1=s2;可以嗎?為什么?s1的結(jié)果例如:chars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");第七十一頁(yè),編輯于星期六:五點(diǎn)三十六分。715.字符串比較函數(shù)strcmp()
調(diào)用格式:strcmp(str1,str2)abcde\0str1abcde\0str2abc\0
abcde\0abcd\0
Abcde\0str1str2str1str2strcmp(str1,str2)==0strcmp(str1,str2)>0strcmp(str1,str2)<0第七十二頁(yè),編輯于星期六:五點(diǎn)三十六分。72例如:比較兩個(gè)字符串的大小。main(){chars1[]="aBC",s2[]="abc";if(strcmp(s1,s2)==0)printf("s1=s2");elseif(strcmp(s1,s2)>0)printf("s1>s2");elseprintf("s1<s2");}程序輸出結(jié)果:s1<s2思考:若有語(yǔ)句if(s1>s2)printf("s1>s2");比較的是什么?第七十三頁(yè),編輯于星期六:五點(diǎn)三十六分。736.測(cè)試字符串長(zhǎng)度函數(shù)strlen()調(diào)用格式:strlen(str)功能:測(cè)試字符串長(zhǎng)度。函數(shù)值:str數(shù)組中字符的個(gè)數(shù)(不包括’\0’)。思考:"China和str1[10]在內(nèi)存中各占幾個(gè)字節(jié)?輸出結(jié)果:5例如:charstr1[10]="China";printf("%d",strlen(str1));第七十四頁(yè),編輯于星期六:五點(diǎn)三十六分。747.大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母函數(shù)strlwr()
調(diào)用格式:strlwr(str)功能:將str字符串中的大寫(xiě)字母轉(zhuǎn)換成小寫(xiě)字母。
輸出結(jié)果:microsoftword輸出結(jié)果:abcd例
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 科技公司商業(yè)模式創(chuàng)新的成功案例研究
- 科技助力構(gòu)建平安校園新生態(tài)
- 家庭教育與醫(yī)療健康的關(guān)系
- DB6103T 81-2025袋栽銀耳栽培技術(shù)規(guī)范
- DB35T 2228-2024科技成果轉(zhuǎn)化效果評(píng)估導(dǎo)則
- 個(gè)人向企業(yè)租賃設(shè)備合同標(biāo)準(zhǔn)范本
- 個(gè)人地下停車位轉(zhuǎn)讓合同書(shū)
- 三人共同持股合同范例
- 個(gè)人貸款合同樣本(房產(chǎn)抵押)
- 二人合資創(chuàng)業(yè)合同書(shū):經(jīng)營(yíng)合作協(xié)議
- 工業(yè)自動(dòng)化生產(chǎn)線操作手冊(cè)
- 《走進(jìn)神奇》說(shuō)課稿
- 2024年內(nèi)蒙古中考語(yǔ)文試卷五套合卷附答案
- 湖南2024年湖南省衛(wèi)生健康委直屬事業(yè)單位招聘276人筆試歷年典型考題及考點(diǎn)附答案解析
- 五年級(jí)下冊(cè)語(yǔ)文教案 學(xué)習(xí)雙重否定句 部編版
- 南京地區(qū)幼兒園室內(nèi)空氣污染物與兒童健康的相關(guān)性研究
- 2024年湖南鐵路科技職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- (正式版)SHT 3115-2024 石油化工管式爐輕質(zhì)澆注料襯里工程技術(shù)規(guī)范
- (正式版)JBT 9630.1-2024 汽輪機(jī)鑄鋼件無(wú)損檢測(cè) 第1部分:磁粉檢測(cè)
- 平安產(chǎn)險(xiǎn)陜西省地方財(cái)政生豬價(jià)格保險(xiǎn)條款
- 地震應(yīng)急救援培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論