版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,第六章 數(shù)組,2,上機題,1. P129 6.11 2. P152 7.2 3. 將數(shù)組初值設(shè)置為:1, 3, 56, 34, 45, 69, 54, 78, 44, 23 將數(shù)組中所有能被3整除的數(shù)輸出到屏幕上。 4. 定義一個具有100個元素的整型數(shù)組,從鍵盤輸入數(shù)據(jù),求這些數(shù)據(jù)的累加和,直至從鍵盤輸入的數(shù)據(jù)為0結(jié)束。,3,上機題,P152頁: 1. 7.1 2. 7.4 數(shù)組賦初值 int a6=1,3,5,7,9;插入4 3. 7.6 4. 輸入一行單詞,將每個單詞的首字母變成大寫。 例:輸入:we are student. 輸出:We Are Student.,4,一維數(shù)組的定義
2、和引用,數(shù)組是同一類型的一組值(10個 char 或15個 int) ,在內(nèi)存中順序存放。,整個數(shù)組共用一個名字,而其中的每一項又稱為一個元素。,一、定義方式:,類型說明符 數(shù)組名常量表達式; int a4; /*表明a數(shù)組由4個int型元素組成 */,定義類型,數(shù)組名稱,元素個數(shù),5,int a4; /*表明a數(shù)組由4個int型元素組成*/ 其元素分別為:a0, a1, a2, a3 其序號從0開始。若存放首地址為2000H,則在內(nèi)存中為:,C語言不允許對數(shù)組的大小作動態(tài)的定義,即數(shù)組的大小不能是變量,必須是常量。,必須是常數(shù),6,如果要根據(jù)不同的數(shù)值改變數(shù)組的大小,可用常量表達式。如:,#
3、define SIZE 50 void main(void) int artSIZE; . ,7,二、一維數(shù)組元素的引用,數(shù)組必須先定義,具體引用時(賦值、運算、輸出)其元素等同于變量。,void main(void ) int i, a10; for ( i=0; i=0 ; i-) printf(%dt,ai); printf(n); ,輸出:9_ _8_ _7_ _6_ _5_ _4_ _3_ _2_ _1_ _0,定義,賦值,輸出,i=0, a0=0,i=1, a1=1,a,0,1,2,i=2, a2=2,9,i=9, a9=9,8,三、一維數(shù)組的初始化,在定義數(shù)組的同時給數(shù)組元素賦值
4、。,注意: 1、對數(shù)組中的一部分元素列舉初值,未賦值的部分是0。,int a10= 0,1, 2, 3, 4, 5;,2、不能給數(shù)組整體賦值,只能一個一個地賦值。,int a10= 0,1,2,.,9;,非法,int a10= 0,1, 2, 3, 4, 5,6,7,8,9;,int a10= 0,1, 2, 3, 4, 5, 0, 0, 0, 0;,9,3、可以用 int a = 0,1, 2, 3, 4, 5, 6, 7, 8, 9; 給數(shù)組賦值,編譯器會自動計算出內(nèi)的元素項數(shù),并將數(shù)組定義為該長度。,4、用局部static 或全局定義的數(shù)組不賦初值,系統(tǒng)均默認(rèn)其為0。,static in
5、t a10;(即存儲在靜態(tài)數(shù)據(jù)區(qū)中的數(shù)組其元素默認(rèn)為0),數(shù)組在內(nèi)存中順序存放,第一個元素位于地址的最低端。,a,10,求Fibonacci數(shù)列:1,1,2,3,5,8,.的前20個數(shù),即 F1=1 (n=1) F2=1(n=2) Fn=Fn-1+Fn-2(n=3),f i=f i-1+f i-2,11,下面程序的運行結(jié)果是:,void main(void) int a6, i; for (i=1; i3)%5 ; printf(%dt,ai); ,輸出:-4 0 4 4 3,1,-4,2,0,3,4,4,4,5,3,12,將一個數(shù)組中的值按逆序重新排放。例如,原來順序為 8,6,5,4,3,
6、2,1 排放后應(yīng)為:1,2,3,4,5,6,8,將數(shù)組中指定的數(shù)據(jù)刪除,如原數(shù)組為: 1,2,3,4,5,6,8。刪除4后應(yīng)為: 1,2,3,5,6,8,13,排序算法,用起泡法對6個數(shù)排序(由小到大),將相鄰的兩個數(shù)兩兩比較,將小的調(diào)到前頭。,14,第五趟 循環(huán)1次,for (j=1; jai+1) t=ai; ai=ai+1; ai+1=t; ,15,一般,元素的序號從0開始,因此,程序可以變動如下:,for (j=0; jai+1) t=ai; ai=ai+1; ai+1=t; ,16,例 用簡單選擇法對10個數(shù)排序,排序過程: (1)首先通過n-1次比較,從n個數(shù)中找出最小的, 將它與
7、第一個數(shù)交換第一趟選擇排序,結(jié)果最小的數(shù)被安置在第一個元素位置上 (2)再通過n-2次比較,從剩余的n-1個數(shù)中找出關(guān)鍵字次小的記錄,將它與第二個數(shù)交換第二趟選擇排序 (3)重復(fù)上述過程,共經(jīng)過n-1趟排序后,排序結(jié)束,17,例,初始: 49 38 65 97 76 13 27 ,i=1,13,49,一趟: 13 38 65 97 76 49 27 ,i=2,27,38,六趟: 13 27 38 49 65 76 97 ,18,for(i=1;i10;i+) k=i; for(j=i+1;j10;j+) if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; ,fo
8、r (i=0; in-1; i+) k=i; for (j=i; jn ; j+) if (ajak) k=j ; if(i!=k) t=ak; ak=ai; ai=t; ,19,二維數(shù)組的定義和引用,一、定義方式: 類型說明符 數(shù)組名常量表達式常量表達式;,int a34;,其元素分別為:a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23,表明a數(shù)組由34個int型元素組成,定義類型,數(shù)組名,行數(shù),列數(shù),20,其行列的序號均從0開始。若存放首地址為2000H,則在內(nèi)存中為:,即在內(nèi)存中,多維數(shù)組依然是直線順序排列的,第一個元素
9、位于最低地址處。,其元素分別為:a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23,21,二、二維數(shù)組的引用,與一維數(shù)組一樣,二維數(shù)組必須先定義,其維數(shù)必須是常量。具體引用時(賦值、運算、輸出)其元素等同于變量。,void main(void) int a23, i, j; printf(Input 2*3 numbersn); for (i=0; i2; i+) /* 輸入 */ for(j=0; j3; j+) scanf(%d, ,輸入:1 2 3 4 5 6,輸出: _ _ _1_ _ _2_ _ _3 _ _ _4_
10、_ _5_ _ _6,定義,賦值,輸出,22,三、二維數(shù)組的初始化,在定義數(shù)組的同時給數(shù)組元素賦值。即在編譯階段給數(shù)組所在的內(nèi)存賦值。,1、分行賦值,int a34=1,2,3,4,5,6,7,8,9,10,11,12;,2、順序賦值,int a34=1,2,3,4,5,6,7,8,9,10,11,12; /*依次賦值 */,23,3、部分賦值,int a34=1,5,9; /* a00=1, a10=5, a20=9 其余元素為0 */,int a34=0,1,5; /* a00=0, a01=1, a10=5 */,24,4、分行或全部賦值時,可以省略第一維,第二維不可省。,int a 4
11、=1,2,5,6,7,8,9,10,11,12;,5、不能給數(shù)組整體賦值,只能一個一個地賦值。,6、用static 定義的數(shù)組不賦初值,系統(tǒng)均默認(rèn)其為0。,static int a23;,int a23=1,2,3,.,12;,25,void main(void) int a33, i, j; for (i=0; i3; i+) for (j=0; j3; j+) if (i= =2) aij=ai-1ai-1j+1; else aij=j; printf(%dt,aij); printf(n); ,i=0 a00=0 a01=1 a02=2,i=1 a10=0 a11=1 a12=2,a20
12、=a1a10+1=a10+1=1,i=2,a21=a1a11+1=a11+1=2,a22=a1a12+1=a12+1=3,輸出:_ _ _0_ _ _1_ _ _ 2,_ _ _0_ _ _1_ _ _ 2,_ _ _1_ _ _2_ _ _ 3,26,有一個34的矩陣,要求編程序求出其中值最大的那個元素的值,以及其所在的行號和列號。,先考慮解此問題的思路。從若干個數(shù)中求最大者的方法很多,我們現(xiàn)在采用“打擂臺”算法。如果有若干人比武,先有一人站在臺上,再上去一人與其交手,敗者下臺,勝者留臺上。第三個人再上臺與在臺上者比,同樣是敗者下臺,勝者留臺上。如此比下去直到所有人都上臺比過為止。最后留在臺
13、上的就是勝者。,27,程序模擬這個方法,開始時把a00的值賦給變量max,max就是開始時的擂主,然后讓下一個元素與它比較,將二者中值大者保存在max中,然后再讓下一個元素與新的max比,直到最后一個元素比完為止。max最后的值就是數(shù)組所有元素中的最大值。,28,max=a00; /*使max開始時取a00的值*/ for (i=0;imax)/*如果某元素大于max*/ max=aij; /*max將取該元素的值*/ row=i; /*記下該元素的行號i*/ colum=j; /*記下該元素的列號j*/ printf(%dt%dt%dn,row,colum,max);,29,將數(shù)組行列式互換
14、。,123 56 789,147 258 369,for (i=0; i3; i+) for (j=0; j3; j+) t=aij; aij=aji; aji=t; ,for (i=0; i3; i+) for (j=0; ji; j+) t=aij; aij=aji; aji=t; ,30,打印楊輝三角形 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1,aij=ai-1j-1+ai-1j,31,以下程序用于從鍵盤上輸入若干個學(xué)生的成績,統(tǒng)計出平均成績,并輸出低于平均成績的學(xué)生成績。輸入負(fù)數(shù)結(jié)束,void main() float x100,sum=0,
15、ave,a; int n=0,i; printf(Input scoren); _; while(_) xn=a; _; _ scanf(%d, ,ave=sum/n; printf(ave=%dn,ave); for( i=0; _;i+) if(_) printf(x%d %dn, i, xi);,scanf(%d, int a100; scanf(%d,for(i=n-1;i=0;i-) printf(%d,ai); printf(n); ,將余數(shù)依次存入數(shù)組中,34,已有一個已排好序的數(shù)組,今輸入一個數(shù),要求按原來排序的規(guī)律將它插入數(shù)組中。,輸入:scanf(%d, 25,35,a,輸
16、入:cinx; 25,78,56,34,25,for(i=n-1;i=0;i-),從后向前循環(huán),36,void main(void) int a6=2,5,8,10,12; int x; for(int i=0;i0;i-) if(aix) ai+1=ai; else break; ,ai+1=x; for(i=0;i6;i+) printf(%dt,ai); printf(n); ,關(guān)鍵!從后面開始循環(huán),從前向后移數(shù),不大于退出循環(huán),賦值,37,用篩選取法求出2200之間的所有素數(shù)。,篩法:首先將1n個數(shù)為數(shù)組置初值。2的倍數(shù)不是素數(shù),置0; 3的倍數(shù)不是素數(shù),置0;5的倍數(shù)不是素數(shù),置0;
17、.,依次類推,最后將數(shù)組中不是0的元素輸出。,38,字符數(shù)組,用來存放字符數(shù)據(jù)的數(shù)組是字符數(shù)組,字符數(shù)組中的一個元素存放一個字符。,一、字符數(shù)組的定義,char 數(shù)組名常量表達式;,char c4; /*每個元素占一個字節(jié) */,c0=I; c1=m; c2=_;,類型,數(shù)組名,數(shù)組大小,39,二、字符數(shù)組的初始化,與數(shù)值數(shù)組的初始化相同,取其相應(yīng)字符的ASCII值。,char c10=I, , a, m, , a, , b, o, y;,40,如果字符個數(shù)大于數(shù)組長度,做錯誤處理;如果數(shù)值個數(shù)小于數(shù)組長度,后面的字節(jié)全部為0。,如果省略數(shù)組長度,則字符數(shù)即為數(shù)組長度。,static char
18、 c =I, , a, m, , a, , g, i, r,l;,同理,也可定義和初始化一個二維或多維的字符數(shù)組。分層或省略最后一維。,char st1 =65, 66, 68;,41,三、字符數(shù)組的引用,void main(void) char c10=I, , a, m, , a, , b, o, y; int i; for (i=0; i10; i+) printf(%c, ci); printf(n); ,定義,輸出,42,四、字符串和字符串結(jié)束標(biāo)志,C+語言將字符串作為字符數(shù)組來處理。 字符串常量:CHINA,在機內(nèi)被處理成一個無名的字符型一維數(shù)組。,C+語言中約定用0作為字符串的結(jié)
19、束標(biāo)志,它占內(nèi)存空間,但不計入串長度。有了結(jié)束標(biāo)志0后,程序往往依據(jù)它判斷字符串是否結(jié)束,而不是根據(jù)定義時設(shè)定的長度。,43,字符串與字符數(shù)組的區(qū)別:,char a =C,H,I,N,A;,char c =“CHINA”;,字符數(shù)組,字符串,44,可以用字符串的形式為字符數(shù)組賦初值,char c =“I am a boy”; /*長度11字節(jié),以0結(jié)尾 */,char a =I, , a, m, , a, , b, o, y; /* 長度10字節(jié) */,如果數(shù)組定義的長度大于字符串的長度,后面均為0。,char c10=“CHINA”;,0的ASCII為0,而 (空格)的ASCII為32。,0
20、0000000,00100000,45,char w =T, u, r, b, o, 0;,char w =“Turbo0”;,char w =“Turbo0”;,char w =Turbo0;,非法,46,char a25=“abcd”, “ABCD”;,str為字符數(shù)組在內(nèi)存中存儲的地址,一經(jīng)定義,便成為常量,不可再賦值。,char str12=“The String”;,非法,在語句中賦值,定義數(shù)組,開辟空間時賦初值,47,逐個字符輸入輸出 1、printf ( ) scanf ( ) 中用 %c。 2、使用getchar ( ) 和 putchar ( )函數(shù)。,字符數(shù)組的輸入輸出,c
21、har str10; printf(輸入十個字符:); for(int i=0;i10;i+) scanf(%c, .,char str10; printf(輸入十個字符: ); for(int i=0;i10;i+) stri=getchar(); .,48,字符串整體輸入輸出,1、printf ( ) scanf ( )中用s。,static char str10=“CHINA”; printf (“%s”, str); /* %s 格式要求地址,即數(shù)組名 */,輸出:CHINA 輸出到0結(jié)束。,printf (“%7.3s”, str);,輸出:_ _ _ _CHI,%s作為輸入格式,遇
22、到空白字符就認(rèn)為輸入結(jié)束。,49,char str10 ; scanf (“%s”, str); /* %s 格式要求地址(數(shù)組名) */,輸入: How are you?,%s作為輸入格式,遇到空白字符就認(rèn)為輸入結(jié)束。,50,char str110, str10, str10; scanf (“%s%s%s”, str1, str2, str3);,51,2. 使用gets ( ) 和 puts ( ) 函數(shù),gets( )用來從鍵盤讀入字符,直到遇到換行符為止,換行符不屬于字符串內(nèi)容。,char str50; gets(str);,字符串輸入后,系統(tǒng)將0置于串尾代替換行符,若輸入串長超過定
23、義的長度時系統(tǒng)報錯。,輸入:I am a student,puts( )函數(shù)把字符串的內(nèi)容顯示在屏幕上,遇到第一個0結(jié)束。,puts(str);,輸出:I am a student,52,從鍵盤輸入一行字符,統(tǒng)計其中分別有多少大小寫字母。,從鍵盤輸入一行字符,其中的大寫變小寫,小寫變大寫。,53,從鍵盤接收一行字符,統(tǒng)計有多少個單詞數(shù)?,we are students.,不能用字母數(shù)或空格數(shù)來判斷,只能用字母和空格狀態(tài)變化的次數(shù)來判斷。,設(shè)狀態(tài)變量word , 判別到字母時word為1,判別到非字母時word為0。,word的初始值為0,當(dāng)從0變?yōu)?時,單詞數(shù)加1。,54,void main(
24、void) char s80; int i=0, word=0,num=0; gets (s); while(si!=0) if(si=a ,表明前一字符非字母,改變狀態(tài),防止繼續(xù)對下一字母計數(shù),改變狀態(tài),碰到下一個字母時開始計數(shù),55,六、字符串處理函數(shù),C中沒有對字符串變量進行賦值、合并、比較的運算符,但提供了許多字符串處理函數(shù),用戶可以調(diào)用 #include “string.h”,所有字符串處理函數(shù)的實參都是字符數(shù)組名,56,1、合并兩個字符串的函數(shù) strcat (str1, str2),static char str120=“I am a ”; static char str2 =“
25、boy”; strcat (str1, str2);,將第二個字符串 str2 接到第一個字符串 str1 后。,注意:第一個字符串要有足夠的空間。,空間足夠大,57,2、復(fù)制兩個字符串的函數(shù) strcpy (str1, str2),static char str120=“I am a ”; static char str2 =“boy”; strcpy (str1, str2);,strcpy ( str1, “CHINA”);,strcpy (“CHINA”, str1);,str1=str2;,str1=“CHINA”;,字符串正確賦值,均為非法,58,3、比較兩個字符串的函數(shù) strc
26、mp (str1, str2),此函數(shù)用來比較str1和str2中字符串的內(nèi)容。函數(shù)對字符串中的ASCII字符逐個兩兩比較,直到遇到不同字符或0為止。函數(shù)值由兩個對應(yīng)字符相減而得。,該函數(shù)具有返回值,返回值是兩字符串對應(yīng)的第一個不同的ASCII碼的差值。,若兩個字符串完全相同,函數(shù)值為0。,if ( strcmp (str1, str2)=0) . ,用來判斷兩字符串是否相等,59,static char str120=“CHINA”; static char str2 =“CHINB”; printf(%dn, strcmp (str1, str2);,輸出:-1,static char s
27、tr120=“CHINA”; static char str2 =“AHINB”; printf(%dn,strcmp (str1, str2);,輸出:2,if (str1= =str2) printf(yesn);,if (strcmp (str1,str2)= =0) printf(yesn);,非法,正確,60,4、求字符串長度的函數(shù) strlen (str1),函數(shù)參數(shù)為數(shù)組名,返回值為數(shù)組首字母到0的長度。并非數(shù)組在內(nèi)存中空間的大小。,char s80; strcpy(s, abcd); printf(%dn,strlen(s);,輸出: 4,輸出: 3,printf(%dn,st
28、rlen(str1);,printf(%dn,siziof(s);,輸出: 80,長度不包括0。,61,char str120=“CHINA”; printf(%dn,strlen (str1);,輸出:5,char sp =“x69082”; printf(%dn,strlen (sp);,輸出:6,char sp =“tv0willn”; printf(%dn,strlen (sp);,輸出:3,char str120=“a book”; printf(%dn,strlen (str1);,輸出:1,62,5、 strlwr (str1),將str1中的大寫字母轉(zhuǎn)換成小寫字母。,6、 strupr (str1),將str1中的小寫字母轉(zhuǎn)換成大寫字母。,63,7、函數(shù)strncmp(字符串1,字符串2 , maxlen)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年翠屏區(qū)敘戎社會工作服務(wù)中心招聘工作人員大??蛇M五險一金備考題庫及一套答案詳解
- 2026年黔西市水西中學(xué)招聘各學(xué)科教師備考題庫及參考答案詳解1套
- 2026年西華大學(xué)美術(shù)與設(shè)計學(xué)院碩士教師招聘備考題庫及答案詳解1套
- 2026年月份編外招聘備考題庫及一套答案詳解
- 塔里木大學(xué)2026專任教師公開招聘備考題庫及完整答案詳解一套
- 中學(xué)學(xué)生社團活動檔案管理制度
- 2026年玉環(huán)市流動人口服務(wù)中心招聘流動人口專管員備考題庫及完整答案詳解1套
- 2026年英德市浛洸醫(yī)院(英德市醫(yī)療衛(wèi)生共同體浛洸分院)合同聘用制人員招聘備考題庫及1套參考答案詳解
- 中誠建川(涼山)電力有限公司公開招聘20名工作人員備考題庫及答案詳解1套
- 養(yǎng)老院老人康復(fù)設(shè)施維修人員晉升制度
- 河南省鄭州市2024-2025學(xué)年高二上學(xué)期期末考試 生物(含答案)
- 捏合機安全操作規(guī)程(3篇)
- 2024-2025學(xué)年四川省成都市蓉城名校聯(lián)盟高一上學(xué)期期中語文試題及答案
- 修復(fù)胃黏膜的十大中藥
- 2024私人土地買賣協(xié)議書樣本
- 手術(shù)中輸血制度
- 北京市2024年第二次普通高中學(xué)業(yè)水平合格性考試語文試卷(含答案)
- 外研版小學(xué)英語(三起點)六年級上冊期末測試題及答案(共3套)
- MT-T 1199-2023 煤礦用防爆柴油機無軌膠輪運輸車輛安全技術(shù)條件
- 浪漫主義與民族主義
- 肝硬化腹水診療指南(2023版)解讀
評論
0/150
提交評論