版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)組的基本概念一維數(shù)組二維數(shù)組字符數(shù)組數(shù)組的應(yīng)用舉例,第七章 數(shù) 組,一、概述,C數(shù)據(jù)類(lèi)型: ·基本類(lèi)(簡(jiǎn)單類(lèi))——字符型/整型/實(shí)型 ·構(gòu)造類(lèi)(組合類(lèi))——數(shù)組/結(jié)構(gòu)體/共用體,對(duì)于變量,基本類(lèi)型——單個(gè)出現(xiàn)的變量,每個(gè)變量可以代表一個(gè)確定的數(shù)據(jù)(變量值),且具有一定屬性。如 int x,y;但變量間不存在確定的相互關(guān)系。,數(shù)組的概念引入,用基本數(shù)據(jù)類(lèi)型可以解決所有問(wèn)題嗎?例如:對(duì)某班學(xué)生
2、的成績(jī)按由高到底的次序進(jìn)行排序。 3 名?,30 名?,數(shù)組:一種常用的構(gòu)造型數(shù)據(jù)類(lèi)型。 由具有固定數(shù)目 相同類(lèi)型 的元素按一定順序排列。,數(shù)組的基本概念,特點(diǎn):1、數(shù)組元素的個(gè)數(shù)是確定,不可改變,元素值可變,2、數(shù)組元素的類(lèi)型必須相同,不允許混合。,1、一維數(shù)組的定義和使用,例如: int a[10],定義 類(lèi)
3、型說(shuō)明符 數(shù)組名[ 常量表達(dá)式 ];,10個(gè)元素: a[0]、a[1]、a[2]...a[9],,,,,整型數(shù)組 a,,特別申明:不可對(duì)數(shù)組的大小作動(dòng)態(tài)定義,判斷,錯(cuò)誤: 正確: int n=5; #define N 5 int a[n]; int a[N];正確:
4、int a[10], b[5][4]; char name[8], ch[2][3]; float x[8*2+1], table[2][3][4]; #define NUM 40; int a[NUM], b[NUM+2];,7.1.2 一維數(shù)組元素的引用,1、先定義,后使用。,3、只能逐個(gè)引用數(shù)組元素,而不能一次引用整個(gè)數(shù)組,2、引用方式: 數(shù)組名 [下標(biāo)] 。,例:int a[9];
5、 char c[4]; float f[10];,a[0]=1; c[3]=‘b’; f[5]=1.23,a[8]=a[5]+a[7]-a[2*3],4、引用數(shù)組元素要注意下標(biāo)不要出界(編譯程序不檢查是否“出界”),示例,引用示例:,a[2][3] a[2-1][2*3-1] a[x] (x為整型表達(dá)式) 錯(cuò)誤: a[2,3],比較:,錯(cuò)誤
6、 正確 int n; int a[5]; scanf(“%d”,&n); for (i=0;i<5;i++) int a[n]; printf(“%d\n”,a[i
7、]);定義時(shí)不可用變量作下標(biāo) 引用時(shí)可以用整型變量及表達(dá)式 作下標(biāo),,三、數(shù)組的存儲(chǔ)結(jié)構(gòu),·根據(jù)數(shù)組的數(shù)據(jù)類(lèi)型,為每一元素安排相同長(zhǎng)度的存儲(chǔ)單元,·根據(jù)數(shù)組的存儲(chǔ)屬性,確定將其安排在內(nèi)存動(dòng)態(tài)、靜態(tài)存儲(chǔ)區(qū)或寄存器區(qū),說(shuō)明:數(shù)組元素在內(nèi)存中順次存放,它們的地址是連續(xù)的。,數(shù)組名字是一個(gè)常量,存放數(shù)組第一個(gè)元素的內(nèi)存地址。
8、,定義時(shí)賦值,一維數(shù)組的初始化,1、對(duì)數(shù)組的全部元素賦初值。 int a[3]={3,6,9}; a[0]=3; a[1]=6; a[2]=9; 2、對(duì)數(shù)組的部分元素賦初值。 int a[4]={3,6,9} ; a[0]=3; a[1]=6; a[2]=9; a[3]=0; 3、對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。但若提供 初值的個(gè)數(shù)與定義的數(shù)組長(zhǎng)度不一樣,則數(shù)組長(zhǎng)度不能省略。 int
9、a[]={3,6,9}; int a[3]; a[0]=3; a[1]=6; a[2]=9;,對(duì)數(shù)組的元素賦初值。方式:賦值語(yǔ)句、輸入語(yǔ)句,a[0]=12;scanf(“ %d ”,&a[1]);,注意:不能給數(shù)組整體賦初值,數(shù)組名不可被賦值。,通常數(shù)組的輸入與輸出,輸入:int i,a[10];for(i=0;i<10;i++){ scanf(“%d”,&a[i]);},輸出:fo
10、r(i=0;i<10;i++){ printf(“%d”,a[i]);},main( ) { static int a[10]={1,3,4,8,5,7,12,9,5,23}; int i,total=0; printf(“Total of array element values is % d\n”, total);},執(zhí)行結(jié)果 Tot
11、al of array element values is 77,7.1.4 一維數(shù)組程序應(yīng)用舉例,for (i=0;i<=10-1;i++) total+=a[i];,例 計(jì)算數(shù)組元素之和,例: 輸入10個(gè)數(shù)據(jù),求和并求最大值。 main( ) { int m; float a[10],total=0.0 , max=0.0; for (m=0; m<10 m++)
12、 /*輸入數(shù)據(jù)*/ scanf(“%f”,&a[m]); printf(“\n”);,for (i=0; imax) max=a[i];} /*求最大值*/,printf(“Total of array element values is %3.2f, %7.3f\n”,total,max);},例 7.2 用數(shù)組計(jì)算Fibonacci數(shù)列
13、的前20項(xiàng) (p133) main( ) { int i=0; int f[20]={1,1}; /*僅對(duì)f [0],f [1]賦確定值,其他元素自動(dòng)賦0*/ for (i=2; i<20; i++) /*求值*/ f [i] =f [i-2]+f [i-1];,i=2 f [2]=f [0]+f [1]i=3 f
14、[3]=f [1]+f [2]i=4 f [4]=f [2]+f [3] ……,,for (i=0; i<20; i++) /*輸出 */ { if (i%5=0) printf(“\n”); /*每行輸出5個(gè)數(shù)據(jù)*/ printf(“%12d”,f [i]); } },用數(shù)組計(jì)算Fibonacci數(shù)列的前20項(xiàng)程序執(zhí)行
15、結(jié)果 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,第 2 遍 a[0]~a[1] ,a[1]~a[2] …
16、 a[n-3]~a[n-2] 最終a[n-2]為次大數(shù),冒泡法(起泡法/氣泡法)有n個(gè)雜亂無(wú)序的數(shù),要求將這n個(gè)數(shù)從小到大(或從大到?。┡判蚝筝敵觥O噜弮稍乇容^ a[i]~a[i+1]第 1 遍 a[0]~a[1]比較, a[1]存放大的數(shù)。 a[1]~a[2]比較, a
17、[2]存放大的數(shù)。 a[2]~a[3] ,a[3]~a[4] …… a[n-2]~a[n-1]比較, 最終a[n-1]為最大數(shù),比較n-1次,比較n-2次,,,… 結(jié)論: n 個(gè)數(shù)排序, 要進(jìn)行 n-1 遍循環(huán),這種排序方法之所以叫“冒泡法”,是因?yàn)樵谂判蜻^(guò)程中,較小的數(shù)象氣泡一樣逐漸往前冒(向上冒),大的數(shù)逐漸向后沉,最終完成排序。,起泡排序
18、,對(duì)具有n個(gè)元素的序列按升序進(jìn)行起泡排序的步驟:首先將第一個(gè)元素與第二個(gè)元素進(jìn)行比較,若為逆序,則將兩元素交換。然后比較第二、第三個(gè)元素,依次類(lèi)推,直到第n-1和第n個(gè)元素進(jìn)行了比較和交換。此過(guò)程稱(chēng)為第一趟起泡排序。經(jīng)過(guò)第一趟,最大的元素便被交換到第n個(gè)位置。對(duì)前n-1個(gè)元素進(jìn)行第二趟起泡排序,將其中最大元素交換到第n-1個(gè)位置。如此繼續(xù),直到某一趟排序未發(fā)生任何交換時(shí),排序完畢。對(duì)n個(gè)元素的序列,起泡排序最多需要進(jìn)行n-1趟。
19、,起泡排序舉例:,對(duì)整數(shù)序列 8 5 2 4 3 按升序排序,85243,5,2,4,3,8,2,4,3,5,8,2,3,4,5,8,2,3,4,5,8,,初始狀態(tài),第一趟結(jié)果,第二趟結(jié)果,第三趟結(jié)果,第四趟結(jié)果,小的逐漸上升,,,,,,每趟沉下一個(gè)最大的,流程圖如下,程序如下:,#define N 10 main(){ int i, j, t, a[N+1]; for (i=1; i a[j+1])
20、{ t = a[j]; a[j] = a[j+1]; a[j+1] = t; } for (i=1; i<=N; i++) printf(" %d ",a[i]);},定義 類(lèi)型說(shuō)明符 數(shù)組名[ 常量表達(dá)式 ] [ 常量表達(dá)式 ] ;,列,,,行,,,2、二維數(shù)組的定義和使用,例 float a[3][4]; a
21、 為 3 行,4列有12個(gè)元素的數(shù)組。 可理解為: float a[0][4],a[1][4],a[2][4];,一維數(shù)組,,,,引用 數(shù)組名 [下標(biāo)] [下標(biāo)] float a[3][4],b[3][5]; 例 : b[1][2]=a[2][3]/3;,int M=a[2][4],多維數(shù)組—第一維下標(biāo)變化最慢,最右邊的下標(biāo)變化最快 定義
22、 float a[2][3][4]; 存儲(chǔ)順序 a000 a001 a002 a003 a010 …a013 a020 …a023 a100 …a103 a110 …a113 a120 …a123,按行存放,地址是連續(xù)的。 例: float a[3][4]; 數(shù)組的存儲(chǔ)順
23、序?yàn)椋?a,二維數(shù)組存儲(chǔ)順序,存放數(shù)組第一個(gè)元素的內(nèi)存地址,1、對(duì)數(shù)組的全部元素賦初值,分行賦初值; static int stud[3][2]={{1,2},{3,4},{5,6}};,存儲(chǔ)時(shí)的排列順序 static int stud[3][2]={1,2,3,4,5,6};,省略第一維長(zhǎng)度的說(shuō)明--對(duì)全部元素賦初值 static int stud[ ][2]={
24、1,2,3,4,5,6};,語(yǔ)句執(zhí)行后:stud[0][0]=1, stud[0][1]=2,stud[1][0]=3, stud[1][1]=4, stud[2][0]=5, stud[2][1]=6,,7.23 二維數(shù)組的初始化,2、對(duì)數(shù)組的部分元素賦初值,省略某些元素 int stud [3][2]={{1},{2,3},{4}};,省略第一維長(zhǎng)度的說(shuō)明(應(yīng)分行賦初值) int stud [ ][2]={{
25、1,0},{2,3},{}};,語(yǔ)句執(zhí)行后: stud[0][0]=1, stud[0][1]=0, stud[1][0]=2, stud[1][1]=3, stud[2][0]=4, stud[2][1]=0,,語(yǔ)句執(zhí)行后: stud[0][0]=1, stud[0][1]=0, stud[1
26、][0]=2, stud[1][1]=3, stud[2][0]=0, stud[2][1]=0,,例7.2.4 (p138) 將一個(gè)二維數(shù)組行和列元素互換,存到另一個(gè)二維數(shù)組中,a[0][0]~ b[0][0], a[0][1]~ b[1][0], a[0][2]~ b[2][0] 規(guī)律: a[i][j] ~ b[j][i],main()
27、 程序 { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; for(i=0;i<=1;i++) { for(j=0;j<=2;j++) b[j][i]=a[i][j]; /*行、列互換*/ }
28、 },prints(“array a:\n”);for(i=0;i<=1;i++) /* 按行、列打印a 數(shù)組*/{ for(j=0;j<=2;j++) printf(“%5d”,a[i][j]); printf(“\n”);}printf(“array b:\n”);for(i=0;i<=2;i++){ for(j=0;j<=1;j+
29、+) /* 按行、列打印b數(shù)組*/ printf(“%5d”,b[i][j]); printf(“\n”);},運(yùn)行結(jié)果: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6,應(yīng)用舉例-6,題目:從一個(gè)三行四
30、列的整型二維數(shù)組中查找第一個(gè)出現(xiàn)的負(fù)數(shù)。分析算法要點(diǎn)用兩層嵌套的 for 循環(huán)來(lái)遍歷數(shù)組元素,判斷是否為負(fù)數(shù)。當(dāng)找到第一個(gè)負(fù)數(shù)時(shí)就應(yīng)該退出循環(huán),為此,應(yīng)定義一個(gè)標(biāo)記變量,用于標(biāo)記找到與否的狀態(tài),并將此標(biāo)記加入循環(huán)控制條件中,以控制循環(huán)在適當(dāng)時(shí)候退出。,main(){ int i,j,found,num[3][4]; printf("Enter 12 integers:\n"); for
31、(i=0;i<3;i++) for(j=0;j<4;j++)scanf("%d",&num[i][j]); found=0; for(i=0;i<3 && !found;i++) for(j=0;j<4 && !found;j++)if(num[i][j]<0) found=1; if(!
32、found) printf("not found\n"); else printf("minus number num[%d][%d]:%d\n", i-1,j-1,num[i-1][j-1]);},運(yùn)行結(jié)果:Enter 12 integers:3 5 56 1 45 -6 43 -1 1 4 -8 15minus
33、 number num[1][1]:-6,【完善程序】下列程序的功能是顯示如下圖形:,1 0 0 0 0 2 1 0 0 0 3 2 1 0 0 4 3 2 1 0 5 4 3 2 1,【分析】這類(lèi)題的元素值排列很有規(guī)律,所以一般要從分析行數(shù)i、列數(shù)j與元素值的關(guān)系著手。分析上圖可知,當(dāng)i=j時(shí),元素值隨行數(shù)i增加而增加,隨列數(shù)j增加而減小,這樣就很
34、容易得出其元素值與i,j的關(guān)系是i+1-j。,main(){int a[5][5],i,j; clrscr(); for (i=0;i<5;i++) {for (j=0;j<5;j++) { if ( 【6】 ) a[i][j]=0; else a[i][j]=【7】; printf("%3d",a[i][j]); } printf("\n");
35、}},a[5][5]分析:a00 a01 a02 a03 a04a10 a11 a12 a13 a14a20 a21 a22 a23 a24a30 a31 a32 a33 a34a40 a41 a42 a43 a44,答案:【6】i<j 【7】i+1-j,【字符數(shù)組】存放字符(每個(gè)數(shù)組元素存放一個(gè)字符) 1、字符數(shù)組的定義,如: char a[10]; int
36、a[10]; char a[2][3]; 字符數(shù)組——各個(gè)元素分別存放一個(gè)字符的數(shù)組。字符串—— “……” (字符串常量)以“\0”結(jié)尾,【注意】字符數(shù)組與字符串的區(qū)別:字符串存放在字符數(shù)組中,但字符數(shù)組與字符串可以不等長(zhǎng);字符串以“\0”結(jié)尾。即:C語(yǔ)言中無(wú)字符串變量,但可用一個(gè)字符數(shù)組存放字符串;反之,存放在字符數(shù)組中的并非都是字符串。,7.3、字符數(shù)組,【‘\0’】 ‘\0’是指ASCII代碼為0的字符。它既
37、不是一個(gè)普通的可顯示字符,也不是一個(gè)具有操作功能的字符,而是一個(gè)“空操作”字符。它不進(jìn)行任何操作,在字符數(shù)組中僅作字符串結(jié)束標(biāo)記使用。‘\0’可以用賦值方法賦給一個(gè)字符變量或字符型數(shù)組中的某個(gè)元素,如c[8]= ‘\0’。運(yùn)算時(shí),按0(NULL)看待。如:#include Main(){ printf(“%d,%d,%d,%d”,NULL,-100,’\0’,-100); }結(jié)果:0,-100,0,-100,7.
38、3.2、字符數(shù)組的初始化,單字符方式 char a[10]={‘A’, ‘B’, ‘C’, ‘D’}; char b[2][3]={ ‘A’, ‘B’, ‘C’, ‘D’, ‘E’,’F’};,【注意】如果初值個(gè)數(shù)小于數(shù)組長(zhǎng)度,則多余的數(shù)組元素自動(dòng)為空字符(’\0’),字符串方式 char a[5]={“ABCD”}; char c[ ]=”ABCD”; char a[2][5]={{‘A’,’
39、B’,’C’,’\0’},{‘x’,’y’,’\0’}}; char a[2][5]={“ABC”,”XY”};二維數(shù)組可以認(rèn)為由若干個(gè)一維數(shù)組組成。,【例一】比較以下字符數(shù)組長(zhǎng)度是否相同:,char a[ ]=”ABCD”; char b[ ]= {“ABCD”}; char c[ ]={‘A’,’B’,’C’,’D’};,(5) (5) (4),例 7.6 (p131)
40、 輸出一個(gè)字符串,main(){ char c[10]={'I',' ','a','m',' ','a','b','o','y'}; int i; for(i=0;i<10;i++) printf("%c
41、",c[i]); printf("\n");},運(yùn)行結(jié)果: I am a boy,例 7.7 (p131) 輸出一個(gè)鉆石圖形,main() { static char diamond[ ][5]={{'','','*'}, {'','*','
42、','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}}; int i,j; for (i=0;i<5;i++) { for(j=0;j
43、<5;j++); printf("%c",diamond[i][j]); printf("\n"); } },先建立存儲(chǔ)空間(先定義一個(gè)字符數(shù)組),再輸入其元素值。如果 char a[10];除了直接在定義時(shí)初始化,定義后賦值的方法有:,法1:,逐個(gè)元素賦值 a[0]=’A’,a[1]=’X’;,法2:,循環(huán)+scanf(
44、“%c”, &…); /*用格式符%c逐個(gè)字符輸入/輸出*/ for (i=0;i<10;i++) scanf(“%c”,&a[i]);,法3:,scanf(“%s”, 字符數(shù)組名); (用于從鍵盤(pán)接收一個(gè)不帶空格的字符串scanf(“%s”,a); /*數(shù)組名代表該字符數(shù)組(字符串)的首地址,不可加&號(hào)*/,【注意】此法可自動(dòng)在所輸入的字
45、符串末尾加上’\0’。但輸入的字符串中不能有空格(C語(yǔ)言規(guī)定scanf用%s時(shí),以空格或回車(chē)符作為字符串的間隔符。所以,上例中,如果從鍵盤(pán)輸入“Computer”然后回車(chē),則數(shù)組a存放的是”Computer\0”。如果輸入“Turbo C“,數(shù)組a中實(shí)際只存放”Turbo\0”。,7.3.5-A、字符數(shù)組的輸入,法4:gets(字符數(shù)組名); (用于從鍵盤(pán)接收 一個(gè)任意字符串),gets(a)執(zhí)行時(shí),將一直讀取用戶從鍵盤(pán)輸入的所有字
46、符,直到遇到回車(chē)符(’\n’)為止。成功:返回?cái)?shù)組a首地址,否則返回NULL。gets(a)亦會(huì)自動(dòng)在字符串末尾加上’\0’(代替’\n’)。,【注意】如果輸入的字符長(zhǎng)度(含’\0’)超過(guò)字符數(shù)組定義的長(zhǎng)度,將會(huì)引起出錯(cuò)。,7.3.5-B、字符數(shù)組的輸出,,法1:逐個(gè)元素輸出: 循環(huán)+printf(“%c”,…);法2:字符串輸出: printf(“%s”,字符數(shù)組名);法3:字符串輸出: put
47、s(字符數(shù)組名);將一個(gè)以NULL(’\0’)結(jié)尾的字符串輸出到屏幕上,并自動(dòng)換行。,【注意】,1、 常用s[i] 作循環(huán)條件,當(dāng)循環(huán)(i遞增)到字符串結(jié)束處(’\0’)便自動(dòng)結(jié)束循環(huán)。 2、 典型結(jié)構(gòu):如果s是字符串,則下列結(jié)構(gòu)可以將s中不符合條件的字符刪去。,int i, j; for (i=0,j=0; str[i]; i++) if (條件) str[j++] =
48、str[i]; str[j] = '\0’;,例如: 程序中有下列語(yǔ)句: char str1[5],str2[5],str3[5]; scanf("%s%s%s",str1,str2,str3); 運(yùn)行時(shí)輸入數(shù)據(jù): How are you?,若改為: char str[13]; scanf("%s",s
49、tr); 運(yùn)行時(shí)輸入數(shù)據(jù): How are you?,【例】下列程序段的運(yùn)行結(jié)果是:,結(jié)果:(ab),char a[5]={‘a(chǎn)’,’b’, ’\0’,’d’,’\0’};printf(“%s”,a);,說(shuō)明:%s的作用是輸出一個(gè)字符串,直到遇到’\0’為止。,注意:在二維數(shù)組中,雙下標(biāo)引用——某行某列的某個(gè)元素 單下標(biāo)引用——某行的字符串,【例】分析以下程序的運(yùn)行結(jié)果:
50、,main(){char word[3][10];int i;for (i=0;i<3;i++) scanf("%s",word[i]);printf("%s",word[1]);},運(yùn)行時(shí),輸入:12345abcdef ABCDEFG,結(jié)果:abcdef,【注】word[i]第i+1行word元素首地址(二維數(shù)組用單下標(biāo)表示某行的字符串)
51、。,(#include)puts 輸出字符串 gets 輸入字符串 (#include) strcat 字符串連接 strcpy 字符串復(fù)制 strcmp 字符串比較 strlen 字符串長(zhǎng)度 strlwr 將字符串中的大寫(xiě)字符轉(zhuǎn)換為小寫(xiě)字符 strupr 將字符串中的小寫(xiě)字符轉(zhuǎn)換為大寫(xiě)字符,7.3.6字符串處理函數(shù),① get
52、s( )和puts( )② strcpy( ) 字符串考貝函數(shù)(包含在string.h中,下同)形式: strcpy(目的字符數(shù)組,源字符串);作用: 將源字符串考貝到目的字符數(shù)組中,直到遇到源 字符串的終止符’\0’為止。 函數(shù)返回值:目的字符數(shù)組的地址。,注意:目的字符數(shù)組要定義得足夠大。若要將一個(gè)字符串常量或從某一首地址開(kāi)始的字符串復(fù)制給別的數(shù)組,只能用本函數(shù)或指針。,【例一】,main( )
53、{ char a[ ]=“abcde”; char b[10]; b = “abcde”; b = a; /*編譯出錯(cuò)*/},【討論】編譯出錯(cuò)原因何在?a,b都是兩個(gè)數(shù)組定義時(shí)分配的內(nèi)存存儲(chǔ)單元首地址,是個(gè)常量,不能改變(不能賦值)。,#include “string.h”main( ){ char s[10],sp[ ]=“HELLO”; strcpy(s,sp); s[0]=‘h’;
54、 s[6]=‘!’; puts(s);},結(jié)果:hELLO,【例二】以下程序的輸出結(jié)果是 。,【討論】結(jié)果為什么不是:hELLO! 如果讓s[5]=’!’,結(jié)果又會(huì)如何?(結(jié)果:hELLO后面跟了一堆亂碼)如果是拷貝字符串的一部分,可用函數(shù)strncpy(目的字符數(shù)組,源字符串,拷貝字符數(shù)),【例三】以下程序的輸出結(jié)果是 。,#include “string.h”main( ){ char s[
55、 ]=“This is a source string.”, b[20]; strncpy(b,s,16); b[16] = ‘\0’; printf(“%s\n”,b);},結(jié)果:This is a source,③strcat( ) 字符串連接函數(shù),形式:strcat(目的字符數(shù)組,源字符串); 作用:將源字符串連接到目的字符數(shù)組后面。 函數(shù)返回值:目的字符數(shù)組的地址。,注意:目的字符數(shù)組要定
56、義得足夠大。,【例四】以下程序的輸出結(jié)果是 。,#include "string.h"main(){char a[ ]="abcde"; char b[ ]="12345"; strcat(b,a); printf("%s,%s\n",a,b);},結(jié)果:abcde,12345abcde,【討論】程序執(zhí)行完后出錯(cuò)(數(shù)組b長(zhǎng)度定義不夠
57、,將數(shù)組b的長(zhǎng)度定義11,則出錯(cuò)消失),【例五】以下程序的輸出結(jié)果是 。,#include "string.h"main(){ char a[80]=“AB”,b[80]=”LMNP”; int i=0; strcat(a,b); while (a[i++]!=’\0’) b[i]=a[i]; puts(b);},結(jié)果:LBLMNP (注意b[i]=a[i]是從i=1開(kāi)始),④
58、strcmp( ) 字符串比較函數(shù),形式:strcmp(字符串1,字符串2); 作用:對(duì)兩個(gè)字符串從各自第一個(gè)字符開(kāi)始進(jìn)行逐一比較,直到對(duì)應(yīng)字符不相同或到達(dá)串尾為止 函數(shù)返回值:確定了比較結(jié)果—— 小于0 字符串1小于字符串2 等于0 字符串1等于字符串2 大于0 字符串1大于字符串2,【例六】運(yùn)行以下程序時(shí),從鍵盤(pán)輸入:BOOKCUTGAMEPA
59、GE(表示回車(chē)),則運(yùn)行結(jié)果是什么?,#include “string.h”main(){int i; char str[10],temp[10]=”Control”; for ( i=0; i<4; i++) { gets(str); if(strcmp(temp,str)<0) strcpy(temp,str); }puts(temp);},變量跟蹤:temp s
60、tr 比較i=1 Control BOOK >0i=2 Control CUT >0i=3 Control GAME <0 GAMEi=4 GAME PAGE <0 PAGE,⑤strlen( ) 字符串長(zhǎng)度函數(shù),形式:strlen(字符串)作用:測(cè)試所給字符串的實(shí)際字符個(gè)數(shù)(不包括’\0’)函數(shù)返回值:實(shí)際
61、字符個(gè)數(shù),【例七】以下程序段的運(yùn)行結(jié)果是什么?,char a[ ]=“\t\r\\\0will\n”;printf(“%d,%d”,sizeof(a),strlen(a));,結(jié)果:10,3,【討論】如果中間不是0(零)而是字母O,結(jié)果是什么?(10,9),⑥strupr( )和strlwr( ) 大小寫(xiě)轉(zhuǎn)換函數(shù),strupr(字符串) 小寫(xiě)→大寫(xiě) strlwr(字符串) 大寫(xiě)→小寫(xiě),應(yīng) 用 舉 例,應(yīng)用
62、舉例-1 (習(xí)題7.13),題目: 接受鍵盤(pán)輸入的兩個(gè)字符串,并將其首尾相接后輸出。每個(gè)字符串內(nèi)部不含空格。(將兩個(gè)字符串連接起來(lái),不要用strcat函數(shù))分析:數(shù)據(jù)結(jié)構(gòu):字符串的存儲(chǔ)需要用字符數(shù)組算法要點(diǎn):字符串輸入,可以用具有詞處理功能的scanf( )函數(shù)字符串拼接方法:先找到第一個(gè)字符串的末尾,然后將第二個(gè)串的字符逐個(gè)添加到末尾。注意,要去掉第一個(gè)串的結(jié)束符'\0',但第二個(gè)串的結(jié)束符'\
63、0'要添加進(jìn)去。,main(){ char str1[50], str2[20]; int i=0, j=0; printf("Enter string No.1:\n"); scanf("%s",str1); printf("Enter string No.2:\n"); scanf("%s",str2)
64、; while(str1[i] != '\0') i++; while((str1[i++]=str2[j++])!='\0') ; printf("string No.1->%s\n",str1); },,隨著j++的移動(dòng),str2的串結(jié)束標(biāo)志“\0”也被賦到str1中,此時(shí)循環(huán)結(jié)束。,運(yùn)行結(jié)果:Enter string No.
65、1: abcdefghEnter string No.2: IJKLMNOPQRSstring No.1->abcdefghIJKLMNOPQRS,應(yīng)用舉例-3(參考習(xí)題7.5),題目:把輸入的字符串逆序排列,并顯示。分析:數(shù)據(jù)結(jié)構(gòu): 輸入的字符串用字符數(shù)組存放。算法要點(diǎn): 逆序排列用交換算法,求出
66、字符串最后一個(gè)字符的下標(biāo),然后將第一個(gè)字符和最后一個(gè)字符交換,第二個(gè)和倒數(shù)第二個(gè)交換,……,#include “stdio.h”#include “string.h”main(){ char str[80]; int c,i,j; printf("Enter a string:\n"); scanf("%s",str); for(i=0, j=strlen(
67、str)-1; i<j ; i++, j-- ) { c=str[ i ]; str[ i ]=str[ j ]; str[ j ]=c; } printf("\nReversed string:\n%s\n",str);},運(yùn)行結(jié)果:Enter a string: abcdefghR
68、eversed string: hgfedcba,應(yīng)用舉例-4 (參考習(xí)題7.10),題目:從鍵盤(pán)輸入字符,以 ctrl+z 結(jié)束,統(tǒng)計(jì)輸入的數(shù)字 0~9、空白符和其它字符的個(gè)數(shù)。分析:[數(shù)據(jù)結(jié)構(gòu)]1、定義一個(gè)具有 10 個(gè)元素的整型數(shù)組來(lái)存放數(shù)字 0~9 的個(gè)數(shù)。2、定義兩個(gè)整型變量來(lái)存放空白符和其它字符的 個(gè)數(shù)。 [算法要點(diǎn)]1、計(jì)數(shù)用的數(shù)組和變量要初始化為0。2、用循
69、環(huán)結(jié)構(gòu)處理字符讀入,內(nèi)嵌分支結(jié)構(gòu)處理 計(jì)數(shù)。,,#includemain( ){ int c, i, nwhite, nother, ndigit[10]; nwhite=nother=0; for(i=0;i='0'&&c<='9') ++ndigit[ c-'0' ]; else if (c=='
70、; ‘ || c=='\n‘ || c=='\t') ++nwhite; else ++nother; for(i=0; i<10; i++) printf("digit '%d':%d\n", i, n
71、digit[i]); printf("white space:%d\n", nwhite); printf("other character:%d\n", nother);},注: c為int型,所以它為輸入字符的ASIC碼,運(yùn)行結(jié)果:The use of the double colon in front ofthe variable name, in lines 11
72、, 13, and16, instructs the system that we areinterested in using the global variablenamed index. digit '1':4 digit '2':0 digit '3':1 digit '4':0
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c語(yǔ)言實(shí)驗(yàn)6一維數(shù)組和二維數(shù)組
- perl 數(shù)組
- 指針和數(shù)組區(qū)別
- 數(shù)組去重復(fù)
- 數(shù)組編程練習(xí)
- 實(shí)驗(yàn)6數(shù)組的使用
- 數(shù)組函數(shù)講座
- 數(shù)組與指針
- 數(shù)組的循環(huán)移位
- 數(shù)組的讀入讀出
- 第五章 數(shù)組
- 實(shí)驗(yàn)十一 數(shù)組(續(xù))
- 第5章-數(shù)組
- 數(shù)組習(xí)題課
- 高數(shù)組教研計(jì)劃
- 數(shù)組參考答案
- 怪物數(shù)組的查找方法
- 怪物數(shù)組的查找方法
- flash actionscript3.0多維數(shù)組的訪問(wèn)以及多個(gè)數(shù)組的合并
- 小學(xué)奧數(shù)組合圖形的面積
評(píng)論
0/150
提交評(píng)論