




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 1 章 數(shù)組和結(jié)構(gòu)體本章目標(biāo) 掌握數(shù)組定義的規(guī)則。 掌握數(shù)組的初始化方法及數(shù)組元素的引用。 掌握有關(guān)數(shù)組的基本算法。 掌握字符串處理函數(shù)的應(yīng)用。 掌握結(jié)構(gòu)體定義和使用的規(guī)則 學(xué)會(huì)使用 VC+6.0 開發(fā)環(huán)境中的 Debug調(diào)試功能:?jiǎn)尾?執(zhí)行、設(shè)置斷點(diǎn)、觀察變量值。授 課 內(nèi) 容 4.1 數(shù)組 4.2 字符型數(shù)組和字符串處 理庫(kù)函數(shù)4.3 結(jié)構(gòu)體類型4.4 數(shù)組和結(jié)構(gòu)體 4.5 構(gòu)體嵌套 程序設(shè)計(jì)舉例調(diào)試技術(shù)4.1 、數(shù)組 迄今為止,我們使用的都是屬于 基本類型 (整 型、字符型、實(shí)型 )的數(shù)據(jù), c語言還提供了 構(gòu)造類型的數(shù)據(jù),它們 有:數(shù)組類型、結(jié)構(gòu)體類型、共用體類型 。構(gòu)造類型數(shù)據(jù)是
2、由基本類 型數(shù)據(jù)按一定規(guī)則組成的,因此有的書稱它們?yōu)椤皩?dǎo)出類型”。 問題的引出:實(shí)際應(yīng)用的程序設(shè)計(jì)中, 只用幾個(gè)變量的情況是極少的; 更多的 情況是處理大批量的相同類型或不同類型的數(shù)據(jù)。 相同類型數(shù)據(jù)舉例:統(tǒng)計(jì)交大 15,000 學(xué)生英語 4 級(jí)統(tǒng)考成績(jī); 不同類型數(shù)據(jù)舉例:管理交大 15,000 學(xué)生學(xué)籍信息記錄,包括:姓 名、學(xué)號(hào)、出生日期、班級(jí)、各科成績(jī)等。用什么樣的數(shù)據(jù)結(jié)構(gòu)來描述這類應(yīng)用更簡(jiǎn)潔? 一維數(shù)組例 如 : in t a r r a y 1 0 ;常用于處理大批量數(shù)據(jù); 數(shù)據(jù)特點(diǎn):存在內(nèi)在聯(lián)系; 數(shù)組具有相同數(shù)據(jù)類型的變量集合; 這些變量都有相同名字,但下標(biāo)不同; 稱這些變量為
3、數(shù)組元素; 只有一個(gè)下標(biāo)一維數(shù)組; 有兩個(gè)下標(biāo)二維數(shù)組。一維數(shù)組定義 數(shù)組 是具有一定順序關(guān)系的若干變量的 集合體,組成數(shù)據(jù)的變量稱為該數(shù)組的元素變量,簡(jiǎn)稱 元素 。 一維數(shù)組的定義方式為 : 例如: int a 10; 它表示數(shù)組名為 a,此數(shù)組有 10 個(gè)元素。說明:(1) 數(shù)組名定名規(guī)則 和變量名相同,遵循標(biāo)識(shí)符定名規(guī)則。(2) 數(shù)組名后是用方括弧括起來的常量表達(dá)式,不能用 圓括弧 , 下面用法不對(duì): int a(10);(3) 方括弧括中的下標(biāo)表示元素在數(shù)組中的位置。 C 語言的下標(biāo)從 0, 必須是整型變量或常量。(4) 編譯系統(tǒng)處理數(shù)組說明語句時(shí),為它在內(nèi)存中分配一定的存儲(chǔ) 空間,數(shù)
4、組在內(nèi)存中存儲(chǔ)時(shí),是按下標(biāo)遞增的順序連續(xù)存儲(chǔ)各 元素的值的。一維數(shù)組的初始化 (1) 在定義數(shù)組時(shí)對(duì)數(shù)組元素賦 以初值。例如 :int a 10=0 ,1,2,3,4,5,6,7,8,9;(2) 可以只給一部分元素賦值。例如 :int a 10=0 ,1,2,3,4;定義 a 數(shù)組有 10 個(gè)元素,但花括弧內(nèi)只提供 5 個(gè)初值,這表示只給 前面 5 個(gè)元素賦初值,后 5個(gè)元素值為 0。(3) 如果想使一個(gè)數(shù)組中全部元素值為 0,可以寫成int a 10=0 ,0, 0,0,0,0,0,0, 0, 0;不能寫成int a 10=0*10;這是與 FORTRA語N 言不同的,不能給數(shù)組整體賦初值。
5、(4) 在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組長(zhǎng)度。例如 :int a 5=1 ,2,3,4,5;可以寫成 int a =1,2,3,4,5;在第二種寫法中, 花括弧中有 5 個(gè)數(shù),系統(tǒng)就會(huì)據(jù)此自動(dòng)定義 a 數(shù)組 的長(zhǎng)度為 5。A 0 A 1 A 2 A 3 A 4 例: int A5; 在內(nèi)存存儲(chǔ)如圖 數(shù)組的首地址是數(shù)組名 A 數(shù)組的首地址也是第一個(gè)元素的地址 &A0 C語言中,數(shù)組的整體不能參加數(shù)據(jù)處理,參加處理的只能是數(shù)組中 的元素變量。所以要對(duì)數(shù)組進(jìn)行 初始化 。例如: int data5=,4,8,; 賦值如圖例 4-1 題目:給一維數(shù)組 x 輸入 10個(gè)整數(shù),找出 x 數(shù)
6、組中的最大 數(shù)和最小數(shù)。算法分析:1、假設(shè)數(shù)組中第 1 個(gè)元素最大,令 xmax=a02、將 ai (0<= i < n )與 max進(jìn)行比較, 若 ai < xmax , i=i+1 ,再執(zhí)行 2 否則,令 xmax=ai ,i=i+1 ,再執(zhí)行 23、循環(huán)結(jié)束,求出最大元素并輸出 max。輸 入 2 1 7 3 12 4 9 輸 出 m ax=12#include <iostream.h>int main() int array7; cout<<"Please input an array with seven elements: &qu
7、ot;<<endl;for(int i=0; i<7; i+) cin>>arrayi;int big = array0;for(int j=0; j<7; j=j+1) if(arrayj>big) big = arrayj;cout<<"max="<<big<<endl; return 0;二維數(shù)組 定義格式:<類型> <數(shù)組名><常量表達(dá)式>< 常量表達(dá)式2>例如,三個(gè)學(xué)生四門課程成績(jī)數(shù)據(jù)如下 :85 87 93 8886 90 95 8978
8、 91 82 95 利用二維數(shù)組存放這些數(shù)據(jù)更能表現(xiàn)數(shù)據(jù)之間相互聯(lián)系的特征。 每一 行數(shù)據(jù)表示該學(xué)生的各門課程的成績(jī), 而每一列數(shù)據(jù)表示該門課程各 學(xué)生的成績(jī)。該數(shù)組定義為:int matrix34;二維數(shù)組存儲(chǔ)結(jié)構(gòu) 邏輯結(jié)構(gòu):二維數(shù)組恰似一張表格(或矩陣) 。數(shù)組元素中的第一個(gè)下標(biāo)值表示 該元素在表格中的行號(hào),第二個(gè)下標(biāo)為列號(hào)。 M33 具有如下邏輯 結(jié)構(gòu):M00 M01 M02M10 M11 M12M20 M21 M22存貯結(jié)構(gòu): 二維數(shù)組在內(nèi)存中按一維數(shù)組存放、 占據(jù)一片連續(xù)的 存貯單元;是“ 按行順序 ”在內(nèi)存中分配存貯單元。數(shù)組在內(nèi)存中 排列如下:m00 m 01m 02 m 10m
9、 11m 12m20 m 21m 22二維數(shù)組初始化 1按照二維數(shù)組元素的物理存儲(chǔ)次序給所有 或部分?jǐn)?shù)組元素提供數(shù)據(jù)值int score34= 85,87,93,88,86,90,95,89,78,91,82,95;/ 給數(shù)組 stu_score 每個(gè)元素都提供初值 float matrix23= 1.0,3.0;/ 僅為數(shù)組 matrix 的前個(gè)元素提供初值 2以行結(jié)構(gòu)方式提供各數(shù)據(jù)值 int score34= 85,87,93,88,86,90,95,89,78,91,82,95 ; 4.2 字符型數(shù)組 和字符串處理庫(kù)函數(shù) 字符串用雙引號(hào)括起來,例 如,” abc”; 用字符型數(shù)組存放字符
10、串,存放時(shí),在有效字符后自動(dòng)加'0';稱' 0'為空值,是字符串結(jié)束標(biāo)志; 有效字符的個(gè)數(shù)稱為字符串長(zhǎng)度。例如,” abc”的長(zhǎng)度為 3,但占 4 個(gè)字節(jié) (' 0'占一位) 。字符型數(shù)組的定義和初始化 char weekday 7= "MONDAY" char weekday 7= "MONDAY" 字符串的輸入與輸出char name20;cin>>name;cin.get(name, n);/ 第一個(gè)是字符數(shù)組變量, 第二個(gè)指定向這個(gè)變量 / 中讀入幾個(gè)字符 cout<<nam
11、e; 例 4-2字 符 串 的 輸 入 與 輸 出 #include<iostream.h>int main()char name120, name220;cout<<"Please input a namew ith blank(within 19 characters):"<<endl;cin.get(name1, 20);cout<<"Please input the name again"<<endl;cin>>name2;cout<<"Using fu
12、nction get, the name storing in the variable is: "<<name1<<endl;cout<<"Using operater <<, the name storing in thevariableis: "<<name2<<endl;return 0;字符串處理庫(kù)函數(shù) 需要添加 #include <string.h>stpcpy(): 字符串拷貝 ;strcat(): 字符串連接 ;strchr(): 在字符串中查找字符 ;strcmp
13、(): 字符串比較 ;strlen(): 求字符串長(zhǎng)度 ;strlwr(): 將字符串中的大寫字母轉(zhuǎn)換為小寫字母 ;strrev(): 反轉(zhuǎn)字符串 ;strstr(): 在字符串中查找另一個(gè)字符串 ;strupr(): 將字符串中的小寫字母轉(zhuǎn)換為大寫字母 ; 例 4-3 編寫一個(gè)用來計(jì)算字符串長(zhǎng)度的函數(shù) mystrlen() ,并 用主函數(shù)驗(yàn)證 算法分析:1) 設(shè)一個(gè)計(jì)數(shù)器變量 len=02) 從數(shù)組 slen 第一個(gè)元素開始進(jìn)行處理3) 若當(dāng)前的元素值 slen 非空( 0'),則 len+1 ,繼續(xù)執(zhí)行 3; 否則,退出循環(huán)。4) 打印結(jié)果 len #include <ios
14、tream.h>/ 計(jì)算字符串的長(zhǎng)度的函數(shù)int mystrlen(char string)int len = 0;while(stringlen!='0')len = len+1;return len;/ 測(cè)試計(jì)算字符串長(zhǎng)度的主函數(shù) int main()char string100;int len = 0;cout<<"Please input a string (within 99 characters): "<<endl;cin>>string;cout<<"The lengthof th
15、e string is : "<<mystrlen(string)<<endl; return 0;輸 入 chin a輸 出 The length of th e str ing is: 54.3 結(jié)構(gòu)體類型 迄今為止,已介紹了基本類型 ( 或稱簡(jiǎn)單類型 )的變量 (如整型、實(shí)型、字符型變量 等) ,也介紹了一種構(gòu)造類型數(shù)據(jù) 數(shù)組,數(shù)組中的各元素是屬于同一個(gè)類型的。 但是只有這些數(shù)據(jù)類型是不夠的。 有時(shí)需要將 不同類型的數(shù)據(jù) 組合成 一個(gè)有機(jī)的整體, 以便于引用。 這些組合在一個(gè)整體中的數(shù)據(jù)是互相 聯(lián)系的。例如, 工人工資單:姓名、單位、編號(hào) 例如, 學(xué)生成
16、績(jī)單:學(xué)號(hào)、姓名、性別、各科成績(jī) 等 這些項(xiàng)都與某一學(xué)生相聯(lián)系 ??梢钥吹叫詣e (sex) 、年齡 (age) 、成績(jī) (score) 、地址 (addr) 是屬于 學(xué)號(hào)為 10010和名為“ Li Fun ”的學(xué)生的。如果將 num、name、sex、age、score 、addr 分別定義為互相獨(dú)立的 簡(jiǎn)單變量,難以反映它們之間的內(nèi)在聯(lián)系。例 職工工資單的層次結(jié)構(gòu)01 工資單02 工作部門 : 字符串 , 最大長(zhǎng)度為 10個(gè)字符02姓名: 字符串 , 最大長(zhǎng)度為 8 個(gè)字符02職務(wù)(含職稱、工種 ): 代碼, 0-9902參加工作時(shí)間03年份: 1900-205003月份: 1-1203日
17、 : 1-3102家庭情況03婚否 : 0- 否, 1- 是02崗位津貼 : 0-10000, 保留兩位小數(shù)02勞保福利 : 0-1000, 保留兩位小數(shù)02獨(dú)生子女費(fèi):0-10, 保留 兩位小數(shù)0-10000,保留兩位小數(shù)02電費(fèi) : 0-10000,保留兩位小數(shù)02水費(fèi) : 0-10000,保留兩位小數(shù)02取暖費(fèi): 0-1000,保留兩位小數(shù)02保育費(fèi): 0-1000,保留兩位小數(shù)02實(shí)發(fā)工資 : 0-10000, 保留兩位小數(shù)03是否雙職工 : 0- 否, 1- 是03獨(dú)生子女出生日期02 基本工資 : 0-10000, 保留兩位小數(shù)02 房 租 :4.3.1 結(jié)構(gòu)體類型的定義 結(jié)構(gòu)體作
18、為一種數(shù)據(jù)構(gòu)造類 型,在 C 語言程序中也許需要經(jīng)歷 定義 聲明調(diào)用 的過程。 結(jié)構(gòu)體是由不同的數(shù)據(jù)類型的數(shù)據(jù)組成的。 組成結(jié)構(gòu)體的每個(gè)數(shù) 據(jù)成為該結(jié)構(gòu)體的成員項(xiàng)簡(jiǎn)稱 成員 。在程序使用結(jié)構(gòu)體時(shí), 首先要對(duì)結(jié)構(gòu)體進(jìn)行描述, 這稱為 結(jié)構(gòu)體的定義。st ruct 結(jié) 構(gòu)名 數(shù)據(jù)類 型 成員 名 1; 數(shù)據(jù)類型 成 員名 2; 數(shù) 據(jù)類型 成員 ;三種結(jié)構(gòu)體變量的聲明構(gòu)體類型變量。 例如,日期類型可以定義為struct dateint da_year;char da_mon; char da_day;struct student char name20; unsigned long number;
19、 float math;名 n ;float english;( 1 ) fl先oa定t p義hy結(jié)si構(gòu)cs體; 類型,再定義結(jié) ;struct date yesterday, today, tomorrow;/ 說明了 3 個(gè)日期類型的變量: yesterday 、 today 和 tomorrow(2)定義類型的同時(shí)聲明變量。例如,struct dateint da_year;char da_mon;char da_day; yesterday, today, tomorrow;聲明了 3 個(gè)日期類型的變量: yesterday 、 today 和 tomorrow(3)直接定義結(jié)構(gòu)體類
20、型變量。例如,structint da_year;char da_mon;char da_day; yesterday, today, tomorrow; 不出現(xiàn)結(jié)構(gòu)體類型名。程序設(shè)計(jì)舉例 例 4-5 編寫一個(gè)用于對(duì)整型數(shù)組進(jìn)行排序的程序, 排序方法使用簡(jiǎn)單的交換排序法例 4-6 編寫一個(gè)字符串處理程序,將一個(gè)字符串之中的所有小寫 字母轉(zhuǎn)換為相應(yīng)的大寫字母例 4-7 使用數(shù)組編寫一個(gè)統(tǒng)計(jì)學(xué)生課程平均分的程序 例 4-8 使用結(jié)構(gòu)體重新編寫上題的程序 例 4-5 、冒泡排序 算法分析:(1) 兩兩比較相鄰元素 A(I) 和 A(I+1)(I=1,2, N-1), 如果 A(I)>A(I+1
21、), 則交換它們的位置 A(I) ? A(I+1);(2) 對(duì)剩下的 N-1 個(gè)元素 , 再兩兩進(jìn)行比較 , 按同樣規(guī)則交換它們 的位置,經(jīng)過 N-2次比較,將次最大值交換到 A(N-1)的位置;(3) 如法炮制 ,經(jīng)過 N-1 趟的“冒泡處理” ,每趟進(jìn)行 N-i 次的 比較, 全部數(shù)列有序。Example 4-5 :冒泡排序 #include <iostream.h> t main() const int int/UNT=16;listCOUNT=503, 87, 512, 61, 908, 170, 897, 275, 653, 426, 154, 509, 612, 677
22、, 765, 703; for(int i=0; i<COUNT; i=i+1) for(int j=COUNT-1; j>i; j=j-1)if(listj-1>listj) int tmp = listj-1;inlistj-1 = listj ; listj = tmp; cout << "The result is :" << endl; for(int k=0;k<16;k+) cout << listk << " "cout<<endl; return 0;例
23、 4-6 將小寫字母轉(zhuǎn)換為大寫字母 算法分析: 將大寫字符轉(zhuǎn)換為小寫,用到轉(zhuǎn)換公式:stri=stri-A'+ a';將小寫字符轉(zhuǎn)換為大寫,用下列公式:stri=stri-a'+ A';#include <iostream.h>int main() char str="This is a sample"cout<<"The original string is: "<<str<<endl;int i = 0; while(stri!=0) if(stri>='a
24、' && stri<='z') stri = stri-'a'+'A'i = i+1;cout<<"After transform: "<<str<<endl;return 0;例 4-7 統(tǒng)計(jì)學(xué)生課程平均分的程序 定義二維數(shù)組student65 ,其中,給數(shù)組 student 前 4列元素讀值,第 1 列為學(xué)號(hào),第 2列到 4 列為輸入門課程的成績(jī)。第 5 列為平均分,通過計(jì)算求得2004001 8 0 90 1002004002 6 0 80 70輸出學(xué)號(hào)高
25、數(shù)英語體育平均分2004001809 01 009 02004002608 07 07 0#include <iostream.h>#define PERSON6#define COURSE3int main() int studentPERSONCOURSE+2;int i, j;cout<<"Please input data of student :"<<endl;for(i=0; i< PERSON; i=i+1) cin>>studenti0;studentiCOURSE+1=0;for(j=1; j<=
26、 COURSE; j=j+1) cin>>studentij; studentiCOURSE+1=studentiCOURSE+1+studentij;studentiCOURSE+1=studentiCOURSE+1/ COURSE; cout<<" 學(xué)號(hào) 高數(shù) 英語 體育 平均分 "<<endl; cout<<""<<endl;for(i=0; i< PERSON; i=i+1) for(j=0; j<= COURSE+1; j=j+1) cout<<studentij<<"t"cout<<endl; return 0;例 4-8 使用結(jié)構(gòu)體重新編寫上題的程序 算法 定
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電影票務(wù)平臺(tái)地區(qū)級(jí)代理合同
- 合同法修訂案:第一章 合同的訂立與生效
- 外資制造業(yè)-員工培訓(xùn)合同范本
- 木材采購(gòu)與銷售合同模板
- 流動(dòng)人口計(jì)劃生育協(xié)作合同
- 干股收益分配合同(范本)
- 企事業(yè)單位監(jiān)控布防合同模板
- 合同責(zé)任死亡賠償金額解析
- 學(xué)校食堂食材采購(gòu)合同模板
- 徐州2025年江蘇徐州市口腔醫(yī)院招聘非在編醫(yī)務(wù)人員53人筆試歷年參考題庫(kù)附帶答案詳解-1
- 影視制作項(xiàng)目委托制作協(xié)議
- 廣東2024年12月佛山市教育局公開選調(diào)1名公務(wù)員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 植物角創(chuàng)設(shè)培訓(xùn)
- 法院生活費(fèi)申請(qǐng)書
- 2025年湖南工藝美術(shù)職業(yè)學(xué)院高職單招職業(yè)技能測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 【課件】學(xué)校后勤管理工作
- 2025-2030年中國(guó)聚丙烯酰胺(PAM)市場(chǎng)發(fā)展?fàn)顩r及未來投資戰(zhàn)略決策報(bào)告新版
- 課題申報(bào)書:產(chǎn)教融合背景下護(hù)理專業(yè)技能人才“崗課賽證”融通路徑研究
- 《新媒體概論》課件
- EMS能源管理系統(tǒng)V1.4.0用戶需求說明書V1.0-20160916
評(píng)論
0/150
提交評(píng)論