




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、內容提要數(shù)組定義和基本操作;常用算法:求最大最小值、排序、查找等;用字符數(shù)組存取字符串;使用字符串處理函數(shù)處理字符串第1頁/共70頁為什么引入數(shù)組 保存大量同類型的相關數(shù)據(jù) 如矩陣運算,表格數(shù)據(jù)等 第2頁/共70頁一維數(shù)組(Array)的定義 類型 數(shù)組名長度; 長度為常量表達式,不可以是變量(但C99提供了動態(tài)數(shù)組) 例:int a10; 定義一個有10個元素的數(shù)組,每個元素的類型均為int 使用a0、a1、a2、a9這樣的形式訪問每個元素。 系統(tǒng)會在內存分配連續(xù)的10個int空間給此數(shù)組 a就是此數(shù)組的首地址 第3頁/共70頁一維數(shù)組(Array)的定義 類型 數(shù)組名長度; 長度為常量表達
2、式,不可以是變量(但C99提供了動態(tài)數(shù)組) 例:int a10; 定義一個有10個元素的數(shù)組,每個元素的類型均為int 系統(tǒng)會在內存分配連續(xù)的10個int空間給此數(shù)組 a 是數(shù)組名,同時也代表著此數(shù)組的首地址第4頁/共70頁一維數(shù)組的初始化 int a5 = 12, 34, 56, 78, 9; int a5 = 12 ; int a = 12, 34, 56, 78, 9;第5頁/共70頁一維數(shù)組的賦值 數(shù)組賦值和普通變量賦值一樣 只能逐個對數(shù)組元素進行操作! 不能整體賦值! 切忌下標越界!int a4;for (i=0; i4; i+) ai = 2*i+1 ;int a4, b4; ;
3、a = b; int a4;a0=1; a1=3; a2=5; a3=7; / a和和b是數(shù)組首地址是數(shù)組首地址,是地址常量是地址常量/ 地址常量地址常量a不可以被賦值不可以被賦值第6頁/共70頁如何使兩個一維數(shù)組的值相等7int a4=1,2,3,4, b4;方法方法1: 1: 逐個元素賦值逐個元素賦值 b0=a0; b1=a1; b2=a2; b3=a3;方法方法2: 2: 通過循環(huán)賦值通過循環(huán)賦值 int i; for (i=0; i4; i+) bi=ai;第7頁/共70頁一維數(shù)組的輸入和輸出int a10, i=0;scanf(“%d”,&ai); /方法方法1:輸入輸入第第
4、i個數(shù)組元素個數(shù)組元素for (i=0; i10; i+) scanf(%d, &ai); /方法方法2:循環(huán)輸入:循環(huán)輸入數(shù)組元素數(shù)組元素int a10, i=0;printf(“%d”, ai); /方法方法1:輸出輸出第第i個數(shù)組元素個數(shù)組元素for (i=0; i10; i+) printf(%d, ai); /方法方法2:循環(huán)輸出循環(huán)輸出數(shù)組元素數(shù)組元素第8頁/共70頁耳聽為虛,眼見為實 一維數(shù)組在內存中是連續(xù)存放的 一維數(shù)組名就是此數(shù)組首元素的地址 數(shù)組下標越界的嚴重性第9頁/共70頁證明:數(shù)組在內存中是連續(xù)分布的; 數(shù)組名就是數(shù)組的首地址int i;int a6=1,3,
5、5,7,9,11;for (i=0; i=5; i+) printf(a%d的值是%2d,地址是%pn, i, ai, &ai);printf(“a的size是%dn”, sizeof(a); printf(“a的值是%pn”, a ); /a是數(shù)組名,也是首元素的地址 /a的值和&a0的值相等第10頁/共70頁后果很嚴重!下標越界 int i, a6; for (i=1; i=6; i+)ai=0; printf(a%d的值是%dn,i, ai);第11頁/共70頁數(shù)組的使用 數(shù)組的下標都是從0開始 對數(shù)組每個元素的使用與普通變量無異 可以用任意表達式作為下標,動態(tài)決定訪問哪
6、個元素for (i=0; iSIZE; i+) ai = 2 * i; 下標越界是大忌! 使用大于最大下標的下標,將訪問數(shù)組以外的空間。那里的數(shù)據(jù)是未知的,可能帶來嚴重后果 sizeof可以用來獲得數(shù)組大小第12頁/共70頁兔子繁殖問題(數(shù)組版)第13頁/共70頁兔子問題(數(shù)組版)#include #define YEAR_MONTH 12int main()int fYEAR_MONTH+1 = 0,1,1;int month;for (month=3; month=YEAR_MONTH; month+)fmonth = fmonth-1 + fmonth-2; for (month=1;
7、month=YEAR_MONTH; month+)printf(%dt, fmonth); retuun 0;第14頁/共70頁反轉并打印數(shù)組第15頁/共70頁求數(shù)組最小元素及其所在下標#define N 10 int i,aN; imin = 0; for (i = 1; i N; +i) if (ai aimin) imin = i; printf(最小值是a%d:%3dn,imin, aimin);第16頁/共70頁求數(shù)組最小元素及其所在下標#include #define N 10int main() int i, imin, aN; srand(time(NULL); for (i
8、= 0; i N; +i) ai = rand ( ) % 100 ; printf(“a%d是: %3d n , i, ai ) ; imin = 0; for (i = 1; i N; +i) if (ai aimin) imin = i; printf(最小值是a%d:%3dn,imin, aimin); return 0;第17頁/共70頁常用排序算法 冒泡排序 選擇排序第18頁/共70頁第19頁/共70頁Bubble sort#include int main() int a10=93,84,52,46,25,0,66,18,39,70, i, j, temp; for ( j=0;
9、 j9; j+)for (i=0; iai+1) temp=ai; ai=ai+1; ai+1=temp; for (i=0;i10;i+) printf(%3d,ai);return 0;第20頁/共70頁 選擇排序第21頁/共70頁選擇排序 for (i=0; in-1; i+) imin = i; for (j=i+1; jn; j+) if (aj aimin) 記錄此輪參加比較的最小元素的下標 imin = j; 若imin不等于i,則 交換aimin和ai, 第22頁/共70頁選擇排序int a10=1,3,5,7,9,10,8,6,4,2;int i, j, imin, temp
10、;for (i=0; i9; i+) imin = i;for (j=i+1; j10; j+) if (aj aimin) imin = j; if (imin != i)temp = ai;ai = aimin;aimin = temp; for (i=0; i10; i+) printf(%3d,ai);第23頁/共70頁順序查找哈,找到了!第24頁/共70頁順序查找 int aN=(1,3,5,7,9,2,4,6,8,10), x int i, find = 0, pos =-1 ; for (i=0; i10; i+) if (ai = number) pos = i; find =
11、 1; if (find)printf(“找到了,位置是%d“,pos); elseprintf(”未找到”); 哈,找到了!第25頁/共70頁順序查找#include #define N 10int main() int aN=1,3,5,7,9,2,4,6,8,10, number ; int i, find = 0, pos =-1; printf(請輸入要查找數(shù)據(jù):); scanf(%d, &number); for (i=0; iN; i+) if (ai = number) pos = i; find = 1; if (find)printf(找到了,位置是%d,pos);
12、 elseprintf(未找到); return 0;第26頁/共70頁 折半查找(有序數(shù)組)查找12成功!第27頁/共70頁 折半查找(有序數(shù)組)第28頁/共70頁 折半查找(有序數(shù)組)第29頁/共70頁 折半查找(有序數(shù)組)第30頁/共70頁折半查找int a10=1,3,5,7,9,12,14,16,18,20, number;int low = 0, high= 9 ,mid,pos = -1, find = 0printf(請輸入要查找的數(shù):); scanf(%d,&number);while (low amid)low = mid +1;else if (number am
13、id)high = mid -1;elsefind = 1;pos = mid;break;if (find)printf(找到了! 位置是%d, pos);elseprintf(未找到);第31頁/共70頁- - 第32頁/共70頁二維數(shù)組的初始化nint b23=1,2,3, 4,5,6;按行賦值nint b23=1,2,3,4,5,6;按存放順序賦值nint b 3=1,2,3,4,5,6;行長度可省,列長度不能省 nint b23=1,2,3,4;部分元素賦初值nint b23=1,2,3,4,5,6;第33頁/共70頁二維數(shù)組的存儲結構short int a23;a0a1a10 a1
14、1 a12a00 a01 a02存放順序:存放順序:按行按行存放存放先存放第先存放第0行的元素行的元素,再存放第再存放第1行的元素行的元素a00a01a02a10a11a12第34頁/共70頁二維數(shù)組是先行后列存放int i,j;short int a34; /注意:a是short整型for (i=0; i3; i+)for (j=0; j4; j+)aij = 4 * i + j;printf(a%d%d的值是: %2d “, ”地址是: %pn, i, j, aij, &aij );第35頁/共70頁二維數(shù)組是數(shù)組的數(shù)組int i, j;short int a34; for (i=
15、0; i3; i+)printf(a%d的值是: %p size是: %dn, i, ai, sizeof(ai); printf(a的值是: %pn, a ); printf(a的size是: %dn, sizeof(a); 第36頁/共70頁二維數(shù)組的輸入和輸出數(shù)組的輸入和輸出只能逐個對數(shù)組元素進行操作數(shù)組的輸入和輸出只能逐個對數(shù)組元素進行操作(字符數(shù)組例外)(字符數(shù)組例外)輸入第輸入第i行第行第j列元素:列元素:scanf(“%d”,&aij);輸入整個數(shù)組元素:輸入整個數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,&aij
16、);輸出第輸出第i行第行第j列列元素:元素:printf(“%d”,aij);輸出整個數(shù)組元素:輸出整個數(shù)組元素:for (i=0;i2;i+) for(j=0;j3;j+) printf(“%d”,aij);第37頁/共70頁二維數(shù)組的輸入和輸出for (i=0; i2; i+)for (j=0; j3; j+) scanf(“%d”, &aij); /輸入輸入 for (i=0; i2; i+)for (j=0; j3; j+) printf(“%d”, aij); /輸出輸出int a23, i, j;只能逐個對數(shù)組元素進行操作(字符數(shù)組例外)只能逐個對數(shù)組元素進行操作(字符數(shù)組
17、例外)第38頁/共70頁二維數(shù)組的最大值#include int main() int i, j, row = 0,col = 0; int a34 = 1,2,3,4,9,8,7,6,-10,10,-5,2; row = 0 ; col = 0; for (i=0 ; i=2 ;i+) for (j=0; jarowcol)row = i;col = j; printf(最大值為:%d, arowcol); return 0;第39頁/共70頁#include int main() int a1010; int i,j,k; for(i=0;i10;i+) ai0=1; aii=1; for
18、(i=2;i10;i+) for(j=1;ji;j+) aij= ai-1j+ ai-1j-1; for(i=0;i10;i+) for(j=0;j=i;j+) printf(%6d, aij); printf(n); return 0;11 11 2 11 3 3 11 4 6 4 1 第40頁/共70頁例例 : 輸出10行揚輝三角形。int main() int a1010; int i,j; for(i=0;i10;i+) ai0=1; aii=1; for(i=0;i10;i+) for(j=1;ji;j+) /* 0,1兩行不用計算,j循環(huán)不執(zhí)行 */ aij= ai-1j+ ai-
19、1j-1; /*上一行的同列元素與前一列元素之和*/ for(j=0;j=i;j+) printf(%5d, aij); printf(n); 11 11 2 11 3 3 11 4 6 4 1 第41頁/共70頁字符數(shù)組與字符串(String) 字符數(shù)組 數(shù)組每個元素都是字符類型 char string5=h,e,l,l,o; 字符串 以0結尾的字符數(shù)組(在c語言中) char string6=h,e,l,l,o,0; C語言使用字符數(shù)組實現(xiàn)字符串第42頁/共70頁字符串的初始化 用字符初始化 char str6 = C,h,i,n,a,0; 用字符串常量初始化 char str6 = Ch
20、ina; char str6 = China; char str = China; “China”是字符串常量,系統(tǒng)自動添加0字符第43頁/共70頁字符數(shù)組的賦值 只能逐個對字符數(shù)組元素進行操作! 切忌下標越界!char a4;for (i=0; i4; i+) ai = a+ i ;char a4, b4; char a4;a0=a; a1=b; a = b; / a是數(shù)組首地址,是地址常量,不能賦值是數(shù)組首地址,是地址常量,不能賦值第44頁/共70頁字符數(shù)組的賦值字符數(shù)組的賦值 字符串輸入函數(shù)gets()也沒有提供限制輸入字符串長度的方法,容易引起緩沖區(qū)溢出,給黑客攻擊以可乘之機 對輸入字
21、符串長度有限制的函數(shù)調用 fgets(buf, sizeof (buf), stdin);第45頁/共70頁 gets可以輸入帶空格的字符串 scanf(“%s”,str)將遇到空格或回車鍵停止讀入字符串 注意字符長度越界,引起緩沖區(qū)溢出第46頁/共70頁for(i=0; i10; i+) stri=getchar(); putchar(stri);第47頁/共70頁#include int main()char str150,str250;printf(調用gets()函數(shù)輸入字符串:n);gets(str1); printf(輸入的字符串是:n);puts(str1); printf(n調
22、用scanf()函數(shù)輸入字符串:n);scanf(%s,str2); /str2之前沒有&,為什么?printf(輸入的字符串是:n);printf(%sn, str2);return 0;第48頁/共70頁What does it print?int main(void) char str = Im a full string; puts( str); str7 = o; str8 = o; puts(str); str10 = 0; puts( str); str10 = s; puts( str); return 0;Im a full stringIm a fool strin
23、gIm a foolIm a foolsstring 0 1 2 3 4 5 6 7 8 9 第49頁/共70頁scanf() char str10;scanf(%s, str); 這里沒有& 不能讀入帶空格的字符串,gets()可以 這兩種用法都不安全。當用戶的輸入多于10個(含10個),str數(shù)組將越界 scanf被公認為最易遭到黑客攻擊的函數(shù)之一第50頁/共70頁gets() 字符串輸入函數(shù)gets()也沒有提供限制輸入字符串長度的方法,容易引起緩沖區(qū)溢出,給黑客攻擊以可乘之機 對輸入字符串長度有限制的函數(shù)調用 fgets(buf, sizeof (buf), stdin);第5
24、1頁/共70頁字符串處理函數(shù) 在中定義了若干專門的字符串處理函數(shù) strcpy: string copy strcpy(目的字符串,源字符串); strlen: string length strlen(字符串); 返回字符串的實際長度,不包括0 strcat: string combination strcat(目的字符串,源字符串); strcmp: string comparison strcmp(字符串1,字符串2); 當出現(xiàn)第一對不相等的字符時,就由這兩個字符決定所在字符串的大小 返回其ASCII碼比較的結果值 第52頁/共70頁字符串處理函數(shù) 字符串不能直接整體復制! str1 =
25、 str2; /*錯誤*/ strcpy(str1,str2); /*正確*/第53頁/共70頁字符串函數(shù) strcmp( )strcmp(str1,str2)abcde0str1abcde0str2abcabce0bcd0bcde0str1str2str1str2第54頁/共70頁字符串例題 從鍵盤任意輸入5個學生的姓名,編程找出并輸出按字典順序排在最前面的學生姓名 等價于求最小字符串 第55頁/共70頁#include #include #define ARRA_SIZE 80main()int n;char strARRA_SIZE, minARRA_SIZE;printf(Please
26、 enter five names:n);gets(str); strcpy(min, str); for (n=1; n5; n+)gets(str); if (strcmp(str, min) 0) strcpy(min, str); printf(The min is:);puts(min); 第56頁/共70頁第57頁/共70頁第58頁/共70頁第59頁/共70頁第60頁/共70頁字符串(String)與字符數(shù)組 字符串 一串以0結尾的字符在C語言中被看作字符串 用雙引號括起的一串字符是字符串常量,C語言自動為其添加0終結符 C語言并沒有為字符串提供任何專門的表示法,完全使用字符數(shù)組和字符指針來處理 字符數(shù)組 每個元素都是字符類型的數(shù)組 char string80;第61頁/共70頁字符數(shù)組的初始化 用字符型數(shù)據(jù)對數(shù)組進行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接對數(shù)組初始化 char str6 = China; char str6 = China;第62頁/共70頁逐個輸入輸出for (i=0; si!=0; i+) putchar(si);putchar(n);第63頁/共70頁scanf() char str10;scanf(%s, str); 不能讀入帶空格的字符串,gets()可以 這兩種用法都不安全。當用戶的輸
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 汽車行業(yè)合同樣本:會員服務協(xié)議
- 移動基站租賃合同書范本
- 城市老舊小區(qū)消防系統(tǒng)改造項目合同
- 幼兒園臨時教師聘任合同
- 新版民間房產抵押權轉讓合同
- 腎性水腫課件
- 智能化煤礦培訓課件下載
- 舊貨零售互聯(lián)網(wǎng)+創(chuàng)新實踐考核試卷
- 搪瓷器的創(chuàng)造思維與創(chuàng)意設計考核試卷
- 建筑施工現(xiàn)場安全監(jiān)測與預警考核試卷
- 2025年黑龍江交通職業(yè)技術學院單招職業(yè)技能測試題庫必考題
- 個人畫協(xié)議合同范本
- 2024-2025學年高一下學期開學第一節(jié)課(哪吒精神)主題班會課件
- 人教版2025-初中物理實驗室實驗課程安排
- 2024年無錫科技職業(yè)學院高職單招語文歷年參考題庫含答案解析
- 舞蹈藝術賞析課件
- 2025江蘇泰州興化市陳堡鎮(zhèn)村級后備干部招聘10人歷年高頻重點提升(共500題)附帶答案詳解
- (完整版)python學習課件
- CNAS-RL01:2019實驗室認可規(guī)則
- 2025中國人民解放軍空軍部隊軍工廠招聘21人管理單位筆試遴選500模擬題附帶答案詳解
- 成人腦室外引流護理-中華護理學會團體 標準
評論
0/150
提交評論