![《C程序設計》數(shù)組課件_第1頁](http://file4.renrendoc.com/view/4a83337c80a299275a6039fbbcbe0741/4a83337c80a299275a6039fbbcbe07411.gif)
![《C程序設計》數(shù)組課件_第2頁](http://file4.renrendoc.com/view/4a83337c80a299275a6039fbbcbe0741/4a83337c80a299275a6039fbbcbe07412.gif)
![《C程序設計》數(shù)組課件_第3頁](http://file4.renrendoc.com/view/4a83337c80a299275a6039fbbcbe0741/4a83337c80a299275a6039fbbcbe07413.gif)
![《C程序設計》數(shù)組課件_第4頁](http://file4.renrendoc.com/view/4a83337c80a299275a6039fbbcbe0741/4a83337c80a299275a6039fbbcbe07414.gif)
![《C程序設計》數(shù)組課件_第5頁](http://file4.renrendoc.com/view/4a83337c80a299275a6039fbbcbe0741/4a83337c80a299275a6039fbbcbe07415.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C程序設計數(shù)組PPT課件C程序設計數(shù)組PPT課件本章主要內(nèi)容 1. 數(shù)組基本概念 2. 一維數(shù)組及應用 3. 二維數(shù)組及應用 4. 字符數(shù)組和字符串本章主要內(nèi)容 1. 數(shù)組基本概念5.1 數(shù)組的概念 C語言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應大小的存儲空間例如: int a1,a2;float a3;char a4a1a2整型變量占兩個字節(jié)5.1 數(shù)組的概念 C語言中定義普通變量就是按變量int a1,a2;float a3;char a4a1a2a3實型變量占四個字節(jié) C語言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應大小的存儲空間例如:5.1 數(shù)組的概念int a1,a2;a1a5.1
2、 數(shù)組的概念int a1,a2;float a3;char a4a1a2a3a4 C語言中定義普通變量就是按變量的數(shù)據(jù)類型找到相應大小的存儲空間例如:字符型變量占1個字節(jié)5.1 數(shù)組的概念int 5.1 數(shù)組的概念 C語言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個數(shù)找到相應大小的一組連續(xù)的存儲空間。例如: int a4a0=2a3=5a2=3a定義了0 3共4個元素占8個字節(jié)01235.1 數(shù)組的概念 C語言中定義數(shù)組就是按數(shù)組數(shù)據(jù)5.1 數(shù)組的概念int a4a0=2a3=5a2=3a2 C語言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個數(shù)找到相應大小的一組連續(xù)的存儲空間。例如: 5.1 數(shù)組的概念int
3、 5.1 數(shù)組的概念int a4a0=2a3=5a2=3a C語言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個數(shù)找到相應大小的一組連續(xù)的存儲空間。例如: 525.1 數(shù)組的概念int 5.1 數(shù)組的概念int a4a0=2a3=5a2=3a C語言中定義數(shù)組就是按數(shù)組數(shù)據(jù)類型及元素個數(shù)找到相應大小的一組連續(xù)的存儲空間。例如: 5235.1 數(shù)組的概念int 5.1 數(shù)組的概念1、數(shù)組是內(nèi)存中的一塊連續(xù)的存儲區(qū)域,該區(qū)域由若干個數(shù)據(jù)成員組成;2、每一個數(shù)據(jù)成員稱為一個數(shù)組元素,有統(tǒng)一的名字(即數(shù)組名),用元素在數(shù)組中的序號(稱為下標)來標識;3、數(shù)組可以是一維的,也可以是多維的,不管一維還是多維,各元素
4、在內(nèi)存中都是連續(xù)存放的;4、數(shù)組的每一維下標必須用方括號括起來;5.1 數(shù)組的概念1、數(shù)組是內(nèi)存中的一塊連續(xù)的存儲區(qū)域,該區(qū)5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組類型、名稱、下標維數(shù)及每維下標最多元素個數(shù)。例如:int a65.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組類型、名稱、下標維數(shù)及每維下標最多元素個數(shù)。例如:int a6 數(shù)組的類型,決定數(shù)組每個元素所占的存儲區(qū)域大小5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)
5、組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組類型、名稱、下標維數(shù)及每維下標最多元素個數(shù)。例如:int a6 數(shù)組的名稱,是程序中引用數(shù)組元素的依據(jù)之一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組類型、名稱、下標維數(shù)及每維下標最多元素個數(shù)。例如:int a6 數(shù)組的維說明,決定數(shù)組由幾維組成,本例為一維數(shù)組,只有一個下標5.1 數(shù)組的概念5、一維數(shù)組是指只有一個下標的數(shù)組,定義一5、一維數(shù)組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組類型、名稱、下標維數(shù)及每維下標最多元素個數(shù)。例如:int a
6、6 數(shù)組的元素個數(shù),本例共定義6個元素,下標從055.1 數(shù)組的概念 假設數(shù)組元素a3在內(nèi)存中的地址為3100,那a0的地址?a5呢?5、一維數(shù)組是指只有一個下標的數(shù)組,定義一個數(shù)組必須說明數(shù)組6、二維數(shù)組是指有兩個下標的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維表格,是若干個一維數(shù)組的集合。例如:5.1 數(shù)組的概念int a23 定義了一個整型二維數(shù)組,邏輯上由兩行三列共6個元素組成。元素分別為: a00、a01、a02 a10、a11、a126、二維數(shù)組是指有兩個下標的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維6、二維數(shù)組是指有兩個下標的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維表格,是若干個一維數(shù)組的集合。例如:5.
7、1 數(shù)組的概念int a23a00a01a02a10a11a12a0a1 假設定義數(shù)組float a56,已知a11在內(nèi)存中的地址為3100,那a22的地址?a45呢?6、二維數(shù)組是指有兩個下標的數(shù)組,二維數(shù)組在邏輯上表現(xiàn)為二維7、字符數(shù)組是用于存放字符的數(shù)組,每個元素可以存放一個字符,主要用于處理字符串。例如:5.1 數(shù)組的概念char a10 定義了一個字符型一維數(shù)組,最多可以存放10個字符。char a1010 定義了一個字符型二維數(shù)組,最多可以存放100個字符;一般用于存放長度不超過10個字符的字符串。7、字符數(shù)組是用于存放字符的數(shù)組,每個元素可以存放一個字符,5.2 一維數(shù)組及應用5
8、.2.1 一維數(shù)組的定義(P133)與初始化(P136)5.2.2 一維數(shù)組的引用與遍歷 所謂遍歷,是指對數(shù)組中的所有元素掃描一遍,對于一維數(shù)組,通常用單層循環(huán)完成。例如: 1. 遍歷賦值為每個元素賦值 for(i=0;iN;i+) printf(請輸入第%d個元素的值:,i); scanf(%d,&ai); 5.2 一維數(shù)組及應用5.2.1 一維數(shù)組的定義(P133)5.2 一維數(shù)組及應用5.2.2 一維數(shù)組的引用與遍歷2. 遍歷輸出輸出每個元素的值printf(數(shù)組各元素的值為:);for(i=0;iN;i+) printf(%5d,ai);5.2 一維數(shù)組及應用5.2.2 一維數(shù)組的引用
9、與遍歷pri5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例 利用數(shù)組編程的一般步驟為: (1)定義數(shù)組; (2)為數(shù)組各元素賦值; (3)遍歷數(shù)組各元素,按要求處理; (4)輸出處理結(jié)果。5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例 1. 從鍵盤輸入10個學生成績,求平均分并統(tǒng)計高于平均分的人數(shù)(1)定義有10個元素的數(shù)組,求平均分就需要累加,所以還需要一個累加器,要統(tǒng)計人數(shù)還需要一個計數(shù)器,要循環(huán)遍歷數(shù)組各元素還需要循環(huán)變量;(2)通過遍歷為數(shù)組各元素賦值(3)累加各數(shù)組元素值,需要遍歷各數(shù)組元素(4)求出平均分后還要統(tǒng)計高于平均分
10、的人數(shù),需要拿每個元素和平均分進行比較,所以還需要遍歷各數(shù)組元素5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例(1)定義5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例 1. 從鍵盤輸入10個學生成績,求平均分并統(tǒng)計高于平均分的人數(shù)(5)輸出處理結(jié)果。5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例(5)輸出5.2.3 一維數(shù)組應用舉例 2. 隨機產(chǎn)生10個兩位整數(shù)放入一維數(shù)組,再將各數(shù)組元素按逆序存放,如a0與a9對換,a1與a8對換; 3. 隨機產(chǎn)生10個兩位整數(shù)放入一維數(shù)組,找出其中最大值及其位置;5.2 一維數(shù)組及應用5.2.3 一維數(shù)組應用舉例 3. 隨機產(chǎn)生10個兩位整數(shù)5
11、.2 一維數(shù)組及應用main()int a10,max,k,i,j; printf(原數(shù)據(jù)為:); for(i=0;i10;i+) ai=rand()%90+10; printf(%5d,ai); k=0; for(i=1;i10;i+) if(akai) k=i; printf(n最大值%d,在第%d位!,ak,k);5.2 一維數(shù)組及應用main()5.2.3 一維數(shù)組應用舉例 4. 對8個數(shù)按降序排序比較交換法 5.2 一維數(shù)組及應用第1趟:假設a0元素最大,將其和后面a1-a7各元素值進行比較,如果有比它更大的數(shù),則交換。代碼段如下: for(j=1;i8;j+) if(a0aj) t
12、=a0;a0=aj;aj=t;5.2.3 一維數(shù)組應用舉例5.2 一維數(shù)組及應用第1趟:假5.2 一維數(shù)組及應用7192935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一維數(shù)組及應用7192935950277941代碼段5.2 一維數(shù)組及應用7192935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a01j5.2 一維數(shù)組及應用7192935950277941代碼段5.2 一維數(shù)組及應用7192935950277941代碼段如下: for
13、(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj條件成立!交換!1j5.2 一維數(shù)組及應用7192935950277941代碼段5.2 一維數(shù)組及應用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一維數(shù)組及應用9271935950277941代碼段5.2 一維數(shù)組及應用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一維數(shù)組及應用9271935950277941代碼
14、段5.2 一維數(shù)組及應用9271935950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j條件成立!交換!5.2 一維數(shù)組及應用9271935950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj
15、=t;a0aj3j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj3j條件不成立!5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: f
16、or(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j條件不成立!5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j條件不成立!5.2 一維數(shù)組及應用937192595027
17、7941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj6j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0ai) t=a0;a0=aj;aj=t;a0aj6j條件不成立!5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=a
18、j;aj=t;a0aj7j5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用9371925950277941代碼段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj7j條件不成立!第一趟比較結(jié)束后,最大值被放在了a0位置。5.2 一維數(shù)組及應用9371925950277941代碼段5.2 一維數(shù)組及應用 第2趟是將a0排除在外,設a1是剩下的數(shù)中最大的,與后面a2-a7比較。 第3趟是將a0、a1排除在外,設a2是剩下的數(shù)中最大的,與后面a3-a7比較。 第7趟是將a0 a5排除在外,設a6是剩下的數(shù)中最大的,與后面
19、的a7-a7比較。完成排序。 以此類推,若要對N個數(shù)排序,要處理的趟數(shù)是N-1。由此增加一個外循環(huán)控制趟數(shù): for (i=0;in-1;i+) 完整的比較交換法排序核心程序段為: for (i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) 交換兩個元素值 5.2 一維數(shù)組及應用 第2趟是將a0排除在外,設5.2.3 一維數(shù)組應用舉例 4. 對8個數(shù)按降序排序選擇法 與比較交換法類似,只是每次比較后不馬上交換,而是只記錄極值位置,一趟比較完成后再和假想的極值交換,極大地提高了排序效率。5.2 一維數(shù)組及應用main()int a8,i,j,k,t; printf(排
20、序前數(shù)據(jù)為:); for(i=0;i8;i+) ai=rand()%90+10; printf(%5d,ai); for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; printf(n排序后數(shù)據(jù)為:); for(i=0;i8;i+) printf(%5d,ai);5.2.3 一維數(shù)組應用舉例5.2 一維數(shù)組及應用main(5.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941i5.2
21、 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ki5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941kij5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+)
22、k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t
23、; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因為條件不成立,所以K位置不變5.2 一維數(shù)組及應用for
24、(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因為條件不成立,所以K位置不變5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7
25、;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因為條件不成立,所以K位置不變5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)
26、k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因為條件不成立,所以K位置不變5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277
27、941ikj5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因為條件不成立,所以K位置不變5.2 一維數(shù)組及應用for(i=0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj交換ai、ak兩元素的值5.2 一維數(shù)組及應用for(i=
28、0;i7;i+)7195.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj交換ai、ak兩元素的值5.2 一維數(shù)組及應用for(i=0;i7;i+)9395.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj第二趟開始,I取值為15.2 一維數(shù)組及應用for(i=0;i7;i+)9395.2 一維數(shù)組及應用for(i
29、=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj重新定位K,取與I相同值5.2 一維數(shù)組及應用for(i=0;i7;i+)9395.2 一維數(shù)組及應用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikjJ從I+1重新開始循環(huán)5.2 一維數(shù)組及應用for(i=0;i7;i+)939int a6=0,i;char c; printf(請輸入選票編號:); while(
30、c=getche()!=#) if(c5)c=0; ac-48+; for(i=0;i6;i+) printf(“n%d號:%d票n,i,ai);5.2 一維數(shù)組及應用5. 用數(shù)組可以優(yōu)化程序 統(tǒng)計選票:有5個侯選人,選票號分別為15,從鍵盤鍵入,“#”號結(jié)束。除15以外的其它號以廢票計。 本題可以用多分支結(jié)構(gòu)完成,但程序代碼長度較長,如果用數(shù)組則非常簡單。int a6=0,i;char c;5.2 一維數(shù)組5.3.1 二維數(shù)組的定義(P138)5.3.2 二維數(shù)組元素的引用與遍歷 與二維數(shù)組元素的引用相似,元素由下標來確定位置: 數(shù)組名行下標列下標 如果要遍歷一個二維數(shù)組的所有元素,一般用雙
31、循環(huán)嵌套完成。5.3 二維數(shù)組及應用5.3.1 二維數(shù)組的定義(P138)5.3 二維數(shù)組及應用5.3 二維數(shù)組及應用main() int i,j,a1010; /*定義10*10數(shù)組*/ for(i=0;i10;i+) /*遍歷行*/ for(j=0;j10;j+) /*遍歷列*/ aij=i+j; /*遍歷賦值*/ for(i=0;i10;i+) for(j=0;j10;j+) printf(“%5d”,aij); /*遍歷輸出*/ printf(“n”); /*換行輸出*/ 5.3 二維數(shù)組及應用main()5.3.3 二維數(shù)組的應用 1. 輸出10行楊輝三角形(直角三角形) 特點如下圖
32、所示:如果將各數(shù)據(jù)放入一個二維數(shù)組的話,那楊輝三角形占據(jù)了二維數(shù)組的下半部分,且列標為0的元素及行列標相等的元素值為1,其它元素均為其左肩元素和頭頂元素之和。5.3 二維數(shù)組及應用5.3.3 二維數(shù)組的應用5.3 二維數(shù)組及應用5.3 二維數(shù)組及應用/*核心代碼為賦值*/ for(i=0;i10;i+) /*遍歷行,共10行*/ for(j=0;j=i;j+) /*遍歷列,不需為所有數(shù)組元素賦值*/ if(i=j | j=0) /*如果是第0列或主對角線(行列標相等)*/ aij=1; /*這些元素賦值為1*/ else /*否則其它元素等于*/ aij=ai-1j+ai-1j-1; /*頭頂
33、元素與左肩元素之和*/5.3 二維數(shù)組及應用/*核心代碼為賦值*/5.3.3 二維數(shù)組的應用 2.輸出10行楊輝三角形(等腰三角形) 楊輝三角數(shù)據(jù)一旦進入二維數(shù)組后,以什么樣的形式輸出就非常簡單了,比如還可以以等腰三角形輸出。這里需要用到一個定位輸出函數(shù)gotoxy(列,行)函數(shù)。5.3 二維數(shù)組及應用5.3.3 二維數(shù)組的應用5.3 二維數(shù)組及應用5.3 二維數(shù)組及應用/*核心代碼為輸出*/ for(i=0;i10;i+) gotoxy(40-i*3,i+1);/*只需要定位每行的起點,*/ /* 3和1是試出來的,可用別的值試試*/ for(j=0;j=i;j+) printf(“%6d”
34、,aij); /*遍歷輸出,注意6和前面3的關(guān)系*/ /*因為每行的起點由gotoxy函數(shù)定位,所以不需要換行語句了*/ 5.3 二維數(shù)組及應用/*核心代碼為輸出*/5.3.3 二維數(shù)組的應用 3. 二維數(shù)組的轉(zhuǎn)置(如下圖所示) (1) 定義兩個數(shù)組A,B; (2) 為A數(shù)組各元素賦值,為方便我們可用隨機數(shù); (3) 將Aij元素的值賦給Bji,完成轉(zhuǎn)置; (4) 輸出A數(shù)組各元素和B數(shù)組各元素;5.3 二維數(shù)組及應用5.3.3 二維數(shù)組的應用5.3 二維數(shù)組及應用5.3.3 二維數(shù)組的應用 4. 為15個學生5門課成績求總分,并排序后輸出5.3 二維數(shù)組及應用 (1) 定義數(shù)組A158,多出
35、三列用于放總分和名次、學號; (2) 賦值時,學號用1-15,成績用隨機數(shù)生成; (3) 對每個學生計算總分; (4) 對總分列按降序排序,注意交換時整行交換; (5) 填入名次 (6) 輸出整個數(shù)組5.3.3 二維數(shù)組的應用5.3 二維數(shù)組及應用 (1#define swap(x,y) t=x;x=y;y=t; /*定義交換兩個變量的宏*/main() int i,j,a158,k,p,q,t; for(i=0;i15;i+) ai0=i+1; /*用i+1作為學號*/ for(j=1;j6;j+) aij=rand()%51+50; /*隨機產(chǎn)生學生成績賦值*/ for(i=0;i15;i
36、+) /*求總分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*對第6例用比較交換法排序*/ for(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交換時要換整行數(shù)據(jù)*/ for(i=0;i15;i+) ai7=i+1; /*用將名次放在第7列,沒有考慮總分相同的情況*/ for(i=0;i15;i+) for(j=0;j8;j+) printf(“%5d”,aij); /*輸出數(shù)組的各元素*/ printf(n); getch(); 5.3 二維數(shù)組及應
37、用#define swap(x,y) t=x;x=y;y=t 知識引申:如何將處理結(jié)果永久存放呢?這就需要存放到文件中: 將數(shù)據(jù)寫入文件需要有以下幾步: 1. 程序中包含頭文件:#include 2. 定義一個文件指針:FILE *fp;/*fp是指針名,可任意*/ 3. 在指定文件夾下創(chuàng)建一個文件,格式為: 文件指針=fopen(文件名,”w”); 4. 將數(shù)據(jù)寫入文件中的格式: fprintf(文件指針,”格式符”,變量列表); 5. 文件寫完成后,需要關(guān)閉打開的文件,格式為: fclose(文件指針);5.3 二維數(shù)組及應用 知識引申:如何將處理結(jié)果永久存放呢?這就需要存放到文件#def
38、ine swap(x,y) t=x;x=y;y=t; /*定義交換兩個變量的宏*/#include /*文件操作必須要包含的頭文件*/main() int i,j,a158,k,p,q,t; FILE *fp; /*定義文件指針*/ for(i=0;i15;i+) ai0=i+1; /*用i+1作為學號*/ for(j=1;j6;j+) aij=rand()%51+50; /*隨機產(chǎn)生學生成績賦值*/ for(i=0;i15;i+) /*求總分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*對第6例用比較交換法排序*/ fo
39、r(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交換時要換整行數(shù)據(jù)*/ for(i=0;i15;i+) ai7=i+1; /*用將名次放在第7列,沒有考慮總分相同的情況*/ fp=fopen(c:abc.txt,w); /*在C盤根目錄下創(chuàng)建一個新文件*/ for(i=0;i15;i+) for(j=0;j8;j+) fprintf(fp,%5d,aij); /*將數(shù)組的各元素值寫入文件*/ fprintf(fp,n); /*每寫完一行換行*/ fclose(fp); /*關(guān)閉數(shù)據(jù)文件*/ printf(ok!); /*提
40、示信息*/ getch(); #define swap(x,y) t=x;x=y;y=t*5. N階魔方陣問題,(N為奇數(shù)) 魔方陣的條件是: (1) 1在首行的正中間; (2) 下一個數(shù)在上一個數(shù)的上一行下一列; (3) 如果當前位置為首行,則其上一行為最后一行;如果當前列為最后一列,則其下一列為首列。 (4) 如果發(fā)生沖突(即計算出的位置上已經(jīng)有值),則將下一個值放在當前位置的下一行相同列位置上。5.3 二維數(shù)組及應用*5. N階魔方陣問題,(N為奇數(shù))5.3 二維數(shù)組及應用6.3 二維數(shù)組及應用main() int a2020=0,n,m,x,y,p,q; /*因為C中不能動態(tài)定義數(shù)組,
41、所以先定義一個大一點的二維數(shù)組*/ do printf(please input n(n is a odd number):); scanf(%d,&n); while(n%2=0);/*精典程序段,保證輸入合法數(shù)據(jù)*/ x=1;y=n/2+1; axy=1;/*將1放在第1行中間*/ for(m=2;m=n*n;m+) p=x;q=y;/*記錄當前放置的位置*/ if(x=1) x=n; else x-; /*定位下一個數(shù)的行位置*/ if(y=n) y=1; else y+;/*定位下一個數(shù)的列位置*/ if(axy!=0) x=p+1,y=q; /*如果已經(jīng)放過數(shù),則重新定位*/ axy
42、=m; /*放入一個數(shù)到指定位置*/ for(x=1;x=n;x+) /*輸出放好數(shù)的魔方陣*/ for(y=1;y=n;y+) printf(%7d,axy); printf(n); getch(); 6.3 二維數(shù)組及應用main()*6.心靈感應 先想一個060之間的數(shù),再依次從六張卡片中回答有還是沒有你想的數(shù),最后由計算機輸出你想的那個數(shù).原理: (1) 對于一個二進制數(shù)來說,將從低位到高位的每一個1按1,2,4,8, 16,32轉(zhuǎn)換,再相加就是對應的十進制數(shù). (2) 060之間的數(shù)化為二進制后不超過6位,轉(zhuǎn)換成二進制后,從低位到高位,只要第1位上有1的數(shù)都在第1張卡片上,第2位有1
43、的數(shù)都在第2張卡片上, (3) 每張卡片上第1個數(shù)剛好依次是1,2,4,8,16,32,只回答”有”,就將這張卡片上的第1個數(shù)相加,最后就可以得到這個數(shù).5.3 二維數(shù)組及應用*6.心靈感應5.3 二維數(shù)組及應用6.3 二維數(shù)組及應用main()int a630=1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41, 43,45, 47,49,51,53,55,57,59, 2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31, 34,35,38,39,42,43,46,47,50,51,54,55
44、,58,59,4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47,52,53,54,55,60 ,0,8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31,40,41,42, 43,44,45,46,47,56,57,58,59,60, 0, 16,17,18,19,20,21,22,23,24,25, 26,27,28,29,30,31,48,49,50,51,52,53, 54,55,56,57,58,59,60,0, 32,33,34,35,36,37,38,39,4
45、0,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,0;int x=0, i, j,q;printf(請想一個160之間的數(shù),想好了以后按任意鍵n);getch();for(i=0;i6;i+) printf(這是第%d張卡片n,i+1); for(j=0;j60) printf(你想的數(shù)不在1-60之間!n);/*累加超過60,輸出錯誤信息*/else printf(你想的數(shù)字是:%dn,x);6.3 二維數(shù)組及應用main()5.4 一維字符數(shù)組1. 字符數(shù)組用于存放字符的ASCII碼值,每個數(shù)組元素 存放一個字符,
46、占用一個字節(jié)。2. 字符串存放于字符數(shù)組中,其中最后一個元素值為0。3. 字符數(shù)組與字符串的區(qū)別 (1)字符串肯定是存放在字符數(shù)組中的,且最后一個元素的值為0(0就是“0”); (2)以“0”結(jié)束的字符數(shù)組可以當字符串處理。4. 字符數(shù)組元素的引用 與前面介紹過的數(shù)值引用相同,一個元素占一個字節(jié),-128127(帶符號)或0255(無符號)之間,當只用作字符處理時,二者是一致的,沒有正負之分。 5.4 一維字符數(shù)組1. 字符數(shù)組用于存放字符的ASCII5.4 一維字符數(shù)組5. 字符串長度函數(shù)strlen 求字符串長度函數(shù)是從指定地址開始,遇到0結(jié)束,求出長度中不包括0那個字節(jié)。6. 字符串常量
47、 用雙引號引住的內(nèi)容被稱為字符串常量,字符串常量在內(nèi)存中被保存在一個特殊的區(qū)域,字符串常量后會自動加0,以保證字符串能正常結(jié)束。7. 從鍵盤為字符串賦值可用scanf或gets, 后者更方便。8. 字符串輸出可以用printf或puts,后者更方便。5.4 一維字符數(shù)組5. 字符串長度函數(shù)strlen9. 字符數(shù)組元素的遍歷,先求出字符串長度,再用for循環(huán)完成(前提:必須有0做結(jié)束標志,否則求不出長度!)#include main() char a=I love this game!; int n=strlen(a),i; for(i=0;in;i+) printf(%c,ai); slee
48、p(1); getch();5.4 一維字符數(shù)組9. 字符數(shù)組元素的遍歷,先求出字符串長度,再用for循環(huán)完#include main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(%c,ai); sleep(1); getch();10. 字符數(shù)組元素的遍歷,也可以用0作循環(huán)結(jié)束條件。5.4 一維字符數(shù)組#include 10. 字符數(shù)組元素的11. 字符數(shù)組的輸入 (1)scanf函數(shù)并用%c作為格式控制符,一次只能為一個數(shù)組元素賦值,數(shù)組元素名必須加&,不會自動加0,少用; scanf(%c,&ai);5.4 一維
49、字符數(shù)組11. 字符數(shù)組的輸入 scanf(%c,&ai);11. 字符數(shù)組的輸入 (2)scanf函數(shù)并用%s作為格式控制符,一次可為一個數(shù)組所有元素賦值,直接用數(shù)組名,不能再加&符,會在最后自動加0,缺點:輸入帶空格的字符串時只能接收第一個空格前的字符。 scanf(%s,a); scanf(%s,&a);因為數(shù)組名本來就是字符串的首地址,所以不能再加“&”符號。5.4 一維字符數(shù)組11. 字符數(shù)組的輸入 scanf(%s,a); sca11. 字符數(shù)組的輸入 (3)用gets(起始地址)函數(shù)賦值,將輸入的一行字符依次賦給數(shù)組各元素,自動在末尾加0,最常用。gets(a); gets(&a
50、);5.4 一維字符數(shù)組11. 字符數(shù)組的輸入gets(a); gets(&a);512. 字符數(shù)組的輸出 (1)printf函數(shù)并用%c作為格式控制符,一次只能輸出一個數(shù)組元素; printf(%c, ai);5.4 一維字符數(shù)組12. 字符數(shù)組的輸出 printf(%c, ai)12. 字符數(shù)組的輸出 (2)printf函數(shù)并用%s作為格式控制符,格式為: printf(“%s”,一個地址); 功能:從指定地址的元素開始輸出,到遇到的第一個0時結(jié)束。 注意:輸出時指定的必須是一個地址main() char a=I love this game!; int i; for(i=0;ai!=0;
51、i+) printf(%sn,ai); getch(); printf(%sn,&ai);5.4 一維字符數(shù)組12. 字符數(shù)組的輸出 printf(“%s”,一個地址);12. 字符數(shù)組的輸出 (3)用puts(字符數(shù)組首地址)函數(shù)輸出,最常用,它是從指定地址開始,輸出到遇到第一個0結(jié)束。puts(a); puts(&a); puts(&ai);main() char a=I love this game!; int i; for(i=0;ai!=0;i+) puts(&ai); getch(); 5.4 一維字符數(shù)組12. 字符數(shù)組的輸出puts(a); puts(&a); 示例:從鍵盤上輸
52、入一個英文句子,統(tǒng)計其中英文單詞 的個數(shù)(單詞之間用空格隔開)。main()char a100; /*不知道句子有多長,所以定義100個字符*/ int n=0,i; printf(Please intpu a sentence:n); gets(a); for(i=0;ai!=0;i+) if(ai=32)n+; printf(This sentence has %d word(s)n,n+1); getch(); 如果兩個單詞之間有多個空格呢?5.4 一維字符數(shù)組示例:從鍵盤上輸入一個英文句子,統(tǒng)計其中英文單詞main() 主要用于存儲多個字符串,與二維數(shù)值數(shù)組相同,只是需要注意每一行行尾
53、需要一個0作本行字符串的結(jié)束標志,并要求必須按這些字符串中最長的字符串字符個數(shù)定義列數(shù)。 示例. 將China,Russin,Japan , America, Canada,NewZealand 等六個國家名存入一個二維數(shù)組并輸出。5.5 二維字符數(shù)組main() char p611=China,Russin,Japan , America,Canada,NewZealand; int i; for(i=0;i6;i+) puts(pi); getch(); 主要用于存儲多個字符串,與二維數(shù)值數(shù)組相同,只是需要示例. 從鍵盤上輸入10個學生姓名并輸出。main() char a1020; in
54、t i; for(i=0;i10;i+) printf(請輸入第%d個學生姓名:,i+1); gets(ai); for(i=0;i10;i+) printf(第%d個學生姓名是:%sn,i+1,ai); 5.5 二維字符數(shù)組示例. 從鍵盤上輸入10個學生姓名并輸出。main()5.55.5 字符串處理函數(shù)1. 字符串測長度函數(shù)strlen 格式:strlen(地址) 功能:從指定地址開始到遇到第一個0為止的字節(jié)數(shù),結(jié)果為一個整型值。 示例:main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(“%dn”,strlen(&ai); getch(); 5.5 字符串處理函數(shù)1. 字符串測長度函數(shù)strlenma5.5 字符串處理函數(shù)2. 字符串連接函數(shù)strcat 格式:strcat(地址1,地址2) 功能:將從地址2
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度國際貿(mào)易實務實訓報告標準合同范本
- 滬教版(上海)七年級地理第一學中國區(qū)域篇(上)2《自主學習 認識區(qū)域-浙江省》聽課評課記錄
- 2025年度環(huán)保設備購置及污染賠償合同
- 2025年度窗簾品牌跨界合作與營銷推廣合同
- 2025年度國際郵政包裹運輸服務合同規(guī)定
- 智研咨詢發(fā)布:2025年中國玄武巖纖維行業(yè)市場發(fā)展環(huán)境及前景研究報告
- 2025年中國電子取證行業(yè)深度分析、投資前景、趨勢預測報告(智研咨詢)
- 2025年度綠色核桃產(chǎn)地直供采購合同范本
- 給寶寶的表揚信(15篇)
- 2025年度股權(quán)激勵實施居間服務合同
- 急性胸痛患者的急救護理
- 小紅書種草營銷師(初級)認證考試真題試題庫(含答案)
- 癲癇病人的護理(課件)
- 企業(yè)資產(chǎn)管理培訓
- 2024年WPS計算機二級考試題庫350題(含答案)
- 自然辯證法學習通超星期末考試答案章節(jié)答案2024年
- 2024年4月27日浙江省事業(yè)單位招聘《職業(yè)能力傾向測驗》試題
- 2024年6月浙江省高考地理試卷真題(含答案逐題解析)
- 物業(yè)管理服務應急響應方案
- 醫(yī)院培訓課件:《如何撰寫護理科研標書》
- 風車的原理小班課件
評論
0/150
提交評論