第四章簡單構(gòu)造數(shù)據(jù)類型_第1頁
第四章簡單構(gòu)造數(shù)據(jù)類型_第2頁
第四章簡單構(gòu)造數(shù)據(jù)類型_第3頁
第四章簡單構(gòu)造數(shù)據(jù)類型_第4頁
第四章簡單構(gòu)造數(shù)據(jù)類型_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)1 前面的章節(jié)中我們已經(jīng)學(xué)習(xí)了前面的章節(jié)中我們已經(jīng)學(xué)習(xí)了c c語言中的一語言中的一些基本數(shù)據(jù)類型(整型、字符型、實(shí)型),從本些基本數(shù)據(jù)類型(整型、字符型、實(shí)型),從本章開始我們學(xué)習(xí)構(gòu)造類型的數(shù)據(jù):章開始我們學(xué)習(xí)構(gòu)造類型的數(shù)據(jù):數(shù)組類型數(shù)組類型、結(jié)結(jié)構(gòu)體類型構(gòu)體類型、共同體類型,枚舉類型共同體類型,枚舉類型。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)2例例4.1:編寫一個(gè)函數(shù),從鍵盤讀如:編寫一個(gè)函數(shù),從鍵盤讀如10個(gè)數(shù),返回個(gè)數(shù),返回最大數(shù)最大數(shù),在,在主函數(shù)中輸出最大數(shù)。主函數(shù)中輸出最大數(shù)。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)3#i

2、nclude int max(int m,int n) int p,j; p=m0; for(j=1;jn;j+) if (pmj) p=mj; return(p);void main() int x10,m, n; printf(“input 10 integers:n”); for(n=0;n10;n+) scanf(“%d”,&xn); m=max(x,10); printf(“max=%dn”,m);2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)4 (1)(1)指針變量指針變量 (2)(2)變量的指針變量的指針 (3)(3)int a=4, *s; s=&a; 則,則,*s= ? (4

3、) (4)值傳遞方式值傳遞方式 vs 地址傳遞方式地址傳遞方式就是存放變量地址的變量。就是存放變量地址的變量。就是變量的地址。就是變量的地址。#includevoid swap(int *px,int *py) int temp; temp=*px; *px=*py; *py=temp;void main() int x=7,y=11,*p1,*p2; p1=&x; p2=&y; printf(“x=%d,y=%d”,x,y); printf(“swapped:n”); swap(p1,p2); printf(“x=%d,y=%d”,x,y);2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)5

4、上節(jié)回顧上節(jié)回顧是指一個(gè)有序數(shù)據(jù)的集合,其中每個(gè)元素是指一個(gè)有序數(shù)據(jù)的集合,其中每個(gè)元素由統(tǒng)一的數(shù)組名和下標(biāo)來唯一的表示。由統(tǒng)一的數(shù)組名和下標(biāo)來唯一的表示。定義形式:定義形式:類型說明符類型說明符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式 引用形式:引用形式:數(shù)組名數(shù)組名 下標(biāo)下標(biāo) 如如: int a5 = 1 , 3 , 5 , 7 , 9 ;2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)6所謂的所謂的數(shù)組數(shù)組是指一個(gè)有序數(shù)據(jù)的集合,其中每個(gè)是指一個(gè)有序數(shù)據(jù)的集合,其中每個(gè)元素由統(tǒng)一的數(shù)組名和下標(biāo)來唯一的表示。元素由統(tǒng)一的數(shù)組名和下標(biāo)來唯一的表示。2 2、定義形式:、定義形式:類型說明符類型說明符

5、 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式 如:如:intint a5; a5; 表示一個(gè)含有表示一個(gè)含有5 5個(gè)整型元素的數(shù)組,其中個(gè)整型元素的數(shù)組,其中a a是是數(shù)組名數(shù)組名,元素是,元素是aa0 0,a1,a2,a3,a4,a1,a2,a3,a4。 2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)7【說明】:【說明】: 、數(shù)組名由用戶定義,定義規(guī)則和變量名相同,、數(shù)組名由用戶定義,定義規(guī)則和變量名相同, 、常量表達(dá)式表示數(shù)組的元素個(gè)數(shù),即數(shù)組長、常量表達(dá)式表示數(shù)組的元素個(gè)數(shù),即數(shù)組長度。常量表達(dá)式中可以包括常量和符號常量,度。常量表達(dá)式中可以包括常量和符號常量,不能不能包含變量包含變量。 、數(shù)組

6、的下標(biāo)從、數(shù)組的下標(biāo)從0 0開始。開始。 、和其他變量一樣,數(shù)組也必須先定義后使用。、和其他變量一樣,數(shù)組也必須先定義后使用。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)8判斷一下數(shù)組表達(dá)方式正誤?判斷一下數(shù)組表達(dá)方式正誤?intint a(10); a(10);數(shù)組數(shù)組a10a10中包括元素:中包括元素: a0,a1,a0,a1,a9,a10a9,a10intint n; n; scanf(“%d”,&n scanf(“%d”,&n);); int int an; an;intint n=10; n=10; int int an+5; an+5;( )()()()2021-10-12c語言

7、程序設(shè)計(jì)語言程序設(shè)計(jì)9引用形式:引用形式:數(shù)組名數(shù)組名 下標(biāo)下標(biāo) 注意:注意: 數(shù)組元素的下標(biāo)可以是數(shù)組元素的下標(biāo)可以是整型常量或整型表達(dá)式;整型常量或整型表達(dá)式; c c語言規(guī)定只能逐個(gè)引語言規(guī)定只能逐個(gè)引用數(shù)組元素而不能一次引用數(shù)組元素而不能一次引用整個(gè)數(shù)組;用整個(gè)數(shù)組; 對下標(biāo)的引用不要超過對下標(biāo)的引用不要超過下標(biāo)的最大值。下標(biāo)的最大值。例:例:int x10,n; for(n=0;n10;n+) scanf(“%d”,&xn);4、 一維數(shù)組的初始化一維數(shù)組的初始化(1)概念概念 : 在定義一維數(shù)組時(shí)對各元素指定初始值稱為在定義一維數(shù)組時(shí)對各元素指定初始值稱為 數(shù)組的初始化數(shù)組的初始化

8、如如: int a5 = 1 , 3 , 5 , 7 , 9 ;(2)(2)方法:方法: 1 1)、在數(shù)組定義的同時(shí)對全體數(shù)組元素初始化)、在數(shù)組定義的同時(shí)對全體數(shù)組元素初始化。(可以省略數(shù)組長度)(可以省略數(shù)組長度) 如:如: intint a=1,2,3,4,5 a=1,2,3,4,5; 2 2)、可以僅對一部分下標(biāo)元素賦初值。)、可以僅對一部分下標(biāo)元素賦初值。(不能省略數(shù)組不能省略數(shù)組長度長度 ) 如:如: intint a5=1,2,3, a5=1,2,3,則則; ; a0= a1= a2= a3= a4= a0= a1= a2= a3= a4= 120032021-10-12c語言程

9、序設(shè)計(jì)語言程序設(shè)計(jì)113)、如果不對某些下標(biāo)元素賦初值,則對數(shù)值型)、如果不對某些下標(biāo)元素賦初值,則對數(shù)值型元素均為元素均為0,對字符型元素均為空操作符,對字符型元素均為空操作符0.4 4)、如果想對所有的元素全部賦初值,可以省略)、如果想對所有的元素全部賦初值,可以省略定義元素個(gè)數(shù)。定義元素個(gè)數(shù)。 如:如: intint a=1,2,3,4,5 a=1,2,3,4,5;5 5)、如果使數(shù)組所有元素值為)、如果使數(shù)組所有元素值為0 0,可以:,可以: intint a10=0,0,0,0,0,0,0,0,0,0 a10=0,0,0,0,0,0,0,0,0,0; 或或 intint a10=0

10、a10=0; 經(jīng)典例題經(jīng)典例題4.2: 用用冒泡排序法冒泡排序法對對6個(gè)數(shù)進(jìn)行排序個(gè)數(shù)進(jìn)行排序(從小到大從小到大) 9 7 2 5 4 1a0a1a2a3a4a5 7 2 5 4 1 9277547 1 2 5 4 1 7 945 15 2 4 1 5 7 9 2 1 4 5 7 91412冒泡排序方法冒泡排序方法: : 依次比較相鄰的兩個(gè)數(shù)依次比較相鄰的兩個(gè)數(shù), ,將小數(shù)放前面將小數(shù)放前面, ,大數(shù)放后面大數(shù)放后面. n. n個(gè)數(shù)排序需要進(jìn)行個(gè)數(shù)排序需要進(jìn)行n-1n-1輪比較輪比較, , 從第從第1 1輪到輪到第第n-1n-1輪輪, , 各輪的比較次數(shù)依次為各輪的比較次數(shù)依次為:n-1:n-

11、1次、次、n-2n-2次次 1 1次次 9 7 2 5 4 1 9999972541初始狀態(tài)初始狀態(tài)第第1輪輪第第2輪輪第第3輪輪第第4輪輪第第5輪輪72021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)13#include void main( ) int a6 , i , j , t; for ( i=0 ; i6 ; i+) scanf(“%d”, &ai ); for ( i=0 ; i5 ; i+) for ( j=0 ; jaj+1 ) t=aj ; aj=aj+1 ; aj+1=t ; for ( i=0 ; i6 ; i+) printf( “%3d”, ai );輸入輸入6個(gè)數(shù)據(jù)個(gè)

12、數(shù)據(jù)用嵌套的用嵌套的for循環(huán)實(shí)現(xiàn)排序循環(huán)實(shí)現(xiàn)排序外層循環(huán)控制進(jìn)行外層循環(huán)控制進(jìn)行6-1輪輪比較比較內(nèi)層循環(huán)控制內(nèi)層循環(huán)控制第第i輪輪進(jìn)行進(jìn)行6-i次次比較比較若前面的數(shù)大于后面若前面的數(shù)大于后面的數(shù)的數(shù),則進(jìn)行交換則進(jìn)行交換輸出排序后的輸出排序后的6個(gè)數(shù)據(jù)個(gè)數(shù)據(jù)2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)14 9 7 1 2 4 5a0a1a2a3a4a5 7 1 2 4 5 9 1 2 4 5 7 9 1 2 4 5 7 9 1 2 4 5 7 9第第1輪輪第第2輪輪第第3輪輪第第4輪輪第第5輪輪 1 2 4 5 7 9從這道例題中我們發(fā)現(xiàn)從這道例題中我們發(fā)現(xiàn), ,在進(jìn)行完第二輪比較后在

13、進(jìn)行完第二輪比較后, ,實(shí)際上實(shí)際上排序已經(jīng)完成了排序已經(jīng)完成了, ,從第三輪開始從第三輪開始, ,后面的比較都是多余的后面的比較都是多余的, ,在這種情況下我們希望可以終止比較在這種情況下我們希望可以終止比較. .初始狀態(tài)初始狀態(tài)為了解決問題為了解決問題, ,我們在程序中我們在程序中設(shè)置一個(gè)變量設(shè)置一個(gè)變量flag,flag,用它記錄用它記錄在一輪比較中是否進(jìn)行了交換在一輪比較中是否進(jìn)行了交換在每輪比較開始前在每輪比較開始前flag=0,flag=0,如如果在此輪比較中進(jìn)行了交換果在此輪比較中進(jìn)行了交換, ,則則flag=1,flag=1,在一輪比較結(jié)束后在一輪比較結(jié)束后, ,判斷判斷fla

14、gflag的值是否為的值是否為1,1,如果值如果值為為0,0,說明在此輪比較中沒有進(jìn)說明在此輪比較中沒有進(jìn)行交換行交換( (即已經(jīng)完成排序了即已經(jīng)完成排序了),),此時(shí)可以終止循環(huán)此時(shí)可以終止循環(huán)( (即結(jié)束排即結(jié)束排序序) )如果如果flagflag的值為的值為1,1,則要繼則要繼續(xù)進(jìn)行排序續(xù)進(jìn)行排序#include void main( ) int a6 , i , j , t , flag; for ( i=0; i6; i+) scanf(“%d”, &ai ); i=0 ; do flag=0; for ( j=0 ; jaj+1 ) t=aj ; aj=aj+1 ; aj+1=t

15、; flag=1; i+ ; while ( flag ) ; for ( i=0 ; i6 ; i+) printf( “%3d”,ai );2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)16例例4.3 用數(shù)組處理用數(shù)組處理fibonacci數(shù)列問題,輸出數(shù)列問題,輸出20以內(nèi)的所有項(xiàng)的值。以內(nèi)的所有項(xiàng)的值。#include void main( ) int f20=1,1;int i; for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+) if(i%5=0) printf(n); /*if語句用來語句用來控制換行,每行輸出控制換行,每行輸出5個(gè)數(shù)據(jù)。個(gè)數(shù)據(jù)

16、。*/ printf(%-12d,fi); printf(n);2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)17例例4.4: 4.4: 假設(shè)考試共有假設(shè)考試共有4 4個(gè)科目,一個(gè)班有個(gè)科目,一個(gè)班有3 3名學(xué)生。名學(xué)生。輸入所有學(xué)生的各科成績,求出每名學(xué)生的總成績。輸入所有學(xué)生的各科成績,求出每名學(xué)生的總成績。520937126104182021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)181、 概念概念 : 一個(gè)一維數(shù)組一個(gè)一維數(shù)組, 它的每一個(gè)元素都是類型它的每一個(gè)元素都是類型相同的一維數(shù)組相同的一維數(shù)組, 就形成一個(gè)二維數(shù)組就形成一個(gè)二維數(shù)組 2、 定義形式定義形式 : 類型標(biāo)識符類型標(biāo)識

17、符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式1 常量表達(dá)式常量表達(dá)式2 如如: int a34 ; a0a1a2a00a01a02 a03a10a11a12 a13a20a21a22 a234.2.2 二維數(shù)組的定義和使用二維數(shù)組的定義和使用2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)19 3、 存儲形式存儲形式 : 數(shù)組的元素在內(nèi)存中是數(shù)組的元素在內(nèi)存中是連續(xù)連續(xù)存放的存放的 例例 int a33 ; 的存放形式如下的存放形式如下 : a10a11a12a20a21a22a00a01a02a00a01a02a10a11a12a20a21a22101010121014101610181020102

18、2102410262021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)204、二維數(shù)組元素的引用、二維數(shù)組元素的引用二維數(shù)組元素的表示:二維數(shù)組元素的表示:數(shù)組名數(shù)組名下標(biāo)下標(biāo)下標(biāo)下標(biāo) (1 1) 行號和列號都是從行號和列號都是從0 0開始的,并注意行號和列開始的,并注意行號和列號不要超過數(shù)組定義的范圍。號不要超過數(shù)組定義的范圍。 例:例:intint a34; a34; 定義定義3 3行行4 4列數(shù)組列數(shù)組 a34=3; a34=3; () 為元素賦值為元素賦值 (2 2) 數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦數(shù)組元素可以出現(xiàn)在表達(dá)式中,也可以被賦值。值。 例:例:b12=a23/2;b12=a

19、23/2; b13=5; b13=5;2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)21 (1). 分行初始化分行初始化 int a34= 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ; 此方法較直觀此方法較直觀, 第一對第一對 內(nèi)的數(shù)據(jù)賦給內(nèi)的數(shù)據(jù)賦給 第一行數(shù)組元素第一行數(shù)組元素, 以此類推以此類推 (2). 按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值 int a34= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 將數(shù)據(jù)依次賦給元素將數(shù)據(jù)依次賦給元素 a00 , a01 a23 12345678910

20、 11 12注意注意: 此方法數(shù)據(jù)沒有明顯的界限此方法數(shù)據(jù)沒有明顯的界限, 當(dāng)數(shù)據(jù)較多時(shí)容易出錯(cuò)當(dāng)數(shù)據(jù)較多時(shí)容易出錯(cuò)5. 二維數(shù)組的初始化二維數(shù)組的初始化2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)22(3). 對數(shù)組的部分元素賦初值對數(shù)組的部分元素賦初值 int a34= 1,2 , 3 , 0,4 ; int a34= 1,2,3,4,5,6 ;120030000400123456000000 (4). 對數(shù)組的全部元素賦初值時(shí)可以對數(shù)組的全部元素賦初值時(shí)可以省略第一維省略第一維的長度的長度 系統(tǒng)會根據(jù)數(shù)據(jù)的個(gè)數(shù)和第二維的長度自動(dòng)求出系統(tǒng)會根據(jù)數(shù)據(jù)的個(gè)數(shù)和第二維的長度自動(dòng)求出 第一維的長

21、度第一維的長度 int a 4= 1, 2 , 0, 3, 4 , 5 ; int b 2= 1, 2, 3, 4, 5, 6, 7, 8 ;數(shù)組數(shù)組a 第一維長度為第一維長度為 3 數(shù)組數(shù)組b 第一維長度為第一維長度為 4 4.2.3 二維數(shù)組程序舉例二維數(shù)組程序舉例2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)24例例4.5、對以下矩陣進(jìn)行轉(zhuǎn)置:、對以下矩陣進(jìn)行轉(zhuǎn)置:1 2 3 1 41 2 3 1 44 5 6 2 5 4 5 6 2 5 3 6說明:該矩陣是非對稱矩陣,所以利用兩個(gè)二維說明:該矩陣是非對稱矩陣,所以利用兩個(gè)二維數(shù)組進(jìn)行存儲原矩陣和轉(zhuǎn)置矩陣。數(shù)組進(jìn)行存儲原矩陣和轉(zhuǎn)置矩陣。

22、#includevoid main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); printf(array b:n); for(i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij); printf(n); 2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)26上節(jié)回顧上節(jié)回顧1、二維數(shù)組的定義、二維數(shù)組的定義2、二維數(shù)組的引用、二維數(shù)組的引用3、二維數(shù)組的初始化、二

23、維數(shù)組的初始化類型標(biāo)識符類型標(biāo)識符 數(shù)組名數(shù)組名 常量表達(dá)式常量表達(dá)式1 常量表達(dá)式常量表達(dá)式2 如如: int a34 ; 數(shù)組名數(shù)組名下標(biāo)下標(biāo)下標(biāo)下標(biāo)(1). 分行初始化分行初始化(2). 按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值按數(shù)據(jù)的排列順序?qū)?shù)組元素賦初值2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)27一、引入一、引入二、定義二、定義字符串字符串:由若干有效字符組成的字符序列;:由若干有效字符組成的字符序列;字符串必須以字符串必須以00作為結(jié)束標(biāo)志,它只是表示一作為結(jié)束標(biāo)志,它只是表示一個(gè)字符串的結(jié)束,沒有任何的具體含義。個(gè)字符串的結(jié)束,沒有任何的具體含義。c語言中的字符串是作為語言中的字

24、符串是作為字符數(shù)組字符數(shù)組來處理的。來處理的。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)28 1. 字符數(shù)組定義字符數(shù)組定義 : 用來存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。用來存放字符型數(shù)據(jù)的數(shù)組稱為字符數(shù)組。 例:例: char c10; 2. 字符數(shù)組的初始化字符數(shù)組的初始化 : (1)可以逐個(gè)字符元素賦值可以逐個(gè)字符元素賦值;例:例:char 5=c,h,i,n,a ;(2)當(dāng)初值個(gè)數(shù)小于字符數(shù)組長度時(shí),其余元素自動(dòng)當(dāng)初值個(gè)數(shù)小于字符數(shù)組長度時(shí),其余元素自動(dòng)賦值為賦值為0;例:例:char10=b,e,i,j,i,n,g; 則:則:str7=str8=str9=0;2021-10-12c

25、語言程序設(shè)計(jì)語言程序設(shè)計(jì)29(3) 當(dāng)初值個(gè)數(shù)大于數(shù)組長度,按語法錯(cuò)誤處理;當(dāng)初值個(gè)數(shù)大于數(shù)組長度,按語法錯(cuò)誤處理;(4) 當(dāng)初值個(gè)數(shù)與預(yù)定的數(shù)組長度相同時(shí),可以省略當(dāng)初值個(gè)數(shù)與預(yù)定的數(shù)組長度相同時(shí),可以省略數(shù)組長度;數(shù)組長度;例:例:char c= =c,h,i,n,a ;(5)也可以定義和初始化一個(gè)二位字符數(shù)組。也可以定義和初始化一個(gè)二位字符數(shù)組。例:例:char diamond33= ,*, ,*, ,*, ,*, 2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)303. 字符數(shù)組的引用字符數(shù)組的引用 : 引用字符數(shù)組中的一個(gè)元素,可以得到一個(gè)字符。引用字符數(shù)組中的一個(gè)元素,可以得到一個(gè)字

26、符。 例例4.6:/*輸出一個(gè)字符串輸出一個(gè)字符串*/#include void main( ) static char c10= i, , a, m, , a, , s, t, u, d, e, n, t; int i; for(i=0;i10;i+) printf(%c,ci); printf(n);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:i am a student2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)31 1. 字符串的定義字符串的定義: 由若干個(gè)有效字符組成的序列由若干個(gè)有效字符組成的序列 ,用雙引號括起來。,用雙引號括起來。 有效字符包括字母有效字符包括字母, 數(shù)字?jǐn)?shù)字, 專用字符專用字符

27、, 轉(zhuǎn)義字符轉(zhuǎn)義字符 如如 : “bfer” “a45-7” “mtkn” c語言中沒有專門的字符串變量語言中沒有專門的字符串變量, 因此字符串因此字符串存放在字符數(shù)組中存放在字符數(shù)組中, 字符串以字符串以“0”作為結(jié)束標(biāo)作為結(jié)束標(biāo)志志說明:說明: 定義字符數(shù)組時(shí),要保證數(shù)組長度始終大于字符定義字符數(shù)組時(shí),要保證數(shù)組長度始終大于字符串實(shí)際長度。串實(shí)際長度。例:字符串例:字符串“how are you”在內(nèi)存中在內(nèi)存中實(shí)際占實(shí)際占12個(gè)字符。個(gè)字符。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)322、字符數(shù)組的初始化字符數(shù)組的初始化:初始化形式:初始化形式: (1 1)數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名

28、數(shù)組名=字符串字符串 ;或或 (2 2)數(shù)據(jù)類型數(shù)據(jù)類型 數(shù)組名數(shù)組名=字符串;字符串; 如:如:char aachar aa=”good morning!good morning!”; ;則數(shù)組則數(shù)組aaaa的長度為的長度為1414而不是而不是1313。由系統(tǒng)在字符串后。由系統(tǒng)在字符串后加一個(gè)加一個(gè)00。以上字符串賦值相當(dāng)于:以上字符串賦值相當(dāng)于: char aachar aa=“good morning!good morning!”; ;或或 char char aaaa=g,o,o,d,m,=g,o,o,d,m, o,r,n, o,r,n, i,n,g,!,i,n,g,!,00; (1)

29、. 為數(shù)組中的元素指定初值為數(shù)組中的元素指定初值 char c8 = h,e,l,l,o ; 如果對數(shù)組全部元素指定初值如果對數(shù)組全部元素指定初值, 則可以省略數(shù)組的長度則可以省略數(shù)組的長度char c = h , e , l , l , o ;hello0 0 0hello(2). 對字符數(shù)組指定字符串初值對字符數(shù)組指定字符串初值char c8 = “hello” ;char c8 = “hello” ; char c8 = h,e,l,l,o,0 ;三種形式等價(jià)三種形式等價(jià)char c = “hello”;char c6=“hello”; char c5 = “hello” ;hello0

30、hello0錯(cuò)誤的初始化錯(cuò)誤的初始化注意注意 : 初始化時(shí)數(shù)組的長度應(yīng)足夠大初始化時(shí)數(shù)組的長度應(yīng)足夠大, 確??梢匀菁{所有字符和結(jié)束標(biāo)志確??梢匀菁{所有字符和結(jié)束標(biāo)志03、 字符串的輸入字符串的輸入(1). 輸入單個(gè)字符輸入單個(gè)字符 char c8 ; int i ; scanf(“%c%c%c” , &c0, &c1, &c2 ) ; for ( i=3 ; i8 ; i+ ) scanf(“%c” , &ci ) ;(2). 輸入一個(gè)字符串輸入一個(gè)字符串 scanf ( “%s” , c ) ; 說明說明 : 用格式字符用格式字符 %s 輸入字符串輸入字符串, 字符數(shù)組變字符數(shù)組變量量c不

31、需要不需要 加地址運(yùn)算符加地址運(yùn)算符& , 因數(shù)組名本身代表數(shù)因數(shù)組名本身代表數(shù)組的首地址組的首地址注意注意 : (1) 從鍵盤輸入字符串時(shí)不加從鍵盤輸入字符串時(shí)不加“ ” (2) 用用scanf 輸入字符串時(shí)輸入字符串時(shí), 空格和回車符都會作為空格和回車符都會作為 字符串的分隔符,即字符串的分隔符,即scanf不能用來輸入包含有不能用來輸入包含有 空格空格的字符串的字符串 (3). 字符串輸入函數(shù)字符串輸入函數(shù) gets ( 字符數(shù)組字符數(shù)組 ) 如如 : gets(c) ; 說明說明: 輸入有空格的字符串時(shí)應(yīng)使用函數(shù)輸入有空格的字符串時(shí)應(yīng)使用函數(shù)gets , 它會讀入全部字符直到遇到回車符

32、為止它會讀入全部字符直到遇到回車符為止例例: int i ; char c8; for ( i=0 ; i8 ; i+ ) scanf(“%c”,&ci ) ; scanf(“%s” , c ) ; gets ( c ) ; 假設(shè)輸入為假設(shè)輸入為: abcd efgh abcdefgabcd 0abcdefgh 0注意注意: 用用gets輸入字符串時(shí)輸入字符串時(shí), 若輸入字符數(shù)目大于字符數(shù)組的若輸入字符數(shù)目大于字符數(shù)組的長度長度, 多出的字符則會存放在數(shù)組的合法存儲空間之外多出的字符則會存放在數(shù)組的合法存儲空間之外,實(shí)實(shí)際編程不建議這樣做,多出字符較多時(shí)執(zhí)行會出錯(cuò)。際編程不建議這樣做,多出字符

33、較多時(shí)執(zhí)行會出錯(cuò)。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)364、 字符串的輸出字符串的輸出(1). 輸出單個(gè)字符輸出單個(gè)字符 char c8 ; int i ; printf( “%c%c” , c0 , c1 ) ;for ( i=2 ; i8 ; i+ ) printf( “%c” , ci ) ;(2). 輸出字符串輸出字符串 printf( “%s” , c ) ;注意注意: 輸出時(shí)不包括字符輸出時(shí)不包括字符0, 如果一個(gè)字符串中有多個(gè)如果一個(gè)字符串中有多個(gè)0 則輸出時(shí)遇到第一個(gè)則輸出時(shí)遇到第一個(gè)0即認(rèn)為字符串結(jié)束即認(rèn)為字符串結(jié)束 (3). 字符串輸出函數(shù)字符串輸出函數(shù) put

34、s ( 字符數(shù)組字符數(shù)組 ) 一次輸出一個(gè)字符串一次輸出一個(gè)字符串, 輸出時(shí)將輸出時(shí)將0自動(dòng)轉(zhuǎn)換自動(dòng)轉(zhuǎn)換成換行符成換行符 例例: char s15=“abc”, s210=“defg” ; printf( “%s%sn” , s1 , s2 ) ; puts( s1 ) ; puts( s2 ) ;輸出結(jié)果輸出結(jié)果:abcdefgabcdefg例例: int i ; char c8; gets ( c ) ; for ( i=0 ; i8 ; i+ ) printf(“%c”, ci ); printf(“n”) puts ( c ); printf(“%s”, c );假設(shè)輸入為假設(shè)輸入為:

35、 abcd efgh abcdefgh 0輸出結(jié)果輸出結(jié)果:abcd efgabcd efghabcd efgh2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)384、 字符串?dāng)?shù)組字符串?dāng)?shù)組 字符串?dāng)?shù)組就是數(shù)組中的每一個(gè)元素是一個(gè)字字符串?dāng)?shù)組就是數(shù)組中的每一個(gè)元素是一個(gè)字符串。符串。 實(shí)際上是一個(gè)二維字符數(shù)組。該二維字符數(shù)組實(shí)際上是一個(gè)二維字符數(shù)組。該二維字符數(shù)組的第一維表示字符串的個(gè)數(shù),第二維表示每個(gè)字的第一維表示字符串的個(gè)數(shù),第二維表示每個(gè)字符串的存儲的長度。符串的存儲的長度。 字符串處理函數(shù)字符串處理函數(shù) (使用字符串函數(shù)時(shí)要寫使用字符串函數(shù)時(shí)要寫#include )(1). 字符串拷貝函

36、數(shù)字符串拷貝函數(shù) 注意注意: c語言不允許用賦值表達(dá)式對字符數(shù)組賦值語言不允許用賦值表達(dá)式對字符數(shù)組賦值 char s15=“abc” , s23 , s38 ; s2 = “abc” ; s3 = s1 ; /* 賦值與初始化不同賦值與初始化不同 */* 對對s2 , s3 的賦值都是非法的的賦值都是非法的 */希望字符數(shù)組希望字符數(shù)組s2或或s3中也存放字符串中也存放字符串“abc”不能用賦值不能用賦值而要用字符串拷貝函數(shù)而要用字符串拷貝函數(shù) a) 格式格式 : strcpy( 字符數(shù)組變量字符數(shù)組變量1 , 字符串字符串2 )b) 作用作用 : 將字符串將字符串2中的字符復(fù)制到字符數(shù)組中

37、的字符復(fù)制到字符數(shù)組1中中c) 說明說明 : 字符數(shù)組字符數(shù)組1 必須足夠大必須足夠大 字符串可以是字符串常量字符串可以是字符串常量, 也可以是字符數(shù)組變量也可以是字符數(shù)組變量 拷貝時(shí)拷貝時(shí)0也一起拷貝也一起拷貝6、字符串處理函數(shù)、字符串處理函數(shù)2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)40例例: char s15=“abc” , s23 , s38 ; strcpy ( s3 , s1 ) ; strcpy ( s2 , s1 ) ;abc0abc0s1s3abc0s2函數(shù)函數(shù)strncpy( 字符數(shù)組字符數(shù)組1 , 字符串字符串2 , n )作用作用: 將字符串將字符串2的前的前n個(gè)字

38、符復(fù)制到字符數(shù)組個(gè)字符復(fù)制到字符數(shù)組1 中中例例: char c110 , c2 =“abcdef” ; strncpy( c1 , c2 , 3 ) ;c1abcdef0c2a b c(2). 字符串連接函數(shù)字符串連接函數(shù)a) 格式格式: strcat ( 字符數(shù)組變量字符數(shù)組變量1 , 字符串字符串2 )b) 作用作用: 將字符串將字符串2中的字符連接到字符串中的字符連接到字符串1 的后面的后面, 產(chǎn)生的產(chǎn)生的 新字符串仍存放在字符數(shù)組新字符串仍存放在字符數(shù)組1 中中 c) 說明說明: 連接時(shí)將字符串連接時(shí)將字符串1 末尾的末尾的0將去掉將去掉 , 而在連接后的而在連接后的 新字符串末尾添

39、加新字符串末尾添加0 注意注意: 字符數(shù)組字符數(shù)組1要足夠大要足夠大例例: char s110=“abc” , s2 =“def” ; strcat ( s1 , s2 ) ; strcat ( s1 , “gh” ) ; abc0def0s1s2def0 gh02021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)42(3). 字符串比較函數(shù)字符串比較函數(shù) a) 格式格式 : strcmp ( 字符串字符串1 , 字符串字符串2 )b) 作用作用 : 比較兩個(gè)字符串的大小比較兩個(gè)字符串的大小c) 說明說明 : 兩個(gè)字符串可能是字符串常量或字符數(shù)組變量兩個(gè)字符串可能是字符串常量或字符數(shù)組變量 兩個(gè)字符

40、串比較時(shí)兩個(gè)字符串比較時(shí), 從字符串中的第一個(gè)字符開始逐個(gè)從字符串中的第一個(gè)字符開始逐個(gè) 比較其比較其ascii碼值碼值, 直到出現(xiàn)不同字符或出現(xiàn)直到出現(xiàn)不同字符或出現(xiàn)0為止為止 比較的結(jié)果由函數(shù)值帶回比較的結(jié)果由函數(shù)值帶回str1 = = str2 函數(shù)值為函數(shù)值為0str1 str2 函數(shù)值為正數(shù)函數(shù)值為正數(shù)str1 str2 函數(shù)值為負(fù)數(shù)函數(shù)值為負(fù)數(shù)2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)43(4). 測字符串長度函數(shù)測字符串長度函數(shù) 格式格式: strlen (字符串字符串) 作用作用: 測出字符串中實(shí)際字符的個(gè)數(shù)測出字符串中實(shí)際字符的個(gè)數(shù)( 不包括不包括0 )例例 : int

41、len1, len2 ; char s10 ; len1 = strlen( “computer”) ; gets(s) ; len2 = strlen(s) ;(5). 字符串中大、小字母轉(zhuǎn)換字符串中大、小字母轉(zhuǎn)換 strlwr ( 字符串字符串 ) 將字符串中大寫字母換成小寫字母將字符串中大寫字母換成小寫字母 strupr ( 字符串字符串 ) 將字符串中小寫字母換成大寫字母將字符串中小寫字母換成大寫字母2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)44例例4.7:用循環(huán)求從鍵盤輸入的字符個(gè)數(shù)。:用循環(huán)求從鍵盤輸入的字符個(gè)數(shù)。#include stdio.h#include #define

42、 max 80#define max 80main()main() char amax; char amax; int int i=0; i=0; printf(“input printf(“input a string:); a string:); scanf(%s,a scanf(%s,a);); do i=i+1;do i=i+1; while(ai!=0); while(ai!=0); printf(%d,i printf(%d,i);); 本例在進(jìn)行輸本例在進(jìn)行輸入時(shí),因?yàn)閿?shù)組入時(shí),因?yàn)閿?shù)組名本身就代表地名本身就代表地址,故不使用求址,故不使用求地址運(yùn)算符。地址運(yùn)算符。因因?yàn)樵谳斎胱?/p>

43、符串為在輸入字符串時(shí),自動(dòng)加上一時(shí),自動(dòng)加上一個(gè)結(jié)束符個(gè)結(jié)束符0,以以此來判斷字符串此來判斷字符串是否結(jié)是否結(jié) 束。束。教材例教材例4.9, 4.10 自學(xué)自學(xué)2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)45上節(jié)回顧上節(jié)回顧#include strcpy( 字符數(shù)組變量字符數(shù)組變量1 , 字符串字符串2 )strncpy( 字符數(shù)組字符數(shù)組1 , 字符串字符串2 , n )strcat ( 字符數(shù)組變量字符數(shù)組變量1 , 字符串字符串2 )strlen (字符串字符串)strlwr ( 字符串字符串 )strlpr ( 字符串字符串 )strcmp ( 字符串字符串1 , 字符串字符串2 )

44、2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)462021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)47指針和整數(shù)進(jìn)行加減運(yùn)算是按地址的運(yùn)算規(guī)則進(jìn)行的。指針和整數(shù)進(jìn)行加減運(yùn)算是按地址的運(yùn)算規(guī)則進(jìn)行的。例例則則, 指針變量指針變量p的值按以下公式計(jì)算:的值按以下公式計(jì)算:p的新值的新值=p的舊值的舊值+/-n*sizeof(指針基類型)(指針基類型)即,一個(gè)指針變量加或減即,一個(gè)指針變量加或減n后,相當(dāng)于把指針變量后,相當(dāng)于把指針變量的指向向后或向前移動(dòng)了的指向向后或向前移動(dòng)了n個(gè)基類型單元。個(gè)基類型單元。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)48a0a1a2aiai+12021-10-12

45、c語言程序設(shè)計(jì)語言程序設(shè)計(jì)491、可以改變指針變量的值,但是指針常量不可以改變!、可以改變指針變量的值,但是指針常量不可以改變! p+合法,但是合法,但是a+不合法(不合法(a是數(shù)組名,是指針常量)是數(shù)組名,是指針常量)2、要注意指針變量的當(dāng)前值;、要注意指針變量的當(dāng)前值;3、使用指針變量指向數(shù)組元素時(shí),要保證指向有效元素;、使用指針變量指向數(shù)組元素時(shí),要保證指向有效元素;4、注意指針變量的運(yùn)算;、注意指針變量的運(yùn)算; p+ 是是p指向下一個(gè)元素指向下一個(gè)元素 *p+ 等價(jià)于等價(jià)于*(p+) *(p+)和和*(+p)不同不同 (*p)+ 是是p指向的元素加指向的元素加1xi等價(jià)于等價(jià)于 *(x

46、+i) &xi等價(jià)于等價(jià)于x+i2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)50例例4.8: 一個(gè)數(shù)組含有一個(gè)數(shù)組含有10個(gè)學(xué)生的成績,編寫程序輸個(gè)學(xué)生的成績,編寫程序輸出所有學(xué)生的成績,以及最高分和最低分。出所有學(xué)生的成績,以及最高分和最低分。2021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)51其中,其中,a表示數(shù)組的首地址,即表示數(shù)組的首地址,即&a00。a00 a01a02a03a10 a11a12a13a20 a21a22a232021-10-12c語言程序設(shè)計(jì)語言程序設(shè)計(jì)52例:例: int (*pa)4; pa是指針變量,是指針變量, 他指向一個(gè)包含他指向一個(gè)包含4個(gè)元素的一個(gè)元素的一維數(shù)組。維數(shù)組。注意:該定義與定義注意:該定義與定義int *pa; 和和 int *pa4; 不同。不同。思考:如果執(zhí)行思考:如果執(zhí)行pa+,則,則pa實(shí)際怎家了多少?實(shí)際怎家了多

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論