C語言教學(xué)之?dāng)?shù)組市公開課一等獎省賽課微課金獎?wù)n件_第1頁
C語言教學(xué)之?dāng)?shù)組市公開課一等獎省賽課微課金獎?wù)n件_第2頁
C語言教學(xué)之?dāng)?shù)組市公開課一等獎省賽課微課金獎?wù)n件_第3頁
C語言教學(xué)之?dāng)?shù)組市公開課一等獎省賽課微課金獎?wù)n件_第4頁
C語言教學(xué)之?dāng)?shù)組市公開課一等獎省賽課微課金獎?wù)n件_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

C程序設(shè)計1/95問題假如需要處理1名學(xué)生10門課程成績,用什么來存放這些數(shù)據(jù)?

方法一:定義10個變量,每個變量中存放1門成績。方法二:定義一個能夠存放10門成績一維數(shù)組。課程1課程2課程3課程4課程5課程6課程7課程8課程9課程10908193779268798394702/95變量:杯子,一個變量只能存放一個數(shù)據(jù)數(shù)組:帶多個杯子托盤,一個數(shù)組能夠存放多個數(shù)據(jù)3/95數(shù)軸上一維向量x={1,2,-2,1,0,3};

就相當(dāng)于一維數(shù)組

4/95直角坐標(biāo)系中矩陣就相當(dāng)于二維數(shù)組

5/954.1一維數(shù)組4.2二維數(shù)組4.3字符數(shù)組6/95一維數(shù)組定義格式:

類型說明符

數(shù)組名[整型常量表示式];比如:int

a[10];就定義了一個包含10個整型元素數(shù)組a,它內(nèi)存大小能夠存放10個整型數(shù)據(jù)。4.1.1一維數(shù)組定義7/95類型說明符

數(shù)組名[整型常量表示式];int,char等都能夠,說明此數(shù)組中每個元素都屬于這類型命名規(guī)則與變量一致不能和其它變量重名指定元素個數(shù),最小為0,不能是變量#defineN3inta[N];√inta[3+5];√inta[1.5];×int

n;scanf(“%d”,&n);inta[n];×int

a;inta[3];×int

a,b[3];√int

n=3;inta[n];×8/95【例4.1】判斷以下數(shù)組定義是否正當(dāng),并說明原因。(1)inta[2.5];(2)inta[-3];(3)inti=3;(4)inti;inta[i];scanf(“%d”,&i);inta[i];(5)#defineN3(6)inta;inta[N];inta[3];(7)inta[2+3];(8)inti,a[3],b['0'];

9/954.1.2一維數(shù)組元素引用一維數(shù)組引用格式:

數(shù)組名[下標(biāo)]

a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]注意:1.數(shù)組必須先定義,再使用。2.只能逐一引用數(shù)組元素,不能一次引用整個數(shù)組。比如:inta[10];能夠使用a[0]、a[1]...a[9]。若有a=1;或者a[10]

=1;犯錯。a[10]不代表整個數(shù)組,它是下標(biāo)為10元素,越界!110/953.下標(biāo)能夠是常量或變量,它表示元素序號。比如:inti=3,a[10];

a[i]=1;√表示給下標(biāo)為3元素賦值為1。4.一維數(shù)組在內(nèi)存中連續(xù)存放,先存放下標(biāo)為0元素,再存放下標(biāo)為1元素,依次直至存放完全部元素。11/95【例4.2】定義一個包含3個整型元素數(shù)組a,輸出其元素值。只定義數(shù)組,不給數(shù)組元素賦值,數(shù)組元素中存放是隨機值。普通要先給數(shù)組元素賦值,再使用。12/95數(shù)組名a中存放是數(shù)組起始元素地址13/95【例4.3】定義一個包含3個整型元素數(shù)組

a,從鍵盤給數(shù)組元素輸入值,然后輸出。14/95【例4.4】定義一個包含10個整型元素數(shù)組a,

從鍵盤給數(shù)組元素輸入值,然后輸出。15/954.1.3一維數(shù)組初始化定義一維數(shù)組同時給數(shù)組元素賦初值稱為一維數(shù)組初始化。其普通格式為:類型說明符

數(shù)組名[N]={初值1,初值2,……,初值N};其中,N是表示數(shù)組元素個數(shù)常量。16/95一維數(shù)組初始化方式有以下幾個:(1)全部元素初始化:chara[3]={‘1’,‘2’,’\n’};intb[5]={2,11,3,14,5};intb[]={2,11,3,14,5};intb[4]={2,11,3,14,5};在對數(shù)組全部元素賦初值時,能夠不指定數(shù)組長度。系統(tǒng)自動定義其長度為5初值個數(shù)不能超出數(shù)組長度。不然,會出現(xiàn)語法錯誤。17/95(2)全部元素初始化:

inta[10]={0,1,2};chara[10]={‘1’,‘2’};

(3)全部元素初始化為0:inta[10]={0};將a[0]~a[2]依次初始化為0、1、2。未賦值元素a[3]~a[9]值全部被初始化為int中表示假值0。將元素a[0]~a[9]全部初始化為0將a[0]~a[1]依次初始化為’0’、’1’。未賦值元素a[2]~a[9]值全部被初始化為char中表示假值’\0’。若想全部初始化為1inta[10]={1};錯誤18/95【例4.5】定義一個含有10個元素整型一維數(shù)組并全部初始化,將數(shù)組中全部元素逆序輸出。19/95【例4.6】

:用冒泡法對5個數(shù)排序。

解:冒泡排序過程如后面圖所表示,其中,紅圈以內(nèi)為已排好序統(tǒng)計。

規(guī)則:令相鄰位置數(shù)依次比較,若上面數(shù)大,則交換。20/9541413524>1交換4>3交換34<5不交換525>2交換11<3不交換343<4不交換24>2交換5132451<3不交換3>2交換123451<2不交換結(jié)果12345R[]第0趟第1趟

第2趟

第3趟第0次第1次第2次第3次for(i=0;i<4;i++)//外循環(huán)假如(R[j]值>R[j+1]值)則交換j增1

for(j=0;j<4?i;j++)//內(nèi)循環(huán)假如(R[j]值<R[j+1]值)則不交換j增1冒泡算法邏輯過程ij21/95R[2]R[1]

i=0,j=1;比較R[j]和R[j+1]大小

inttemp;

//定義新存放單元

假如(R[1]值>R[2]值)

{

tempR[1];

R[1]R[2];

R[2]temp;

}j增加1,比較R[j]和R[j+1]大小

假如(R[j]值<R[j+1]值)j增加1,比較R[j]和R[j+1]大小實現(xiàn)交換43交換R[1]R[2]43不交換4R[2]5R[3]2R[4]temp2.交換過程與核心程序43422/95

inti;

intj;

for(i=0;i<=3;i++)for(j=0;j<=3?i;j++)inttemp;if(R[j]大小>R[j+1]大小)tempR[j];R[j]R[j+1];R[j+1]temp;

3.循環(huán)與核心程序組合

inti,j;類型一樣,合并在一起外循環(huán),將處理5個數(shù)推廣處處理n個數(shù)

for(i=0;i<=n-2;i++)內(nèi)循環(huán)for(j=0;j<=n?i?2;j++)定義新存放空間,置前,預(yù)防重復(fù)定義inttemp;比較大小判斷是否滿足交換條件if(R[j]>R[j+1])滿足交換條件,則交換;在程序中將賦值箭頭轉(zhuǎn)換為賦值等號temp=R[j];R[j]=R[j+1];R[j+1]=temp;

{}標(biāo)出交換起始位置標(biāo)出內(nèi)循環(huán)起始位置{}標(biāo)出外循環(huán)起始位置{}23/954.冒泡算法整理inti,j;//定義int類型變量i,jinttemp;//定義新存放單元temp for(i=0;i<=n-2;i++)//外循環(huán)for1

{//外循環(huán)for1開始 for(j=0;j<=n-2-i;j++)//內(nèi)循環(huán)for2

{//內(nèi)循環(huán)for2開始if(R[j]>R[j+1])//比較數(shù)組R[]中相鄰元素值大小

{//開始交換 temp=R[j]; //先將R[j]中值賦給tempR[j]=R[j+1];//再將R[j+1]中值賦給R[j]

R[j+1]=temp;//最終又把temp中值賦給R[j+1]

}//結(jié)束交換

}//內(nèi)循環(huán)for2結(jié)束}//外循環(huán)for1結(jié)束//經(jīng)過n-1=4次循環(huán),完成排序功效24/955.冒泡算法真實程序25/9526/956.優(yōu)化推廣程序27/9528/95改進冒泡排序算法比如:待排序數(shù)組元素為:3,1,2,5,429/9531312453>1交換3>2交換22<4不交換4511<3不交換233<4不交換454<5不交換1<2不交換結(jié)果12345R[]i=0i=1j=0j=1j=2j=3排好設(shè)置一個標(biāo)識量,若某趟中一次交換也沒有進行,設(shè)置標(biāo)識量值,代表數(shù)據(jù)已完全排好,不需要進行后面排序。30/95【例4.7】改進冒泡排序算法。31/9532/95【例4.8】從鍵盤輸入10個學(xué)生成績,計算出

平均成績,并輸出高于平均分學(xué)生成績。33/9534/95【例】求fibonacci數(shù)列前20項,并輸出。fibonacci:1,1,2,3,5,8,13,21……

35/954.1一維數(shù)組4.2二維數(shù)組4.3字符數(shù)組36/95問題假如需要處理3名學(xué)生期末成績,每名學(xué)生有4門課程成績,用什么來存放這些數(shù)據(jù)?方法一:定義12個變量,每個變量存放1個學(xué)生1門課程成績。方法二:為3名學(xué)生各定義3個數(shù)組,每個數(shù)組能夠存放4門成績。方法三:用一個3行4列二維數(shù)組來存放。成績表數(shù)學(xué)英語計算機C語言學(xué)生1928996.580學(xué)生288.5679070學(xué)生37190886037/954.2.1二維數(shù)組定義1.格式:

類型說明符

數(shù)組名[常量表示式M][常量表示式N];例:float

a[3][4];0120123M和N只能是正整數(shù)38/95例:float

a[3][4]2.二維數(shù)組能夠看成是由一維數(shù)組組成39/953.二維數(shù)組在內(nèi)存中連續(xù)存放,先次序存放第一行元素,再存放第二行元素,依次直至存放完全部元素。40/954.2.2二維數(shù)組引用引用格式:數(shù)組名[行下標(biāo)][列下標(biāo)];例:int

a[2][3];a[0][0]、a[0][1]、a[0][2]a[1][0]、a[1][1]、a[1][2]1215365813常出現(xiàn)錯誤:下標(biāo)越界!a[2][3]=3;

/*應(yīng)為a[1][2]=3;*/41/954.2.3二維數(shù)組初始化1、分行賦初值:

例:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

12345678

91011122、全部數(shù)據(jù)寫在一個花括號內(nèi),按數(shù)組排列次序?qū)Ω髟刭x初值:例:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};賦初值時,數(shù)組行下標(biāo)能夠省略,比如:inta[][4]=...。42/953、對部分元素賦初值:(1)inta[3][4]={0,1,2};

0

1

2000000000

功效:僅對a[0][0]、a[0][1]、a[0][2]賦值,其余為0(2)inta[3][4]={{1},{5,6},{9}};

10

0

0

5

600

9000

功效:僅對a[0][0]、a[1][0]、a[1][1]、a[2][0]賦值,其余為043/95【例4.9】求一個3*4矩陣最大值及其所在

行列下標(biāo)。44/9545/95【例4.10】3名學(xué)生各有4門課程成績,計算每個學(xué)生平均成績。46/95【例4.11】打印輸出楊輝三角形(輸出前10行)47/9548/9549/95多維數(shù)組定義格式:

類型

數(shù)組名[常量表示式1][常量表示式2]…;例:int

a[3][3][3];注意:多維數(shù)組元素在內(nèi)存中排列次序是按行存放。引用格式:

數(shù)組名[下標(biāo)][下標(biāo)]…例:a[0][0][0]=100;a[0][1][2]=20;a[2][2][2]=50;一個n維數(shù)組能夠看成由多個n-1維數(shù)組組成。50/954.1一維數(shù)組4.2二維數(shù)組4.3字符數(shù)組51/95在程序中假如要存放姓名、地址等類型數(shù)據(jù),例如:“小明”、“成城市高新西區(qū)西園大道1號”等需要使用什么樣類型呢?這些是字符串,C語言中沒有專門字符串變量,假如要存放字符串,需要用到字符數(shù)組。字符數(shù)組是專門用來存放字符數(shù)據(jù)。字符數(shù)組中一個元素存放一個字符。52/954.3.1字符數(shù)組字符數(shù)組中能夠存放普通字符序列,也能夠存放字符串,二者依據(jù)字符數(shù)組末尾是否有字符串結(jié)束符‘\0’來區(qū)分。比如:53/95(1)charc[11]={“Iamhappy”};或charc[]={“Iamhappy”};(2)charc[11]=“Iamhappy”;或charc[]=“Iamhappy”;(3)charc[11]={‘I’,‘’,‘a(chǎn)’,‘m’,‘’,‘h’,‘a(chǎn)’,‘p’,‘p’,‘y’,‘\0’};或charc[]={‘I’,‘’,‘a(chǎn)’,‘m’,‘’,‘h’,‘a(chǎn)’,‘p’,‘p’,‘y’,‘\0’};(4)charc[11]={‘I’,‘’,‘a(chǎn)’,‘m’,‘’,‘h’,‘a(chǎn)’,‘p’,‘p’,‘y’};這四種方式,字符數(shù)組c存放是字符串54/95(5)charc[10]={‘I’,‘’,‘a(chǎn)’,‘m’,‘’,‘h’,‘a(chǎn)’,‘p’,‘p’,‘y’};或charc[]={‘I’,‘’,‘a(chǎn)’,‘m’,‘’,‘h’,‘a(chǎn)’,‘p’,‘p’,‘y’};這種方式,字符數(shù)組c存放是普通字符序列55/95若要重新給字符數(shù)組(字符串變量)賦值,使它改而存放別字符串,應(yīng)注意以下幾點:

(1)應(yīng)充分預(yù)計新字符串所需最大空間,不要出現(xiàn)越界情況。比如:charc[]=“fish”;數(shù)組c長度是5。若要將“chicken”賦給c,新字符串需要8個字節(jié)內(nèi)存空間,就會犯錯。為了預(yù)防這類錯誤發(fā)生,習(xí)慣上將字符數(shù)組長度設(shè)置大一些。比如:charc[20]=“fish”;56/95(2)不能使用賦值語句對字符串變量集體賦值,而應(yīng)該使用賦值語句為每個字符數(shù)組元素單獨賦值。比如:charc[]=“fish”;若要將數(shù)組c內(nèi)容修改為“cat”,直接寫為:c=“cat”;或者c[]=“cat”;都是錯誤。能夠?qū)中元素逐一重新賦值:c[0]=‘c’;c[1]=‘a(chǎn)’;c[2]=‘t’;c[3]=‘\0’;注意:不要省略給c[3]賦值為‘\0’,不然c中新字符串內(nèi)容為“cath”。57/954.3.2字符數(shù)組輸入輸出一、使用scanf函數(shù)輸入字符串到字符數(shù)組中。(1)以單個字符格式逐一輸入。

比如:charc[5];scanf(“%c%c%c%c%c”,&s[0],&s[1],&s[2],&s[3],&s[4]);數(shù)組元素跟普通變量一樣,前面要加取地址符58/95(2)以字符串格式輸入。

比如:charc[5];scanf(“%s”,c);說明:1.‘%s’是字符串格式字符,數(shù)組名代表數(shù)組起始地址,所以輸入表列中只需要給出數(shù)組名即可。若寫為&c,程序犯錯。2.輸入字符串時,空格或者回車鍵是輸入結(jié)束符,不能作為有效字符輸入。

59/95假如從鍵盤輸入cat↙或者cat□↙。數(shù)組c中存入cat后,C編譯系統(tǒng)會自動在后面補上一個‘\0’。3.輸入字符串長度應(yīng)該比字符數(shù)組長度短。比如:從鍵盤輸入catcat↙,數(shù)組c中存入catca,沒有‘\0’位置,輕易出現(xiàn)內(nèi)存錯誤。60/954.能夠用scanf輸入多個字符串,輸入時以空格鍵或回車鍵隔開。比如:charc1[5],c2[5],c3[5];scanf(“%s%s%s”,c1,c2,c3);從鍵盤輸入Cat□or□dog?↙61/95二、使用printf函數(shù)將字符數(shù)組中字符串輸出。(1)以單個字符格式逐一輸出。

比如:charc[5];printf(“%c%c%c%c%c”,c[0],c[1],c[2],c[3],c[4]);(2)以字符串格式輸出,將數(shù)組名寫在輸出表列中。

比如:charc[5];printf(“%s”,c);62/95注意:(1)若數(shù)組長度大于字符串實際長度,也只輸出到碰到‘\0’結(jié)束。比如:charc[10]={“China”};printf(“%s”,c);(2)假如一個字符數(shù)組中包含一個以上’\0’,則遇第一個‘\0’時輸出就結(jié)束。63/95【例4.12】刪除字符串中空格,并輸出。64/95三、使用scanf和printf為二維數(shù)組輸入輸出字符串二維數(shù)組可看作由一維數(shù)組組成。假如將一維字符數(shù)組看作是存放字符串變量,那么二維字符數(shù)組就可以看作是存放字符串一維字符串?dāng)?shù)組。比如:定義charc[3][5];相當(dāng)于定義了3個字符串變量。c[0]、c[1]、c[2]分別是3個字符串起始地址。能夠使用scanf和printf函數(shù)為其輸入、輸出字符串。65/95【例4.13】利用二維字符數(shù)組輸入、輸出字符串。66/95【例】輸出一個菱形圖。67/954.3.3字符串處理函數(shù)C語言提供了多個慣用字符串處理函數(shù)。字符串輸入函數(shù)、輸出函數(shù)、比較函數(shù)、連接函數(shù)及求字符串長度等函數(shù)。注意:字符串函數(shù)均在頭文件string.h中定義,要使用這些函數(shù),需將此文件包含進來。有編譯器會自動包含。68/951.字符串輸出函數(shù)puts格式:puts(字符串)

功能:將字符串結(jié)束符‘\0’轉(zhuǎn)換成‘\n’后輸出字符串。

比如:charc[6]=“China”;執(zhí)行函數(shù):puts(c);

等價于:printf("%s\n",c);

puts函數(shù)也能夠直接輸出字符串常量。比如:puts(“China”);69/952.字符串輸入函數(shù)gets格式:gets(字符數(shù)組)

功能:從鍵盤輸入一個字符串到字符數(shù)組中。比如:chars[10];執(zhí)行函數(shù):gets(s);從鍵盤輸入:China↙

將包含‘\0’在內(nèi)6個字符送到字符數(shù)組s中。70/95gets、puts與scanf、printf函數(shù)使用區(qū)分:(1)gets()、puts()函數(shù)一次只能輸入輸出一個字符串;scanf()、printf()則能夠輸入輸出多個字符串。

比如:chars1[10],s2[10];1.gets(s1);gets(s2);puts(s1);puts(s2);2.scanf(“%s%s”,s1,s2);printf(“%s\n%s\n”,s1,s2);

71/95(2)使用gets函數(shù)輸入字符串以回車符結(jié)束;而scanf函數(shù)以空格或回車符結(jié)束字符串輸入。比如:chars1[30],s2[30];從鍵盤輸入HELLOWORLD!↙,1.執(zhí)行g(shù)ets(s1);gets(s2);執(zhí)行結(jié)果:s1中存入字符串“HELLOWORLD!”,光標(biāo)等候用戶再次輸入字符串,從鍵盤輸入helloworld!↙s2中取得字符串“helloworld!”。72/95比如:chars1[30],s2[30];從鍵盤輸入HELLOWORLD!↙,2.執(zhí)行scanf(“%s%s”,s1,s2);執(zhí)行結(jié)果:s1中存入字符串“HELLO”,s2中存入字符串“WORLD!”。73/953.字符串連接函數(shù)strcat格式:strcat(字符數(shù)組1,字符數(shù)組2或字符串)功能:把字符數(shù)組2中字符串連接到字符數(shù)組1中字符串后面,結(jié)果放到字符數(shù)組1中。注意:1)數(shù)組1必須足夠大,以容納連接后新字符串。2)連接時串1后面‘\0’被覆蓋,只在新串后保留1個’\0’字符數(shù)組2可為字符串常量,1呢?74/95比如:chars[10]=“te”;strcat(s,“st!”);執(zhí)行過程中數(shù)組s存放情況:75/95【例4.14】使用strcat函數(shù)實現(xiàn)兩個字符串連

接功效。76/95【例4.15】不使用strcat函數(shù)實現(xiàn)兩個字符串連接功效。77/954.字符串復(fù)制函數(shù)strcpy格式:strcpy(字符數(shù)組1,字符數(shù)組2或字符串)

功能:將字符串2復(fù)制到字符數(shù)組1中,該字符數(shù)組1中原有內(nèi)容被覆蓋。說明:(1)字符數(shù)組1必須足夠大,能容納復(fù)制過來字符串(2)復(fù)制時連同‘\0’一起復(fù)制到字符數(shù)組1中。78/95(3)不能用賦值語句將一個字符串常量或字符數(shù)組直接賦給一個字符數(shù)組。比如:charstr1[30]=“China”,str2[30];str2=str1;(4)能夠用strncpy函數(shù)將字符串2中前n個字符復(fù)制到字符數(shù)組中。字符數(shù)組其它位置元素不發(fā)生變換。比如:charstr1[30]="Chengdu";charstr2[30]="Beijing";strncpy(str1,str2,2);執(zhí)行結(jié)果:str1為Beengdu。79/95【例4.16】使用strcpy函數(shù)實現(xiàn)字符串拷貝。80/95【例4.17】不使用strcpy函數(shù)實現(xiàn)字符串拷貝。81/955.字符串比較函數(shù)strcmp格式:strcmp(字符串1,字符串2)功能:比較“字符串1”和“字符串2”。比較規(guī)則:自左至右逐一字符比較ASCII碼,直到遇到不一樣字符或‘\0’,比較結(jié)果由函數(shù)值帶回。

①字符串1<字符串2,函數(shù)返回負(fù)整數(shù),-1②字符串1==字符串2,函數(shù)返回0③字符串1>字符串2,函數(shù)返回正整數(shù),1比如: strcmp(“a”,“b”);函數(shù)返回-1即:“a”<“b” strcmp(“china”,“china”);函數(shù)返回為0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論