版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、Chap 7 數(shù)數(shù) 組組7.1 投票情況統(tǒng)計投票情況統(tǒng)計7.2 找出矩陣中最大值所在的位置找出矩陣中最大值所在的位置7.3 判斷回文判斷回文本章要點本章要點數(shù)組的定義、數(shù)組元素的引用數(shù)組的定義、數(shù)組元素的引用 二維數(shù)組元素的存儲二維數(shù)組元素的存儲字符串和字符串和 字符串結束符字符串結束符字符串的存儲、輸入和輸出字符串的存儲、輸入和輸出例例7-1:編寫程序:調(diào)查電視節(jié)目歡迎程度。編寫程序:調(diào)查電視節(jié)目歡迎程度。 某電視臺要調(diào)查對該臺某電視臺要調(diào)查對該臺8 8個欄目(欄目編號為個欄目(欄目編號為1818)的受歡迎情況,共調(diào)查了)的受歡迎情況,共調(diào)查了10001000位觀眾,每位位觀眾,每位觀眾只能
2、選擇一個最喜歡的欄目投票。觀眾只能選擇一個最喜歡的欄目投票。 程序要求:輸入每一位觀眾的投票,統(tǒng)計輸出程序要求:輸入每一位觀眾的投票,統(tǒng)計輸出各欄目的得票情況。各欄目的得票情況。7.1 投票情況統(tǒng)計投票情況統(tǒng)計7.1.1 程序解析排序程序解析排序 # includeint main( void ) int count9; /* 設立數(shù)組,欄目編號對應數(shù)組下標設立數(shù)組,欄目編號對應數(shù)組下標 */ int i,response; for(i = 1;i = 8;i+) counti = 0; /* 各欄目計數(shù)器清各欄目計數(shù)器清0 */ for( i = 1;i = 1000;i+) /* 調(diào)試調(diào)試
3、時時可把可把1000改小,如改小,如10 */ printf(input your response: ); /* 輸入提示輸入提示 */ scanf(%d,&response); if(response 8) /* 檢查投票是否有效檢查投票是否有效*/ printf(this is a bad response: %dn,response); else countresponse+; /* 對應欄目得票加對應欄目得票加1 */ printf(result:n); /* 輸出各欄目得票情況輸出各欄目得票情況 */ for(i = 1;i = 8;i+) printf(%4d%4dn,i
4、,counti); return 0;input your response: 3input your response: 6input your response: 9this is a bad response: 9input your response: 8result:1 22 03 401234567820412100for(i = 1;i = 8;i+) printf(%4d%4dn,i,counti);count count0 count1 count8數(shù)組數(shù)組n數(shù)組:數(shù)組:相同類型相同類型數(shù)據(jù)的數(shù)據(jù)的有序有序集合集合,內(nèi)存中連續(xù),內(nèi)存中連續(xù)存放。存放。 由數(shù)組名和下標惟一地確定
5、每個數(shù)組元素由數(shù)組名和下標惟一地確定每個數(shù)組元素 每個元素都屬于同一類型每個元素都屬于同一類型n優(yōu)點:表述簡潔,可讀性高;便于用優(yōu)點:表述簡潔,可讀性高;便于用循環(huán)循環(huán)結構結構7.1.2 一維數(shù)組的定義和引用一維數(shù)組的定義和引用1、定義、定義 類型名類型名 數(shù)組名數(shù)組名數(shù)組長度數(shù)組長度類型名:數(shù)組元素的類型類型名:數(shù)組元素的類型數(shù)組名:數(shù)組(變量)的名稱,標識符數(shù)組名:數(shù)組(變量)的名稱,標識符數(shù)組長度:數(shù)組長度:常量表達式常量表達式,給定數(shù)組的大小,給定數(shù)組的大小int a10; 定義一個含有定義一個含有10個整型元素的數(shù)組個整型元素的數(shù)組 achar c200;定義一個含有定義一個含有20
6、0個字符元素的數(shù)組個字符元素的數(shù)組 c2、數(shù)組的內(nèi)存結構、數(shù)組的內(nèi)存結構內(nèi)存地址內(nèi)存地址下標下標值值40289402684024740226402054018440163401424012140100aint a10;假設假設int占用占用2個字節(jié),個字節(jié),數(shù)組數(shù)組a的內(nèi)存分配形式的內(nèi)存分配形式 :根據(jù)第一個元素的地址,根據(jù)第一個元素的地址,以及元素所需的字節(jié)數(shù),以及元素所需的字節(jié)數(shù),可獲得可獲得各個元素的存儲地址各個元素的存儲地址 數(shù)組名是一個數(shù)組名是一個地址常量地址常量,存放,存放數(shù)組的首地址。不允許被修改。數(shù)組的首地址。不允許被修改。3、引用、引用n數(shù)組先定義,后使用數(shù)組先定義,后使用n
7、只能引用單個的只能引用單個的數(shù)組元素數(shù)組元素,不能一次引用整個數(shù)組,不能一次引用整個數(shù)組數(shù)組名數(shù)組名下標下標下標:整型表達式下標:整型表達式取值范圍:取值范圍:0,數(shù)組長度,數(shù)組長度-1int a10;10個元素:個元素:a0、a1、 a9n數(shù)組元素的使用方法,與同類型的變量相同數(shù)組元素的使用方法,與同類型的變量相同scanf(%d, &ai);counti+;temp = aindex; aindex= ak; ak = temp; printf(%d , ai);下標不要越界下標不要越界不能使用不能使用a10區(qū)分數(shù)組的定義和數(shù)組元素的引用區(qū)分數(shù)組的定義和數(shù)組元素的引用7.1.3 一
8、維數(shù)組的初始化一維數(shù)組的初始化n定義數(shù)組時,對數(shù)組元素賦初值定義數(shù)組時,對數(shù)組元素賦初值類型名類型名 數(shù)組名數(shù)組名數(shù)組長度數(shù)組長度 = 初值表初值表;int a10 = 1,2,3,4,5,6,7,8,9,10;a0=1, a1=2,. a9=10n靜態(tài)數(shù)組、動態(tài)數(shù)組的初始化靜態(tài)數(shù)組、動態(tài)數(shù)組的初始化static int b5 = 1, 2, 3, 4, 5; 靜態(tài)數(shù)組未初始化,所有元素自動賦靜態(tài)數(shù)組未初始化,所有元素自動賦0static int b5;動態(tài)數(shù)組未初始化,所有元素為隨機值動態(tài)數(shù)組未初始化,所有元素為隨機值auto int c5; 等價與等價與 int c5;static int
9、 b5 = 1, 2, 3;b0 = 1, b1 = 2, b2 = 3, b3 = 0, b4 = 0 auto int fib20 = 0, 1;fib0 = 0, fib1 = 1, 其余元素不確定其余元素不確定n如果對全部元素都賦初值,可以省略數(shù)組長度如果對全部元素都賦初值,可以省略數(shù)組長度int a 10 = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9針對部分元素的針對部分元素的初始化初始化建議不要省略數(shù)組長度建議不要省略數(shù)組長度7.1.4 使用一維數(shù)組編程使用一維數(shù)組編程數(shù)組和循環(huán)數(shù)組和循環(huán)for(i = 0; i n; i+) printf(%d , ai);數(shù)組數(shù)
10、組下標下標作為循環(huán)變量,通過循環(huán),逐個作為循環(huán)變量,通過循環(huán),逐個處理數(shù)組元素處理數(shù)組元素 一維數(shù)組示例一維數(shù)組示例例例 7-2 用數(shù)組計算用數(shù)組計算fibonacci數(shù)列的前數(shù)列的前10個數(shù),并按每行打印個數(shù),并按每行打印5個個數(shù)的格式輸出。數(shù)的格式輸出。1, 1, 2, 3, 5, 例例 7-3 順序查找法。輸入順序查找法。輸入5個整數(shù),將它們存入數(shù)組個整數(shù),將它們存入數(shù)組a中,再輸入中,再輸入1個數(shù)個數(shù)x,然后在數(shù)組中查找然后在數(shù)組中查找x,如果找到,輸出相應的最小下如果找到,輸出相應的最小下標,否則,輸出標,否則,輸出“Not Found”。 找第一個匹配、最后一個匹配、所有匹配找第一
11、個匹配、最后一個匹配、所有匹配例例 7-4 輸入輸入n(n10),再再輸入輸入n個數(shù)個數(shù)(1) 輸出最小值和它所對應的下標輸出最小值和它所對應的下標(2) 將最小值與第一個數(shù)交換,輸出交換后的將最小值與第一個數(shù)交換,輸出交換后的n個數(shù)個數(shù)例例 7-5 選擇排序法。輸入一個選擇排序法。輸入一個n(1n10 ),再再輸入輸入n個整數(shù),用選個整數(shù),用選擇法將它們從小到大排序后輸出。擇法將它們從小到大排序后輸出。例例 7-6二分查找法。設已有一個二分查找法。設已有一個10個元素的整形數(shù)組個元素的整形數(shù)組a,且按值從,且按值從小到大有序。輸入一個整數(shù)小到大有序。輸入一個整數(shù)x,然后在數(shù)組中查找,然后在數(shù)
12、組中查找x,如果找到,如果找到,輸出相應的下標,否則,輸出輸出相應的下標,否則,輸出“Not Found”。用數(shù)組計算用數(shù)組計算fibonacci數(shù)列的前數(shù)列的前10個數(shù),并個數(shù),并按每行打印按每行打印5個數(shù)的格式輸出。個數(shù)的格式輸出。1, 1, 2, 3, 5, 8, 13, 用數(shù)組計算并存放用數(shù)組計算并存放fibonacci數(shù)列的前數(shù)列的前10個數(shù)個數(shù)f0 = f1 = 1fn = fn-1 + fn-2 2n9例例 7-2 計算計算fibonacci數(shù)列數(shù)列#include int main(void) int i; int fib10 = 1, 1; /* 數(shù)組初始化數(shù)組初始化 */
13、for(i = 2; i 10; i+) fibi = fibi - 1 + fibi - 2; for(i = 0; i 10; i+) printf(%6d, fibi); if(i + 1) % 5 = 0) /* 5個數(shù)換行個數(shù)換行 */ printf(n); return 0; 例例 7-2 源程序源程序 1 1 2 3 5 8 13 21 34 55輸入輸入5個整數(shù),將它們存入數(shù)組個整數(shù),將它們存入數(shù)組a中,再輸入中,再輸入1個數(shù)個數(shù)x,然后在數(shù)組中查找然后在數(shù)組中查找x,如果找到,輸出相應的下標,如果找到,輸出相應的下標,否則,輸出否則,輸出“Not Found”。輸入:輸入:2
14、 9 8 1 9 9輸出:輸出:1輸入:輸入:2 9 8 1 6 7輸出:輸出:Not Found例例7-3 在數(shù)組中查找一個給定的數(shù)在數(shù)組中查找一個給定的數(shù)#include int main(void) int i, flag, x; int a5; printf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); flag = 0; for(i = 0; i 5; i+) if(ai = x) printf(Index is %dn, i); f
15、lag = 1; break; if(flag = 0) printf(Not Foundn); return 0; 例例 7-3 源程序源程序Enter 5 integers: 2 9 8 1 9Enter x: 9Index is 1Enter 5 integers: 2 9 8 1 9Enter x: 7Not Foundflag的作用?的作用?#include int main(void) int i, flag, x; int a5; printf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(
16、“Enter x: ); scanf(%d, &x); flag = 0; for(i = 0; i 5; i+) if(ai = x) printf(Index is %dn, i); flag = 1; break; if(flag = 0) printf(Not Foundn); return 0; 例例 7-3 思考思考(1)Enter 5 integers: 2 9 8 1 9Enter x: 9Index is 1Index is 4去掉去掉break語句,結果?語句,結果?#include int main(void) int i, sub, x; int a5; pri
17、ntf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); sub = -1; for(i = 0; i 5; i+) if(ai = x) sub = i; if(sub != -1) printf(Index is %dn, sub); else printf(Not Foundn); return 0; 例例 7-3 思考思考(2)Enter 5 integers: 2 9 8 1 9Enter x: 9Index is 4sub的作用?的作用
18、?#include int main(void) int i, min, n; int a10; printf(Enter n: ); scanf(%d, &n); printf(Enter %d integers: , n); for(i = 0; i n; i+) scanf(%d, &ai); min = a0; for(i = 1; i n; i+) if(ai min) min = ai; printf(min is %d n, min); return 0;例例 7-4 求最小值求最小值Enter n: 6Enter 6 integers: 2 9 -1 8 1 6
19、min is -1方法!方法!雖得到了最小值,但不能雖得到了最小值,但不能確定最小值所在下標!確定最小值所在下標!輸入輸入n(n10), 再再輸入輸入n個數(shù)個數(shù), 輸出最小值和它輸出最小值和它所對應的下標。所對應的下標。用用index記錄最小值對應的下標記錄最小值對應的下標aindex就是最小值就是最小值例例 7-4(1) 求最小值及其下標求最小值及其下標流程圖流程圖#include int main(void) int i, index, n; int a10; printf(Enter n: ); scanf(%d, &n); printf(Enter %d integers: ,
20、 n); for(i = 0; i n; i+) scanf(%d, &ai); index = 0; for(i = 1; i n; i+) if(ai aindex) index = i; printf(min is %dtsub is %dn, aindex, index); return 0;求最小值及下標求最小值及下標Enter n: 6Enter 6 integers: 2 9 -1 8 1 6min is -1 sub is 2 輸入輸入n(n10), 再再輸入輸入n個數(shù)個數(shù),將最小值與第將最小值與第一個數(shù)交換,輸出交換后的一個數(shù)交換,輸出交換后的n個數(shù)。個數(shù)。用用ind
21、ex記錄最小值對應的下標記錄最小值對應的下標aindex就是最小值就是最小值最小值與第一個數(shù)交換最小值與第一個數(shù)交換aindex a0例例 7-4(2) 交換最小值交換最小值例例 7-5 選擇法排序選擇法排序 輸入輸入n(n10), 再再輸入輸入n個數(shù)個數(shù),用選擇法將它們從用選擇法將它們從小到大排序后輸出。小到大排序后輸出。設設 n=5 ,輸入為:,輸入為:3 5 2 8 1第第1次:次: 1 5 2 8 3 第第2次:次: 2 5 8 3 第第3次:次: 3 8 5 第第4次:次: 5 8 0123435281下標下標 值值3 5 2 8 1 (n=5)5個數(shù)個數(shù)(a0a4)中找最小數(shù),與中
22、找最小數(shù),與a0交換交換(1) 1 5 2 8 3 a4 a04個數(shù)個數(shù)(a1a4)中找最小數(shù),與中找最小數(shù),與a1交換交換(2) 1 2 5 8 3 a2 a13個數(shù)個數(shù)(a2a4)中找最小數(shù),與中找最小數(shù),與a2交換交換(3) 1 2 3 8 5 a4 a22個數(shù)個數(shù)(a3a4)中找最小數(shù),與中找最小數(shù),與a3交換交換(4) 1 2 3 5 8 a4 a3選擇法選擇法(1)(1) n個數(shù)個數(shù) (a0an-1) 中找最小數(shù),與中找最小數(shù),與 a0 交換交換(2) n-1個數(shù)個數(shù) (a1an-1) 中找最小數(shù),與中找最小數(shù),與 a1 交換交換 (n-1) 2個數(shù)個數(shù) (an-2an-1) 中找
23、最小數(shù),與中找最小數(shù),與 an-2 交換交換(1) 5個數(shù)個數(shù) (a0a4) 中找最小數(shù),與中找最小數(shù),與 a0 交換交換(2) 4個數(shù)個數(shù) (a1a4) 中找最小數(shù),與中找最小數(shù),與 a1 交換交換(3) 3個數(shù)個數(shù) (a2a4) 中找最小數(shù),與中找最小數(shù),與 a2 交換交換(4) 2個數(shù)個數(shù) (a3a4) 中找最小數(shù),與中找最小數(shù),與 a3 交換交換選擇法選擇法(2)n個數(shù)重復個數(shù)重復n-1次次流程圖流程圖輸入數(shù)組ak=0kn-1aiaindexindex=i假(0)假(0)真(非0)真(非0)i=i+1交換aindex和ak輸出數(shù)組aindex=ki=k+1k=k+1in假(0)外循環(huán)控
24、制:外循環(huán)控制: n 個數(shù)選擇個數(shù)選擇排序共需要排序共需要n-1次次內(nèi)循環(huán)控制:內(nèi)循環(huán)控制:在下標范圍在下標范圍k,n-1內(nèi)找內(nèi)找最小值所在最小值所在位置位置index選擇法排序選擇法排序 (程序段程序段) for(k = 0; k n-1; k+) index = k; for(i = k + 1; i n; i+) if(ai aindex) index = i; temp = aindex; aindex = ak; ak = temp; Enter n: 5Enter 10 integers: 3 5 2 8 1After sorted: 1 2 3 5 8例例 7-6 二分法查找二分
25、法查找 設已有一個設已有一個10個元素的整形數(shù)組個元素的整形數(shù)組a,且按值,且按值從小到大有序。輸入一個整數(shù)從小到大有序。輸入一個整數(shù)x,然后在數(shù)組中,然后在數(shù)組中查找查找x,如果找到,輸出相應的下標,否則,輸,如果找到,輸出相應的下標,否則,輸出出“Not Found”。 例例7-37-3順序查找是最簡單明了的一種,其查找過程就是對順序查找是最簡單明了的一種,其查找過程就是對數(shù)組元素從頭到尾的遍歷過程。但是一旦數(shù)組元素量很大的數(shù)組元素從頭到尾的遍歷過程。但是一旦數(shù)組元素量很大的情況下,其查找的效率不高。情況下,其查找的效率不高。 二分查找是查找效率較高的一種,但前提是二分查找是查找效率較高的
26、一種,但前提是數(shù)組元素必須數(shù)組元素必須是有序的。是有序的。二分查找流程圖二分查找流程圖二分法查找二分法查找 (程序段程序段) low = 0; high = n - 1; /* 開始時查找區(qū)間為整個數(shù)組開始時查找區(qū)間為整個數(shù)組 */ while (low = high) /* 循環(huán)條件循環(huán)條件 */ mid = (low + high) / 2; /* 中間位置中間位置 */ if (x = amid) break; /* 查找成功,中止循環(huán)查找成功,中止循環(huán) */ else if (x amid) high = mid - 1; /* 前半段,前半段,high前移前移 */ else low
27、 = mid + 1; /* 后半段,后半段,low后移后移 */ if(low = high) printf(Index is %d n,mid); else printf( Not Foundn);7.2 找出矩陣中最大值所在的位置找出矩陣中最大值所在的位置7.2.1 程序解析求矩陣的最大值程序解析求矩陣的最大值 例例 7-7 將將1個個3*2的矩陣存入的矩陣存入1個個3*2的二維的二維數(shù)組中,找出最大值以及它的行下標和列數(shù)組中,找出最大值以及它的行下標和列下標,并輸出該矩陣。下標,并輸出該矩陣。 使用二維數(shù)組使用二維數(shù)組row 記錄最大值的行下標記錄最大值的行下標col 最大值的列下標最
28、大值的列下標arowcol 就是最大值就是最大值int main(void) int col, i, j, row; int 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); row = col = 0; for(i = 0; i 3; i+) for(j = 0; j arowcol) row = i; col = j
29、; printf(max = a%d%d = %dn, row, col, arowcol); return 0; 例例7-7 源程序源程序Enter 6 integers: 3 2 10 -96 -13 2 10 -96 -1max = a10 = 10二維數(shù)組二維數(shù)組多維數(shù)組的空間想象多維數(shù)組的空間想象二維數(shù)組:二維數(shù)組: 一個表格或一個平面矩陣一個表格或一個平面矩陣一維數(shù)組:一維數(shù)組: 一列長表或一個向量一列長表或一個向量多維數(shù)組:多維數(shù)組: 多維空間的一個數(shù)據(jù)列陣多維空間的一個數(shù)據(jù)列陣三維數(shù)組:三維數(shù)組: 三維空間的一個方陣三維空間的一個方陣7.2.2 二維數(shù)組的定義和引用二維數(shù)組的定
30、義和引用n定義定義類型名類型名 數(shù)組名數(shù)組名行長度行長度列長度列長度行下標和列下標:整型表達式行下標和列下標:整型表達式行下標的取值范圍是行下標的取值范圍是0,行長度,行長度-1列下標的取值范圍是列下標的取值范圍是0,列長度,列長度-1int a32;定義定義1個二維數(shù)組個二維數(shù)組a,3行行2列,列,6個元素個元素n引用引用a00 a01 a10 a11 a20 a21 下標不要越界下標不要越界二維數(shù)組在內(nèi)存中的存放方式二維數(shù)組在內(nèi)存中的存放方式int a32;a00 a01 a10 a11 a20 a21 二維數(shù)組的元素在內(nèi)二維數(shù)組的元素在內(nèi)存中按行存中按行/列方式存放列方式存放a00a01
31、a10a11a20a21 7.2.3 二維數(shù)組的初始化二維數(shù)組的初始化1、分行分行賦初值賦初值int a33 = 1,2,3,4,5,6,7,8,9;static int b43 = 1,2,3, ,4,5;數(shù)組數(shù)組a1 2 3 4 5 67 8 9數(shù)組數(shù)組b1 2 30 0 04 5 00 0 02、順序賦初值、順序賦初值int a33 = 1,2,3,4,5,6,7,8,9;static int b43 = 1,2,3,0,0,0,4,5;省略行長度省略行長度對全部元素都賦了初值,對全部元素都賦了初值,int a 3=1,2,3,4,5,6,7,8,9;或分行賦初值時,在初值表中列出了全部
32、行或分行賦初值時,在初值表中列出了全部行static int b 3=1,2,3,0,4,5,0數(shù)組數(shù)組a1 2 3 4 5 67 8 9數(shù)組數(shù)組b1 2 30 0 04 5 00 0 0建議不要省略建議不要省略7.2.4 使用二維數(shù)組編程使用二維數(shù)組編程行下標和列下標分別做為循環(huán)變量行下標和列下標分別做為循環(huán)變量, 通通過過二重循環(huán)二重循環(huán),遍歷二維數(shù)組,遍歷二維數(shù)組通常將行下標做為外循環(huán)的循環(huán)變量通常將行下標做為外循環(huán)的循環(huán)變量 列下標列下標 內(nèi)循環(huán)內(nèi)循環(huán)定義定義1個個 3*2 的二維數(shù)組的二維數(shù)組a,數(shù)組元素的值由數(shù)組元素的值由下式給出,按矩陣的形式輸出下式給出,按矩陣的形式輸出a。ai
33、j = i + j(0i2,0j1)例例7-8 生成一個矩陣并輸出生成一個矩陣并輸出 int a32;a00 a01 a10 a11 a20 a21 0 11 22 3#include int main(void) int i, j; int 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; a00 a01 a10 a11 a20 a21 i = 0 j = 0i = 0
34、j = 1i = 1 j = 0i = 1 j = 1i = 2 j = 0i = 2 j = 1 例例7-8 源程序源程序0 11 22 3二維數(shù)組的輸入二維數(shù)組的輸入例例7-7中,中,int a32;for(i = 0; i 3; i+) /*先行后列先行后列*/ for(j = 0; j 2; j+) scanf(%d, &aij);a00 a01 a10 a11 a20 a21 for(j = 0; j 2; j+) /*先列后行先列后行*/ for(i = 0; i 3; i+) scanf(%d, &aij);Enter 6 integers: 3 2 10 -9
35、6 -1 3 2 10 -9 6 -1max = a10 = 10Enter 6 integers: 2 10 -9 6 -13 -9 2 610 -1max = a20 = 10int aNN; N是正整數(shù)是正整數(shù)aij:i、j的取值范圍的取值范圍0,N-1用二維數(shù)組用二維數(shù)組a表示表示N*N方陣時,對應關系方陣時,對應關系:a00 a01 a02 主對角線主對角線 a10 a11 a12 上三角上三角a20 a21 a22 下三角下三角 付對角線付對角線矩陣與二維數(shù)組矩陣與二維數(shù)組i=ji=ji+j=N-1輸入一個正整數(shù)輸入一個正整數(shù)n (1n6),根據(jù)下式生成根據(jù)下式生成1個個n*n的的
36、方陣,然后將該方陣轉置(行列互換)后輸出。方陣,然后將該方陣轉置(行列互換)后輸出。 aij = i * n + j + 1(0in-1,0jn-1)分析:分析:int a66; n=3時時例例7-9 方陣轉置方陣轉置 1 2 34 5 67 8 91 4 7 2 5 83 6 9a01 a10 a02 a20a12 a21aij aji#include int main(void) int i, j, n, temp; int a66; printf(Enter n: ); scanf(%d, &n); /* 給二維數(shù)組賦值給二維數(shù)組賦值 略略*/ /* 行列互換行列互換*/ for
37、(i = 0; i n; i+) for(j = 0; j n; j+) if(i = j) /* 只遍歷上三角陣只遍歷上三角陣 */ temp = aij; aij = aji; aji = temp; /* 按矩陣的形式輸出按矩陣的形式輸出a 略略 */ return 0; 例例7-9 源程序源程序例例7-10 日期計算日期計算自定義自定義1個函數(shù)個函數(shù)day_of_year(year, month, day),計計算并返回年算并返回年year、月、月month和日和日day對應的是該年對應的是該年的第幾天。的第幾天。 day_of_year(2000, 3, 1) 返回返回61day_o
38、f_year(1981, 3, 1) 返回返回60分析:分析: 月月 0 1 2 3 11 12非閏年非閏年 0 31 28 31 30 31閏年閏年 0 31 29 31 30 31int 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例例7-10 源程序源程序int day_of_year(int year, int month, int day) int k, leap; int tab213= 0, 31, 28, 31, 30,31,30,31,
39、31,30,31, 30,31 0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31 ; leap = (year%4=0&year%100!=0) | year %400=0; for (k=1; kmonth; k+) day = day + tableapk; return day;例例7-11 輸入一個以回車結束的字符串輸入一個以回車結束的字符串(少于少于10個字符個字符),判斷該字符串是否是回文?,判斷該字符串是否是回文? 所 謂 回 文 就 是 字 符 串 中 心 對 稱 , 如所 謂 回 文 就 是 字 符 串 中 心 對 稱 , 如“ab
40、cba”、“abccba”是回文,是回文,“abcdba”不不是回文。是回文。從此例題引入字符串操作從此例題引入字符串操作7.3 判斷回文判斷回文7.3.1 程序解析程序解析-判斷回文判斷回文# 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 a plalindromen); else printf( It is not a p
41、lalindromen); return 0; Enter a string: abcbaIt is a plalindrome Enter a string: abcdbaIt is not a plalindrome 7.3.2 一維字符數(shù)組一維字符數(shù)組n字符串存儲和運算:用一維字符數(shù)組實現(xiàn)字符串存儲和運算:用一維字符數(shù)組實現(xiàn)n一維字符數(shù)組的定義、引用、初始化與其他類一維字符數(shù)組的定義、引用、初始化與其他類型的一維數(shù)組一樣。型的一維數(shù)組一樣。char str80; 定義一個含有定義一個含有80個字符型元素的數(shù)組個字符型元素的數(shù)組str char t5=H, a, p, p, y;初始化數(shù)組
42、初始化數(shù)組 t t0 t1 t4t H a p p y輸出數(shù)組輸出數(shù)組 t 的所有元素的所有元素for(i=0; i 對字符數(shù)組的操作對字符數(shù)組的操作1. 字符串的存儲數(shù)組初始化字符串的存儲數(shù)組初始化字符串可以存放在一維字符數(shù)組中字符串可以存放在一維字符數(shù)組中 static char s6 = H, a, p, p, y, 0;字符數(shù)組初始化:用字符串常量字符數(shù)組初始化:用字符串常量static char s6 = Happy;static char s6 = Happy;數(shù)組長度數(shù)組長度 = 字符串的有效長度字符串的有效長度 + 1char t5; Happy 能存入能存入t嗎嗎? s0 s
43、1 s5s H a p p y 0字符串的存儲字符串的存儲auto char s80= Happy;字符串遇字符串遇 0 結束結束第一個第一個 0 前面的所有字符和前面的所有字符和 0 一起構成了字一起構成了字符串符串 Happy”0 之后的其他數(shù)組元素與該字符串無關之后的其他數(shù)組元素與該字符串無關 s0 s1 s5s H a p p y 0 ? ? 2. 對字符串的操作對字符串的操作n普通字符數(shù)組與字符串操作的區(qū)別:普通字符數(shù)組與字符串操作的區(qū)別:普通字符數(shù)組:普通字符數(shù)組:n數(shù)組元素的數(shù)組元素的個數(shù)個數(shù)是確定的是確定的n一般用一般用下標下標控制循環(huán)控制循環(huán)字符串:字符串:n沒有顯式地給出有
44、效字符的個數(shù)沒有顯式地給出有效字符的個數(shù)n只規(guī)定只規(guī)定: :0 之前的都是字符串的有效字符之前的都是字符串的有效字符n一般用結束符一般用結束符 0 來控制循環(huán)來控制循環(huán)循環(huán)條件:循環(huán)條件:si != 0 for(i = 0; si != 0; i+) putchar(si);for(i = 0; i 80; i+) putchar(si);for(i = 0; i len; i+) putchar(si);輸出字符串輸出字符串 s0 s1 s5s H a p p y 0 ? ?輸出?輸出?字符串的賦值和輸入字符串的賦值和輸入字符串的存儲字符串的存儲字符數(shù)組初始化:字符數(shù)組初始化:static
45、char s6 = Happy;賦值:賦值:s0 = a; s1 = 0;輸入輸入 0 代表空操作,無法輸入代表空操作,無法輸入輸入時,設定一個輸入時,設定一個輸入結束符輸入結束符將輸入結束符轉換為字符串結束符將輸入結束符轉換為字符串結束符 0a 2 個字符個字符 a 和和 0a 1 個字符常量個字符常量區(qū)分區(qū)分a 和和 a例例7-12 數(shù)值轉換數(shù)值轉換#include int main(void) int i, number; char str10; printf(Enter a string: ); /* 輸入字符串輸入字符串 */ i = 0; while(stri = getchar(
46、 ) != n) i+; stri = 0; number = 0; /* 將字符串轉換為整數(shù)將字符串轉換為整數(shù) */ for(i = 0; stri != 0; i+) if(stri = 0 & stri = 9) number = number * 10 + (stri - 0); printf(digit = %dn, number); return 0; Enter a string:ab1cb23adigit = 1230 1 2 3 stra b 1 c b 2 3 a 0 ?7.3.4 使用字符串編程使用字符串編程nC語言中字符串用一維的字符數(shù)組存儲,語言中字符串用一維的字符數(shù)組存儲,n對字符串的處理實際上就是對一維數(shù)組的對字符串的處理實際
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度國際海運代理服務合同規(guī)范文本
- 2025年度會計師事務所業(yè)務合作合同樣本
- 2025年度文化產(chǎn)業(yè)股權收益權轉讓及擔保服務合同
- 二零二四年度二手小產(chǎn)權購房合同涉及的貸款申請指南3篇
- 2025年度國際版權貿(mào)易合同基本條款與支付結算辦法
- 二手房墊資交易詳細合同指南版B版
- 2025年杭州學校裝修施工合同范本
- 2025年度化工產(chǎn)品研發(fā)成果轉讓合同
- 2025年度建筑拆除工程風險評估與施工合同范本
- 二零二五年度拆除工程合同終止與解除拆房協(xié)議范本4篇
- 2023-2024年員工三級安全培訓考試題及參考答案(綜合題)
- 對口升學語文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 招標采購基礎知識培訓
- 電力系統(tǒng)分布式模型預測控制方法綜述與展望
- 五年級口算題卡每天100題帶答案
- 2024年貴州省中考理科綜合試卷(含答案)
- 無人機技術與遙感
- 《幼兒園健康》課件精1
- 22S803 圓形鋼筋混凝土蓄水池
- 2023年開心英語四年級上冊全冊練習
- 《民航服務溝通技巧》教案第11課孕婦旅客服務溝通
評論
0/150
提交評論