高級(jí)語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
高級(jí)語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、高級(jí)語(yǔ)言程序設(shè)計(jì)陳玉華第1頁(yè),共38頁(yè)。第4章 數(shù)據(jù)組織4.1 數(shù)組4.2 字符串4.3 結(jié)構(gòu)體與共用體第2頁(yè),共38頁(yè)。數(shù)組一維數(shù)組二維數(shù)組第3頁(yè),共38頁(yè)。一維數(shù)組定義方法: 數(shù)據(jù)類型 數(shù)組名數(shù)組長(zhǎng)度;使用方法:通過使用下標(biāo)來完成,即: 數(shù)組名下標(biāo);初始化原則: 各數(shù)組元素初值依次寫在 中,用逗號(hào)“,”隔開。 第4頁(yè),共38頁(yè)。二維數(shù)組定義方法: 數(shù)據(jù)類型 數(shù)組名行數(shù)列數(shù);使用方法:通過使用二級(jí)下標(biāo)來完成,即 數(shù)組名行標(biāo)列標(biāo)初始化:可以像一維數(shù)組一樣依次賦值,也可以按行進(jìn)行賦值。第5頁(yè),共38頁(yè)。數(shù)組和數(shù)組元素以及變量的關(guān)系一維數(shù)組及數(shù)組元素和變量的關(guān)系二維數(shù)組及數(shù)組元素和變量的關(guān)系第6頁(yè)

2、,共38頁(yè)。一維數(shù)組實(shí)例斐波那契數(shù)列排序逆序楊輝三角第7頁(yè),共38頁(yè)。二維數(shù)組實(shí)例楊輝三角求鞍點(diǎn)魔方第8頁(yè),共38頁(yè)。字符串定義方法: char 數(shù)組名數(shù)組長(zhǎng)度;使用時(shí)請(qǐng)注意: 1)字符數(shù)組能夠存儲(chǔ)的字符串的長(zhǎng)度最長(zhǎng)為數(shù)組長(zhǎng)度-1,因?yàn)橐粢粋€(gè)位置來存儲(chǔ)字符串結(jié)束標(biāo)志0。 2)可以對(duì)字符數(shù)組(字符串)進(jìn)行整體的輸入和輸出操作。第9頁(yè),共38頁(yè)。常用的字符串操作函數(shù)字符串的輸入、輸出函數(shù): char string1000; 方法1:字符串的整體輸入輸出 (1)用格式輸入函數(shù)scanf() scanf(“%s”, string); (2)用字符串輸入函數(shù)gets() gets( string);

3、請(qǐng)注意這兩種不同輸入方法之間的差別。 第10頁(yè),共38頁(yè)。方法2:依次輸入字符 (1)用格式輸入函數(shù)scanf() scanf(“%c”,&ch); while(ch) stringi=ch; scanf(“%c”,&ch); i+; (2)用字符輸入函數(shù)getchar(); while(ch=getchar() stringi=ch; i+; 第11頁(yè),共38頁(yè)。字符串的輸出函數(shù)方法1:整體輸出 (1)用格式輸出函數(shù)printf()。 printf(“%s”, string); (2)用字符串輸出函數(shù)puts()。 puts( string); 第12頁(yè),共38頁(yè)。方法2:?jiǎn)蝹€(gè)字符依次輸出:

4、(1)用格式輸出函數(shù)printf() i=0; while(stringi) printf(“%c”,stringi); (2) 用字符輸出函數(shù)putchar() i=0; while(stringi) putchar(stringi); i+; 第13頁(yè),共38頁(yè)。以下的這些函數(shù)都包含在庫(kù)文件string.h中求字符串長(zhǎng)的函數(shù):strlen() strlen(string);字符串的比較strcmp() strcmp(str1,str2);字符串的聯(lián)接strcat() strcat(str1,str2);字符串的復(fù)制strcpy() strcpy(str1,str2);字符串定位strstr

5、() strstr(str1,str2);第14頁(yè),共38頁(yè)。字符串指針定義方法: char *字符串指針變量名 char *str;使用過程中要注意:(1)指向字符串的指針是一個(gè)變量,因此可以讓其指向任意一個(gè)字符串(字符數(shù)組);(2)使用字符指針變量個(gè)其他指針變量都必須要注意的一個(gè)問題是:使用之前必須初始化,可以在定義的時(shí)候?qū)υ撟兞砍跏蓟?char *str=“abcde”;(字符串) char *s1=string;(數(shù)組名) 也可以在定義之后對(duì)該變量進(jìn)行賦值: str=“abcde”;或者 s1=string;等都是合法的操作。 這種方法不能作用在字符數(shù)組中,即不可以執(zhí)行如下操作: c

6、har string1000; string=“abcde”;第15頁(yè),共38頁(yè)。(3)利用指針引用字符串第i個(gè)字符的過程與字符數(shù)組中引用第i個(gè)字符的方法一樣:如有如下定義: char string1000; char *str=string;則 stringi 和stri都可以引用數(shù)組string的第i個(gè)字符,因此為了方便,許多有關(guān)字符串的處理函數(shù)中的參數(shù)都是使用字符串指針,而不是字符數(shù)組。詳見例:用字符串指針完成對(duì)字符數(shù)組的輸入和輸出。第16頁(yè),共38頁(yè)。二維字符數(shù)組定義方法: char 數(shù)組名行數(shù)列數(shù); char str415;使用方法: 雖然二維字符數(shù)組在定義的時(shí)候與一般的二維數(shù)組沒有

7、什么差別,但是在使用過程中就有很大的差別了,原因就在于我們對(duì)于字符數(shù)組關(guān)注的重點(diǎn)往往不是某個(gè)字符,而是字符串。因此在理解上述二維字符數(shù)組的定義的時(shí)候,我們不是去說該數(shù)組能夠存放多少個(gè)字符,而是說:數(shù)組str可以存放4個(gè)字符串,每個(gè)字符串的長(zhǎng)度不超過15-1。第17頁(yè),共38頁(yè)。例:輸入10個(gè)姓名,對(duì)其按字母順序排序并輸出排序后的結(jié)果。通過該例子我們可以感覺到,其實(shí)二維字符數(shù)組NameMN可以看成是M個(gè)字符串,即可以看成長(zhǎng)度為M的一維數(shù)組,只不過,該一維數(shù)組的每個(gè)元素都是一個(gè)字符串,而不是單個(gè)字符。第18頁(yè),共38頁(yè)。在上例的基礎(chǔ)上,我們還可以引入字符串指針數(shù)組:定義方法: char *數(shù)組名長(zhǎng)

8、度(行數(shù)); char *Name4;該定義的意思是定義了4個(gè)字符串指針,即是說,每個(gè)數(shù)組元素Name0Name3都是一個(gè)字符串指針。第19頁(yè),共38頁(yè)。結(jié)構(gòu)體問題:如果有如下學(xué)生的課程分?jǐn)?shù)信息,如果需要對(duì)這些信息進(jìn)行一個(gè)排名(姓名或者高數(shù)等各學(xué)科成績(jī)),我們?cè)撊绾巫瞿兀繉W(xué)號(hào)姓名性別高數(shù)英語(yǔ)C語(yǔ)言101張三M809098102李四M828994103王五F927886104和六M898178105周七F986991第20頁(yè),共38頁(yè)。一般而言,對(duì)于所碰到的問題首先要做的就是問題分析,問題分析包括如下幾個(gè)方面:A)數(shù)據(jù)的結(jié)構(gòu)(如何描述一個(gè)學(xué)生的成績(jī)信息)B)確定輸入項(xiàng)(學(xué)生的個(gè)數(shù))C)確定期望的

9、輸入(排好序的結(jié)果)D)列出算法(解決問題的辦法)第21頁(yè),共38頁(yè)。數(shù)據(jù)的結(jié)構(gòu): 學(xué)號(hào)、姓名可以使用字符串類型,性別可以使用字符類型,3門課程的成績(jī)可以使用整型也可以使用浮點(diǎn)型,因此我們可以定義不同的變量來存放這幾種類型的數(shù)據(jù)。例如:char Num510;/分別存儲(chǔ)5個(gè)同學(xué)的學(xué)號(hào)char Name510;/分別存儲(chǔ)5個(gè)同學(xué)的姓名char Sex5;/分別存儲(chǔ)5個(gè)同學(xué)的性別int Math5;/分別存放5個(gè)同學(xué)的數(shù)學(xué)成績(jī)int Eng5;/分別存放5個(gè)同學(xué)的數(shù)學(xué)成績(jī)int Clang5;/分別存放5個(gè)同學(xué)的數(shù)學(xué)成績(jī)第22頁(yè),共38頁(yè)。在C語(yǔ)言中,允許用戶自己構(gòu)造一種新的數(shù)據(jù)類型,它可以包含幾

10、種基本數(shù)據(jù)類型、數(shù)組、指針等,這種數(shù)據(jù)類型就是結(jié)構(gòu)體。它相當(dāng)于其他高級(jí)語(yǔ)言中的“記錄”。結(jié)構(gòu)體中元素稱為“成員”,第23頁(yè),共38頁(yè)。結(jié)構(gòu)體類型名,即數(shù)據(jù)類型結(jié)構(gòu)體變量1.聲明結(jié)構(gòu)體類型struct 結(jié)構(gòu)體名 成員列表;每個(gè)成員之間用分號(hào)隔開分號(hào)表示聲明結(jié)束,不能省略第24頁(yè),共38頁(yè)。struct student char num10; char name10; char sex; int score3;第25頁(yè),共38頁(yè)。定義結(jié)構(gòu)體變量: 結(jié)構(gòu)體類型名 變量名; struct student stu1,stu2; 除上述方法之外,還可以在定義結(jié)構(gòu)體類型的時(shí)候直接定義變量:struct st

11、udent char num10; char name10; char sex; int score3;stu1,stu2;第26頁(yè),共38頁(yè)。結(jié)構(gòu)體變量的引用 結(jié)構(gòu)體變量名. 成員名例如:有一個(gè)學(xué)生,學(xué)號(hào)為10101,姓名為劉艷,性別女,三門課程達(dá)的成績(jī)分別是98,90,88.如何完成定義和賦值呢? 首先要定義一個(gè)結(jié)構(gòu)體變量為:struct student S1;接下來,就是要對(duì)該結(jié)構(gòu)體變量的各個(gè)分量進(jìn)行賦值了: 該結(jié)構(gòu)體變量的各個(gè)分量分別為:學(xué)號(hào):S1.num 姓名:S1.name性別:S1.sex各科成績(jī):S1.score0 ,S1.score1 , S1.score2 第27頁(yè),共38

12、頁(yè)。如何正確對(duì)這些分量賦值呢?在引用這些分量的時(shí)候,可以將每個(gè)分量看做是變量,因此對(duì)這些分量的賦值就等同于對(duì)相應(yīng)的變量賦值。S1.num 和S1.name是字符數(shù)組(串)類型的,S1.sex是字符類型的變量,而S1.scorei(i=0,1,2)是整型的變量。常用的方法有:1)定義變量的時(shí)候進(jìn)行賦值(初始化)。2)先定義,然后再利用賦值語(yǔ)句賦值。第28頁(yè),共38頁(yè)。先做一個(gè)小問題:計(jì)算并輸出劉艷同學(xué)的三門課程的平均成績(jī) 。如果要計(jì)算并輸出若干個(gè)同學(xué)的三門課程的平均成績(jī)又該如何做?。如果要根據(jù)她們的平均成績(jī)進(jìn)行排名呢?又該如何做呢?第29頁(yè),共38頁(yè)。結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義: 結(jié)構(gòu)體類型名

13、數(shù)組名長(zhǎng)度;結(jié)構(gòu)體數(shù)組的引用:1)結(jié)構(gòu)體數(shù)組元素的引用:數(shù)組名下標(biāo)2)結(jié)構(gòu)體數(shù)組元素成員的引用:數(shù)組名下標(biāo).成員名每個(gè)結(jié)構(gòu)體數(shù)組元素在使用的時(shí)候就當(dāng)成一個(gè)結(jié)構(gòu)體變量來看待。第30頁(yè),共38頁(yè)。結(jié)構(gòu)體數(shù)組的初始化:struct student stu3= “10101”, “zhangyan”,f, 89,90,99, “10102”, “l(fā)iminghua”,m,80,77,90, “10103”, “zhaoyanzi”,f,88,99,78;和一般的數(shù)組一樣,如果在初始化過程中,所有元素的值均被初始化,則元素個(gè)數(shù)可以不確定。第31頁(yè),共38頁(yè)。學(xué)會(huì)使用typedef定義數(shù)據(jù)類型的別名關(guān)鍵字

14、typedef可以為已經(jīng)存在的數(shù)據(jù)類型定義一個(gè)別名,目的是方便記憶和書寫。一般形式為: typedef 數(shù)據(jù)類型 別名 ; 如:typedef float REAl; typedef struct student char num11; char name15; char sex; int score3; STUDENT ; 分號(hào)不能省第32頁(yè),共38頁(yè)。問題1:請(qǐng)?jiān)噲D描述一個(gè)復(fù)數(shù),并實(shí)現(xiàn)兩個(gè)復(fù)數(shù)的加法運(yùn)算和乘法運(yùn)算。問題2:對(duì)一張撲克牌進(jìn)行數(shù)據(jù)類型描述。第33頁(yè),共38頁(yè)。結(jié)構(gòu)體與指針1)結(jié)構(gòu)體指針變量 定義方法: 結(jié)構(gòu)體類型 *變量名;與其他指針變量類似,可以通過一個(gè)指向某結(jié)構(gòu)體變量的指針

15、變量來訪問(引用)該結(jié)構(gòu)體變量,要注意的是此時(shí)的取成員運(yùn)算符有兩種方式:一種為“-”,稱為“指向”。另一種用圓點(diǎn)運(yùn)算符。例如:struct student s1;struct student *p; p=&s1;gets(p-num);gets((* p).name);(*p).sex=getchar();scanf(“%d”,&p-score0);第34頁(yè),共38頁(yè)。2)結(jié)構(gòu)體成員為指針變量結(jié)構(gòu)體的成員表列中,各成員可以是各種已定義的數(shù)據(jù)類型的變量,還可以是指針變量。例如我們有如下的定義:struct Date int year , month , day ; ;struct person

16、char name15; Date birth;該成員為Date數(shù)據(jù)類型的,即是一個(gè)結(jié)構(gòu)體類型的變量。第35頁(yè),共38頁(yè)。此外,在以后的學(xué)習(xí)中,特別是鏈表這一章中大家還會(huì)經(jīng)??吹降木褪穷愃朴谌缦逻@種情況的結(jié)構(gòu)體類型:struct node int data; struct node *next;q;此時(shí),變量q包括兩個(gè)成員,一個(gè)是整型變量q.data,另一個(gè)是struct node 型指針變量q.next,對(duì)于該成員,只能將一個(gè)struct node類型的變量的地址賦給它,例如:struct node p ;q.next=&p; 其含義用如下的圖形描述更形象: datanextqdatanextpdata&

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論