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

下載本文檔

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

文檔簡介

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

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

3、請注意這兩種不同輸入方法之間的差別。 第10頁,共38頁。方法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頁,共38頁。字符串的輸出函數(shù)方法1:整體輸出 (1)用格式輸出函數(shù)printf()。 printf(“%s”, string); (2)用字符串輸出函數(shù)puts()。 puts( string); 第12頁,共38頁。方法2:單個字符依次輸出:

4、(1)用格式輸出函數(shù)printf() i=0; while(stringi) printf(“%c”,stringi); (2) 用字符輸出函數(shù)putchar() i=0; while(stringi) putchar(stringi); i+; 第13頁,共38頁。以下的這些函數(shù)都包含在庫文件string.h中求字符串長的函數(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頁,共38頁。字符串指針定義方法: char *字符串指針變量名 char *str;使用過程中要注意:(1)指向字符串的指針是一個變量,因此可以讓其指向任意一個字符串(字符數(shù)組);(2)使用字符指針變量個其他指針變量都必須要注意的一個問題是:使用之前必須初始化,可以在定義的時候?qū)υ撟兞砍跏蓟?char *str=“abcde”;(字符串) char *s1=string;(數(shù)組名) 也可以在定義之后對該變量進行賦值: str=“abcde”;或者 s1=string;等都是合法的操作。 這種方法不能作用在字符數(shù)組中,即不可以執(zhí)行如下操作: c

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

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

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

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

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

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

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

13、數(shù)組名長度;結(jié)構(gòu)體數(shù)組的引用:1)結(jié)構(gòu)體數(shù)組元素的引用:數(shù)組名下標(biāo)2)結(jié)構(gòu)體數(shù)組元素成員的引用:數(shù)組名下標(biāo).成員名每個結(jié)構(gòu)體數(shù)組元素在使用的時候就當(dāng)成一個結(jié)構(gòu)體變量來看待。第30頁,共38頁。結(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ù)組一樣,如果在初始化過程中,所有元素的值均被初始化,則元素個數(shù)可以不確定。第31頁,共38頁。學(xué)會使用typedef定義數(shù)據(jù)類型的別名關(guān)鍵字

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

15、變量來訪問(引用)該結(jié)構(gòu)體變量,要注意的是此時的取成員運算符有兩種方式:一種為“-”,稱為“指向”。另一種用圓點運算符。例如:struct student s1;struct student *p; p=&s1;gets(p-num);gets((* p).name);(*p).sex=getchar();scanf(“%d”,&p-score0);第34頁,共38頁。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ù)類型的,即是一個結(jié)構(gòu)體類型的變量。第35頁,共38頁。此外,在以后的學(xué)習(xí)中,特別是鏈表這一章中大家還會經(jīng)??吹降木褪穷愃朴谌缦逻@種情況的結(jié)構(gòu)體類型:struct node int data; struct node *next;q;此時,變量q包括兩個成員,一個是整型變量q.data,另一個是struct node 型指針變量q.next,對于該成員,只能將一個struct node類型的變量的地址賦給它,例如:struct node p ;q.next=&p; 其含義用如下的圖形描述更形象: datanextqdatanextpdata&

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論