版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2021/3/91第七章第七章 數(shù)數(shù) 組組 數(shù)組是內(nèi)存中的一種數(shù)據(jù)集合,用于存貯較大數(shù)組是內(nèi)存中的一種數(shù)據(jù)集合,用于存貯較大量的相同類型的數(shù)據(jù)元素,在程序中數(shù)組有一個量的相同類型的數(shù)據(jù)元素,在程序中數(shù)組有一個名字,并通過下標訪問數(shù)組的某個元素。名字,并通過下標訪問數(shù)組的某個元素。7.1 一維數(shù)組一維數(shù)組一、一維數(shù)組的定義一、一維數(shù)組的定義語法格式:元素類型名語法格式:元素類型名 數(shù)組名數(shù)組名元素個數(shù)元素個數(shù);如如:int a5,b8;double y15,c20;#define N 10long posN;int cN+1;/*正確正確*/例如:例如:int n=10,an;/*錯誤錯誤*/只
2、能是整型常量表達式2021/3/92二、一維數(shù)組元素的引用二、一維數(shù)組元素的引用語法格式:語法格式:數(shù)組名數(shù)組名下標表達式下標表達式如如:若有定義若有定義 int a4;則元素則元素a0,a1,a2,a3是數(shù)組的有效元素。是數(shù)組的有效元素。a4并非有效元素,屬于并非有效元素,屬于下標超范圍。下標超范圍會引起死機或程序錯下標超范圍。下標超范圍會引起死機或程序錯誤,但誤,但C語言不自動檢查下標是否超范圍,故語言不自動檢查下標是否超范圍,故必須在設(shè)計階段從程序邏輯上保證下標不超范必須在設(shè)計階段從程序邏輯上保證下標不超范圍圍。必須是整型表達式數(shù)組下標固定從0開始編號7.1 一維數(shù)組一維數(shù)組2021/3
3、/93一維數(shù)組的元素在內(nèi)存中是連續(xù)存放的。一維數(shù)組的元素在內(nèi)存中是連續(xù)存放的。n例如:若有例如:若有int a10;,則,則a數(shù)組中包含的數(shù)組中包含的10個元個元素在內(nèi)存中的存儲情況如下:素在內(nèi)存中的存儲情況如下:三、一維數(shù)組存貯空間分析:三、一維數(shù)組存貯空間分析:a0a1 a2 a3 a4 a5 a6 a7 a8 a9 n如如: double a5;該數(shù)組共該數(shù)組共5個元素,個元素,存貯存貯5個個double型實數(shù),共占用型實數(shù),共占用40字節(jié)字節(jié)存貯空間。存貯空間。7.1 一維數(shù)組一維數(shù)組2021/3/94四、一維數(shù)組的初始化四、一維數(shù)組的初始化在定義數(shù)組時,允許對在定義數(shù)組時,允許對靜態(tài)
4、靜態(tài)(數(shù)組定義前加有數(shù)組定義前加有static保留保留字字)數(shù)組、數(shù)組、外部數(shù)組外部數(shù)組(定義于所有函數(shù)以及復(fù)合語句之外定義于所有函數(shù)以及復(fù)合語句之外)及及main()定義的定義的auto型數(shù)組型數(shù)組進行進行初始化初始化。7.1 一維數(shù)組一維數(shù)組初始化格式:初始化格式:static 類型說明符類型說明符 數(shù)組名數(shù)組名=常量列表常量列表;例例: static int a4=1,2,3,4;2021/3/95(1)static與外部數(shù)組不初始化,初值自動為與外部數(shù)組不初始化,初值自動為0(2)初始化時,可以不指定元素個數(shù)初始化時,可以不指定元素個數(shù) static int a=1,2,3,4; 則數(shù)
5、組則數(shù)組a自動為自動為4個元素,個元素, 與上面的定義形式完全等價。與上面的定義形式完全等價。(3)可以可以只對前部分元素只對前部分元素進行初始化,余下的元進行初始化,余下的元素初值自動為素初值自動為0。(main()中的中的auto型也是這樣)型也是這樣)如如: static int a5=1,2,3;則則 a3與與a4自動為自動為0。說明說明:四、一維數(shù)組的初始化四、一維數(shù)組的初始化2021/3/96例例7.1 將數(shù)值將數(shù)值5,3,4,5,3,6,6,4,3,2,9賦予數(shù)組賦予數(shù)組a并求其和。并求其和。程序:程序: #includeint a=5,3,4,5,3,6,6,4,3,2,9;m
6、ain() int sum,i; sum=0; for (i=0;i=10;i+) sum+=ai; printf(sum=%dn,sum); 7.1.3 一維數(shù)組應(yīng)用舉例一維數(shù)組應(yīng)用舉例2021/3/97例例7.2 編寫一程序,編寫一程序,求全班求全班40個學(xué)生計算個學(xué)生計算機的平均成績。機的平均成績。其算法可用如圖其算法可用如圖7.1所所示的流程圖表示。示的流程圖表示。程序程序:(要求學(xué)生自己要求學(xué)生自己寫出寫出)開始開始結(jié)束結(jié)束輸出輸出vs=0,i=0假假真真i40輸入輸入ai,s=s+aii=i+1v=s/407.1.3 一維數(shù)組應(yīng)用舉例一維數(shù)組應(yīng)用舉例2021/3/98基本思想基本思
7、想:每一趟在:每一趟在n-i+1(i=1,2,.,n-1)個記錄中個記錄中(第(第i趟)選取關(guān)鍵字最小的記錄作為有序序列趟)選取關(guān)鍵字最小的記錄作為有序序列中第中第i個記錄。個記錄。方法方法:n個數(shù),比較個數(shù),比較n-1趟趟 第第i趟趟(i=1,2,.,n-1) 比較比較n-i次,選擇一個次,選擇一個最小的記錄交換一次。最小的記錄交換一次。選擇排序總共要進行(選擇排序總共要進行(n-1)+(n-2)+1=n(n-1)/2比較,比較,最多最多n-1次交換。次交換。例例7.3 使用使用選擇法選擇法對輸入的對輸入的10個整型數(shù)據(jù)進個整型數(shù)據(jù)進行從小到大排序。行從小到大排序。選擇排序法選擇排序法202
8、1/3/99a0a1a2a3a5284136716741362816716362841716283641716283641原始數(shù)據(jù)原始數(shù)據(jù)第一輪第一輪第二輪第二輪第三輪第三輪第四輪第四輪比較次數(shù)比較次數(shù)4321for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+) if(ajak) k=j; if(k!=i) t=ai;ai=ak;ak=t; 要求學(xué)生寫出完整程序語言描述:語言描述:/*k指示當(dāng)前比較的最小值下標指示當(dāng)前比較的最小值下標*/2021/3/910練習(xí)練習(xí):寫出該程序?qū)懗鲈摮绦蜻x擇排序法選擇排序法2021/3/911一、二維數(shù)組的定義一、二維數(shù)組的定義語法格式
9、:語法格式:元素類型名元素類型名 數(shù)組名數(shù)組名下標下標1維數(shù)維數(shù)下標下標2維數(shù)維數(shù);如如:int a58; /*5行行 8列整型數(shù)組列整型數(shù)組*/又如:又如:#define N 6long mNN; /*N行行 N列長整型數(shù)組列長整型數(shù)組*/行數(shù)列數(shù)7.2 二維數(shù)組二維數(shù)組2021/3/912二、二維數(shù)組元素的引用二、二維數(shù)組元素的引用語法格式:語法格式:數(shù)組名數(shù)組名行行下標下標列列下標下標其中,下標表達式必須是其中,下標表達式必須是整型表達式整型表達式;下標固定從下標固定從0開開始編號始編號。如如: 若有定義若有定義int a34; 則則左上角左上角元素下標為元素下標為a00, 右下角右下角
10、元素下標為元素下標為a23。C語言不自動檢查下標是否超范圍,故必須在設(shè)計階段語言不自動檢查下標是否超范圍,故必須在設(shè)計階段從程序邏輯上保證下標不超范圍從程序邏輯上保證下標不超范圍。2021/3/913例如,若有例如,若有int a23;,則,則a數(shù)組中包含的二行三數(shù)組中包含的二行三列共列共6個元素在內(nèi)存中的存儲情況如下:個元素在內(nèi)存中的存儲情況如下:a00a01a02a10a11a12三、二維數(shù)組存貯空間分析:三、二維數(shù)組存貯空間分析:2021/3/914也只能對也只能對static或外部數(shù)組、或外部數(shù)組、main()中的中的auto型數(shù)組進行型數(shù)組進行初始化。初始化。初始化方法:初始化方法:
11、標準形式標準形式 static int a23=1,2,3,4,5,6;注意:用內(nèi)層注意:用內(nèi)層表示行,每行可視作一個一維表示行,每行可視作一個一維數(shù)組,并數(shù)組,并按行初始化按行初始化。2.對所有元素初始化對所有元素初始化可以缺省行數(shù)和內(nèi)層可以缺省行數(shù)和內(nèi)層如如:上述初始化可寫為上述初始化可寫為static int a3=1,2,3,4,5,6或或static int a3=1,2,3,4,5,6; 或或1. static int a23=1,2,3,4,5,6;7.2.2、二維數(shù)組的初始化、二維數(shù)組的初始化2021/3/915(3)static與外部數(shù)組不初始化,初與外部數(shù)組不初始化,初值自
12、動為值自動為0(4)每行可以只對前幾列元素每行可以只對前幾列元素進行進行初始化,余下的元素初值自動初始化,余下的元素初值自動為為0。如如: static int a3=1,2,3;則則 矩陣元素初值如下矩陣元素初值如下:(5)指定行數(shù)時指定行數(shù)時,可以,可以只初始化前面幾行只初始化前面幾行,余下各行元素初值自動為余下各行元素初值自動為0.如如: static int a43=1,2,3,4,5,6;則矩陣初值如下:則矩陣初值如下:1 0 02 3 01 0 02 3 4 5 6 00 0 07.2.2、二維數(shù)組的初始化、二維數(shù)組的初始化2021/3/916例例7.4 將下表存入數(shù)組將下表存入數(shù)
13、組a,按行求元素之和并顯示。,按行求元素之和并顯示。25 13 3210 54 537.2.3 應(yīng)用舉例應(yīng)用舉例程序:#includemain() int a24,i; a00=25;a01=13;a02=32; a10=10;a11=54;a12=53; for (i=0;i=1;i+) ai3=ai0+ai1+ai2; for (i=0;i=1;i+) printf(%d %d %d %d n,ai0,ai1,ai2,ai3);2021/3/917例例7.5:輸入一個三行四列的矩陣:輸入一個三行四列的矩陣A,計算其轉(zhuǎn),計算其轉(zhuǎn)置矩陣置矩陣B,輸出矩陣,輸出矩陣B。 2 34 5 61 42
14、 53 6ABbji=aij7.2.3 應(yīng)用舉例2021/3/9187.2.3 應(yīng)用舉例應(yīng)用舉例#includemain() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); printf(array b:n); for (i=0;i=2;i+) for (j=0;j=1;j+) printf(%5d,bij); printf(n); 程序:2021/3/919例例7.6 編寫一程序,求全班編寫一程
15、序,求全班40個學(xué)生每個學(xué)生三個學(xué)生每個學(xué)生三門功課的平均成績。門功課的平均成績。 1.定義數(shù)據(jù)結(jié)構(gòu)定義數(shù)據(jù)結(jié)構(gòu)40個學(xué)生個學(xué)生3門功課的存放門功課的存放:int a4030;每個學(xué)生三門功課的平均成績存放每個學(xué)生三門功課的平均成績存放:int v40;2.輸入學(xué)生成績輸入學(xué)生成績3.求每個學(xué)生平均成績求每個學(xué)生平均成績: vi= (ai0+ai1+ai2)/3,4.輸出結(jié)果輸出結(jié)果.分析:分析:7.2.3 應(yīng)用舉例應(yīng)用舉例2021/3/920程序:程序:#includemain() int a403,s,i,j,v40; for(i=0;i40;i+) for(j=0;j3;j+) scan
16、f(%d,&aij); for(i=0;i40;i+) s=0; for(j=0;j3;j+) s=s+aij; vi=s/3; for(i=0;i40;i+) printf(%d %dn,i,vi); 2021/3/921例例7.7 在在N行行M列的二維數(shù)組列的二維數(shù)組x中,找出數(shù)組的中,找出數(shù)組的最大值以及此最大值所在的行、列下標。最大值以及此最大值所在的行、列下標。 分析分析:1.定義二維數(shù)組定義二維數(shù)組:int xNM; 定義變量定義變量 max:存放最大值存放最大值 line:存放最大值行號存放最大值行號 col:存放最大值列號存放最大值列號 2.找最大值找最大值:max初始值初始值
17、= x00, line及及col的初始值為的初始值為0, 再將二維數(shù)組再將二維數(shù)組x中的元素逐個與中的元素逐個與max進行比較,確定新的進行比較,確定新的max和和line及及col的值,直到二維數(shù)組的值,直到二維數(shù)組x中的元素全部處理中的元素全部處理完。完。3.輸出數(shù)據(jù)輸出數(shù)據(jù)7.2.3 應(yīng)用舉例應(yīng)用舉例2021/3/922程序運行結(jié)果如下:input array numbers:12 31 4020 67 80max=80line=1col=2程序:程序:#define N 2#define M 3#include stdio.hmain() int i,j,xNM,max,line,co
18、l; printf(input array numbers:n); for(i=0;iN;i+) for(j=0;jM;j+) scanf(%d,&xij); max=x00; line=col=0; for(i=0;iN;i+) for(j=0;jM;j+) if(maxxij) max=xij; line=i; col=j; printf(nmax=%dtline=%dtcol=%dn,max,line,col);2021/3/9237.3.1 字符數(shù)組的定義、引用與初始化字符數(shù)組的定義、引用與初始化1字符數(shù)組的定義字符數(shù)組的定義n一維字符數(shù)組的定義形式如下:一維字符數(shù)組的定義形式如下:
19、char 數(shù)組名數(shù)組名常量表達式常量表達式;例如:例如: char a10;n二維字符數(shù)組的定義形式如下:二維字符數(shù)組的定義形式如下:char 數(shù)組名數(shù)組名常量表達式常量表達式1常量表達式常量表達式2;例如:例如: char a34;7.3 字符數(shù)組字符數(shù)組2021/3/9247.3 字符數(shù)組字符數(shù)組2字符數(shù)組元素的引用字符數(shù)組元素的引用n一維字符數(shù)組元素的引用形式如下:一維字符數(shù)組元素的引用形式如下: 數(shù)組名數(shù)組名下標下標 例如:例如: a2 a1+1n二維字符數(shù)組的元素的引用形式如下:二維字符數(shù)組的元素的引用形式如下: 數(shù)組名數(shù)組名行下標行下標列下標列下標例如:例如: a10 a03-22
20、021/3/9257.3 字符數(shù)組字符數(shù)組3字符數(shù)組的初始化字符數(shù)組的初始化n一維字符數(shù)組的初始化形式如下一維字符數(shù)組的初始化形式如下: static 類型說明符類型說明符 數(shù)組名數(shù)組名=字符常量列表字符常量列表; 例如:例如: char a10=H,e,l,l,o,!n二維字符數(shù)組的初始化形式如下二維字符數(shù)組的初始化形式如下:static 類型說明符類型說明符 數(shù)組名數(shù)組名=字符常量列表字符常量列表,; 例如:例如:char a23=A,B,C,D2021/3/9267.3 字符數(shù)組字符數(shù)組n說明:說明:n(1)如果花括號中提供的字符個數(shù)大于數(shù)組長度,則)如果花括號中提供的字符個數(shù)大于數(shù)組長
21、度,則作語法錯誤處理。作語法錯誤處理。n(2)如果花括號中提供的字符個數(shù)小于數(shù)組長度,則)如果花括號中提供的字符個數(shù)小于數(shù)組長度,則只將這些字符賦給數(shù)組中的前面那些元素,其余元素只將這些字符賦給數(shù)組中的前面那些元素,其余元素自動定為空字符(即自動定為空字符(即0)。)。n(3)如果花括號中提供的字符個數(shù)與預(yù)定的數(shù)組長度)如果花括號中提供的字符個數(shù)與預(yù)定的數(shù)組長度相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)相同,在定義時可以省略數(shù)組長度,系統(tǒng)會自動根據(jù)初值個數(shù)確定數(shù)組長度。初值個數(shù)確定數(shù)組長度。 2021/3/9277.3.2 字符串與字符數(shù)組字符串與字符數(shù)組n1字符串和字符串結(jié)束標志字符串和
22、字符串結(jié)束標志nC語言約定用語言約定用0作為字符串的結(jié)束標志,它占內(nèi)存作為字符串的結(jié)束標志,它占內(nèi)存空間,但不計入串的長度??臻g,但不計入串的長度。0的代碼值為的代碼值為0。n字符型一維數(shù)組來存儲字符型一維數(shù)組來存儲一個字符串一個字符串,用字符型二維數(shù),用字符型二維數(shù)組來存儲組來存儲多個字符串多個字符串。2021/3/9287.3.2 字符串與字符數(shù)組字符串與字符數(shù)組n2用字符串常量給數(shù)組賦初值(初始化)。用字符串常量給數(shù)組賦初值(初始化)。 例如,如果有:例如,如果有:char c6=“china”;或或char c6= “china”;或或char c = “china”; 則數(shù)組則數(shù)組c
23、在內(nèi)存中的存儲情況如下:在內(nèi)存中的存儲情況如下:c0c1c2c3c4c5china02021/3/929n3字符數(shù)組與字符串的輸入輸出(1)用格式符)用格式符“%c”逐個字符輸入輸出:逐個字符輸入輸出:7.3.2 字符串與字符數(shù)組字符串與字符數(shù)組#includemain() char a10; int i; for(i=0;i10;i+) scanf(%c,&ai); printf(n); for(i=0;i10;i+) printf(%c,ai); 2021/3/930n(2)用格式符)用格式符“%s”整個字符串輸入輸出:整個字符串輸入輸出:#includemain() char a10;
24、scanf(%s,a); printf(n); printf(%s,a);7.3.2 字符串與字符數(shù)組字符串與字符數(shù)組2021/3/931注意:注意:(1)用)用%s格式輸出字符數(shù)組時,遇格式輸出字符數(shù)組時,遇0結(jié)束輸出,且輸出字符結(jié)束輸出,且輸出字符中不包含中不包含0。(2)若數(shù)組中包含一個以上的)若數(shù)組中包含一個以上的0,則遇第一個,則遇第一個0時結(jié)束輸出。時結(jié)束輸出。(3)用)用%s格式輸入或輸出字符數(shù)組時,函數(shù)格式輸入或輸出字符數(shù)組時,函數(shù)scanf的地址項、函的地址項、函數(shù)數(shù)printf的輸出項都是字符數(shù)組名。這時數(shù)組名前不能再加的輸出項都是字符數(shù)組名。這時數(shù)組名前不能再加&符符號,
25、因為數(shù)組名就是數(shù)組的起始地址。號,因為數(shù)組名就是數(shù)組的起始地址。(4)用語句)用語句“scanf(%s,s);”為字符數(shù)組為字符數(shù)組s輸入數(shù)據(jù)時,遇空格輸入數(shù)據(jù)時,遇空格鍵或回車鍵時結(jié)束輸入,但所讀入的字符串中不包含空格鍵或回鍵或回車鍵時結(jié)束輸入,但所讀入的字符串中不包含空格鍵或回車鍵,而是在字符串末尾添加車鍵,而是在字符串末尾添加0。(5)用一個)用一個scanf函數(shù)輸入多個字符串,輸入時應(yīng)以空格鍵或回車函數(shù)輸入多個字符串,輸入時應(yīng)以空格鍵或回車鍵作為字符串間的分隔。鍵作為字符串間的分隔。7.3.2 字符串與字符數(shù)組字符串與字符數(shù)組2021/3/932n使用字符串函數(shù)時應(yīng)在程序前包含頭文件:
26、使用字符串函數(shù)時應(yīng)在程序前包含頭文件:#include n(1)puts(字符串字符串):字符串輸出函數(shù)。:字符串輸出函數(shù)。功能:將一個字符串輸出到終端。輸出的字符串包含轉(zhuǎn)義功能:將一個字符串輸出到終端。輸出的字符串包含轉(zhuǎn)義字符。字符。示例:示例:char str =chinanbeijing; puts(str); 輸出:輸出:chinabeijing7.3.3 字符串函數(shù)2021/3/9337.3.3 字符串函數(shù)n(2)gets(字符數(shù)組):字符串?dāng)?shù)組輸入函數(shù)。(字符數(shù)組):字符串?dāng)?shù)組輸入函數(shù)。n功能:從終端輸入一個字符串到字符數(shù)組,該函數(shù)返功能:從終端輸入一個字符串到字符數(shù)組,該函數(shù)返回
27、值是字符數(shù)組的起始地址。回值是字符數(shù)組的起始地址。示例:示例:char str10 ;gets(str);如果鍵盤輸入:如果鍵盤輸入:China則數(shù)組則數(shù)組str在內(nèi)存中的存儲情況如下:在內(nèi)存中的存儲情況如下:str0str1str2str3str4str5str6str7str8str9chian00000注意:用puts和gets函數(shù)只能輸入或輸出一個字符串。2021/3/9347.3.3 字符串函數(shù)字符串函數(shù)n(3)strcat(字符數(shù)組字符數(shù)組1,字符數(shù)組字符數(shù)組2):連接兩個字符:連接兩個字符串函數(shù)。串函數(shù)。n功能:連接兩個字符串中的字符,把字符串功能:連接兩個字符串中的字符,把字符
28、串2接到字符接到字符串串1的后面,結(jié)果放在字符串的后面,結(jié)果放在字符串1中,函數(shù)調(diào)用后得到一中,函數(shù)調(diào)用后得到一個函數(shù)值個函數(shù)值字符串字符串1的地址。的地址。n示例:如果有:示例:如果有:char str110 =Ch; char str2 =ina; strcat(str1,str2);n則:字符數(shù)組則:字符數(shù)組str1中存儲的字符串為中存儲的字符串為“Ch ina”。說明:說明:(1)字符數(shù)組)字符數(shù)組1必須足夠大,以便能容納連接后的新字符串。必須足夠大,以便能容納連接后的新字符串。(2)連接前兩個字符串后面都有一個)連接前兩個字符串后面都有一個0,連接時將字符串,連接時將字符串1后面的后
29、面的0取消,只在新串的最后保留一個取消,只在新串的最后保留一個0。2021/3/9357.3.3 字符串函數(shù)n(4)strcpy(字符數(shù)組字符數(shù)組,字符串字符串):字符串復(fù)制函數(shù)。:字符串復(fù)制函數(shù)。功能功能:將字符串拷貝到字符數(shù)組中去。:將字符串拷貝到字符數(shù)組中去。示例示例:如果有:如果有:char str110,str2 = china; strcpy (str1,str2); 則:字符數(shù)組則:字符數(shù)組str1中存儲的字符串為中存儲的字符串為“Ch ina”。n示例示例:下面的用法是不合法的:下面的用法是不合法的:str1=china;str1=str2;n如果用賦值語句,則只能將字符逐個賦
30、給一字符數(shù)組元素。如果用賦值語句,則只能將字符逐個賦給一字符數(shù)組元素。示例示例:char a6; a0=c;a1=h;a2=i;a3=n;a4=a;a5= 02021/3/9367.3.3 字符串函數(shù)n(5)strcmp(字符串字符串1,字符串,字符串2):字符串比較函數(shù)。:字符串比較函數(shù)。n功能:按功能:按ASCII碼值大小比較,將兩個字符串自左至碼值大小比較,將兩個字符串自左至右逐個字符相比較,直到出現(xiàn)不同的字符或到右逐個字符相比較,直到出現(xiàn)不同的字符或到0為為止。如果全部字符相同,則認為相等;如果出現(xiàn)不相止。如果全部字符相同,則認為相等;如果出現(xiàn)不相同的字符,則以第一個不相同的字符的比較
31、結(jié)果為準。同的字符,則以第一個不相同的字符的比較結(jié)果為準。比較的結(jié)果由函數(shù)值帶回。比較的結(jié)果由函數(shù)值帶回。n(1)字符串)字符串1=字符串字符串2,函數(shù)值為,函數(shù)值為0。n(2)字符串)字符串1字符串字符串2,函數(shù)值為正整數(shù)。,函數(shù)值為正整數(shù)。n(3)字符串)字符串1字符串字符串2,函數(shù)值為負整數(shù)。,函數(shù)值為負整數(shù)。2021/3/9377.3.3 字符串函數(shù)n示例:如果有:示例:如果有:char str110 =Chinese, str2 =China; int a; a=strcmp(str1,str2);則:則:a的值為一正整數(shù)。的值為一正整數(shù)。n注意:對兩個字符比較,不能用以下形式:注意
32、:對兩個字符比較,不能用以下形式:if(str1= =str2)printf(yes);而只能用:而只能用:if(strcmp(str1,str2)= =0)printf(yes); 。2021/3/9387.3.3 字符串函數(shù)n(6)strlen(字符數(shù)組字符數(shù)組):求字符串長度函數(shù)。:求字符串長度函數(shù)。n功能:求字符串長度。函數(shù)值為字符串的實際長度,功能:求字符串長度。函數(shù)值為字符串的實際長度,不包括不包括0在內(nèi)。在內(nèi)。n示例:如果有:示例:如果有:char str10=china; printf(%d,strlen(str); 則輸出結(jié)果為:則輸出結(jié)果為:52021/3/9397.3.3
33、 字符串函數(shù)n(7)strlwr(字符串字符串):字符串小寫函數(shù)。:字符串小寫函數(shù)。功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。功能:將字符串中的大寫字母轉(zhuǎn)換成小寫字母。n(8)strupr(字符串字符串):字符串大寫函數(shù)。:字符串大寫函數(shù)。功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。功能:將字符串中的小寫字母轉(zhuǎn)換成大寫字母。2021/3/9407.3.3 字符串函數(shù)n例例7.8 用戶從鍵盤輸入一個字符串(字符串中不包含空格),當(dāng)用戶從鍵盤輸入一個字符串(字符串中不包含空格),當(dāng)輸入回車時認為輸入結(jié)束,統(tǒng)計輸入字符串中的小寫英文字母、輸入回車時認為輸入結(jié)束,統(tǒng)計輸入字符串中的小寫英文字母、大寫英文
34、字母、數(shù)字字符、其他字符的個數(shù)。大寫英文字母、數(shù)字字符、其他字符的個數(shù)。分析:分析: n字符串放在字符數(shù)組字符串放在字符數(shù)組sn用普通的整型變量用普通的整型變量m,n,x,y分別存儲統(tǒng)計得到的輸入字符串分別存儲統(tǒng)計得到的輸入字符串中的小寫英文字母、大寫英文字母、數(shù)字字符、其他字符的個數(shù)。中的小寫英文字母、大寫英文字母、數(shù)字字符、其他字符的個數(shù)。n用一個單循環(huán)控制,對字符數(shù)組用一個單循環(huán)控制,對字符數(shù)組s中的元素逐個進行判斷,根據(jù)中的元素逐個進行判斷,根據(jù)不同情況(元素值是否為小寫英文字母、大寫英文字母、數(shù)字字不同情況(元素值是否為小寫英文字母、大寫英文字母、數(shù)字字符、其他字符)對相應(yīng)計數(shù)變量計
35、數(shù)。符、其他字符)對相應(yīng)計數(shù)變量計數(shù)。n循環(huán)控制條件是當(dāng)前所處理的字符串中的字符不是字符串結(jié)束標循環(huán)控制條件是當(dāng)前所處理的字符串中的字符不是字符串結(jié)束標志志0,即一個字符串的所有字符還沒有處理完畢。,即一個字符串的所有字符還沒有處理完畢。2021/3/941n程序:程序:n#include nmain()n n int i,m,n,x,y; n char s80;n printf(input a string:n);n scanf(%s,s);n m=n=x=y=0;n i=0;n while(si!=0)n n if(si=a&si=A&si=0&si=9) x+;n else y+;n i
36、+;n n printf(az:%dnAZ:%dn09:%dnothers:%dn,m,n,x,y);n2021/3/9427.3.3 字符串函數(shù)n例例7.9 將字符串將字符串s1從第從第m個字符開始剩余的所有字符送入字符數(shù)個字符開始剩余的所有字符送入字符數(shù)組組s2中。中。分析:分析:n該程序用一個單循環(huán)控制,將字符數(shù)組該程序用一個單循環(huán)控制,將字符數(shù)組s1中的元素從第中的元素從第m個字符個字符開始剩余的所有字符依次逐個送入字符數(shù)組開始剩余的所有字符依次逐個送入字符數(shù)組s2中。中。n程序中用兩個整型變量程序中用兩個整型變量i、j分別標識元素在原字符數(shù)組分別標識元素在原字符數(shù)組s1中的下中的下標
37、和在目標數(shù)組標和在目標數(shù)組s2中的下標,每循環(huán)一次,即傳送一個字符后,中的下標,每循環(huán)一次,即傳送一個字符后,i、j的值增的值增1。n循環(huán)控制條件是當(dāng)前所處理的原字符數(shù)組循環(huán)控制條件是當(dāng)前所處理的原字符數(shù)組s1中的元素不是字符串中的元素不是字符串結(jié)束標志結(jié)束標志0,即原字符數(shù)組,即原字符數(shù)組s1中從第中從第m個字符開始剩余的所個字符開始剩余的所有字符還沒有處理完畢。有字符還沒有處理完畢。2021/3/943n程序:程序:n#include nmain()nn int i,j,m;n char s180,s280;n printf(input a string:n);n gets(s1);n p
38、rintf(input start point:n);n scanf(%d,&m);n i=m-1;n j=0; n while(s1i!=0) n n s2j=s1i;n i+;n j+;n n s2j=0; n puts(s2);n2021/3/9447.4 本章考點n一維數(shù)組的定義、引用及初始化。一維數(shù)組的定義、引用及初始化。n二維數(shù)組的定義、引用及初始化。二維數(shù)組的定義、引用及初始化。n字符串和字符數(shù)組。字符串和字符數(shù)組。n字符串處理函數(shù)。字符串處理函數(shù)。2021/3/9457.5 典型試題詳解1以下能正確定義一維數(shù)組的選項是以下能正確定義一維數(shù)組的選項是_。A)int num; B)
39、#define N 100; int numN; C)int num0100 D)int N=100; int numN;正確答案:正確答案:B(知識點:一維數(shù)組的定義)(知識點:一維數(shù)組的定義)2021/3/9467.5 典型試題詳解n2假設(shè)假設(shè)int類型變量占用兩個字節(jié),其有定義:類型變量占用兩個字節(jié),其有定義:int x10=0,2,4;,則數(shù)組,則數(shù)組x在內(nèi)存中所占的字節(jié)數(shù)是在內(nèi)存中所占的字節(jié)數(shù)是_。nA)3B)6 C)10D)20n正確答案:正確答案:D(知識點:一維數(shù)組的定義)(知識點:一維數(shù)組的定義)2021/3/9477.5 典型試題詳解3以下程序運行后的輸出結(jié)果是以下程序運行
40、后的輸出結(jié)果是_。main() int i,n=0,0,0,0,0; for(i=1;i=4;i+) ni=ni-1*2+1; printf(%d ,ni);正確答案:正確答案:1 3 7 15(知識點:一維數(shù)組的定義與引用)(知識點:一維數(shù)組的定義與引用)2021/3/9487.5 典型試題詳解4以下數(shù)組定義中不正確的是以下數(shù)組定義中不正確的是_。A)int a23; B)int b3=0,1,2,3; C)int c100100=0; D)int3= 1,2,1,2,3,1,2,3,4;正確答案:正確答案:D(知識點:二維數(shù)組的初始化)(知識點:二維數(shù)組的初始化)試題分析:二維數(shù)組初始化時
41、,對數(shù)組第一維的長度可試題分析:二維數(shù)組初始化時,對數(shù)組第一維的長度可以不指定,但第二維的長度不能省略。以不指定,但第二維的長度不能省略。2021/3/9497.5 典型試題詳解5有以下程序:有以下程序:main () int aa44= 1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6;int i,s=0;for(i=0;i4;i+)s+=aailprintf(%dn,s)執(zhí)行后的輸出結(jié)果是執(zhí)行后的輸出結(jié)果是_。A)11 B)19 C)13 D)20正確答案:正確答案:B(知識點:二維數(shù)組的定義、引用及初始化)(知識點:二維數(shù)組的定義、引用及初始化)試題分析:該程序是求試題分
42、析:該程序是求aa0l、aa1l、aa2l、aa3l之和并輸出。之和并輸出。2021/3/9507.5 典型試題詳解6以下不能正確進行字符串賦初值的語句是以下不能正確進行字符串賦初值的語句是_。A)char str5=good!; B)char str =good!; C)char str6=good!; D)char str5=g, o,o,d;正確答案:正確答案:A(知識點:字符數(shù)組的初始化)(知識點:字符數(shù)組的初始化)試題分析:每個字符串末尾都有一個結(jié)束試題分析:每個字符串末尾都有一個結(jié)束0,因此,字符串,因此,字符串 good!在內(nèi)存中占在內(nèi)存中占6個字符型存儲單元,在初始化時,可以不
43、個字符型存儲單元,在初始化時,可以不指定數(shù)組的大小,或指定一個大于或等于指定數(shù)組的大小,或指定一個大于或等于6的值。選項的值。選項D中給出的中給出的初值個數(shù)小于數(shù)組的大小初值個數(shù)小于數(shù)組的大小5,則將初值賦給數(shù)組前面的元素,其,則將初值賦給數(shù)組前面的元素,其后的元素值為后的元素值為0。2021/3/9517.5 典型試題詳解7以下程序的輸出結(jié)果是以下程序的輸出結(jié)果是_。main() char ch35= AAAA, BBB, CC; printf(%sn,ch1);A)AAAAB)BBB C)BBBCCD)CC正確答案:正確答案:B(知識點:字符數(shù)組的初始化)(知識點:字符數(shù)組的初始化)試題分
44、析:程序中定義試題分析:程序中定義ch是一個字符型的二維數(shù)組,由于二維數(shù)組可以看是一個字符型的二維數(shù)組,由于二維數(shù)組可以看做是由一維數(shù)組構(gòu)成的一維數(shù)組,做是由一維數(shù)組構(gòu)成的一維數(shù)組,ch35是由是由ch0、ch1、ch2構(gòu)成的,而構(gòu)成的,而ch0、ch1、ch2又都是由又都是由5個字符型元素構(gòu)成的一維個字符型元素構(gòu)成的一維數(shù)組,因此數(shù)組,因此ch1即是二維數(shù)組即是二維數(shù)組ch35的第二行的字符串的第二行的字符串BBB所在所在一維數(shù)組的名字,因為其元素是字符類型,可以用數(shù)組的名字(即數(shù)組一維數(shù)組的名字,因為其元素是字符類型,可以用數(shù)組的名字(即數(shù)組的首地址)來表示所存儲的字符串的首地址)來表示所
45、存儲的字符串BBB,輸出時去掉字符串定界符,輸出時去掉字符串定界符“”。 2021/3/9527.5 典型試題詳解8有下列程序:有下列程序:main() char s = n123 printf(%d,%dn,strlen(s),sizeof(s);程序運行后的輸出結(jié)果是程序運行后的輸出結(jié)果是_。A)賦初值的字符串有錯)賦初值的字符串有錯B)6,7C)5,6 D)6,6正確答案:正確答案:C(知識點:字符串處理函數(shù)、轉(zhuǎn)義字符)(知識點:字符串處理函數(shù)、轉(zhuǎn)義字符)試題分析:程序的輸出結(jié)果是試題分析:程序的輸出結(jié)果是strlen(s)和和sizeof(s)兩個函數(shù)的值。函數(shù)兩個函數(shù)的值。函數(shù)strlen(s)是求字符串是求字符串s(用字符數(shù)組存儲)的長度,即字符串(用字符數(shù)組存儲)的長度,即字符串s中有效字中有效字符的個
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年股權(quán)投資基金投資限制協(xié)議
- 大慶市初中三模數(shù)學(xué)試卷
- 通信原理課程設(shè)計 AM
- 鏈板機課程設(shè)計
- 全新2025年度軟件開發(fā)與技術(shù)轉(zhuǎn)讓合同3篇
- 二零二五年度消防志愿者服務(wù)協(xié)議9篇
- 二零二五年度商業(yè)地產(chǎn)買賣合同的稅務(wù)處理2篇
- 二零二五版屋頂綠化養(yǎng)護及生態(tài)修復(fù)工程承包協(xié)議4篇
- 二零二五年度金融科技項目投資管理協(xié)議3篇
- 湖北省孝感市云夢縣2025屆中考生物模擬試題含解析
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- 公共政策學(xué)-陳振明課件
- SHSG0522023年石油化工裝置工藝設(shè)計包(成套技術(shù))內(nèi)容規(guī)定
- 《運營管理》案例庫
- 醫(yī)院安全保衛(wèi)部署方案和管理制度
- 我的自我針灸記錄摘錄
- 中醫(yī)學(xué)-五臟-心-課件
- 《駱駝祥子》閱讀記錄卡
- 教育學(xué)原理完整版課件全套ppt教程(最新)
- 醫(yī)療安全不良事件報告培訓(xùn)PPT培訓(xùn)課件
- 膽管癌的護理查房
評論
0/150
提交評論