天天看點

c語言長度為w的繩子圈地,C語言課件 第4章 數組

《C語言課件 第4章 數組》由會員分享,可線上閱讀,更多相關《C語言課件 第4章 數組(85頁珍藏版)》請在人人文庫網上搜尋。

1、1,第4章,數字組,c語言程式設計,2020/7/5,2,第4章,數組,本章摘要:4.1一維數組4.2二維數組4.3字元數組和字元串4.4指針和數組4.5指針指向指針,2020/7/5,3,第4章數組,如何存儲一個人在N門課中的分數如何存儲和處理一堂課中N門課的分數?這些資料具有相同的資料類型。為了友善地使用這些資料,C語言提供了一種構造資料類型:數組。示例:用于存儲學生分數的實數組scoe5,其中:score是數組名稱。該數組可以存儲五個分數,由下标變量表示:分數0、分數1和分數4。下标變量也稱為數組元素。2020/7/5,4,4.1一維數組,例如:int a10浮動計分5;“資料類型”:數組元。

2、素的資料類型。“數組名”:遵循C語言辨別符規則。“常量表達式”:訓示數組中有多少元素,即數組的長度。它可以是整數常量、整數變量、整數表達式或傳回值為整數的函數調用。訓示元素的數量。4.1.1一維數組的定義,資料類型數組名整數常量表達式;2020/7/5,5,下列數組定義是正确的:#定義N 10浮點score1N,score2Nint num 10N;充電器c26,以下數組定義不正确:int數組(10);數組名後面應該有一個正方形的擴充名,而不是一個圓括号。浮動記分卡;平方擴充必須是整數常數,而不是整數變量。char字元串;數組名稱後的方形擴充名不能為空。4.1.1一維數組的定義(續),2020。

3、/7/5,6,數組在記憶體中的存儲,數組下标從0開始。一維數組的數組元素按順序存儲在記憶體中。數組名表示數組的第一個位址,即score的值與score0的位址值相同。分數數組,引用2020/7/5,7,4.1.2數組的元素,格式:例如,輸入學生分數為(I=0;i5;I)掃描f(%f,例如:fibn=fibn-1 fibn-2;下标表達式的值必須是整數表達式。數組名下标表達式,2020/7/5,8,4.1.2數組元素引用(續),描述:下标從0開始(下限為0),數組的最大下标(上限)為數組長度減1。示例:int a10。Scanf (%d,,C編譯系統不檢查越界,如果引用的數組元素超出。

4、數組範圍,它将破壞其他變量的值。2020/7/5,9,4.1.2數組元素的引用(續),是下标運算符。引用數組元素時,根據數組的第一個位址和下标号計算元素的實際位址,并取出位址的内容進行運算。例如,參考score2: (1)計算2000 2*4=2008 (2)取出2008的内容,并在2020年7月5日、10日和4月1.3日初始化數組。初始化:定義數組時給數組元素指派。1定義數組時,為所有數組元素指定初始值,例如:int a5=0,1,2,3,4;2.省略數組長度,例如:int a=0,1,2,3,4;3定義數組時,給一些數組元素指派,例如:int a5=1,2,3;其餘的元素被指派為0。4當原。

5、始值的數量大于數組元素的數量時,會出現編譯錯誤,例如:int a5=0,1,2,3,4,5;2020/7/5,11,4.1.4一維數組應用示例(教科書),第124頁,2020/7/5,12,4.1.4一維數組應用示例,示例4.1将10個人的結果輸入計算機,并以相反的順序顯示。#定義N 10 main()int I;浮動記分卡;對于(I=0;I=0;i - ) printf(%6.1f,score I);操作情況如下:67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.0,2020/7/5,1。

6、3,例4.2氣泡分選(從小到大)。以6個數字為例:3,7,5,6,8和0。第一次排序如下:3 7 5 6 8 0第一次3和7比較,3 7 5 6 8 0第二次7和5比較,3 5 7 6 8 0第三次7和6比較,3 5 6 7 8 0第四次7和8比較,3 5 6 7 8 0第五次8和0比較,3 5 6 7 0 8第一次排序。,2020/7/5/14,按冒泡法排序(續),第二個排序如下:3 5 6 7 0 8第一個3和5個比較,3 5 6 7 0 8第二個5和6個比較,3 5 6 7 0 8第三個6和7個比較,3 5 6 7 0 8第四個7和0個比較,以及第二個排序中的3 5 6 0 7 8個排序。

7、,依此類推:第三次比較3次, 在6 7 8的第四遍中比較2次,在5 6 7 8的第五遍中比較1次,最後在3 5 6 7 8的第三遍中留下1個數字0,是以不需要再次比較。 排序結果如下:0.35678,2020/7/5,15,氣泡排序(續)。上述數組元素的排序是通過雙循環實作的。外循環重複N-1次,内循環重複N-1、N-2次,依次1次。每次要比較的兩個元素,第一個元素與由aj辨別的内部循環j相關,第二個元素與由aj 1辨別的内部循環j相關。I的值是1,2,依次為N-1,對于每個I,j的值為0,1,反過來。2020/7/5/16,鼓泡法分選(續)。從上面的過程中,我們可以看到N個數字應該進行N-1。

8、次比較,在第I次比較中,N-1次應該成對比較。2020/7/5,17,#定義N6 main()int An;I,j,t;對于(I=0;iaj 1)t=aj;aj=aj 1;aj 1=t;列印(排序後的數字:n);/輸出語句,程式運作如下:3 7 5 6 8 0 3 5 6 7 8,2020/7 5,18,例4.3按選擇方法排序(從小到大)。選擇方法的排序原則:一次選擇數組中的每個數字,記下目前位置,假設它是目前位置的最小數字(min=i ),從下一個數字掃描到最後一個數字,并記錄最小數字的位置(min)。如果掃描後min不等于I,則意味着假設是錯誤的,然後交換min和I上的數字位置。也就是說,。

9、10個數字中的最小數字首先與a0交換,然後a1到a9中的最小數字與a1交換。在第一輪比較中,找出未排序數字中最小的一個。總共應該比較9輪。2020/7/5/19,以6個數字為例:3、7、5、6、8和0。思路:第一遍:依次比較第一個數字和下面的數字。如果後一個數字小于第一個數字,則交換兩個數字。比較後,第一個數字是最小的數字。第二遍:依次比較第二個數字和下面的數字。如果後一個數字小于第二個數字,則交換兩個數字。比較後,第二個數字是下一個最小的數字。等等。例4.3按選擇方法排序(從小到大)。2020/7/5/20,按選擇方法排序(續),上述數組元素的排序通過雙循環實作,外循環變量設定為1,内循環變。

10、量設定為J.外循環重複N-1次,内循環重複N-1、N-2次,依次1次。每次比較兩個元素,第一個元素與外環1相關,由ai辨別,第二個元素與内環J相關,由aj辨別。I的值是0,1,反過來,對于每個I,J的值是i 1,i 2,依次5。2020/7/5/21,按選擇方法排序(續),2020/7/5/22,# define n6 main()int an;I,j,t;對于(I=0;iaj)t=ai;ai=ajaj=t。列印(排序後的數字:n);程式運作如下:20 96 78 65 86 40排序數: 20 40 65 78 86 96,2020/7/5,23,4.2二維數組,資料類型數組名常量表達式1常。

11、量表達式2;例如:float x23,4.2.1二維數組的定義,int a3,4,b(3,4),c,d(3)(4);2020/7/5,24,位址值數組元素,二維數組元素按存儲順序:2020/7/5,25,x0為數組名,x00為數組位址,x1為數組名,x10為數組位址,二維數組可視為特殊的一維數組,x0 -浮動x23,2020/7/5,26,a34=3;a1,2=1;,4 . 2 . 2 2D數組元素的引用,例如:int a34a00=3;a01=a00 10,數組名稱行下标表達式列下标表達式,數組元素表達式:2020/7/5,27,4.2.3二維數組的。

12、初始化,例如:int a23=1,2,3,4,5,6;1。根據線條指定初始值,例如:int a23=1,2,3,4,5,6;初始化後的結果:1 2 3 4 5 6,2根據記憶體中數組元素的排列順序給每個元素指派,3給一些元素指派,例如:int a23=1,4;初始化後的結果:1 0 0 4 0 0,2020/7/5,28,4.2.3二維數組初始化(續)。初始化4個數組時,可以儲存行長度,但不能儲存列長度。例如,int a3=1,2,3,4,5,6,7;int b4=1,4,5;初始化結果:結果: A 0: 123 A 1: 456 A 2: 700,結果B 0: 1000 B 1: 4500,2。

13、020/7/5,29。以下二維數組的定義都是錯誤的:4.2.3二維數組的初始化,int a,b 2,C3;int m24=1,2,3,4,5,6,7,8,9;,2020/7/5,30,4.2.4二維數組應用示例(教材),P 130,2020/7/5,31,4.2.4二維數組應用示例,示例4.4為四行三列數組main() int a43,I,j,k;對于(I=0;i4;I)對于(j=0;J3;j)掃描(d),程式運作如下:1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 9 10 11 12,2020/7/5,32,。

14、4.2.4二維數組應用示例(續),示例4.5有一個NM矩陣,通過程式設計計算出絕對值最大的元素。圖4.4查找最大元素,2020/7/5,33,# include math . h # define n 4 # define M5 main()int I,j,row,column,max,anmmax=ABS(a00);row=column=0;對于(I=0;imax) max=abs(共同執行活動);row=I;col=j;,程式運作如下:34 56 12 67 23 12 67 43 98 54 65 45 66 16 24 37 83 25 64 19 max=。

15、98,row=1,column=3,2020/7/5,34,4.3字元數組和字元串,字元數組:可以存儲多個字元。4.3.1基本概念,字元串:字元串末尾必須有0個字元,并且其ASCII碼值為0。不是字元串,而是字元串,2020/7/5,35,另一個例子:char a35數組是二維字元數組,可以存儲15個字元或3個長度不大于4的字元串。4.3.2字元數組的定義,例如:字元s10s數組是一個一維字元數組,可以容納10個字元或長度不大于9的字元串。注意:字元串隻能存儲在字元數組中。2020/7/5,36,4.3.3字元數組的初始化,1使用字元常量來配置設定初始值,例如:char c5=C,h,I,n,a;。

16、另一個例子:char c6=C,h,I,n,a,0;是字元串,而不是字元串。2020年7月5日,37,4.3.3字元數組初始化(續),例如:char a310=basic,pascal,c;2,用字元串常量指派初始值,例如:char str10=字元串;或char str10=字元串;是一根繩子嗎?2020/7/5,38,4.3.3字元數組的初始化(續),例如:char s37=s,t,r,I,n,g;3初始化過程中省略了長度,例如:char s1=早上好!s10,s113,例如:char s2=s,t,r,I,n,g;思考:哪個數組存儲字元串?2020/7/5,39,4.3.4。示例4.6将09配置設定給字元數組c1,将AZ配置設定給字元數組c2,然後輸出c1和c2數組中的資料。1是對字元數組元素的引用,它可以為數組元素和元素的輸入/輸出值指派。2020/7/5/40,程式如下:main() char c110,c226int I;對于(I=0;i10I)c1i=i48;對于(I=0;i26(I)c2i=1a;對于(I=0;i10i ) printf(%c,c1i);printf(n);對于(I=0;i26i ) printf(%c,c2i);printf(n。