ImageVerifierCode 换一换
格式:PPT , 页数:57 ,大小:151.52KB ,
资源ID:1072387      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-1072387.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第七章阵列 课件.ppt)为本站会员(无敌)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

第七章阵列 课件.ppt

1、第七章 陣列 (Array),7-1-1 一維陣列的宣告,我們可以宣告10個整數資料的陣列如下: int a10; 這就產生了10個元素的整數陣列,每個元素就可以看成是一個普通的整數變數,這些變數的名稱為: a0 a1 a2 . a9 注意陣列的註標是從0算起的,所以第一個元素是 a0,而最後一個成員是 a9。這些成員會被安排在連續的記憶體位置,一個接一個,彼此相鄰。a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,其他型態的宣告也是如此,例如: int b100; 宣告100個整數的陣列 float v5; 宣告5個單精準浮點數的陣列 char name13; 宣告13個字元的陣列

2、,7-1-2 設定一維陣列的初值,陣列在宣告時,可以順便設定初始值,例如: int a10 = 99,88,77,66,55,44,33,22,11,0; 則其記憶體的內容就是: a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,若宣告字元陣列: char s6=S,J,S,M,I,T; 則其記憶體的內容就是: s0 s1 s2 s3 s4 s5,有時我們會不指定陣列的元素個數,系統會根據設初值的資料,自動計算出元素個數,例如: int score= 1,3,5,7,9;,字元陣列的初值,可以直接用字串給定,例如: char t =HAPPY; 則其記憶體的內容就是: t0 t1 t

3、2 t3 t4 t5注意會多出一個0字元,這是ASCII碼值為零的字元,用來做為字串的結束符號,有時我們會用靜態變數 static int b10; 來宣告,那麼 b 陣列的初始值就自動全設為 0,而且程式執行後,會保持為上一次儲存的內容。,7-1-3 一維陣列的輸出,接著,我們來將陣列的內容,輸出到螢幕上: for (i=0; i10; i+) printf(a%d=%dn,i,ai); 注意其中 ai 是表示,a 陣列的第 i 個元素(從第 0 個算起),把它當成是一個普通的整數變數就是了。,字元陣列的輸出也可以比照辦理: for (i=0; i6; i+) printf(s%d=%cn,

4、i,si);,至於未指定個數的陣列,則根據初值的個數,逐一印出: for (i=0; i sizeof(score)/sizeof(int); i+) printf(score%d=%dn,i,scorei); 注意離開此 for 迴圈時,變數 i 的值,剛好是資料的個數,7-1-4 一維陣列的輸入,再來看看如何輸入資料給陣列: for (i=0; i10; i+) printf(input %dth data:,i); scanf(%d, 因為 ai 是第 i 個資料,所以 &ai 就是第 i 個元素的位址,,【範例 7-1-2】陣列元素的輸入與輸出,設計一程式,由鍵盤輸入10筆期中考成績,

5、存入陣列,將它們由最後一個元素開始,倒著印出其值、註標號碼,以及位址到螢幕上之後,再印出其平均值。1 /* Example 7-1-2 */2 /* array input and average */3 #define N 1045 main()6 ,7 int i,sum,midtermN;89 for (i=0; i=0; i-) 15 printf(%d %d %pn,i,midtermi,執行結果:input 0th score: 10input 1th score: 20input 9th score: 1009 100 0D9B:0FFE8 90 0D9B:0FFC0 10 0D

6、9B:0FECaverage = 55,【範例 7-1-3】求出陣列元素的最大值,設計一程式,宣告10個元素的整數陣列 score,由鍵盤輸入10筆成績給 score陣列,求出其中最大值的元素,印出其值、註標號碼。7 int i,max,scoreN;89 for (i=0; i=0 , 使用陣列的注意事項(續),(5)陣列的命名和一般的變數相同,陣列名稱可代表整個陣列的起始位址,所以 a 和 &a0 是代表相同的記憶體位址。 (6)陣列所佔記憶體的空間,可用 sizeof(陣列名稱) 來計算佔多少個位元組,而元素個數就可用: sizeof(陣列名稱)/sizeof(元素的資料型態) 來算出,

7、 使用陣列的注意事項(續),(7)兩個以上的陣列可以一起宣告,中間用逗號隔開,例如: int a10,b10,i; char c=hello,ch; (8)陣列是用註標來存取其中的元素,所以通常會配合迴圈的控制來操作。, 一維陣列的應用,【範例 7-3-1】學生成績統計 設計一程式,輸入 5 筆學生的語言成績,存入陣列後逐一印出,求出最高分,以及總平均。6 int i,a5,max,sum;78 for (i=0; i5; i+) 9 printf(input %dth score :,i);10 scanf(%d,11 ,13 for (i=0; imax) max=ai;19 printf

8、(highest score is %dn,max);2021 sum=0;22 for (i=0; i5; i+)23 sum += ai;24 printf(average is %fn,sum/5.0);,【範例 7-3-2】列印一維陣列的函數,設計一函數,傳入一整數陣列 a,以及元素個數 n,印出陣列的內容。並設計一程式,呼叫此函數,驗證其結果。3 void print_array (int , int);45 main()6 7 int t5= 3,6,9,7,0;89 print_array(t,5);,12 void print_array (int a, int n)13 14

9、 int i;1516 for (i=0; in; i+)17 printf(%d ,ai);18 ,範例 7-3-3】一維陣列求和的函數,設計一函數,傳入一整數陣列 a,以及元素個數 n,傳回陣列元素的總和。並設計一程式,呼叫此函數,驗證其結果。3 int getsum (int a, int n);45 main()6 7 int sum,count,data5=12,34,56,78,90;89 count=sizeof(data)/sizeof(int);10 sum= getsum(data,count);11 printf(sum = %dn,sum);,13 int getsum

10、 (int a, int n)14 15 int i,s;1617 s=0;18 for (i=0; in; i+)19 s += ai;20 return s;21 ,【範例 7-3-4】線性蒐尋(linear search),在電腦的應用中,最常遇到的動作,就是在一排資料中蒐尋某項資料。例如在同學名冊中,尋找某位同學的名字;在 DOS 的內部指令表中,尋找 dir 的指令;在電話號碼簿裡,蒐尋某個號碼等等。 最簡單的蒐尋方法,就是從頭到尾找一次,如果找到就印出是第幾個,若找不到就印出Not found,表示沒找到,這種方法叫做線性蒐尋法(linear search)。 如果有一排整數資料為

11、 77,66,33,22,55,44,99,88,試設計一程式輸入一整數,印出此數是否在資料列中。,3 int search1 (int key, int a , int n);45 main()6 7 int i,key,t8= 77,66,33,22,55,44,99,88;89 printf(input key to search :);10 scanf(%d,14 ,16 int search1 (int key, int a , int n)17 18 int i;1920 for (i=0; in; i+)21 if (key=ai) return i; /* found */22

12、 return -1; /* not found */23 執行結果:input key to search :99found at 6th position,【範例 7-3-5】二分蒐尋(binary search),前述的【範例 7-3-4】使用線性蒐尋法,來進行蒐尋的工作,這種方法所花費的時間,會和資料個數成正比。如果資料只有數十筆,大概還可以用,但若資料個數達到數百、數千,甚至上萬筆,就太沒有效率了。 如果資料本身已經事先由小到大依序排好,我們可改用二分蒐尋法(binary search),每次根據資料陣列 a 的中間項 amid,和所欲尋找的數值 key 進行比較。 若 key 等於

13、 amid,那就找到了,mid 就是所求的位置; 若 key 小於 amid,表示 key 可能落在陣列的左半列,我們繼續找左半陣列就可以了; 若 key 大於 amid,表示 key 可能落在陣列的右半列,我們繼續找右半陣列就可以了; 如此每次尋找的陣列範圍,都會縮小一半,直到尋獲 key 的位置,或是資料用盡表示找不到。,3 int search2 (int key, int a , int n);45 main()6 7 int i,key,t8= 22,33,44,55,66,77,88,99; /* sorted */89 printf(input key to search :);

14、10 scanf(%d,14 ,16 int search2 (int key, int a , int n)17 18 int low=0,high=n-1,mid;1920 while (low = high) 21 mid = (low+high)/2;22 if (key=amid) return mid; /* found */23 if (key amid) high=mid-1;24 else low=mid+1;25 26 return -1; /* not found */27 , 二維陣列的概念,7-4-1 二維陣列的宣告 首先,宣告一個兩列三行的二維整數陣列如下: int

15、 a23; 第一行 第二行 第三行第一列第二列,(1)二維陣列的名稱為 a,也代表整個陣列的起始位址。 (2)每一個元素的內容是整數值,共有 2x3 = 6 個元素。 (3)整個陣列配置了 2x3xsizeof(int) 個位元組的記憶體。 (4)第一列元素為 a00, a01, a02 第二列元素為 a10, a11, a12 (5)a0是一維陣列的名稱,代表第一列元素的起始位址 a1是一維陣列的名稱,代表第二列元素的起始位址 所以 &a00 與 a0 與 a 這三者都是代表整個陣列的起始位址。,(6)由於記憶體位址是連續的一維空間,所以二維陣列事實上是以一維的方式儲存在連續的記憶體位址,配

16、置的方式是採以列為主(Row major)的排列方式,也就是說先存第一列所有元素,再存第二列,依此類推:位址: X X+2 X+4 X+6 X+8 X+10 第一列 第二列 若此二維陣列的起始位址在 X,則元素 aij 的位址可算出為: &aij = X + (i*3+j)*sizeof(int) 請注意註標從 0 算起,所以開頭元素是 a00,最後一個是 a12。,7-4-2 設定二維陣列的初值,至於設定二維陣列的初值的方式如下: 例如: int a23 = 9,8,7, 6,5,4 ; 每列用大括弧框起來,裏面填入各行元素,列與列之間用逗號隔開,最後一列不加逗號,分號放在 之後。,7-4-

17、3 二維陣列的輸出,輸出二維陣列的內容到螢幕,可使用兩層迴圈,i 代表列號,j 代表行數,將各元素逐列印出: for (i=0; i2; i+) for (j=0; j3; j+) printf(%3d ,ai j); printf(n); ,7-4-4 二維陣列的輸入,至於由鍵盤輸入二維陣列,也仿此使用兩層迴圈,i 代表列號,j 代表行數,逐列輸入每個元素: for (i=0; i2; i+) for (j=0; j3; j+) scanf(%d,【範例 7-4-2】二維陣列的輸入,6 int i,j,k32;78 for (j=0; j3; j+) 9 printf(input %dth

18、row elements : ,j);10 for (i=0; i2; i+)11 scanf(%d,17 ,【範例 7-4-3】轉置矩陣,一個矩陣 Amxn 的轉置矩陣 Bnxm,就是將列數與行數對調,而任一元素 Aij 的值填入 Bji 的元素中。 設計一程式,宣告一 3 列 2 行的整數陣列 A3x2 ,設定其初值為: 3, 8, 2, 4, -1, 9 求出其轉置矩陣 B2x3,將兩陣列內容都印出到螢幕上。,6 int a32= 3,8,7 2,4,8 -1,99 ;10 int b23,i,j;1112 printf(A matrix:n);13 for (j=0; j2; j+)1

19、4 for (i=0; i3; i+)15 b j i =ai j ;,【範例 7-5-2】矩陣相加,若欲將兩個矩陣相加,必須兩者的行數相同,列數也相同,才可以相加。 設計一程式,輸入兩個 3x3 的整數矩陣 a 與 b,每次輸入一列 3 個元素,印出兩矩陣相加的結果。,9 printf(input matrix A:n);10 for (j=0; j3; j+) 11 printf(input %dth row: ,j);12 for (i=0; i3; i+)13 scanf(%d,24 ,【範例 7-5-3】矩陣相乘,若欲將兩個矩陣 Amxn 與 Bnxp 相乘,必須 A 行數與 B 的

20、列數相同,才可以相乘,結果得到陣列 Cmxp。 設計一程式,輸入整數矩陣 A3x2 與 B2x3,印出 A3x2 * B2x3 兩矩陣相乘的結果。,3 #define M 39 int aMN,bNP,cMP;24 for (j=0; jM; j+) 25 for (i=0; iP; i+) 26 c ji=0;27 for (k=0; k=0; j-) 23 printf(PASS %d :n,n-1-j);24 for (i=0; iai+1) 26 printf( swap %d,%d : ,ai,ai+1);27 t=ai;28 ai=ai+1;29 ai+1=t;30 print_array(a,n);31 32 33 ,34 void print_array (int a , int n)35 36 int i;3738 for (i=0; in; i+)39 printf(%d ,ai);40 printf(n);41 ,第七章 結束,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报