C語言程序設計第5章數組ppt課件_第1頁
C語言程序設計第5章數組ppt課件_第2頁
C語言程序設計第5章數組ppt課件_第3頁
C語言程序設計第5章數組ppt課件_第4頁
C語言程序設計第5章數組ppt課件_第5頁
已閱讀5頁,還剩57頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、:基本知識講解5.1 一維數組的定義及引用一維數組的定義及引用5.2 二維數組的定義和引用二維數組的定義和引用5.3 字符數組字符數組 前往前往:5.1 一維數組 數組的引入 求出50人中成績高于平均分的人數; 存放50人每人5門課程的成績; 保存Fibonacci數列的前40項 :5.1.1 一維數組的定義與引用 數組 數組是同類型數據的有序集合,是共享同一名稱的一組連續保存的變量。 這些變量所占的空間被稱為“數組單元”。 保存在其中的值稱為“數組元素”。:5.1.1 一維數組的定義與引用 定義數組: (1規定數組的名稱; (2規定數組的類型; (3規定數組的大小。:5.1.1 一維數組的定

2、義與引用一、一維數組的定義: 類型說明符 數組名exp ; 例如:int a10, number5;二、一維數組元素的引用 數組名下標 例如:a5=6 a0=a5*0.5+a7-a23:例 main( ) int i , a10; for(i=0; i=0; i- ) printf(“%d ”,ai); printf(“n”); 5.1.1 一維數組的定義和引用:(1整體賦初值: int a10=0, 1, 2, 3, 4, 5, 6, 7, 8, 9;(2部分賦初值: int a10=0, 1, 2, 3, 4;(3元素賦全0: int a10=0, 0, 0, 0, 0, 0, 0, 0,

3、 0, 0 int a10=0;5.1.2 一維數組的初始化:5.1.2 一維數組的初始化(4隱含定義一維數組的長度: int a=0,1,2,3,4,5,0; 相當于 int a7=0,1,2,3,4,5,0;:例例 利用數組求利用數組求Fibonacci數列的前數列的前40項。項。分析:輸 入 Fibonacci數列的第一項和第二項公 式 fn=fn-1+fn-2 當n=2時限制條件 40項輸出要求 每行5項輸出該數列的前40項5.1.3 一維數組應用舉例:main( )main( ) int n; int n; long int f40=1, 1; long int f40=1, 1;

4、for (n=2; n40; n+) for (n=2; n40; n+) fn=fn-2+fn-1; fn=fn-2+fn-1; for(n=0;n40;n+) for(n=0;nai+1TFai與ai+1交換程序清單:5.1.3 一維數組應用舉例 前往前往2156789初始態1256789第一趟排序后1256789第二趟排序無交換發散1:改進的冒泡排序:5.2.1 二維數組的定義與引用一、二維數組的定義 類型名 數組名exp1exp2; 如:int number54; char a34; a0 0 a0 1 a0 2 a0 3a1 0 a1 1 a1 2 a1 3a2 0 a2 1 a2

5、2 a2 3a0 a1a2:二、二維數組的引用 數組名下標下標 如:a23 b12=a23/2 a23=3 等等;5.2.1 二維數組的定義和引用:留意:不能寫成a2,3等形式;應該注意下標值應在已定義的數組大小范圍內;定義數組時用的a34與引用數組元素時用的a34的區別。5.2.1 二維數組的定義和引用:5.2.2 二維數組元素的存儲方式數組的存儲結構:以行為主序:a00a01a02a03a11a10a12a13.a22a23.5.2.2 二維數組元素的存儲方式int a34;:1. 分行給二維數組賦初值:如: int a33=1,2,3,4,5,6,7,8,9;2. 按數組排列的順序對元素

6、依次賦初值;如: int a33=1,2,3,4,5,6,7,8,9;5.2.3 二維數組元素的初始化:3. int a34=1,5,9; 等價于 int a34=1,0,0,0,5,0,0,0,9,0,0,0;4. int a43=1,2,4,5; 等價于int a43=1,2,0,4,5,0,0,0,0,0,0,0;5.2.3 二維數組元素的初始化:5. 可用初始化的方法來隱含定義二維數組第一維的大小,但不能省略第二維的大小。 如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;等價于int a 4=1,2,3,4,5,6,7,8,9,10,11,12;5.2.3 二

7、維數組元素的初始化:6. 在定義時也可以只對部分元素賦初值而省略第一維長度,但應分行賦初值。如: int a 4=0,0,3,0,10; 5.2.3 二維數組元素的初始化:例例5-3 有一個二維數組有一個二維數組a34,找出其中的最,找出其中的最大元素,并指出所在的行號和列號。大元素,并指出所在的行號和列號。分析:求最大值的NS圖如右圖所示。max=a00for i=0 to 2for j=0 to 3aijmaxTFmax=aijrow=icolum=j輸出max和row、colum程序如下:5.2.4 二維數組應用舉例用:for (i=0; i=2; i+) for (j=0; j=3;

8、j+) if (aijmax) max=aij; row=i; col=j; printf(“max=%d,row=%d,colum=%dn”,max,row,col);main() int i, j, row=0, col=0, max; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00;5.2.4 二維數組應用舉例:補充題:修改上例算法,使在同一程序中能同時求出最大值和最小值及其各自所在的行列號。5.2.4 二維數組應用舉例:例例5-4 將一個二維數組行和列元素互換,存到將一個二維數組行和列元素互換,存到另一個二維數組中。另一個二維數組

9、中。分析分析 設:設:a=1 2 34 5 6b=1 42 53 6程序清單如下:程序清單如下:5.2.4 二維數組應用舉例:main( ) int a23=1,2,3,4,5,6; int b32; int i, j; for(i=0;i=1;i+) for (j=0; j=2;j+) printf(“%5d”,aij); bji=aij; printf(“n”); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(“%5d”,bij); printf(“n”); 5.2.4 二維數組應用舉例:a20 a21a2n.a00 a01a0n.am0am1amn.a10

10、 a11a1n.for( i=0; i=m; i+) for( j=0; j=n;j+) 5.2.4 二維數組應用舉例 前往前往:5.3.1 用一維字符數組存放字符串一、字符數組的定義 char 數組名exp; 如:char c10;二、字符數組的初始化(1給字符型數組元素依次賦值。 如:char str6=C, h, i, n, a, 0;str0str1str2str3str4str5China0:(2直接在賦值號右邊給出字符串常量。如: char str6=“China”;5.3.1 用一維字符數組存放字符串:留意:1. 字符數組的長度可經賦初值的方式隱含定義如: char str =C

11、, h, i, n, a, 0; char str =“China”;2. 如初值個數大于數組長度,作語法錯誤處理。3. 如初值個數小于數組長度,不足部分自動賦空(即0)。5.3.1 用一維字符數組存放字符串:三、字符數組的引用 例 輸出一個字符串。main( ) char c12=“I am a boy.”; int i; for (i=0;i12;i+) printf(“%c”,ci); printf(“n”);5.3.1 用一維字符數組存放字符串:5.3.1 用一維字符數組存放字符串四、字符串和字符串結束標志 “China在存儲器中實際占用6個字節:China0:五、字符串首地址與字符串

12、輸入輸出 1字符數組的輸出 (1用格式符“c控制的 printf();如:main()char c12=“I am a boy.”; int i; for( i=0; i12; i+) printf(“%c”, ci); printf(“n”);5.3.1 用一維字符數組存放字符串:(2用格式符“s控制的 printf();如:main() static char c =“China”; printf(“%s”, c);留意: 輸出字符不包括“0”;5.3.1 用一維字符數組存放字符串數組名:(3puts (字符數組);如:#include main ( ) static char city

13、=“YangZhou”; int i, j; for (i=0;i=8;i+) printf (“%c”,cityi); printf (“n”); printf (“%sn”,city); puts(city);5.3.1 用一維字符數組存放字符串:留意:(1puts用字符數組名,而不用數組元素名;(2輸出的字符串中可含轉義字符;如: static char str=“ChinanBeijing”; puts(str);(3若一個字符數組中包含一個以上的0,則遇到第一個時輸出就結束。如: printf(“%sn”,“ABCD0EFGH”); 只輸出ABCD5.3.1 用一維字符數組存放字符串

14、: 2字符數組的輸入 (1) 用格式符“s控制的scanf();如:char c6; scanf(“%s”,c);輸入數據流以空白符結束,且在字符串的最后自動加0。5.3.1 用一維字符數組存放字符串:留意: 如果利用一個scanf函數輸入多個字符串時,則以空格分隔; 若有說明語句: char str20; 則形如語句: scanf(“%s”,&str); 是錯誤的!5.3.1 用一維字符數組存放字符串:(2用gets( );如: char ch16; gets(ch);5.3.1 用一維字符數組存放字符串留意: gets一次只能輸入一個字符串; 自變量應是數組名,而不能是數組元素名;要求從鍵

15、盤上輸入一字符串直到換行符為止,系統自動把換行符換成“0加在串尾。:1puts(字符數組) 功能:將一以0結束的字符序列輸出到終端; 如:char str =“China”;puts(str); 闡明:輸出的字符串中可含轉義字符。 2gets(字符數組) 功能:從終端輸入一字符串到字符數組中; 如: gets(str); 闡明:gets與puts只能輸入或輸出一個字符串。5.3.2 常用字符串處理函數:3strcat(字符數組1,字符數組2) 功能:將串2接到串1后且去掉串1的尾空; 如: char str130=“YangZhou ”; char str2 =“China”; printf(

16、“%sn”,strcat(str1,str2); 闡明: 字符數組1的長度需足夠大; 去掉字符串1的尾空。5.3.2 常用字符串處理函數:5.3.2 常用字符串處理函數4strcpy(字符數組1, 字符串2) 功能:將串2拷貝到字符數組1中去; 如: static char str110,str2 =“China”; strcpy (str1,str2);執行后:China0 0 0 0 0:闡明: 字符數組1的長度需足夠大; 字符數組1必須寫成數組名形式,串2可以是數組名,也可是一個字符串常量。如: strcpy(str1,“China”); 拷貝時連同字符串2后的0一起拷貝;5.3.2 常

17、用字符串處理函數: 不能用賦值語句將一個字符串常量或字符數組直接賦給一個字符數組。如有說明: char str110,str210; str1=“China”; str2=str1; 均是錯誤的。 若只想拷貝str2的前面若干個字符如2個字符),則可用strncpy函數。 strncpy(str1,str2, 2); 5.3.2 常用字符串處理函數:5strcmp(串1,串2) 功能:比較串1和串2,前往: 串1串2,返回0; 串1串2,返回正整數; 串1串2,返回負整數。 如:if(strcmp(str1,str2)=0) printf(“yes”); 闡明:不能進行如下比較: if(str

18、1=str2) printf(“yes”);5.3.2 常用字符串處理函數:6strlen(字符數組) 功能:測試字符串的長度; 如: static char str110“China”; printf(“%dn”,strlen(str1); 闡明:不包含0在內。5.3.2 常用字符串處理函數:7strlwr(字符串) 功能:將串中的大寫字母轉換成小寫字母; 闡明:lwr: lowercase。8strupr(字符數組) 功能:將串中的小寫字母轉換成大寫字母。 闡明:upr: uppercase。5.3.2 常用字符串處理函數:例例5-6 輸入一行字符,統計其中有多少個單詞,輸入一行字符,統計

19、其中有多少個單詞,單詞之間用空格分隔開。單詞之間用空格分隔開。七、字符數組應用舉例 5.3.3 字符數組應用舉例分析:輸入:一文本行存入字符數組string中)。輸出:單詞的個數。:算法算法:num用來統計單詞數目,初值為用來統計單詞數目,初值為0;c用來存放當前字符;用來存放當前字符;從從string0起逐個檢查數組元素,若當前字符起逐個檢查數組元素,若當前字符c為非空格且前一字符為空格時,說明一個為非空格且前一字符為空格時,說明一個單詞的開始;單詞的開始;設計變量設計變量word(初值為初值為0)。當其值為。當其值為0時,表時,表示空格字符,為示空格字符,為1時,表示非空格字符;時,表示非

20、空格字符;num增增1的條件是:的條件是:c!= &word=0; 5.3.3 字符數組應用舉例: 5.3.3 字符數組應用舉例,word=0,num=0:#include “stdio.h”main() char string81, c; int i, num=0, word=0; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= )word=0; else if (word= =0) word=1; num+; printf(“%dn”,num); 5.3.3 字符數組應用舉例:例例 有有3個字符串,要求找出其中的最大者。個字符串,要求找出其中的

21、最大者。分析:設有一個二維字符數組str,大小為320,每一行可容納20個字符。如下圖所示:str0str1str2C h i n a 0J a p a n 0I n d i a 0程序如下: 5.3.3 字符數組應用舉例:main( ) char string20, str320; int i; for(i=0; i0) strcpy(string, str0); else strcpy(string, str1); if(strcmp(str2, string)0) strcpy(string, str2); printf(“nThe largest string is:n%sn”, string); 前往前往 5.3.3 字符數組應用舉例: 前往前往main() int i, j, k, temp, a11; for(i=1; i=10; i+) scanf(“%d”, &ai); for(i=1; i=10; i+) printf(“%5d”, ai); printf(“n”); for(i=1; i10; i+)

溫馨提示

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

評論

0/150

提交評論