《C語言程序設(shè)計(jì)》教案第四章數(shù)組—字符數(shù)組和字符串_第1頁
《C語言程序設(shè)計(jì)》教案第四章數(shù)組—字符數(shù)組和字符串_第2頁
《C語言程序設(shè)計(jì)》教案第四章數(shù)組—字符數(shù)組和字符串_第3頁
《C語言程序設(shè)計(jì)》教案第四章數(shù)組—字符數(shù)組和字符串_第4頁
《C語言程序設(shè)計(jì)》教案第四章數(shù)組—字符數(shù)組和字符串_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、授課題目學(xué)習(xí)必備歡迎下載C語言程序設(shè)計(jì)課程教案表課時(shí)安排2第四章數(shù)組(3)字符數(shù)組和字符串授課時(shí)間教學(xué)目的和要求1掌握:幾種常用的字符串處理函數(shù)2熟悉:指針與數(shù)組。教學(xué)內(nèi)容1基本內(nèi)容:(1)幾種常用的字符串處理函數(shù)(2)指針與數(shù)組。2重點(diǎn):幾種常用的字符串處理函數(shù)3難點(diǎn):指針與數(shù)組講課進(jìn)程和時(shí)間分配1、復(fù)習(xí)與新知識(shí)導(dǎo)入(5分鐘)2、字符串處理函數(shù)(45分鐘)C語言編譯系統(tǒng)中,提供了很多有關(guān)字符串處理的庫函數(shù)。下面介紹幾個(gè)常用的字符串處理函數(shù)。使用輸入、輸出字符和字符串函數(shù)時(shí),應(yīng)在函數(shù)前加上頭文件“stdio.h”;使用其他字符串操作函數(shù)時(shí),則應(yīng)加上頭文件“string.h”。板書:#inclu

2、de#include(1)字符串輸出函數(shù)格式:puts(字符串)功能:將一個(gè)字符串(以0為結(jié)束標(biāo)志)輸出到終端。輸出的字符串中可以包含轉(zhuǎn)義字符。例如:charstr=“ChinanBeijing”;puts(str);輸出:ChinaBeijing在輸出時(shí)將字符串結(jié)束標(biāo)志0轉(zhuǎn)換成n,即輸出完字符串后換行。板書:puts(str);與printf(”%sn”,str)等價(jià)或puts(“OK!”);與printf(“%sn”,”O(jiān)K!”)或printf(“OK!n”)等價(jià)(2)字符串輸入函數(shù)格式:gets(字符數(shù)組);功能:從終端輸入一個(gè)字符串(可包含空格)以回車為輸入結(jié)束標(biāo)志,將接受到的字符依次

3、賦值給字符數(shù)組各個(gè)元素,并自動(dòng)在字符串末尾加結(jié)束標(biāo)記0。例如:gets(str);注意:用puts和gets函數(shù)只能輸入或輸出一個(gè)字符串,不能寫成:puts(str1,str2)或:gets(str1,str2);說明:字符串可以是字符數(shù)組或字符串常量。而scanf()是以回車、空格或tab鍵做分隔符的。例:voidmain()chars100;printf(“請(qǐng)輸入一個(gè)字符串:”);gets(s);printf(“輸入的字符串是:”);puts(s);紅色改為puts(gets(s),不影響程序運(yùn)行結(jié)果。(3)連接兩個(gè)字符串函數(shù)學(xué)習(xí)必備歡迎下載格式:strcat(字符串1,字符串2)功能:連

4、接兩個(gè)字符串中的字符,把字符串2的字符連接到字符串1的字符后面,結(jié)果放在字符串1中,函數(shù)調(diào)用后得到一個(gè)函數(shù)值字符串1的起始地址。例如:charstr130=“peoplesrepublicof”;charstr2=“china”;printf(“%s”,strcat(str1,str2);輸出:peoplesrepublicofchina說明:1)字符串1必須足夠大,以便能容納連接后的新字符串。2)連接前兩個(gè)字符串后面都有一個(gè)0,連接時(shí)將字符串1后面的0取消,只在新串的最后保留一個(gè)0。思考:以下程序是正確的charc;c=A+B;那么,下面的程序呢?charc10;c=”A”+”B”;是不正確

5、的,必須用strcat()函數(shù)來連接。(4)字符串拷貝函數(shù)strcpy格式:strcpy(字符數(shù)組,字符串)功能:將字符串拷貝到字符數(shù)組中去。例如:charstr110,str2=“china”;strcpy(str1,str2);/*或strcpy(str1,“china”);*/執(zhí)行后str1的內(nèi)容為:china00000說明:1)字符數(shù)組必須足夠大,以便能容納被拷貝的字符串。2)拷貝時(shí)連同字符串后面的0一起拷貝到字符數(shù)組中。3)不能用賦值語句將一個(gè)字符串常量或字符數(shù)組直接賦給一個(gè)字符數(shù)組。下面的用法是錯(cuò)誤的:str1=“china”;str1=str2;而只能用拷貝函數(shù)strcpy處理。

6、用賦值語句只能將一個(gè)字符賦給一個(gè)字符型變量或字符數(shù)組元素。如下面是合法的:chara5,c1,c2;c1=A;c2=B;a0=c;a1=h;a2=i;a3=n;a4=a;4)可以用strcpy函數(shù)將字符串中前面若干個(gè)字符拷貝到字符數(shù)組中去。例如:strcpy(str1,str2,2);將str2中前面2個(gè)字符拷貝到str1中去,然后再加一個(gè)0。(5)字符串比較函數(shù)格式:strcmp(字符串1,字符串2)功能:比較字符串1和字符串2的大小。說明:按照ASCII碼值大小比較,將兩個(gè)字符串自左至右逐個(gè)字符比較,直到出現(xiàn)不同的字符或遇到0為止。如果全部字符相同,則認(rèn)為相等;如果出現(xiàn)不相同的字符,則以第

7、一個(gè)不相同字符的比較結(jié)果為準(zhǔn)。1.字符串1=字符串2,函數(shù)值=0;2.字符串1字符串2,函數(shù)值0;3.字符串1字符串2,函數(shù)值str2只能用strcmp(str1,str2)0或=0或0來判斷(6)測(cè)試字符串長(zhǎng)度函數(shù)學(xué)習(xí)必備歡迎下載格式:strlen(字符數(shù)組)功能:測(cè)試字符串長(zhǎng)度,函數(shù)值為字符串中實(shí)際長(zhǎng)度,不包括0。例如:charstr10=“china”;printf(“%d”,strlen(str);結(jié)果為:5(7)字符串小寫函數(shù)格式:strlwr(字符串)功能:將字符串中大寫字母轉(zhuǎn)換成小寫字母。lwr是lowercase(小寫)的縮寫。(8)字符串大寫函數(shù)格式:strupr(字符串)功

8、能:將字符串中小寫字母轉(zhuǎn)換成大寫字母。upr是uppercase(大寫)的縮寫。(9)字符數(shù)組程序舉例1)輸入一個(gè)字符串,將其中的大寫字母均變成小寫字母。#include#includemain()chars40,c;inti=0;printf(“輸入一個(gè)字串:”)gets(s);strlwr(s);printf(“輸出轉(zhuǎn)換后的字串:”)puts(s);2)從字符串中取出指定長(zhǎng)度的子串。#includemain()chars140,s240;inti=0,m;printf(“n輸入要截取子串的母串:”)gets(s2);printf(“n輸入要截取子串的長(zhǎng)度:”)scanf(“%d”,&m);

9、while(im)s1i=s2i;i+;s1i=0;printf(“n輸出所截取的子串:%s”,s1);3)某單位的工作證號(hào)碼的最后一位是用來表示性別的,如:M表示男,F(xiàn)表示女。今輸入5個(gè)人的工作證號(hào)碼,請(qǐng)統(tǒng)計(jì)出其中的男女人數(shù)。#include#include學(xué)習(xí)必備歡迎下載main()inta=0,b=0,i,n;charc,s510;printf(“輸入5個(gè)人的工作證號(hào)碼:n”);for(i=0;i5;i+)scanf(“%s”,si);n=strlen(si);c=sin-1;if(c=m|c=M)a+;elseb+;printf(“男生數(shù)為%dn女生數(shù)為%dn”,a,b);4)有三個(gè)字

10、符串,要求找出其中最大者分析:有一個(gè)二維的字符數(shù)組str320,大小為320。即有3行20列,每一行可以容納20個(gè)字符。str0:China0str1:Japan0str2:India0可以把str0,str1,str2看做三個(gè)一維字符數(shù)組,它們各有20個(gè)元素。把它們?nèi)缤痪S數(shù)組那樣進(jìn)行處理。可以用gets函數(shù)分別讀入三個(gè)字符串。經(jīng)過二次比較,就可得到值最大者,把它放在一維字符數(shù)組string中。#include#includemain()charstring20,str320;inti;for(i=0;i0)/*用字符串比較函數(shù)*/strcpy(string,str0);elsestrcpy

11、(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);printf(“nthelargeststringis:%sn”,string);3、指針與數(shù)組(35分鐘)在C語言中,指針和數(shù)組的關(guān)系非常密切,引用數(shù)組元素既可以通過下標(biāo),也可以通學(xué)習(xí)必備歡迎下載過指針來進(jìn)行。正確地使用數(shù)組的指針來處理數(shù)組元素,能夠產(chǎn)生高質(zhì)量的目標(biāo)代碼。(1)數(shù)組的指針和指向數(shù)組的指針變量1)指向一維數(shù)組的指針C語言中,數(shù)組名代表該數(shù)組的首地址,即數(shù)組中第一個(gè)元素的地址。將一維數(shù)組的名字或某個(gè)數(shù)組元素的地址賦給指針變量,指針變量即指向該一維數(shù)組或數(shù)組元素。例如

12、:inta10,*p;p=a;/*把數(shù)組的起始地址賦給指針變量p*/p=&a0;把a(bǔ)0元素的地址賦給指針變量p。因?yàn)閍0是數(shù)組第1個(gè)元素,指向數(shù)組的指針示意圖如圖6-6所示。在定義指針變量時(shí)也可以賦初值,如:inta10;int*p=&a0;或:int*p=a;(2)通過指針引用一維數(shù)組;我們知道,p=a;和p=&a0是等價(jià)的,它們都是把數(shù)組a的起始地址賦給指針變量p。同理:p=a+i;和p=&ai;也是等價(jià)的。是把數(shù)組a中第i個(gè)元素ai的地址賦給指針變量p。設(shè)有以下語句:inta10,*p;p=a;把p置為指向數(shù)組a的第1個(gè)元素,即p包含了a0的地址。*p為a0的值。如果指針p+1,則指向a

13、的下一個(gè)元素,如圖6-7所示。圖6-7指針引用一維數(shù)組元素根據(jù)以上所述,引用一維數(shù)組元素,可以用兩種方法:下標(biāo)法,如ai或pi形式;指針法,如*(a+i)或*(p+i)。所以有:(1)p+i和a+i就是ai的地址,或者說,它們指向a數(shù)組的第i個(gè)元素(2)*(p+i)或*(a+i)就是p+i或a+i所指向的數(shù)組元素,即ai。例如:學(xué)習(xí)必備歡迎下載*(p+5)或*(a+5)就是a5。3)指向數(shù)組的指針變量也可以帶下標(biāo),如pi與*(p+i)等價(jià)。例:用三種方法輸出a數(shù)組的10個(gè)元素的值。方法一:用下標(biāo)法main()inta10=1,2,3,4,5,6,7,8,9,10;inti;for(i=0;i1

14、0;i+)printf(%d,ai);運(yùn)行結(jié)果:12345678910方法二:用數(shù)組名main()inta10=1,2,3,4,5,6,7,8,9,10;inti;for(i=0;i10;i+)printf(%d,*(a+i);運(yùn)行結(jié)果:12345678910方法三:用指針法main()inta10;inti,*p;for(i=0;i10;i+)scanf(%d,&ai);for(p=a;p(a+10);p+)printf(%d,*p);運(yùn)行結(jié)果:12345678910三種方法比較:以上方法(1)與(2)相同。因?yàn)橄到y(tǒng)把a(bǔ)i按*(a+i)處理的,需要計(jì)算元素的地址,然后再取數(shù)據(jù)。方法(3)是直

15、接從地址中取數(shù)據(jù),不需計(jì)算,所以速度快。但方法(1)比較直觀。(在數(shù)組中使用指針應(yīng)注意以下幾點(diǎn):(1)可以p+,不能a+,因?yàn)閿?shù)組名a是一個(gè)不可以改變值的地址常量。2)要注意指針變量的當(dāng)前值。3)在定義數(shù)組時(shí),若用指針變量,可以不指定數(shù)組的長(zhǎng)度。int*p,a;p=a;用指針變量來讀取數(shù)組元素,需要注意指針的+與-運(yùn)算,例:若inta10,*p;p=a;則:1)p+(或p+=1)操作指針p指向下一元素,即a1;若再執(zhí)行*p,則取數(shù)組元素a1的值。學(xué)習(xí)必備歡迎下載2)*p+;等價(jià)于*(p+)由于+和*同優(yōu)先級(jí),自右向左結(jié)合,則實(shí)現(xiàn)的功能是先得到p所指向的數(shù)組元素值(即*p),然后再執(zhí)行p+操作。

16、3)*(p+)與*(+p)作用不同。前者是先取*p值,后使p加1;后者是先使p加1,再取*p。例如:main()inta10=0,1,2,3,*p=a;printf(“n%d”,*(p+);p=a;/*使指針回到數(shù)組起始地址*/printf(“,%d”,*(+p);結(jié)果為:0,14)(*p)+表示p所指向的元素值加1,而不是指針值加1。例如:main()inta10=1,3,5,7,*p=a;printf(“n%d”,(*p)+);結(jié)果為:2例:分別用下標(biāo)法和指針法輸出數(shù)組元素。main()inti,*p,a10;p=a;for(i=0;i10;i+)ai=i+10;printf(“n”);f

17、or(i=0;i8;i+)printf(“a%d=%d”,i,ai);printf(“p%d=%d”,i,pi);printf(“*(a+%d)=%d”,i,*(a+i);printf(“*(p+%d)=%dn”,i,*(p+i);(3)指向二維數(shù)組元素的指針指向二維數(shù)組元素的指針可以采用兩種定義形式。1)用普通指針變量指向數(shù)組元素例如:inta23,*p;p=a;p是一個(gè)指向整型數(shù)組元素的指針變量,每次使p值加1,指針移動(dòng)到下一個(gè)元素。2)用行指針變量學(xué)習(xí)必備歡迎下載二維數(shù)組可以看成是由多個(gè)一維數(shù)組構(gòu)成,即每行是一個(gè)一維數(shù)組,則行指針變量是指向一行數(shù)組元素的起始地址。格式:類型(*變量名)常

18、量表達(dá)式;例如:inta45,(*p)5;p=a;p表示是一個(gè)指向一維數(shù)組(5個(gè)元素)的指針變量,p+表示指向下一行的起始地址,即指針變量p的增值為行元素的長(zhǎng)度。p與各行之間的關(guān)系如圖6-8所示。數(shù)組名指針各行首地址二維數(shù)組元素apa0a00a01a02a03a04P+1a1P+2a2P+3a3a10a11a12a13a14a20a21a22a23a24a30a31a32a33a34由圖6-8可知,行指針p的基類型是指向一個(gè)包含有5個(gè)整型數(shù)組元素的一維數(shù)組,它加減一個(gè)單位,相當(dāng)于指針移動(dòng)5個(gè)整型數(shù)組元素,即p+與p-是向上或向下移動(dòng)一行。二維數(shù)組a可以看成由四個(gè)一維數(shù)組組成,a0、a1、a2、

19、a3為各行首地址,對(duì)應(yīng)關(guān)系如圖6-8所示。P為指向第一行a0,p+1為第二行a1,。從上面的圖中也可以看出,a指向a0,即第一行的首地址;a+1移動(dòng)到第2行的首地址,依次類推。又因?yàn)閍0指向二維數(shù)組元素第1行的第1個(gè)元素,即a00,則a0+1指向數(shù)組元素a01,a0+2指向數(shù)組元素a02,依此類推,由各行的首地址加上某一個(gè)值,可以通過它們?cè)L問該行后面的其他數(shù)組元素。通過各行指針引用數(shù)組元素:*(*(p+i)+j)或:*(ai+j)注:P為行指針,*(p+i)為i行地址,*(p+i)+j為aij的地址,*(*(p+i)+j)為數(shù)組元素aij。同樣:ai是第i行的指針,ai+j是aij的地址,*(

20、ai+j)等價(jià)于二維數(shù)組元素aij。(4)指針引用二維數(shù)組元素1)用普通指針變量引用數(shù)組元素。例用指針變量輸出數(shù)組元素的值。#include“stdio.h”main()inta=1,3,4,5,6,7,8,9,10,11,12;int*p;for(p=a;pa+12;p+)printf(“%3d”,*p);運(yùn)行:123456789101112上例用移動(dòng)指針p,把二維數(shù)組元素全部輸出。2)用行指針引用數(shù)組元素例輸出二維數(shù)組中任一元素的值。學(xué)習(xí)必備歡迎下載main()inta=1,3,4,5,6,7,8,9,10,11,12;int(*p)4,i,j;p=a;scanf(“%d,%d”,&i,&j);printf(“a%d,%d=%dn”,i,j,*(*(p+i)+j);運(yùn)行:2,3A2,3=12例打印指定的數(shù)組元素main()inta23=0,1,2,3,4,5,(*p)3;p=a;printf(“n%d,%d,%d”,*(a0+3),*(a1+0),*(*(a+1)+0);printf(“n%d,%d,%d”,*(p0+3),*(p1+0),*(*(p+1)+0);結(jié)果為:3,3,33,3,3其中*(a0+3),*(a1+0),*(*(a+1)+0)和*(p0+3),*(p1+0),*(*(p+1)+0),皆是數(shù)組元素a10指針引用的不同表示形式。(5)字符串的指針和指向

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論