第06章數(shù)組_第1頁
第06章數(shù)組_第2頁
第06章數(shù)組_第3頁
第06章數(shù)組_第4頁
第06章數(shù)組_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、信息工程學院為了解決比較復雜的問題,本章介紹C語言提供的一種最簡單的構造類型數(shù)組。6.1 1維數(shù)組的定義和引用維數(shù)組的定義和引用6.2 2維數(shù)組的定義和引用維數(shù)組的定義和引用6.3 字符數(shù)組與字符串字符數(shù)組與字符串Return第第6章章 數(shù)數(shù) 組組信息工程學院6.1 1維數(shù)組的定義和引用維數(shù)組的定義和引用6.1.1 1維數(shù)組的定義維數(shù)組的定義6.1.2 1維數(shù)組元素的引用維數(shù)組元素的引用6.1.3 1維數(shù)組元素的初始化維數(shù)組元素的初始化6.1.4 1 1維數(shù)組應用舉例維數(shù)組應用舉例 Return信息工程學院6.1.1 1維數(shù)組的定義維數(shù)組的定義案例案例6.1 從鍵盤上任意輸入10個整數(shù),要求按

2、從小到大的順序在屏幕上顯示出來。 排序的方法有很多,本題采用冒泡法。冒泡法的基本思想冒泡法的基本思想:通過相鄰兩個數(shù)之間的比較和交換,使排序碼(數(shù)值)較小的數(shù)逐漸從底部移向頂部,排序碼較大的數(shù)逐漸從頂部移向底部。就像水底的氣泡一樣逐漸向上冒,故而得名。由AnA1組成的n個數(shù)據,進行冒泡排序的過程可以描述為:(1)首先將相鄰的An與An-1進行比較,如果An的值小于An-1的值,則交換兩者的位置,使較小的上浮,較大的下沉;接著比較An-1與An-2,同樣使小的上浮,大的下沉。依此類推,直到比較完A2和A1后,A1為具有最小排序碼(數(shù)值)的元素,稱第一趟排序結束。(2)然后在AnA2區(qū)間內,進行第

3、二趟排序,使剩余元素中排序碼最小的元素上浮到A2;重復進行n-1趟后,整個排序過程結束。信息工程學院/*案例代碼文件名:AL6_1.C*/*功能:從鍵盤上任意輸入n個整數(shù),用冒泡法按從小到大地排序,并在屏幕上顯示出來。*/#include stdio.h#define NUM 10/*定義符號常量(數(shù)據個數(shù)N)*/main() int dataNUM;/*定義1個1維整型數(shù)組data*/ int i,j,temp;/*定義循環(huán)變量和臨時變量*/ clrscr();/*庫函數(shù)clrscr():清屏*/ printf(Please input 10 numbers:n); for(i=0; iNU

4、M; i+) scanf(%d, &datai); 信息工程學院 /*冒泡法排序*/ for(i=0; ii; j-) /*內循環(huán):進行每趟比較*/ if(datajdataj-1) /*如果dataj大于dataj-1,交換兩者的位置*/ temp=dataj; dataj=dataj-1; dataj-1=temp; ; /*輸出排序后的數(shù)據*/ printf(nthe result of sort:n); for(i=0; iNUM; i+) printf(%d ,datai); getch();/*等待鍵盤輸入任一字符,目的使程序暫停*/程序演示程序演示信息工程學院數(shù)組同變量一

5、樣,也必須先定義、后使用。1維數(shù)組是只有1個下標的數(shù)組,定義形式如下:數(shù)據類型數(shù)據類型 數(shù)組名數(shù)組名常量表達式常量表達式, 數(shù)組名數(shù)組名2常量表達式常量表達式2;(1)“數(shù)據類型”是指數(shù)組元素的數(shù)據類型。(2)數(shù)組名,與變量名一樣,必須遵循標識符命名規(guī)則。(3)“常量表達式”必須用方括號括起來,指的是數(shù)組的元素個數(shù)(又稱數(shù)組長度),它是一個整型值,其中可以包含常數(shù)和符號常量,但不能包含變量。注意注意:C語言中不允許動態(tài)定義數(shù)組語言中不允許動態(tài)定義數(shù)組。 信息工程學院特別說明特別說明:在數(shù)組定義時,“常量表達式”外的方括號;以及元素引用時,“下標表達式”外的方括號,都是C語言語法規(guī)則所要求的,不

6、是本書所約定的可選項的描述符號?。?)數(shù)組元素的下標,是元素相對于數(shù)組起始地址的偏移量,所以從0開始順序編號。(5)數(shù)組名中存放的是一個地址常量,它代表整個數(shù)組的首地址。同一數(shù)組中的所有元素,按其下標的順序占用一段連續(xù)的存儲單元。Return信息工程學院 6.1.2 數(shù)組元素的引用數(shù)組元素的引用 引用數(shù)組中的任意一個元素的形式: 數(shù)組名數(shù)組名下標表達式下標表達式 1“下標表達式”可以是任何非負整型數(shù)據,取值范圍是0(元素個數(shù)-1)。 特別強調特別強調:在運行C語言程序過程中,系統(tǒng)并不自動檢驗數(shù)組元素的下標是否越界。因此在編寫程序時,保證數(shù)組下標不越界是十分重要的。 21個數(shù)組元素,實質上就是1

7、個變量,它具有和相同類型單個變量一樣的屬性,可以對它進行賦值和參與各種運算。 3在C語言中,數(shù)組作為1個整體,不能參加數(shù)據運算,只能對單個的元素進行處理。Return信息工程學院 6.1.3 1維數(shù)組元素的初始化維數(shù)組元素的初始化 初始化格式:數(shù)據類型數(shù)據類型 數(shù)組名數(shù)組名常量表達式常量表達式初值初值表表(1)如果對數(shù)組的全部元素賦以初值,定義時可以不指定數(shù)組長度(系統(tǒng)根據初值個數(shù)自動確定)。如果被定義數(shù)組的長度,與初值個數(shù)不同,則數(shù)組長度不能省略。(2)“初值表”中的初值個數(shù),可以少于元素個數(shù),即允許只給部分元素賦初值。(3)根據存儲類型的不同,數(shù)組有靜態(tài)數(shù)組(static)和動態(tài)數(shù)組(au

8、to)之分;根據定義的位置不同,數(shù)組有內部數(shù)組(在函數(shù)內部定義的數(shù)組)和外部數(shù)組(在函數(shù)外部定義的數(shù)組)之分。Return信息工程學院6.1.4 1維數(shù)組應用舉例維數(shù)組應用舉例 案例案例6.2 已知某課程的平時、實習、測驗和期末成績,求該課程的總評成績。其中平時、實習、測驗和期末分別占10、20、20、50。/*案例代碼文件名:AL6_2.C*/*功能:從鍵盤上循環(huán)輸入某課程的平時、實習、測驗和期末成績,按10,20,20,50的比例計算總評成績,并在屏幕上顯示出來。按空格鍵繼續(xù)循環(huán),其他鍵終止循環(huán)。*/#include “stdio.h”main() int i=1,j; char con_

9、key=x20; /* x20 空格鍵的ASCII碼*/ float score5,ratio4=0.1,0.2,0.2,0.5; /*定義成績、比例系數(shù)數(shù)組*/ while(con_key=x20)信息工程學院 while(con_key=x20) clrscr(); printf(輸入第%2d個學生的成績n, i+); printf(平時 實習 測驗 期末成績n); score4=0;/* score4:存儲總評成績*/ for(j=0; j4; j+) scanf(%f,&scorej); score4 += scorej * ratioj; printf(總評成績?yōu)?%6.1f

10、n, score4); printf(n按空格鍵繼續(xù),其它鍵退出); con_key=getch(); /*getch()函數(shù)等待從鍵盤上輸入一個字符*/ 程序演示程序演示Return信息工程學院6.2 2維數(shù)組的定義和引用維數(shù)組的定義和引用6.2.1 2維數(shù)組的定義維數(shù)組的定義6.2.2 2維數(shù)組元素的引用維數(shù)組元素的引用6.2.3 2維數(shù)組元素的初始化維數(shù)組元素的初始化6.2.4 2維數(shù)組應用舉例維數(shù)組應用舉例 Return信息工程學院案例案例6.3 給一個23的2維數(shù)組各元素賦值,并輸出全部元素的值。 /*案例代碼文件名:AL6_3.C*/*功能:從鍵盤上給23數(shù)組賦值,并在屏幕上顯示出

11、來。*/#define Row 2#define Col 3#include stdio.hmain() int i, j, arrayRowCol;/*定義1個2行3列的2維數(shù)組array*/ for(i=0; iRow; i+)/*外循環(huán):控制2維數(shù)組的行*/ for(j=0; jCol; j+)/*內循環(huán):控制2維數(shù)組的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,&arrayij); /*從鍵盤輸入aij的值*/ printf(n); /*輸出2維數(shù)組array*/ for(i=0;iRow;i+)6.2.1 2維數(shù)組的

12、定義維數(shù)組的定義信息工程學院 for(j=0;jCol;j+) printf(%dt,arrayij); /*將aij的值顯示在屏幕上*/ printf(n); getch(); 程序演示程序演示2維數(shù)組的定義方式如下: 數(shù)據類型數(shù)據類型 數(shù)組名數(shù)組名行常量表達式行常量表達式列常列常量表達式量表達式, 數(shù)組名數(shù)組名2行常量表達式行常量表達式2列常列常量表達式量表達式2;1數(shù)組元素在內存中的排列順序為“按行存放”,即先順序存放第一行的元素,再存放第二行,以此類推。2. 設有一個m*n的數(shù)組x,則第i行第j列的元素xij在數(shù)組中的位置為:i*n+j(注意注意:行號、列號均從0開始計數(shù))。 信息工程

13、學院3可以把2維數(shù)組看作是一種特殊的1維數(shù)組:它的元素又是一個1維數(shù)組。例如,對x32,可以把x看作是一個1維數(shù)組,它有3個元素:x0、x1、x2,每個元素又是一個包含2個元素的1維數(shù)組,如圖6-4所示。即把x0、x1、x2看作是3個1維數(shù)組的名字。 Return信息工程學院6.2.2 2維數(shù)組元素的引用維數(shù)組元素的引用引用2維數(shù)組元素的形式為:數(shù)組名數(shù)組名行下標表達式行下標表達式列下標表達式列下標表達式1“行下標表達式”和“列下標表達式”,都應是整型表達式或符號常量。2“行下標表達式”和“列下標表達式”的值,都應在已定義數(shù)組大小的范圍內。假設有數(shù)組x34,則可用的行下標范圍為02,列下標范圍

14、為03。3對基本數(shù)據類型的變量所能進行的操作,也都適合于相同數(shù)據類型的2維數(shù)組元素。Return信息工程學院6.2.3 2維數(shù)組元素的初始化維數(shù)組元素的初始化1按行賦初值數(shù)據類型數(shù)據類型 數(shù)組名數(shù)組名行常量表達式行常量表達式列常量表達列常量表達式式第第0行初值表行初值表,第第1行初值表行初值表,最后最后1行初值表行初值表;賦值規(guī)則:將“第0行初值表”中的數(shù)據,依次賦給第0行中各元素;將“第1行初值表”中的數(shù)據,依次賦給第1行各元素;以此類推。2按2維數(shù)組在內存中的排列順序給各元素賦初值數(shù)據類型數(shù)據類型 數(shù)組名數(shù)組名行常量表達式行常量表達式列常量表達列常量表達式式初值表初值表;賦值規(guī)則:按2維數(shù)

15、組在內存中的排列順序,將初值表中的數(shù)據,依次賦給各元素。如果對全部元素都賦初值,則“行數(shù)”可以省略。注意注意:只能省略“行數(shù)”。 Return信息工程學院6.2.4 2維數(shù)組應用舉例維數(shù)組應用舉例 案例案例6.4 有M個學生,學習N門課程,已知所有學生的各科成績,編程:分別求每個學生的平均成績和每門課程的平均成績。 /*案例代碼文件名:AL6_4.C*/*功能:計算個人平均成績與各科平均成績,并在屏幕上顯示出來。*/#define NUM_std 5/*定義符號常量人數(shù)為5*/#define NUM_course 4/*定義符號常量課程為4*/#include stdio.hmain() in

16、t i,j; static float scoreNUM_std+1NUM_course+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72; 信息工程學院 for(i=0;iNUM_std;i+) for(j=0;jNUM_course;j+) scoreiNUM_course += scoreij;/*求第i個人的總成績*/ scoreNUM_stdj += scoreij; /*求第j門課的總成績*/ scoreiNUM_course /= NUM_course;/*求第i個人的平均成績*/ for(j=0;j

17、NUM_course;j+) scoreNUM_stdj /= NUM_std; /*求第j門課的平均成績*/ clrscr(); /*輸出表頭*/ printf(學生編號 課程1 課程2 課程3 課程4 個人平均n); /*輸出每個學生的各科成績和平均成績*/信息工程學院 for(i=0;iNUM_std;i+) printf(學生%dt,i+1); for(j=0;jNUM_course+1;j+) printf(%6.1ft,scoreij); printf(n); /*輸出1條短劃線*/ for(j=0;j8*(NUM_course+2);j+) printf(-); printf(n

18、課程平均); /*輸出每門課程的平均成績*/ for(j=0;jNUM_course;j+) printf(%6.1ft,scoreNUM_stdj); printf(n); getch(); 程序演程序演示示Return信息工程學院6.3 字符數(shù)組與字符串字符數(shù)組與字符串6.3.1 字符數(shù)組的逐個字符操作字符數(shù)組的逐個字符操作 6.3.2 字符數(shù)組的整體操作字符數(shù)組的整體操作6.3.3 常用的字符串處理函數(shù)常用的字符串處理函數(shù)Return信息工程學院6.3.1 字符數(shù)組的逐個字符操作字符數(shù)組的逐個字符操作案例案例:從鍵盤輸入一個字符串,回車鍵結束,并將字符串在屏幕上輸出。 main() in

19、t i; char str80; for(i=0;i80;i+) stri=getchar(); printf(*); /*以星號代替輸以星號代替輸入字符的個數(shù)入字符的個數(shù)*/ if(stri=x0d) break; /*若輸入回若輸入回車則終止循環(huán)車則終止循環(huán)*/ i=0; while(stri!=x0d) printf(%c,stri+); printf(n);信息工程學院1字符數(shù)組的定義字符數(shù)組的定義1維字符數(shù)組維字符數(shù)組,用于存儲和處理處理1個字符串個字符串,其定義格式與1維數(shù)值數(shù)組一樣。2維字符數(shù)組維字符數(shù)組,用于同時存儲和處理多個處理多個字符串字符串,其定義格式與2維數(shù)值數(shù)組一樣。

20、2字符數(shù)組的初始化字符數(shù)組的初始化字符數(shù)組的初始化,可以通過為每個數(shù)組元素指定初值字符來實現(xiàn)。 3字符數(shù)組的引用字符數(shù)組的引用 字符數(shù)組的逐個字符引用,與引用數(shù)值數(shù)組元素類似。信息工程學院 (1)字符數(shù)組的輸入 除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用getchar()或scanf()函數(shù)輸入字符。 例如: char str10;for(i=0; i10; i+) scanf(%c, &stri);信息工程學院 (2)字符數(shù)組的輸出)字符數(shù)組的輸出 字符數(shù)組的輸出,可以用字符數(shù)組的輸出,可以用putchar()或或printf()函數(shù)。函數(shù)。 例如:例如: char s

21、tr10=c language;for(i=0; i10; i+) printf(%c, stri);printf(n); 注意注意:逐個字符輸入、輸出時,要指出:逐個字符輸入、輸出時,要指出元素的下標,而且使用元素的下標,而且使用“%c”格式符。另格式符。另外,從鍵盤上輸入字符時,無需輸入字符外,從鍵盤上輸入字符時,無需輸入字符的定界符的定界符單引號;輸出時,系統(tǒng)也不輸單引號;輸出時,系統(tǒng)也不輸出字符的定界符。出字符的定界符。Return信息工程學院6.3.2 字符數(shù)組的整體操作字符數(shù)組的整體操作案例案例6.6 字符數(shù)組的整體輸入與輸出。 /*案例代碼文件名:AL6_6.C*/*功能:將2維

22、字符數(shù)組進行初始化,并在屏幕上輸出*/main() int i; char name59=張三山, 李四季, 王五魁, 劉六順, 趙七巧; for(i=0;i5;i+) printf(n%st,namei); /*namei代表該行數(shù)組元素的首地址*/ getch();程序演示 1字符串及其結束標志字符串及其結束標志 所謂字符串,是指若干有效字符的序列。C語言中的字符串,可以包括字母、數(shù)字、專用字符、轉義字符等。C語言規(guī)定:以0作為字符串結束標志(0代表ASCII碼為0的字符,表示一個“空操作”,只起一個標志作用)。因此可以對字符數(shù)組采用另一種方式進行操作了字符數(shù)組的整體操作字符數(shù)組的整體操作

23、。信息工程學院 注意注意:由于系統(tǒng)在存儲字符串常量時,會在串尾自動:由于系統(tǒng)在存儲字符串常量時,會在串尾自動加上加上1個結束標志,所以無需人為地再加個結束標志,所以無需人為地再加1個。個。另外,由于結束標志也要在字符數(shù)組中占用一個元素另外,由于結束標志也要在字符數(shù)組中占用一個元素的存儲空間,因此在說明字符數(shù)組長度時,至少為字符串的存儲空間,因此在說明字符數(shù)組長度時,至少為字符串所需長度加所需長度加1。2字符數(shù)組的整體初始化字符數(shù)組的整體初始化字符串設置了結束標志以后,對字符數(shù)組的初始化,字符串設置了結束標志以后,對字符數(shù)組的初始化,就可以用字符串常量來初始化字符數(shù)組。就可以用字符串常量來初始化

24、字符數(shù)組。3字符數(shù)組的整體引用字符數(shù)組的整體引用(1)字符串的輸入)字符串的輸入除了可以通過初始化使字符數(shù)組各元素得到初值外,除了可以通過初始化使字符數(shù)組各元素得到初值外,也可以使用也可以使用scanf()函數(shù)輸入字符串。函數(shù)輸入字符串。(2)字符串的輸出)字符串的輸出printf()函數(shù),不僅可以逐個輸出字符數(shù)組元素,還可函數(shù),不僅可以逐個輸出字符數(shù)組元素,還可以整體輸出存放在字符數(shù)組中的字符串。以整體輸出存放在字符數(shù)組中的字符串。Return信息工程學院6.3.3 常用的字符串處理函數(shù)常用的字符串處理函數(shù)字符串標準函數(shù)的原型在字符串標準函數(shù)的原型在頭文件頭文件string.h中。中。1輸入

25、字符串輸入字符串gets()函數(shù)函數(shù)(1)調用方式:)調用方式:gets(字符數(shù)組字符數(shù)組)( 2 ) 函 數(shù) 功 能 : 從 標 準 輸 入 設 備) 函 數(shù) 功 能 : 從 標 準 輸 入 設 備(stdin)鍵盤上,讀取鍵盤上,讀取1個字符串(可以包個字符串(可以包含空格),并將其存儲到字符數(shù)組中去。含空格),并將其存儲到字符數(shù)組中去。(3)使用說明)使用說明 1)gets()讀取的字符串,其長度沒有限讀取的字符串,其長度沒有限制,編程者要保證字符數(shù)組有足夠大的空間,制,編程者要保證字符數(shù)組有足夠大的空間,存放輸入的字符串。存放輸入的字符串。 2)該函數(shù)輸入的字符串中允許包含空格,)該函

26、數(shù)輸入的字符串中允許包含空格,而而scanf()函數(shù)不允許。函數(shù)不允許。信息工程學院2輸出字符串輸出字符串puts()函數(shù)函數(shù)(1)調用方式:)調用方式:puts(字符數(shù)組字符數(shù)組)(2)函數(shù)功能:把字符數(shù)組中所存)函數(shù)功能:把字符數(shù)組中所存放的字符串,輸出到標準輸出設備中去,放的字符串,輸出到標準輸出設備中去,并用并用n取代字符串的結束標志取代字符串的結束標志0。所以用所以用puts()函數(shù)輸出字符串時,不要函數(shù)輸出字符串時,不要求另加換行符。求另加換行符。( 3)使用說明)使用說明1)字符串中允許包含轉義字符,輸出字符串中允許包含轉義字符,輸出時產生一個控制操作。時產生一個控制操作。2)該

27、函數(shù)一次只能輸出一個字符串,該函數(shù)一次只能輸出一個字符串,而而printf()函數(shù)也能用來輸出字符串,且函數(shù)也能用來輸出字符串,且一次能輸出多個。一次能輸出多個。信息工程學院3字符串比較字符串比較strcmp()函數(shù)函數(shù)(1)調用方式:)調用方式:strcmp(字符串字符串1 ,字符串字符串2)其中其中“字符串字符串”可以是串常量,也可以是可以是串常量,也可以是1維字符數(shù)組。維字符數(shù)組。(2)函數(shù)功能:比較兩個字符串的大小。)函數(shù)功能:比較兩個字符串的大小。如果:字符串如果:字符串1=字符串字符串2,函數(shù)返回值等于,函數(shù)返回值等于0; 字符串字符串1字符串字符串2,函數(shù)返回值正整數(shù)。,函數(shù)返回

28、值正整數(shù)。信息工程學院 (3)使用說明)使用說明 1)如果一個字符串是另一個字符串)如果一個字符串是另一個字符串從頭開始的子串,則母串為大。從頭開始的子串,則母串為大。 2)不能使用關系運算符)不能使用關系運算符“”來來比較兩個字符串,只能用比較兩個字符串,只能用strcmp() 函數(shù)來處理。函數(shù)來處理。信息工程學院案例案例6.7 #include stdio.hmain() char pass_str80; int i=0; /*檢驗密碼*/ while(1) clrscr(); printf(請輸入密碼n); gets(pass_str); 信息工程學院 if(strcmp(pass_str,“password”)!=0) /*口令

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論