版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配6.1數(shù)組概念6.2一維數(shù)組6.3多維數(shù)組6.4字符數(shù)組6.5指針數(shù)組與main函數(shù)的參數(shù)6.6內(nèi)存的動(dòng)態(tài)分配與釋放《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第1頁(yè)。6.1數(shù)組概念數(shù)組:一組相同數(shù)據(jù)類型的元素按一定順序線性排列。數(shù)組的特點(diǎn):(1)數(shù)組是相同數(shù)據(jù)類型的元素的集合。(2)數(shù)組中的各元素是有先后順序的。它們?cè)趦?nèi)存中按照這個(gè)順序連續(xù)存放在一起。(3)每個(gè)數(shù)組元素用整個(gè)數(shù)組的名字和它自己在數(shù)組中的位置表達(dá),此位置被叫做下標(biāo)或索引。
a[0]a[1]a[2]
a[3]a[4]a[5]
2334-89
-901250《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第2頁(yè)。6.1數(shù)組概念數(shù)組特點(diǎn):(1)數(shù)組是相同數(shù)據(jù)類型的元素的集合。(2)數(shù)組中的各元素是有先后順序的。它們?cè)趦?nèi)存中按照這個(gè)順序連續(xù)存放在一起。(3)每個(gè)數(shù)組元素用整個(gè)數(shù)組的名字和它自己在數(shù)組中的位置表達(dá)(此位置被叫做下標(biāo)或索引)。
例如,一個(gè)包含6個(gè)整型元素的數(shù)組a,定義為:
inta[6];在內(nèi)存中的順序存儲(chǔ)結(jié)構(gòu)如下:
a[0]a[1]a[2]
a[3]a[4]a[5]
2334-89
-901250數(shù)組下標(biāo)數(shù)組名下標(biāo)變量《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第3頁(yè)。6.1數(shù)組概念使用數(shù)組的好處:便于組織循環(huán)數(shù)組按維數(shù)分為:一維數(shù)組多維數(shù)組//求100個(gè)數(shù)據(jù)的和:inta[100]={1,2,3,4,…100}s=0;for(i=0;i<=99
;i++)s=s+a[i];《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第4頁(yè)。6.2一維數(shù)組6.1.1一維數(shù)組的聲明6.2.1一維數(shù)組的初始化6.2.3一維數(shù)組元素的表示方法6.2.4用指針訪問(wèn)一維數(shù)組6.2.5函數(shù)參數(shù)為訪問(wèn)一維數(shù)組的指針6.2.6一維數(shù)組綜合程序設(shè)計(jì)舉例《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第5頁(yè)。6.1.1一維數(shù)組的聲明聲明數(shù)組:指定數(shù)組名稱、數(shù)組所包含的元素的數(shù)據(jù)類型和元素的個(gè)數(shù)。聲明一維數(shù)組的語(yǔ)法格式:
數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];常量表達(dá)式:數(shù)組元素的個(gè)數(shù)(length)符號(hào)常量或常量名組成的表達(dá)式,不能是變量[]是數(shù)組的標(biāo)志。聲明數(shù)組意味著給數(shù)組分配一組連續(xù)的存儲(chǔ)空間,空間的大小:length*sizeof(dataType)
。例如,inta[10];
聲明了含有10個(gè)元素的整型數(shù)組,分配10個(gè)元素的內(nèi)存空間(每個(gè)元素占4個(gè)字節(jié))。sizeof(a)=40
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第6頁(yè)。
inta[10];10個(gè)元素:a[0],a[1],a[2],…,a[9]每個(gè)元素的數(shù)據(jù)類型a[0]a[1]a[2]a[3]…a[7]a[8]a[9]6.1.1一維數(shù)組的聲明空間的大小(字節(jié)數(shù)):10*4=40Bytes數(shù)組的元素個(gè)數(shù)(長(zhǎng)度):1010*sizeof(int)=40sizeof(a)=40《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第7頁(yè)。6.1.1一維數(shù)組的聲明聲明數(shù)組: 數(shù)據(jù)類型數(shù)組名[常量表達(dá)式];例如:intcount=10;charcArray[count];//錯(cuò)誤,元素個(gè)數(shù)count是變量constintcount=10;charcArray[count];//正確,元素個(gè)數(shù)是常量unsignedcharbArray[count+1];//正確,元素個(gè)數(shù)是常量#definelength100longlArray[legnth];//正確,元素個(gè)數(shù)是常量《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第8頁(yè)。6.2.1一維數(shù)組的初始化數(shù)組的初始化:在聲明數(shù)組的同時(shí),給數(shù)組的每一個(gè)元素指定一個(gè)初始值。語(yǔ)法格式:
數(shù)據(jù)類型數(shù)組名[常量表達(dá)式]={初始化列表};或
數(shù)據(jù)類型數(shù)組名[]={初始化列表};初始化列表:用逗號(hào)分隔的一組常量值。例如:inta[5]={1,2,3,4,5};即a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第9頁(yè)。6.2.1一維數(shù)組的初始化例:inta[5]={1,2,3,4,5};即a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5例:計(jì)算初始化列表中值的個(gè)數(shù)來(lái)確定數(shù)組元素的個(gè)數(shù)。inta[]={1,2,3,4,5};例:初始化列表中的數(shù)據(jù)個(gè)數(shù)小于數(shù)組元素的個(gè)數(shù),則編譯器給剩下的數(shù)組元素的初值0。inta[5]={1,2};即a[0]=1,a[1]=2,a[2]=0,a[3]=0,a[4]=0?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第10頁(yè)。6.2.1一維數(shù)組的初始化例如:charc[10]={'0','1','2'};即c[0]=48,c[1]=49,c[2]=50,c[3]=c[4]=…=c[9]=0。或c[0]=‘0’,c[1]=‘1’,c[2]=‘2’,c[3]=c[4]=…=c[9]=‘\0’數(shù)組元素的賦值也可通過(guò)賦值語(yǔ)句進(jìn)行:例如:shorts[5];s[0]=1;s[1]=2;s[2]=3;s[3]=s[2]-s[1];s[4]=s[3]-s[1]-2;《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第11頁(yè)。6.2.3一維數(shù)組元素的表示方法一維數(shù)組元素的使用:下標(biāo)變量表示法。語(yǔ)法格式為:數(shù)組名[下標(biāo)]下標(biāo)的取值范圍:0~length-1。訪問(wèn)數(shù)組元素時(shí),下標(biāo)不能越界。下標(biāo)是整型或者可以轉(zhuǎn)化成整型的量使用數(shù)組元素就像使用簡(jiǎn)單變量一樣例如:inta[100];for(i=0;i<=100;i++)a[i]=i;99《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第12頁(yè)。6.2.3一維數(shù)組元素的表示方法避免下標(biāo)越界的方法:用符號(hào)名如length表示數(shù)組元素的個(gè)數(shù),用length-1作為數(shù)組下標(biāo)的下界。例如:#define
length100inta[length];for(i=0;i<=length-1
;i++)
a[i]=i;
對(duì)數(shù)組從尾向頭遍歷元素for(i=length-1;i>=0;i--)
a[i]=i;《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第13頁(yè)。例6-1從鍵盤(pán)輸入一組數(shù)放入數(shù)組中,逆序輸出數(shù)組的所有元素以及元素之和。#include<stdio.h>#definelength5voidmain(){ intarray[length]; inti,total=0;for(i=0;i<=length-1;i++)scanf("%d",&array[i]);for(i=0;i<=length-1;i++)//addeachelement'svaluetototaltotal+=array[i]; printf("Reversedarrayelements:"); for(i=length-1;i>=0;i--)
printf("%-4d",array[i]);printf("\nTotalofarrayelements:%d\n",total);}1020308034Reversedarrayelements:3480302010Totalofarrayelements:184《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第14頁(yè)。6.2.4用指針訪問(wèn)一維數(shù)組一個(gè)含有n個(gè)元素的數(shù)組,在內(nèi)存將分配n個(gè)連續(xù)的存儲(chǔ)單元,每一個(gè)數(shù)組元素占用的內(nèi)存空間大小一樣,且與數(shù)組的數(shù)據(jù)類型相關(guān)。數(shù)組名:代表整個(gè)數(shù)組的首址(數(shù)組的第一個(gè)元素的地址)每一個(gè)數(shù)組元素有一個(gè)存儲(chǔ)地址(數(shù)組元素的指針)。定義一個(gè)指針變量指向數(shù)組元素(存放數(shù)組元素的地址)通過(guò)指針變量間接訪問(wèn)數(shù)組元素《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第15頁(yè)。inta[10]={1,3,5,7,9,11,13,15,17,19};
int*p;p=a;//指向數(shù)組的首址等價(jià)于p=&a[0]等價(jià)于int*p=a;
或int*p=&a[0];a[0]a[1]a[9]a[2]a[3]a[4]a[5]a[6]a[7]a[8]p=&a[0]1.指向一維數(shù)組元素的指針變量《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第16頁(yè)。6.2.4用指針訪問(wèn)一維數(shù)組定義一維數(shù)組元素的指針變量,語(yǔ)法格式:類型*變量名;類型:一維數(shù)組的數(shù)據(jù)類型。*:變量名是指針類型?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第17頁(yè)。2.對(duì)指針進(jìn)行加減運(yùn)算
在指針變量指向數(shù)組元素時(shí),允許對(duì)指針進(jìn)行如下的加減運(yùn)算(1)p指向數(shù)組元素a[i]p+1指向后一元素a[i+1]p-1指向前一個(gè)元素a[i-1]如,a的首址2000,若p=&a[1]則p的值為2004,則p+1的值為2008,則p-1的值為2000。P=&a[i];floata[10],*p;
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第18頁(yè)。2.對(duì)指針進(jìn)行加減運(yùn)算(2)如果p的初值為&a[0],則p+i或a+i:a[i]的地址p+i或a+i:指向a[i]元素
☆通過(guò)指針間接存取a[i]的形式:
*(p+i)、*(a+i)和p[i]floata[10],*p;
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第19頁(yè)。2.對(duì)指針進(jìn)行加減運(yùn)算(3)對(duì)p指針變量進(jìn)行加減賦值運(yùn)算:p=p+i
:p指向當(dāng)前數(shù)組元素往后的第i個(gè)元素。p=p-i
:p指向當(dāng)前數(shù)組元素往前的第i個(gè)元素。p++或++p:p指向當(dāng)前數(shù)組元素的后一個(gè)元素。p—或--p:p指向當(dāng)前數(shù)組元素的前一個(gè)元素。數(shù)組名是常量指針,它始終指向數(shù)組的首址。如:
a=a+1;是錯(cuò)誤的。floata[10],*p;
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第20頁(yè)。2.對(duì)指針進(jìn)行加減運(yùn)算(3)
兩個(gè)指針相減,只有p1和p2都指向同一數(shù)組中的元素時(shí)才有意義
p1-p2:p2與p1之間有多少個(gè)元素例如,floata[10],*p=a;while(p-a<10){//a[9]與a[0]之間相差9個(gè)元素printf(“%f“,*p);p++};《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第21頁(yè)。
例6-2通過(guò)指針遍歷數(shù)組所有元素。#definelength5voidmain(){ inta[length]={1,2,3,4,5};inti,*p=a;
//下標(biāo)變量法遍歷數(shù)組元素
for(i=0;i<=length-1;i++)printf("%-4d",a[i]); printf("\n");
//數(shù)組名常量指針?lè)ū闅v數(shù)組元素
for(i=0;i<=length-1;i++)
printf("%-4d",*(a+i)); printf("\n");
12345123451234512345123453.通過(guò)指針引用數(shù)組元素《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第22頁(yè)。
//變量指針?lè)ū闅v數(shù)組元素,變量指針的值不變p=a
for(i=0;i<=length-1;i++)
printf("%-4d",*(p+i));printf("\n");//變量指針?lè)ū闅v數(shù)組元素,變量指針類似于數(shù)組名使用,變量指針的值不變
for(i=0;i<=length-1;i++)
printf("%-4d",p[i]);printf("\n");
//變量指針?lè)ū闅v數(shù)組元素,變量指針的值在變,不斷指向下一個(gè)元素
for(i=0;i<=length-1;i++){
printf("%-4d",*(p++)); } printf("\n");}1234512345123451234512345《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第23頁(yè)。6.2.5函數(shù)參數(shù)為訪問(wèn)一維數(shù)組的指針通過(guò)函數(shù)訪問(wèn)一個(gè)通用的一維數(shù)組。函數(shù)定義中,形參為:f(type*p,intn)或f(typep[],intn)f(typep[len],intn)函數(shù)調(diào)用:f(a,length)其中typea[length];f1(int
p[],intn)與f2(int
p[2],intn)的區(qū)別inta[2],b[3];f1(a,2)f1(b,3)f2(a,2)f2(b,3)錯(cuò)誤《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第24頁(yè)。例6-3完成給一維數(shù)組各元素賦值為對(duì)應(yīng)元素的下標(biāo)值,將此功能定義為函數(shù)fvoid
f(int*a,intn){
//或f(inta[],intn)
inti;for(i=0;i<n;i++)
a[i]=i;printf(“%2d”,a[i]);printf("\n");}voidmain(){inta[10],b[5];f(a,10);f(b,5);}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第25頁(yè)。6.2.6一維數(shù)組綜合程序設(shè)計(jì)舉例★數(shù)組的常用算法:排序插入修改刪除查詢《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第26頁(yè)。例6-4用冒泡排序法對(duì)數(shù)組進(jìn)行增序
(從小到大)的排序。排序的規(guī)則有兩種:一種是增序(從小到大);另一種是降序(從大到?。┟芭菖判蚍ǎ耗M水中氣泡的排放規(guī)則,使重量“較輕”(值較?。┑臍馀莞〉缴厦妫亓俊拜^重”(值較大)的氣泡沉到下面。
對(duì)每一趟排序,從第1個(gè)元素開(kāi)始,比較相鄰元素的大小,按照規(guī)則對(duì)調(diào)兩者的位置,最終確定一個(gè)最大(或最小)的氣泡的位置。
例如:對(duì)6個(gè)數(shù)進(jìn)行冒泡排序法的過(guò)程:《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第27頁(yè)。985420895420859420854920854290854209大數(shù)沉淀,小數(shù)起泡a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=4;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第1趟排序《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第28頁(yè)。854209584209548209542809542089a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=3;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第2趟排序《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第29頁(yè)。542089452089425089420589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=2;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第3趟排序420589《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第30頁(yè)。420589240589204589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=1;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第4趟排序《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第31頁(yè)。204589024589a[0]a[1]a[2]a[3]a[4]a[5]for(i=0;i<=0;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}第5趟排序《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第32頁(yè)。for(i=0;i<=4;i++)if(a[i]>a[i+1]){……}for(i=0;i<=3;i++)if(a[i]>a[i+1]){……}for(i=0;i<=0;i++)if(a[i]>a[i+1]){……}……for(i=0;i<=6-pass-1;i++)if(a[i]>a[i+1]){……}for(pass=1;pass<=5;j++)
pass:趟數(shù)從1到5
size個(gè)元素時(shí)pass:趟數(shù)從1到size-1i從0到size-pass-16個(gè)元素時(shí)pass=1pass=2pass=5《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第33頁(yè)。voidbubblesort(intvalues[],intsize){intpass,j,temp;for(pass=1;pass<=size-1;pass++){ for(j=0;j<=size-1-pass;j++) if(values[j]>values[j+1]){ temp=values[j]; values[j]=values[j+1]; values[j+1]=temp; }} }將冒泡排序法定義為一函數(shù)《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第34頁(yè)。將冒泡排序法定義為一函數(shù)bubbleSort(intvalues[],intn)等同于bubbleSort(int*values,intn)《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第35頁(yè)。將打印一維數(shù)組功能定義為一函數(shù)。
voidprint(intvalues[],intsize){ inti; for(i=0;i<size;i++) printf("%4",values[i]); printf("\n");}voidmain(){ intscore1[]={10,3,56,89,80,60}; intscore2[]={78,100,45,12,78,90,3,5}; bubblesort(score1,6); print(score1,6); bubblesort(score2,8); print(score2,8);}31056608089351245787880100形參inta[]與inta[10]區(qū)別?《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第36頁(yè)。例6-5在有序的數(shù)組中,用折半查找法查找一個(gè)特定的值。在有序的數(shù)組中,二分查找法是一種比較快捷的查找方法。折半查找法:先將整個(gè)數(shù)組作為查找區(qū)間,用給定的值與查找區(qū)間的中間元素的值相比較,若相等,則查找成功;若不等,則縮小范圍,判斷該值落在區(qū)間的前一部分還是后一部分,再將其所在的部分作為新的查找區(qū)間,繼續(xù)上述過(guò)程,一直到找到該值或區(qū)間長(zhǎng)度小于0表明查找不成功為止?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第37頁(yè)。例如:用折半查找法查找key=80元素31056608085a[0]a[1]a[2]a[3]a[4]a[5]low=3mid=(low+hight)/2hight=5a[mid]<80low=0hight=5mid=4a[mid]=80僅比較2次即找到關(guān)鍵字。折半查找法是快速查找法?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第38頁(yè)。inta[size],查找是否含有關(guān)鍵字key的元素,折半查找法的算法描述過(guò)程:1.設(shè)置查找的最初區(qū)間[low,high],low=0,high=size-1,mid=(low+high)/2;found是否找到key的標(biāo)志,初值0。2.判斷a[mid]和key之間的關(guān)系:若key=a[mid],則成功找到,置found=1,查找結(jié)束。若key<a[mid],設(shè)定下一查找范圍是左半?yún)^(qū)間[low,mid-1]。若key>a[mid],設(shè)定查找范圍是右半?yún)^(qū)間[mid+1,high]。
重復(fù)步驟2條件:(low<=high)且found==03.循環(huán)結(jié)束時(shí),若found==1則找到,否則找不到key。《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第39頁(yè)。//函數(shù)返回找到的key的下標(biāo)位置,返回-1則找不到intbinarySearch(intarray[],intkey,intsize){intlow,high,found=0,mid;intindex;low=0;high=size-1;while((found==0)&&(low<=high)){ mid=(low+high)/2; if(key==array[mid]){ found=1;index=mid; } elseif(key>array[mid]) low=mid+1; elseif(key<array[mid]) high=mid-1; }if(found)returnindex;elsereturn-1;}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第40頁(yè)。voidmain(){ intscore1[]={3,10,56,60,80,85}; intloc,key; printf("輸入要查找的關(guān)鍵字=?"); scanf("%d",&key); loc=binarySearch(score1,key,6); if(loc==-1) printf("找不到!\n"); elseprintf("成功找到!%d的下標(biāo)位置為%d\n",key,loc); }輸入要查找的關(guān)鍵字=?80成功找到!80的下標(biāo)位置為4《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第41頁(yè)。6.3多維數(shù)組帶有一個(gè)下標(biāo)的數(shù)組叫做一維數(shù)組。
a[i]帶有兩個(gè)下標(biāo)的數(shù)組叫做二維數(shù)組。
a[i][j]帶有兩個(gè)以上的下標(biāo)的數(shù)組叫做多維數(shù)組
a[i][j][k]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第42頁(yè)。6.3多維數(shù)組6.3.1二維數(shù)組的聲明 6.3.2二維數(shù)組的初始化 6.3.3二維數(shù)組元素的表示方法 6.3.4聲明二級(jí)指針 6.3.5用指針訪問(wèn)二維數(shù)組 6.3.6函數(shù)參數(shù)為訪問(wèn)二維數(shù)組的指針 6.3.7二維數(shù)組綜合程序設(shè)計(jì)舉例 《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第43頁(yè)。6.3.1二維數(shù)組的聲明二維數(shù)組常用于存放矩陣,第一維和第二維分別對(duì)應(yīng)于矩陣的行和列。二維數(shù)組聲明的格式:
類型數(shù)組名[常量表達(dá)式1][常量表達(dá)式2];常量表達(dá)式1:第一維下標(biāo)的長(zhǎng)度常量表達(dá)式2:第二維下標(biāo)的長(zhǎng)度類型:數(shù)組元素的數(shù)據(jù)類型《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第44頁(yè)。6.3.1二維數(shù)組的聲明例如:inta[2][3];將創(chuàng)建2行*3列的二維數(shù)組。各元素的下標(biāo)變量:在C語(yǔ)言中,二維數(shù)組是按行排列的。inta[2][3],每個(gè)元素占4個(gè)Bytes,整個(gè)數(shù)組占24個(gè)字節(jié)的存儲(chǔ)空間。二維數(shù)組看作是一個(gè)特殊的一維數(shù)組:一維數(shù)組中每一個(gè)元素又是一個(gè)一維數(shù)組。a由a[0]、a[1]
組成《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第45頁(yè)。6.3.2二維數(shù)組的初始化聲明二維數(shù)組的初始化形式:(1)分行給二維數(shù)組賦初值。例如:intb[3][2]={{1,2},{2,3},{3,4}};(2)將所有初值寫(xiě)在一行中。例如:intb[3][2]={1,2,3,4,5,6};(3)只給部分元素賦初值。當(dāng){}中值的個(gè)數(shù)少于元素個(gè)數(shù)時(shí),只給前面部分元素賦值。后面的元素初值缺省為0。例如:intb[3][2]={{1},{2},{3}};
相當(dāng)于intb[3][2]={{1,0},{2,0},{3,0}};《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第46頁(yè)。6.3.2二維數(shù)組的初始化(4)聲明數(shù)組時(shí),第1維的下標(biāo)的長(zhǎng)度可以不確定,但第2維的下標(biāo)的長(zhǎng)度一定要確定。例如:intb[][4]={1,2,3,4,5,6,7,8};相當(dāng)于intb[2][4]={1,2,3,4,5,6,7,8};《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第47頁(yè)。6.3.3二維數(shù)組元素的表示方法二維數(shù)組的每個(gè)元素,雙下標(biāo)的表示格式:
數(shù)組名[下標(biāo)1][下標(biāo)2]下標(biāo)1、下標(biāo)2為非負(fù)的整型表達(dá)式。下標(biāo)不能越界例如:inta[3][4];表示元素:a[2][3]正確i=1,j=1,a[i+1][j*3]a[3][4]錯(cuò)誤
a[i+2][j*3]a[i+1][j*4]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第48頁(yè)。6.3.3二維數(shù)組元素的表示方法二維數(shù)組的遍歷訪問(wèn),需要通過(guò)二重循環(huán)逐行(或逐列)進(jìn)行。例如:inta[len1][len2],按行遍歷:按列遍歷:for(row=0;row<len1;row++)for(col=0;col<len2;col++)a[row][col]
for(col=0;col<len2;col++)for(row=0;row<len1;row++)a[row][col]
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第49頁(yè)。例6-6有一個(gè)矩陣,要打印出其每一列的最大值位置。解題思路:二維數(shù)組存放矩陣,對(duì)二維數(shù)組按列的次序掃描:對(duì)某一列col,用變量k存放這一列的最大值的行號(hào).
開(kāi)始時(shí),假設(shè)第col列的第0行元素為最大值,k=0.該列的其它元素a[row][col]與a[k][col]值比較若當(dāng)前元素大于目前最大值,則k=此元素的行號(hào)。for(col=0;col<len2;col++){k=0;for(row=0;row<len1;row++)if(a[row][col]>a[k][col])k=row;printf("第%d列第%d行的元素為最大值。\n",col,k);} 《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第50頁(yè)。例6-6有一個(gè)矩陣,要打印出其每一列的最大值位置。定義函數(shù),用于二維數(shù)組的數(shù)據(jù)輸入:
voidinput(inta[][len2])定義函數(shù),用于二維數(shù)組輸出:
voidprint(inta[][len2])形數(shù)inta[][len2]與inta[len1][len2]區(qū)別?inta[][len2]比inta[len1][len2]適用的二維數(shù)組范圍更廣?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第51頁(yè)。#definelen13#definelen24voidinput(inta[][len2]);voidprint(inta[][len2]);voidmain(){ inta[len1][len2]; introw,col,k; //二維數(shù)組數(shù)據(jù)輸入
input(a); //二維數(shù)組輸出
printf("\n您已經(jīng)輸入的二維數(shù)組:\n"); print(a);//輸出每一列的最大值
for(col=0;col<len2;col++){ k=0; for(row=0;row<len1;row++) if(a[row][col]>a[k][col])k=row; printf("第%d列第%d行的元素為最大值。\n",col,k); } }《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第52頁(yè)。voidinput(inta[][len2]){ introw,col; for(row=0;row<len1;row++){ printf("輸入第%d行:",row); for(col=0;col<len2;col++) scanf("%d",&a[row][col]); }}voidprint(inta[][len2]){ introw,col; //二維數(shù)組輸出
for(row=0;row<len1;row++){ for(col=0;col<len2;col++) printf("%5d",a[row][col]); printf("\n"); }}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第53頁(yè)。例6-7實(shí)現(xiàn)N×N矩陣的轉(zhuǎn)置。解題思路:矩陣的轉(zhuǎn)置是指矩陣的上下三角元素以對(duì)角線為中軸線對(duì)稱互換:即原來(lái)的i行j列元素在轉(zhuǎn)置后稱為j行i列元素。定義二維數(shù)組a[N][N]存放矩陣。for(i=0;i<N;i++)for(j=i+1;j<N;j++)
a[i][j]a[j][i];《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第54頁(yè)。例6-7實(shí)現(xiàn)N×N矩陣的轉(zhuǎn)置。隨機(jī)生成N*N個(gè)數(shù)據(jù)放入二維數(shù)組:voidrandoms(inta[][N]){ introw,col;srand((unsigned)time(NULL)); for(row=0;row<N;row++){ for(col=0;col<N;col++) a[row][col]=rand(); }}rand();生成0到32767之間的隨機(jī)數(shù)#include<stdlib.h>#include<time.h>srand((unsigned)time(NULL));《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第55頁(yè)。#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN4voidmain(){ inta[N][N]; inti,j,t; voidrandoms(inta[][N]);//函數(shù)原型
voidprint(inta[][N]);//函數(shù)原型
randoms(a); printf("二維數(shù)組轉(zhuǎn)置前:\n");
print(a); for(i=0;i<N;i++){//二維數(shù)組轉(zhuǎn)置
for(j=i+1;j<N;j++){ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } printf("\n二維數(shù)組轉(zhuǎn)置后:\n");
print(a);}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第56頁(yè)。1.聲明二級(jí)指針
:
type**變量名例如:inta=8;int*p=&a;//一級(jí)指針int**q=&p;6.3.4聲明二級(jí)指針《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第57頁(yè)。6.3.4聲明二級(jí)指針2.用二級(jí)指針訪問(wèn)對(duì)象變量
*q代表p**q代表a**q=**q+1//a=a+1《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第58頁(yè)。6.3.5用指針訪問(wèn)二維數(shù)組1.二維數(shù)組元素的地址二維數(shù)組可看做是一個(gè)一維數(shù)組:此一維數(shù)組中每一個(gè)元素又是一個(gè)一維數(shù)組。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};由3行組成:a[0]、a[1]和a[2]
《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第59頁(yè)。inta[3][4]:由3個(gè)一維數(shù)組a[0]、a[1]和a[2]組成。a[0]代表第0行,存放第0行的首址二維數(shù)組各指針之間的關(guān)系:a:是二級(jí)指針,指向二維數(shù)組的首址,其值為&a[0]或&a[0][0]*a或a[0]:代表第0行,其值為&a[0][0];**a:代表a[0][0]。
6.3.5用指針訪問(wèn)二維數(shù)組《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第60頁(yè)。二維數(shù)組各指針之間的關(guān)系:(2)a+i:指向第i行(存放第i行的地址),或稱行指針,其值等于&a[i][0];*(a+i)或a[i]代表第i行,其值等于&a[i][0],即第i行第0個(gè)元素的地址;*(a+i)+j或a[i]+j:指向第i行第j個(gè)元素,其值為&a[i][j];*(*(a+i)+j):代表a[i][j]。6.3.5用指針訪問(wèn)二維數(shù)組《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第61頁(yè)。二維數(shù)組各指針之間的關(guān)系:
取內(nèi)容運(yùn)算符*,其結(jié)合性為自右至左:
**a相當(dāng)于*(*a)。
**a是一個(gè)二級(jí)指針:a存放a[0]的地址,a[0]存放的是a[0][0]的地址,通過(guò)a間接地訪問(wèn)a[0][0]的形式是**a6.3.5用指針訪問(wèn)二維數(shù)組《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第62頁(yè)。例6-8輸出二維數(shù)組的各指針值。voidmain(){inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inti;
//請(qǐng)觀察二維數(shù)組的各指針的值及其之間的關(guān)系printf("a=%d,*a=%d,a[0]=%d,&a[0][0]=%d,a[0][0]=%d\n\n",a,*a,a[0],&a[0][0],a[0][0]);for(i=0;i<3;i++){ printf("a+%d=%d,*(a+%d)=%d,a[%d]=%d,",i,a+i,i,*(a+i),i,a[i]);printf("&a[%d][0]=%d,a[%d][0]=%d\n",i,&a[i][0],i,a[i][0]);
}}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第63頁(yè)。6.3.5用指針訪問(wèn)二維數(shù)組2.定義指向二維數(shù)組的指針變量,格式:
類型說(shuō)明符(*指針變量名)[長(zhǎng)度];*:表示其后的變量是指針類型。園括號(hào)()不可少,如少括號(hào)則表示的指針數(shù)組長(zhǎng)度:等于二維數(shù)組聲明時(shí)的第二維下標(biāo)長(zhǎng)度。類型說(shuō)明符:是二維數(shù)組的數(shù)據(jù)類型。定義的指針變量名:是指向二維數(shù)組的行指針。例如:定義了一個(gè)指向第二維長(zhǎng)度為4的二維數(shù)組指針變量p:inta[3][4];int(*p)[4];《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第64頁(yè)。6.3.5用指針訪問(wèn)二維數(shù)組例如:定義了一個(gè)指向第二維長(zhǎng)度為4的二維數(shù)組指針變量p:int(*p)[4];intb[4];p=&b;
b
pb[0]b[1]b[3]b[2]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第65頁(yè)。例如:inta[3][4];int(*p)[4];p=a;//指向第0行p+1://指向第1行p+i;//指向第i行4.通過(guò)二維數(shù)組的行指針變量,間接訪問(wèn)數(shù)組元素a[i][j]的一般形式:
*(*(p+i)+j)或p[i][j]6.3.5用指針訪問(wèn)二維數(shù)組《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第66頁(yè)。例6-9通過(guò)二維數(shù)組的行指針變量,輸出二維數(shù)組元素。voidmain(){ inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; inti,j;int(*p)[4]; //定義二維數(shù)組的行指針變量
p=a; for(i=0;i<3;i++){//i表示行號(hào)
for(j=0;j<4;j++) printf("%3d",*(*(p+i)+j));printf("\n"); }}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第67頁(yè)。例6-10將二維數(shù)組線性化成一維數(shù)組,通過(guò)一維數(shù)組的指針變量,輸出二維數(shù)組元素。解題思路:定義一維數(shù)組的指針變量
int*p;inta[m][n];
p初值為二維數(shù)組的首地址,p=a;
數(shù)組元素a[i][j],通過(guò)指針變量p的存取形式為:
*(p+i*n+j)其中n是二維數(shù)組的第二維的長(zhǎng)度。a[i][j]元素的前面有多少個(gè)元素?有i行個(gè)元素,第i行上有j個(gè)元素《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第68頁(yè)。#include<stdio.h>voidmain(){ inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int(*p);//定義一維數(shù)組的指針變量
inti,j; p=a;//或p=a[0];或p=&a[0][0];
for(i=0;i<3;i++){//i表示行號(hào)
for(j=0;j<4;j++) printf("%2d",*(p+i*4+j));printf("\n"); }}123456789101112
for(p=a[0];p<a[0]+12;p++){if((p-a[0])%4==0)printf(“\n”);printf(“%4d”,*p);}也可換成《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第69頁(yè)。6.3.6函數(shù)參數(shù)為訪問(wèn)二維數(shù)組的指針形參:f(type(*a)[colLen)
或f(typea[][colLen)實(shí)參:f(b)其中
:typeb[len1][colLen]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第70頁(yè)。例6-11:完成給二維數(shù)組各元素賦值為對(duì)應(yīng)元素的下標(biāo)i+j,將此功能定義為函數(shù)f。
#definecolLen4f(int(*a)[colLen],intn){
//f(inta[][colLen],intn)inti,j;for(i=0;i<n;i++)for(j=0;j<colLen;j++)a[i][j]=i+j;}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第71頁(yè)。例6-11:完成給二維數(shù)組各元素賦值為對(duì)應(yīng)元素的下標(biāo)i+j,將此功能定義為函數(shù)f。
p(int(*a)[colLen],intn){//或p(inta[][colLen],intn)inti,j;for(i=0;i<n;i++){for(j=0;j<colLen;j++)printf("%3d",*(*(a+i)+j));printf("\n");}}voidmain(){inta[10][colLen],b[5][colLen];f(a,10);f(b,5);p(a,10);p(b,5);}《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第72頁(yè)。6.3.7二維數(shù)組綜合程序設(shè)計(jì)舉例例6-12構(gòu)造楊輝三角形。解題思路:將楊輝三角形放在二維數(shù)組yanghui中。楊輝三角形各元素的特點(diǎn)如下:y[i][j]=y[i-1][j-1]+y[i-1][j]當(dāng)i>0,j>0,j<i=1當(dāng)j=0或j=i《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第73頁(yè)。//生成楊輝三角形放入二維數(shù)voidmakeYangHui(int(*yanghui)[N]){inti,j; for(i=0;i<N;i++)//外循環(huán)控制行數(shù)
for(j=0;j<=i;j++){//生成第i行數(shù)據(jù)
if(j==0||j==i) yanghui[i][j]=1; elseif(j<i) yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j]; elseyanghui[i][j]=0; } }y[i][j]=y[i-1][j-1]+y[i-1][j]當(dāng)i>0,j>0,j<i=1當(dāng)j=0或j=iintyanghui[][N]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第74頁(yè)。#defineN6voidprintTriangle(int(*yanghui)[N]){//打印楊輝三角形
inti,j; for(i=0;i<N;i++){//外循環(huán)控制打印的行數(shù)
for(j=0;j<=i;j++)//內(nèi)循環(huán)控制打印第i行
printf("%d\t",*(*(yanghui+i)+j)); printf("\n"); }}voidmain(){
intyanghui[N][N];makeYangHui(yanghui);
printTriangle(yanghui);}yanghui[i][j]《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第75頁(yè)。6.4字符數(shù)組char字符型數(shù)據(jù):用一個(gè)字節(jié)的ASCII代碼存儲(chǔ)的。C語(yǔ)言的基本類型中沒(méi)有字符串類型字符串存放在字符型數(shù)組中的?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第76頁(yè)。6.4字符數(shù)組6.4.1字符數(shù)組的定義6.4.2字符數(shù)組的初始化6.4.3字符數(shù)組元素的表示方法6.4.4字符數(shù)組的輸入與輸出6.4.5使用字符串函數(shù)處理字符串6.4.6通過(guò)指針引用字符串6.4.7字符串的綜合程序設(shè)計(jì)舉例《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第77頁(yè)。6.4.1字符數(shù)組的定義用來(lái)存放字符類型的數(shù)組稱為字符數(shù)組。例如:charc[10];
定義含有10個(gè)char類型的數(shù)組元素,每個(gè)元素存放一個(gè)字符。字符數(shù)組也可以是二維或多維數(shù)組。例如:二維字符數(shù)組charc[5][10];《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第78頁(yè)。6.4.2字符數(shù)組的初始化聲明字符數(shù)組時(shí),允許對(duì)數(shù)組元素初始化賦值。
例如:chars[10]={'C','','p','r','o','g','r','a','m'};s的內(nèi)存分配和各元素的的初值為:其中s[9]在初始化列表中沒(méi)有被賦初值,則由系統(tǒng)自動(dòng)賦缺省值0或‘\0’。轉(zhuǎn)義字符‘\0’的機(jī)內(nèi)編碼值是0?!甛0’也是字符串的結(jié)尾標(biāo)志《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第79頁(yè)。6.4.2字符數(shù)組的初始化初始化時(shí),將字符串常量賦給字符型數(shù)組。例:chars[10]="Cprogram";或
chars[]={"Cprogram"};在聲明數(shù)組后,不可用賦值語(yǔ)句給字符數(shù)組名賦值。例:chars[10];s=“Cprogram”;//錯(cuò)誤。char*s;s=“Cprogram”;//正確《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第80頁(yè)。6.4.2字符數(shù)組的初始化定義數(shù)組時(shí),省略數(shù)組長(zhǎng)度,編譯系統(tǒng)會(huì)自動(dòng)根據(jù)初值個(gè)數(shù)確定數(shù)組長(zhǎng)度。例如:chars[]={'C','','p','r','o','g','r','a','m'};s的長(zhǎng)度為9,注意這時(shí)s沒(méi)有結(jié)尾字符'\0'。例如:chars[]="Cprogram";s的長(zhǎng)度為10,s的最后一個(gè)字節(jié)為‘\0’。用字符串方式賦值比用字符逐個(gè)賦值要多占一個(gè)字節(jié),用于存放字符串結(jié)束標(biāo)志'\0'?!禖語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第81頁(yè)。6.4.2字符數(shù)組的初始化注意:字符型數(shù)組存放字符串時(shí),最好多留一個(gè)字節(jié)存放結(jié)尾字符'\0',這對(duì)于字符串的輸入和輸出時(shí)用數(shù)組名作為參數(shù)是必須的。《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第82頁(yè)。6.4.3字符數(shù)組元素的表示方法引用字符數(shù)組的一個(gè)元素同引用一個(gè)char型的基本變量。
例6-13輸出字符數(shù)組中的各個(gè)字符和內(nèi)存存儲(chǔ)的Ascii代碼。《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第83頁(yè)。voidmain(){ inti; chars[20]="Iamastudent."; for(i=0;i<20;i++) printf("%-4c",s[i]); printf("\n"); for(i=0;i<20;i++) printf("%-4d",s[i]);}s[15]=‘\0’s[19]=0《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第84頁(yè)。6.4.4字符數(shù)組的輸入與輸出字符數(shù)組的輸入輸出:三種方式:1.在printf函數(shù)和scanf函數(shù)中,使用格式符為”%c”,結(jié)合循環(huán)語(yǔ)句對(duì)數(shù)組逐個(gè)地輸入輸出每個(gè)字符。例6-14使用格式符"%c",對(duì)字符數(shù)組進(jìn)行輸入/輸出。《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第85頁(yè)。6.4.4字符數(shù)組的輸入與輸出voidmain(){ inti=0,k; chars[100]; printf("輸入:"); do{ scanf("%c",&s[i]); }while(s[i++]!='\n'); //最后一個(gè)字符s[i-1]='\n' printf("輸出:"); for(k=0;k<i;k++) printf("%c",s[k]);}輸入:Stringinput.輸出:Stringinput.《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第86頁(yè)。6.4.4字符數(shù)組的輸入與輸出2.在printf函數(shù)和scanf函數(shù)中,使用格式符”%s”,對(duì)字符數(shù)組一次性輸入/輸出字符串。printf函數(shù):使用格式符“%s”,對(duì)應(yīng)的輸出數(shù)據(jù)項(xiàng)是一維字符數(shù)組名。例如:chars1[]="Java\nJava";printf("%s\n",s1);將輸出兩行“Java”。在執(zhí)行函數(shù)printf("%s",s1)時(shí),按數(shù)組名s1找到首地址,然后逐個(gè)輸出數(shù)組中各個(gè)字符直到遇到字符串終止標(biāo)志'\0'為止。《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第87頁(yè)。6.4.4字符數(shù)組的輸入與輸出2.在printf函數(shù)和scanf函數(shù)中,使用格式符”%s”,對(duì)字符數(shù)組一次性輸入/輸出字符串。scanf函數(shù)使用格式符“%s”,輸入數(shù)據(jù)項(xiàng)是數(shù)組名。例如:charst[20];scanf("%s",st);輸入的字符串長(zhǎng)度<=19,最后留一個(gè)字節(jié)存放`\0`。
scanf(“%s”,&st);
//error《C語(yǔ)言程序設(shè)計(jì)實(shí)用教程》課件第6章-數(shù)組、字符串與動(dòng)態(tài)內(nèi)存分配全文共143頁(yè),當(dāng)前為第88頁(yè)。注意:(1)scanf函數(shù)輸入字符串時(shí),字符串中不能含有空格,否則將以空格作為輸入串的結(jié)束。例如:charst[20];scanf("%s",st);輸入“Howareyou”
則st=“How”賦給st例如:chars1[20],s2[20],s3[20];scanf("%s%s%s",s1,s2,s3);
當(dāng)輸入一行“Howareyou”,則s1=“How”,s2=“are”,s3=“you”(2)scanf語(yǔ)句中的輸入
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 解析教育政策之路
- 復(fù)古廣告圖版權(quán)使用合同(2篇)
- 備用電力供應(yīng)合同(2篇)
- 3課時(shí)求一個(gè)數(shù)的幾倍是多少(說(shuō)課稿)-2024-2025學(xué)年三年級(jí)上冊(cè)數(shù)學(xué)人教版
- 個(gè)人房產(chǎn)交易標(biāo)準(zhǔn)協(xié)議模板 2024版版A版
- 社團(tuán)貸款借款合同
- 2024年藥品進(jìn)出口質(zhì)量監(jiān)管合同3篇
- 2024版家居油漆涂裝工程分包協(xié)議模板一
- 2024房地產(chǎn)行業(yè)保密協(xié)議范本
- 2024年股權(quán)轉(zhuǎn)讓合同:某科技公司股權(quán)轉(zhuǎn)讓及相關(guān)權(quán)益
- 北京市朝陽(yáng)區(qū)2024-2025學(xué)年高一(上)期末化學(xué)試卷(含答案)
- 2025貴州建筑安全員B證考試題庫(kù)附答案
- 2024年杭州師范大學(xué)附屬醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 2024-2025學(xué)年八年級(jí)歷史上冊(cè)期末復(fù)習(xí)課件
- 2025年云南省大理州事業(yè)單位招聘339人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《鐵路旅客運(yùn)輸規(guī)程》考試復(fù)習(xí)題及答案
- 2024初中數(shù)學(xué)競(jìng)賽真題訓(xùn)練(學(xué)生版+解析版)(共6個(gè))
- 規(guī)培結(jié)業(yè) 臨床基本技能操作考核評(píng)分表
- 2024-2025學(xué)年度第一學(xué)期三年級(jí)數(shù)學(xué)寒假作業(yè) 有答案
- 大型起重機(jī)械現(xiàn)場(chǎng)管理手冊(cè)
- 2023年考研(英語(yǔ)一)真題與答案解析
評(píng)論
0/150
提交評(píng)論