版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Chap 7 數(shù) 組7.1 投票情況統(tǒng)計(jì)7.2 找出矩陣中最大值所在的位置7.3 判斷回文本章要點(diǎn)什么是數(shù)組? 為什么要使用數(shù)組?如何定義數(shù)組?如何引用數(shù)組元素?二維數(shù)組的元素在內(nèi)存中按什么方式存放?什么是字符串? 字符串結(jié)束符的作用是什么?如何實(shí)現(xiàn)字符串的存儲(chǔ)和操作,包括字符串的輸入和輸出?怎樣理解C語言將字符串作為一個(gè)特殊的一維字符數(shù)組?7.1 投票情況統(tǒng)計(jì) 輸入一個(gè)正整數(shù)n (1n10),再輸入n個(gè)整數(shù),用選擇法將它們從小到大排序后輸出。 7.1.1 程序解析7.1.2 一維數(shù)組的定義和引用7.1.3 一維數(shù)組的初始化7.1.4 使用一維數(shù)組編程7.1.1 程序解析【例7-1】調(diào)查電視節(jié)
2、目歡送程度。某電視臺(tái)要進(jìn)行一次對(duì)該臺(tái)8個(gè)欄目(設(shè)相應(yīng)欄目編號(hào)為18)的受歡迎情況,共調(diào)查了1000位觀眾,現(xiàn)要求編寫程序,輸入每一位觀眾的投票,每位觀眾只能選擇一個(gè)最喜歡的欄目投票,統(tǒng)計(jì)輸出各欄目的得票情況。分析:此題涉及新問題如何存儲(chǔ)8個(gè)欄目計(jì)票數(shù)據(jù)# includeint main( void ) int i,response, count9; /* 設(shè)立得票計(jì)數(shù)器 */ for(i = 1; i = 8; i+) counti = 0; /* 得票計(jì)數(shù)器清0 */ for( i = 1; i = 1000; i+) printf(input your response: ); /* 輸入
3、提示 */ scanf(%d,&response); if(response 8) /* 檢查是否有效票*/ printf(this is a bad response: %dn,response); else countresponse+; /* 對(duì)應(yīng)欄目得票加1 */ printf(result:n); /* 輸出得票情況 */ for(i = 1;i = 8;i+) printf(%4d%4dn,i,counti); return 0;例7-1程序7.1.2 一維數(shù)組的定義和引用1. 數(shù)組的一般概念數(shù)組是按序排列的同類型變量的集合,是一組具有相 同名字, 不同下標(biāo)的下標(biāo)變量。下標(biāo)變量又稱
4、數(shù)組元素,形式為:數(shù)組名下標(biāo) 如:a0、a1、a2、a3、a9數(shù)組名表示整個(gè)數(shù)組,如:a下標(biāo)指出該數(shù)組元素在數(shù)組中的位置。有1個(gè)下標(biāo)的下標(biāo)變量所組成的數(shù)組稱為一維數(shù)組; 有2個(gè)下標(biāo)的下標(biāo)變量所組成的數(shù)組稱為二維數(shù)組。 如:x1、y5 數(shù)組x和y都是一維數(shù)組 a12、b23 數(shù)組a和b都是二維數(shù)組7.1.2 一維數(shù)組的定義和引用2. 一維數(shù)組的定義 定義的一般形式 類型名 數(shù)組名數(shù)組長(zhǎng)度;類型名:數(shù)組元素的數(shù)據(jù)類型數(shù)組名:數(shù)組的名稱,標(biāo)識(shí)符數(shù)組長(zhǎng)度:常量表達(dá)式,指定數(shù)組元素的個(gè)數(shù) 例如: int a10; 定義一個(gè)含有10個(gè)整型元素的數(shù)組a char c81; 定義一個(gè)含有81個(gè)字符元素的數(shù)組c
5、 float f5; 定義一個(gè)含有5個(gè)實(shí)型元素的數(shù)組 f7.1.2 一維數(shù)組的定義和引用數(shù)組中元素的下標(biāo)從0開始依次編號(hào)。經(jīng)定義的數(shù)組,編譯后, 會(huì)分配到一段 連續(xù)的內(nèi)存單元。如有定義int a10; , 情況如下圖,a0, a1, a9依 次連續(xù)存儲(chǔ)。數(shù)組名(如a )是一個(gè)地址常量,存放 數(shù)組內(nèi)存空間的首地址。也就是第1 個(gè)元素的存儲(chǔ)地址,即a和&a0同值。各個(gè)元素的存儲(chǔ)地址用數(shù)組的首地址以及每個(gè)元 素所需的字節(jié)數(shù),均可計(jì)算得到。a0a1a97.1.2 一維數(shù)組的定義和引用數(shù)組定義中的數(shù)組長(zhǎng)度只能是常量表達(dá)式,不能 含變量。如以下定義是非法的: int n, m=10; double an,
6、 bm;同類型數(shù)組、變量可一起定義: int i, a10, b20;7.1.2 一維數(shù)組的定義和引用3. 一維數(shù)組的引用 只能引用單個(gè)數(shù)組元素,不能一次引用整個(gè)數(shù)組。 數(shù)組元素的引用方法有兩種:下標(biāo)法和指針法。下標(biāo)法引用一維數(shù)組元素的形式為: 數(shù)組名下標(biāo) 其中下標(biāo)為整型表達(dá)式,取值范圍是: 0, 數(shù)組長(zhǎng) 度-1,它表示了元素在數(shù)組中的順序位置。數(shù)組元素又稱下標(biāo)變量,使用方法與同類型變量 完全相同。編譯時(shí),不檢查數(shù)組元素的下標(biāo)是否越界。 一維數(shù)組的初始化 數(shù)組初始化就是在定義數(shù)組時(shí),對(duì)數(shù)組元素賦值。 其一般形式為: 類型名 數(shù)組名數(shù)組長(zhǎng)度 = 初值表;初值表中用逗號(hào)分隔的各值為將依次賦予各對(duì)應(yīng)
7、 元素的初值,必須是常量表達(dá)式,且類型應(yīng)與數(shù) 組的類型相一致。例如, int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 字符數(shù)組初始化有兩種形式char b6=C,h,i,n,a,0;char s6=China; 或 char s6=China; 一維數(shù)組的初始化允許只給局部元素賦初值(其余元素初始化為0 )。 如:int a10=1, 2, 3, b10= 0 ; 如對(duì)全部元素都賦初值,可缺省數(shù)組長(zhǎng)度,數(shù)組 長(zhǎng)度為初值表中初值的個(gè)數(shù)。例如, int a = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; char s = China; 對(duì)數(shù)組未指
8、定初始化自動(dòng)類型數(shù)組,各元素的值是隨機(jī)的未知值。全局?jǐn)?shù)組和靜態(tài)數(shù)組,各元素值那么會(huì)自動(dòng)初始 化為0。 一維數(shù)組的初始化一維數(shù)組的輸入和輸出對(duì)數(shù)組元素賦初值,更多的是通過鍵盤輸入的 方法。如輸入長(zhǎng)度為n的整型數(shù)組a的各元: for( i=0; in; i+ ) scanf(%d, &ai);輸出長(zhǎng)度為n的整型數(shù)組a的各元: for( i=0; i 1 )例7-2程序#include int main(void) int i, fib10 = 1, 1; for(i = 2; i 10; i+) fibi = fibi - 1 + fibi - 2; for(i = 0; i 10; i+) pr
9、intf(%6d, fibi); if(i + 1)%5=0) printf(n); return 0;運(yùn)行結(jié)果: 1 1 2 3 5 8 13 21 34 55 7.1.4 使用一維數(shù)組編程【例7-3】輸入5個(gè)整數(shù),將它們存入數(shù)組 a 中,再輸入一個(gè)數(shù)x,然后在數(shù)組中查找x,如果找到,輸出相應(yīng)的最小下標(biāo),否那么,輸出“Not Found。分析:這是個(gè)查找問題中的順序查找問題。通過遍歷(掃描)數(shù)組a,對(duì)數(shù)組各元逐個(gè)比較是否 等于x即可。最后判斷是否未找到,可用標(biāo)志法或break法。例7-3程序#include int main(void) int i, flag, x, a5; printf(
10、Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); for(flag = i = 0; i 5; i+) if(ai = x) printf(Index is %dn, i); flag = 1; break; if(flag = 0) printf(Not Foundn); return 0;運(yùn)行結(jié)果1: Enter 5 integers: 2 9 8 1 6 Enter x: 9 Index is 1運(yùn)行結(jié)果2: Enter 5 integers: 2 9 8
11、1 6 Enter x: 7 Not Foundi = 57.1.4 使用一維數(shù)組編程【例7-4】輸入一個(gè)正整數(shù)n(1 n 11), 再輸入n個(gè) 整數(shù),將它們存入數(shù)組 a 中。 輸出最小值和它所對(duì)應(yīng)的下標(biāo)。 將最小值與第一個(gè)數(shù)交換,輸出交換后的n個(gè)數(shù)。分析: 這是個(gè)求最值問題??上燃俣╝0最小,即最小元素的下標(biāo)index=0,然后遍歷數(shù)組a,各元素逐個(gè)與aindex比較,假設(shè)小于,那么其下標(biāo)存入index,這樣就是使 index 中始終是到當(dāng)前為止的最小元素的下標(biāo) 。7.1.4 使用一維數(shù)組編程實(shí)現(xiàn)語句: for(index = i = 0; in; i+) if(ai aindex) ind
12、ex = i; 交換兩個(gè)變量的值有多種方法:借助第三者 t = a; a = b; b = t;不借助第三者 a =a+b; b= a-b; a =a-b; a = b; b =a; a = b; 或?qū)懗?a = b = a = b;#include int main(void) int i, index, n, a10, t; printf(Enter n: ); scanf(%d, &n); printf(Enter %d integers: , n); for(i = 0; i n; i+) scanf(%d, &ai); for(index = 0, i = 1; i n; i+) i
13、f(ai aindex) index = i; printf(min is %dtsub is %dn,aindex,index);例7-4程序例7-4程序 t = aindex; aindex = a0; a0=t; for(i = 0; i n; i+) printf(%d , ai); return 0;運(yùn)行結(jié)果:Enter n: 6Enter 6 integers: 2 9 -1 8 1 6min is -1 sub is 2-1 9 2 8 1 67.1.4 使用一維數(shù)組編程【例7-5】選擇排序法。輸入一個(gè)正整數(shù)n(1 n 10),再輸入n個(gè)整數(shù),用選擇法將它們從小到大排序后輸出。例
14、7-5程序#include int main(void) int i, j, k, n, t, a10; printf(Enter n: ); scanf(%d, &n); printf(Enter %d integers: , n); for(i = 0; i n; i+) scanf(%d, &ai); for(i = 0; i n-1; i+) for(k = i, j = i+1; i n; i+) if(aj ak) k = j; t = ai; ai=ak; ak=t; 例7-5程序 printf(After sorted: ); for(i = 0; i n; i+) print
15、f(%d , ai); return 0; 運(yùn)行結(jié)果: Enter n: 10Enter 10 integers: 3 5 2 8 1 22 89 0 -1 7After sorted: -1 0 1 2 3 5 7 8 22 89選擇法排序 選擇法排序的根本思想是: 通過比較找到最小數(shù),如不是第1個(gè)數(shù),那么與第1個(gè)數(shù)交換,再在余下的數(shù)(即第2個(gè)開始)中找到最小數(shù),如不是第 2 個(gè)數(shù),那么與第 2 個(gè)數(shù)交換,再在余下的數(shù)(即第3個(gè)開始)中找到最小數(shù),如不是第 3 個(gè)數(shù),那么與第 3 個(gè)數(shù)交換,依此類推,n 個(gè)數(shù)經(jīng)過 n-1 輪比較即可完成排序。 選擇法排序選擇法排序的實(shí)現(xiàn)1:int n=5,
16、i, j, t;int a5 = 3, 5, 2, 8, 1;for(i = 0; i n-1; i+) for( j = i+1; j aj) t = ai; ai = aj; aj = t; ija0a1a2a3a4013528102352810325381042538115382121538213135821413582125832312583241258312385341238512358選擇法排序的實(shí)現(xiàn)1流程:i n-1 i = 0交換ai,ajTFj = i+1j ajj +i +TTendFF選擇法排序選擇法排序的實(shí)現(xiàn)2:int n=5, i, j, k, t;int a5 =
17、3, 5, 2, 8, 1; for(i = 0; i n-1; i+) for(k=i, j=i+1; jaj) k = j; if(k != i) t=ai; ai=aj; aj=t; ikja0a1a2a3a400135281002352810233528102435281043528111215283123152831241528312152832231258322412583241258333412385341238512358選擇法排序的實(shí)現(xiàn)2流程:j ni ajj +TTendFFi +交換ai,akk != i TF冒泡法排序冒泡法排序1的根本思想是: 從第n個(gè)數(shù)開始,依次比較
18、相鄰兩個(gè)數(shù),即第n個(gè)與第n-1個(gè)、第n-1個(gè)與第n-2個(gè)、 ,每次比較,假設(shè)不滿足由小到大的順序,那么兩者對(duì)調(diào)位置,通過一輪比較,參加比較的數(shù)中的最小數(shù)就“上升到它們中最前面的位置,下一輪再從第n個(gè)數(shù)開始,把余下的數(shù)依次比較,這樣,通過n-1輪比較,就完成了全部n個(gè)數(shù)的升序排列。在第i輪比較時(shí),從第 1個(gè)位置開始已排序定位了i-1個(gè)數(shù),余下n-i+1個(gè)數(shù),需兩兩比較 n-i次。冒泡法排序冒泡法排序1的實(shí)現(xiàn):int n=5, i, j, t;int a5 = 3, 5, 2, 8, 1;for(i = 0; i i; j-) if(aj aj-1) t = aj; aj = aj-1; aj-1
19、 = t; ija0a1a2a3a4043528103352180235128013152813528141352813135281213258123582412358231235812358341235812358冒泡法排序冒泡法排序2的根本思想是: 從第1個(gè)數(shù)開始,依次比較相鄰兩個(gè)數(shù),即第1個(gè)與第2個(gè)、第2個(gè)與第3個(gè)、 ,每次比較,假設(shè)不滿足由小到大的順序, 那么兩者對(duì)調(diào)位置, 通過一輪比較,參加比較的數(shù)中的最大數(shù)就 “ 下沉 到它們中最后面的位置,下一輪再從第1個(gè)數(shù)開始,把余下的數(shù)依次比較,這樣,通過n-1輪比較,就完成了全部n個(gè)數(shù)的升序排列。在第i輪比較時(shí),從第 n個(gè)位置開始向前已排序
20、定位了i-1個(gè)數(shù),余下 n-i+1個(gè)數(shù),需兩兩比較n-i次冒泡法排序冒泡法排序2的實(shí)現(xiàn):int n=5, i, j, t;int a5 = 3, 5, 2, 8, 1;for(i = 0; i n-1; i+) for( j = 0; j aj+1) t = aj; aj = aj+1; aj+1 = t; ija0a1a2a3a40035281013528102325810332581325181032518112351812235182315820231582123158213583021358123587.1.4 使用一維數(shù)組編程【例7-6】二分查找法。設(shè)已有一個(gè)10個(gè)元素的整形數(shù)組a,
21、且按值從小到大有序。輸入一個(gè)整數(shù) x,然后在數(shù)組中查找x,如果找到,輸出相應(yīng)的下標(biāo),否那么,輸出“Not Found。 設(shè):待查數(shù)在變量x中; 變量low 用于存放查找范圍的頂部位置; 變量mid 用于存放查找范圍的中間位置; 變量high 用于存放查找范圍的底部位置;二分法查找流程圖mid=(low+high)/2x!=amid TF輸入xlow=0;hghi=n-1;Not foundhghi=mid-1low=mid+1low=hghi low=hghi 輸出midxamid FFFTTT #include int main(void) int low, high, mid, n=10,
22、 x, a10=1,2,3,4,5,6,7,8,9,10; printf(Enter x: ); scanf(%d,&x); low = 0; high = n - 1; while (low = high) mid = (low + high) / 2; /* 中間位置 */ if (x = amid) break; /* 找到,中止循環(huán) */ else if (x amid) high = mid - 1; /* 前半段, high前移 */ else low = mid + 1; /* 后半段, low后移 */ if(low = high) printf(Index is %d n,m
23、id); else printf( Not Foundn); return 0;例7-6程序運(yùn)行結(jié)果1:Enter x: 8Index is 7運(yùn)行結(jié)果2:Enter x: 71Not Found7.2 找出矩陣中最大值所在的位置 將1個(gè)3*2的矩陣存入1個(gè)3*2的二維數(shù)組中,找出最大值以及它的行下標(biāo)和列下標(biāo),并輸出該矩陣。 7.2.1 程序解析7.2.2 二維數(shù)組的定義和引用7.2.3 二維數(shù)組的初始化7.2.4 使用二維數(shù)組編程7.2.1 程序解析【例7-7】將1個(gè) 3*2的矩陣存入1個(gè) 3*2 的二維數(shù)組 中,找出最大值以及它的行下標(biāo)和列下標(biāo),并輸出 該矩陣。分析:涉及新問題:二維數(shù)組求
24、最值方法與【例7-4】的一維數(shù)組中求最值方 法類似。row 記錄最大值的行下標(biāo) col 最大值的列下標(biāo) arowcol 就是最大值#include int main(void) int i, j, col, row, a32; printf(Enter 6 integers:n) ; for(i = 0; i 3; i+) for(j = 0; j 2; j+) scanf(%d, &aij); for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(%4d, aij); printf(n); 例7-7程序例7-7程序 row = col = 0; for
25、(i = 0; i 3; i+) for(j = 0; j arowcol) row = i; col = j; printf(max = a%d%d = %dn, row, col, arowcol); return 0; 運(yùn)行結(jié)果:Enter 6 integers: 3 2 10 -9 6 -1 3 2 10 -9 6 -1max = a10 = 107.2.2 二維數(shù)組的定義和引用1. 二維數(shù)組的定義 定義的一般形式 類型名 數(shù)組名行長(zhǎng)度列長(zhǎng)度 其中行長(zhǎng)度和列長(zhǎng)度只能是常量表達(dá)式。 如: int a32; 定義3行2列的二維數(shù)組a, 各元素為: a00 a01 a10 a11 a20 a
26、21 如下圖,按行存放在一段連續(xù)的內(nèi)存中。a00a01a10a11a20a217.2.2 二維數(shù)組的定義和引用二維數(shù)組是一維數(shù)組的數(shù)組 可以把a(bǔ)看作含有a0、a1和a2共3個(gè)元素的一 維數(shù)組,而a0、a1和a2又都是含有2個(gè)元素 的一維數(shù)組,a0、a1和a2就是這3個(gè)一維數(shù) 組的名字,即: a: a0: a00 a01 a1: a10 a11 a2: a20 a217.2.2 二維數(shù)組的定義和引用2. 二維數(shù)組的引用 數(shù)組元素的引用方法有兩種:下標(biāo)法和指針法。 下標(biāo)法引用二維數(shù)組元素的形式為: 數(shù)組名行下標(biāo) 列下標(biāo) 其中: 行、列下標(biāo) 可以是整型表達(dá)式; 行下標(biāo) 取值范圍: 0, 行長(zhǎng)度-1;
27、 列下標(biāo) 取值范圍: 0, 列長(zhǎng)度-1。7.2.3 二維數(shù)組的初始化1. 分行賦初值的一般形式 類型名 數(shù)組名行長(zhǎng)度列長(zhǎng)度 = 初值表0, , 初值表k, ; 其中初值表k中的數(shù)據(jù)依次賦給k行的元素。 例如:int a32=1,2,3,4,5,6;2. 順序賦初值的一般形式 類型名 數(shù)組名行長(zhǎng)度列長(zhǎng)度 = 初值表; 按數(shù)組元素在內(nèi)存中的存放順序,把初值表中的數(shù) 據(jù)依次賦給元素。 例如:int a32=1,2,3,4,5,6;7.2.3 二維數(shù)組的初始化3. 初始化說明允許只給局部元素賦初值(其余元素初始化為0) int a34=8,4, 5, 4; int a34=8,4,2,1,5;當(dāng)用分行
28、賦值給出了所有行,或者當(dāng)用順序賦值給出全部數(shù)組元素初始化值時(shí),可以缺省行長(zhǎng)度 int a 4=8,4, 5,4; int a 4= 8,4,2,1, 5,7,0,3, 4,0,9,6;對(duì)數(shù)組未指定初始化自動(dòng)類型數(shù)組,各元素值是隨機(jī)的未知值。全局?jǐn)?shù)組和靜態(tài)數(shù)組,各元素值自動(dòng)賦初值0。7.2.3 二維數(shù)組的初始化二維數(shù)組的輸入和輸出對(duì)數(shù)組元素賦初值,更多的是通過鍵盤輸入的方法。 如輸入n行m列的整型數(shù)組a的各元: for( i=0; in; i+ ) for( j=0; jm; j+ ) scanf(%d, &ai);輸出n行m列的整型數(shù)組a的各元: for( i=0; in; i+ ) for(
29、 j=0; jm; j+ ) printf(%d , ai); printf(n); 7.2.4 使用二維數(shù)組編程【例7-8】定義1個(gè) 3*2的二維數(shù)組a,數(shù)組元素的值 由下式給出,按矩陣的形式輸出a。aij = i + j0i2,0j1例7-8程序#include int main(void) int i, j, a32; for(i = 0; i 3; i+) for(j = 0; j 2; j+) aij = i + j; for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(%4d, aij); printf(n); return 0;運(yùn)行結(jié)果:
30、 0 1 1 2 2 37.2.4 使用二維數(shù)組編程【例7-9】輸入一個(gè)正整數(shù)n(1n6),根據(jù)下式 生成1個(gè)n*n的方陣,然后將該方陣轉(zhuǎn)置(行列互換) 后輸出。 aij = i * n + j + 10in-1,0jn-1 例如,當(dāng)n=3時(shí),有: 轉(zhuǎn)置前 轉(zhuǎn)置后 1 2 3 1 4 7 4 5 6 2 5 8 7 8 9 3 6 97.2.4 使用二維數(shù)組編程 矩陣術(shù)語與二維數(shù)組下標(biāo)的對(duì)應(yīng)關(guān)系:int aNN; N是正整數(shù)aij:i、j的取值范圍0,N-1設(shè)N為3,用二維數(shù)組a表示N*N方陣時(shí):a00 a01 a02a10 a11 a12a20 a21 a22 主對(duì)角線 i=j上三角 i=j
31、副對(duì)角線 i+j=N-17.2.4 使用二維數(shù)組編程遍歷主對(duì)角線:for(i = 0; i N; i+) aii = ; 遍歷副對(duì)角線:for(i = 0; i N; i+) aiN-1-i = ; 遍歷上三角:for(i = 0; i N; i+) for(j = i; j N; j+) aij = ; 遍歷下三角:for(i = 0; i N; i+) for(j = 0; j = i; j+) aij = ; #include int main(void) int i, j, n, t, a66; printf(Enter n: ); scanf(%d, &n); for(i = 0;
32、i n; i+) /* 遍歷數(shù)組各元賦值 */ for(j = 0; j n; j+) aij = i * n + j + 1; for(i = 0; i n; i+) for(j = 0; j n; j+) if(i = j) /* 只遍歷上三角 */ t = aij; aij = aji; aji = t; 例7-9程序for(j = i; j n; j+)例7-9程序 for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(%4d, aij); printf(n); return 0;運(yùn)行結(jié)果:Enter n: 3 1 4 7 2 5 8 3 6 9
33、7.2.4 使用二維數(shù)組編程【例7-10】定義函數(shù)day_of_year(year, month, day),計(jì)算并返回年year、月month 和日day 對(duì)應(yīng)的是該年的第幾天。判別閏年的條件是年份能被 4 整除但不能被100整除,或能被400整除。分析:主要要考慮各月天數(shù)如何獲取:用二維數(shù)組0行和1行的 112 列分別預(yù)存平年和閏年 的 112 月天數(shù)。用一維數(shù)組下標(biāo) 112 的元素預(yù)存平年的 112月 天 數(shù),2月的天數(shù)根據(jù)是否閏年在計(jì)算時(shí)修正。其他不用數(shù)組,用分支語句的方法。#include /* 用一維數(shù)組 */int day_of_year(int y, int m, int d)
34、 int i, tab =0,31,28,31,30,31,30,31,31,30,31,30,31; tab2 += (y%4=0 & y%100!=0) | y%400=0; for(i=1; im; i+) d += tabi; return d;int main(void) int y, m, d; scanf(%d%d%d, &y, &m, &d); printf(%dn, day_of_year(y,m,d); return 0;例7-10程序運(yùn)行結(jié)果1:2000 3 161運(yùn)行結(jié)果2:2021 3 160/* 用二維數(shù)組存放月天數(shù) */int day_of_year(int y,
35、 int m, int d) int i, leap; int tab213 = 0,31,28,31,30,31,30,31,31,30,31,30,31 0,31,29,31,30,31,30,31,31,30,31,30,31 ; leap = (y%4=0 & y%100!=0) | y%400=0; for(i=1; im; i+) d += tableapi; return d;例7-10程序int day_of_year(int y, int m, int d) switch( m-1 ) /* 不用數(shù)組 */ case 11: d += 30; case 10: d += 31
36、; case 9: d += 30; case 8: d += 31; case 7: d += 31; case 6: d += 30; case 5: d += 31; case 4: d += 30; case 3: d += 31; case 2: d+=28+(y%4=0&y%100!=0|y%400=0); case 1: d += 31; return d;例7-10程序7.3 判斷回文【例7-11】輸入一個(gè)以回車結(jié)束的字符串(少于10個(gè)字符),判斷該字符串是否是回文?所謂回文就是字符串中心對(duì)稱,如 abcba、abccba 是回文,abcdba不是回文。7.3.1 程序解析7.
37、3.2 一維字符數(shù)組7.3.3 字符串 使用字符串編程7.3.1 程序解析【例7-11】輸入一個(gè)以回車結(jié)束的字符串(少于10個(gè)字符),判斷該字符串是否是回文?所謂回文就是字符串中心對(duì)稱,如 abcba、abccba 是回文,abcdba不是回文。分析:新內(nèi)容:字符串例7-11程序# include int main(void) int i, n, m; char s10; printf(Enter a string: ); i = 0; while(si = getchar( ) != n) i+; si = 0; for(n = 0,m = i-1; n = m) printf(It is
38、a plalindromen); else printf(It is not a plalindromen); return 0;Enter a string: abcbaIt is a plalindrome Enter a string: abcdbaIt is not a plalindrome 7.3.2 一維字符數(shù)組 一維字符數(shù)組用于存放字符型數(shù)據(jù)。其定義、引用、初始化與其他類型的一維數(shù)組相同。定義:char str81;初始化: char s6=H,a,p,p,y,0; char s6=Happy; char s6=Happy;允許只給局部元素賦初值(其余元素初始化為0): cha
39、r s81 = H,a,p,p,y; char s81 = 0 ;7.3.2 一維字符數(shù)組如對(duì)全部元素都賦初值,可缺省數(shù)組長(zhǎng)度,數(shù)組 長(zhǎng)度為初值表中初值的個(gè)數(shù)。 char s = H,a,p,p,y,0; char s = Happy; 對(duì)數(shù)組未指定初始化自動(dòng)類型數(shù)組,各元素的值是隨機(jī)的未知值。全局?jǐn)?shù)組和靜態(tài)數(shù)組,各元素值那么會(huì)自動(dòng)初始 化為0。編譯時(shí),不檢查數(shù)組元素的下標(biāo)是否越界。1. 對(duì)字符串的約定 字符串是借助于字符數(shù)組來存放的,規(guī)定以字符0作為“字符串結(jié)束標(biāo)志。0 占用存儲(chǔ)空間,但不計(jì)入字符串長(zhǎng)度。0的ASCII碼值為0。2. 字符串常量的約定 C語言中沒有字符串變量,但卻允許使用字符
40、串常量,用一對(duì)雙引號(hào)括起來的字符序列來表示,其隱式包含最后的結(jié)束標(biāo)志0,無需人為添加。 A 存儲(chǔ): A 存儲(chǔ): 存儲(chǔ):7.3.3 字符串A00A7.3.3 字符串3. 字符數(shù)組與字符串的區(qū)別字符數(shù)組可以存放一串字符,但并不限定最后一 個(gè)字符應(yīng)該是什么。而字符串最后必須是0。在字符數(shù)組中的有效字符后加上0這一特定情況 下,可以把它“看作字符串變量,但又不同于一 般的變量。存儲(chǔ)字符串是字符數(shù)組的一種具體應(yīng)用。一般,一維字符數(shù)組存放一個(gè)字符串,二維字符 數(shù)組那么可每行存放一個(gè)字符串。7.3.3 字符串4. 字符數(shù)組存儲(chǔ)字符串 數(shù)組初始化,賦值和輸入數(shù)組初始化 char s81 = China;賦值
41、char s81; s0=C; s1=h; s2=i; s3=n; s4=a; s5=0;輸入(按目前的知識(shí)) char s81; int i;for:for(i=0; (si = getchar() != n; i+); si = 0;7.3.3 字符串while:i = 0; while(si+ = getchar() != n); s-i = 0; 或: i = 0; while(si = getchar() != n) i+; si = 0;do-while: i = 0; do si = getchar(); while(si+ != n); s-i = 0;7.3.3 字符串5. 對(duì)字符數(shù)組中字符串的操作(遍歷字符串) 遍歷字符串時(shí), 一般以是否到達(dá)結(jié)束符0來控制。 for(i = 0; si != 0; i+) 【例7-12】輸入一個(gè)以回車符結(jié)束的字符串(少于10個(gè)字符),過濾所有非數(shù)字字符后轉(zhuǎn)成十進(jìn)制整數(shù)輸出。分析:可用以下語句實(shí)現(xiàn)數(shù)字字符串轉(zhuǎn)十進(jìn)制整數(shù) for(n = i = 0; s
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《護(hù)理康復(fù)評(píng)定上》課件
- 2021屆天津市楊村一中、寶坻一中等四校高一下學(xué)期期末聯(lián)考化學(xué)試題
- 《綜合醫(yī)院評(píng)審概述》課件
- 小學(xué)四年級(jí)數(shù)學(xué)小數(shù)加減法計(jì)算題練習(xí)卷
- 《汽車車型解析》課件
- 電焊管道焊接技術(shù)
- 美食烹飪行業(yè)調(diào)味技巧培訓(xùn)實(shí)踐
- 物流行業(yè)倉儲(chǔ)管理心得總結(jié)
- 電影院服務(wù)員的服務(wù)技巧
- 印刷行業(yè)采購工作心得
- 配合、協(xié)調(diào)、服務(wù)方案
- 市政工程監(jiān)理大綱
- 2023-2024學(xué)年廣東省廣州市黃埔區(qū)六年級(jí)(上)期末數(shù)學(xué)試卷(A卷)
- 高職院校專業(yè)教師數(shù)字素養(yǎng)架構(gòu)與提升路徑
- 2024年北京市學(xué)業(yè)水平合格性地理試卷(第一次)
- 黑龍江哈爾濱六中2025屆高三第六次模擬考試數(shù)學(xué)試卷含解析
- GB/T 36547-2024電化學(xué)儲(chǔ)能電站接入電網(wǎng)技術(shù)規(guī)定
- 會(huì)議記錄培訓(xùn)教材課件幻燈片
- 售后服務(wù)人員培訓(xùn)資料課件
- 2024-2030年中國(guó)薯?xiàng)l行業(yè)發(fā)展趨勢(shì)及投資盈利預(yù)測(cè)報(bào)告
- 期末 (試題) -2024-2025學(xué)年人教PEP版(2024)英語三年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論