C語言程序設(shè)計模塊六構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練_第1頁
C語言程序設(shè)計模塊六構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練_第2頁
C語言程序設(shè)計模塊六構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練_第3頁
C語言程序設(shè)計模塊六構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練_第4頁
C語言程序設(shè)計模塊六構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、模塊六模塊六 構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練構(gòu)造數(shù)據(jù)類型應(yīng)用訓(xùn)練能力目標掌握結(jié)構(gòu)體類型定義、變量的聲明及其引用;理解共用體類型的定義、變量的聲明及其引用;了解枚舉類型及其變量的定義和引用。知識準備知識準備 任務(wù)引例-輸入一條學(xué)生成績,并顯示。輸入一條學(xué)生成績,并顯示。include #define N 5float aver(int b,int n);void main() int i,a5; float ave; printf(請輸入5個整型數(shù)據(jù):n); for(i=0;iN;i+) scanf(%d,&ai); ave=aver(a,N); printf(n平均值為:%4.2fn,ave);

2、float aver(int b,int n) int i; float s=0; for(i=0;in;i+) s+=bi; return s/n; 程程序序清清單單程序運行程序運行 請輸入學(xué)生姓名及三門課的成績:請輸入學(xué)生姓名及三門課的成績:楊甜楊甜 80 90 70 80 90 70學(xué)生:楊甜的三門課成績分別為:學(xué)生:楊甜的三門課成績分別為:80.00,90.00,70.0080.00,90.00,70.00程程序序清清單單#include struct birthday int year; int month; int day; ;struct exam char name30; ch

3、ar sex; int age; char addr40; int number; float score3; struct birthday birth; ;做中學(xué)做中學(xué)6-1 6-1 結(jié)構(gòu)體變量的定義、引用和初始化。結(jié)構(gòu)體變量的定義、引用和初始化。6.1 結(jié)構(gòu)體類型及其變量程程序序清清單單void main( ) struct exam exame1=張申,M,23,山丹街1號,301,98,67,87,1982,9,3; struct exam exame2=李淼,F,24,小北街2號,304,82,89,97,1981,5,14; printf(%s %c %d ,exame1.nam

4、e,exame1.sex,exame1.age); printf(%4d.%2d.%2d ,exame1.birth.year,exame1.birth.month,exame1.birth.day); printf(%s %d ,exame1.addr,exame1.number); printf(%3.0f %3.0f %3.0fn,exame1.score0,exame1.score1,exame1.score2); printf(%s %c %d ,,exame2.sex,exame2.age); printf(%4d.%2d.%2d ,exame2.birth.

5、year,exame2.birth.month,exame2.birth.day); printf(%s %d ,exame2.addr,exame2.number); printf(%3.0f %3.0f %3.0fn,exame2.score0,exame2.score1,exame2.score2);輸出結(jié)果輸出結(jié)果 張申 M 23 1982. 9. 3 山丹街1號 301 98 6 87李淼 F 24 1981. 5.14 小北街2號 304 82 89 97 張申 M 23 山丹街 1 號 301 98 67 87 1982 9 3 圖 6-1 exam1 的初始化 知識點結(jié)構(gòu)體類型

6、的定義 結(jié)構(gòu)體類型的一般語法格式: struct 結(jié)構(gòu)體類型名 類型名1 成員變量名1; 類型名2 成員變量名2; 類型名n 成員變量名n; ; 結(jié)構(gòu)體變量的定義、引用和初始化v 結(jié)構(gòu)體變量的定義 結(jié)構(gòu)體變量的定義方法有3種:l 用已定義的結(jié)構(gòu)體類型來定義結(jié)構(gòu)體變量。如: struct exam exam1,exam2; 在這種結(jié)構(gòu)體變量語法格式中,struct關(guān)鍵字和結(jié)構(gòu)體名(如本例的exam)都不能省略。l 定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。如: struct exam char name30; char sex; int age; char addr40; exam1,exam2; l

7、 直接定義結(jié)構(gòu)體變量。例如: struct char name30; char sex; int age; char addr40; exam1,exam2; v 結(jié)構(gòu)體變量的引用 引用結(jié)構(gòu)體變量的一般格式為: 結(jié)構(gòu)體變量.成員 exam1.age=18; strcpy(, 王帆); “.”是成員運算符,也稱為分量運算符,它的優(yōu)先級在所有的運算符中最高,因此將作為一個整體等同于一個變量名來參與各種運算,其運算規(guī)則與同類型的變量相同。注 意 當使用上例中的birth成員時,需要用成員運算符逐級地找到最低一級的成員,如: exam1.birth.year=1

8、983; 寫成下面的格式是不對的: exam1.birth=1980,04,20;v 結(jié)構(gòu)體變量的初始化 同其它類型的變量一樣,結(jié)構(gòu)體變量的初始化可以在定義時完成。如果需要在程序中進行初始化,則需要逐個成員逐級對最低一級的成員賦初值。做中學(xué)做中學(xué)6-2 6-2 輸入輸入5 5個考生的姓名及考試成績,并統(tǒng)計各科的平均個考生的姓名及考試成績,并統(tǒng)計各科的平均 成績。成績。算法設(shè)計算法設(shè)計 每個考生的信息包括姓名以及多門課程考試成績,定義一個結(jié)構(gòu)體類型stu包括字符數(shù)組name30和實型數(shù)組score3成員,N個考生的信息通過已定義的結(jié)構(gòu)體類型stu數(shù)組stu1N來實現(xiàn)。將每個考生的對應(yīng)成績相加后求

9、平均成績,即為各科的平均成績。6.2 結(jié)構(gòu)體數(shù)組 將若干個相同結(jié)構(gòu)體類型的數(shù)據(jù)組合在一起構(gòu)成的集合,就成為結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組與一般數(shù)組不同的是,每個數(shù)組元素都是結(jié)構(gòu)體類型的數(shù)據(jù)。程程序序清清單單#include #define N 5struct stu char name30; float score3;stu1N;void main( ) int i,j; float aver3=0; printf(請輸入考生姓名及三門課的成績:n); for (i=0;iN;i+) printf(第%d名學(xué)生:,i+1); scanf(%s %f,,&stu1i.scor

10、e0); scanf( %f %f,&stu1i.score1,&stu1i.score2); 程程序序清清單單for (i=0;i3;i+) /*計算每科的總成績*/ for (j=0;jN;j+) averi=averi+stu1j.scorei; printf(平均成績:n第一科:%3.1f ,aver0/N); printf(第二科:%3.1f 第三科:%3.1fn,aver1/N,aver2/N);程序運行程序運行 請輸入考生姓名及三門課的成績:請輸入考生姓名及三門課的成績:第第1 1名學(xué)生:名學(xué)生:mark 60 70 80 mark 60 70 80 第第2 2名

11、學(xué)生:名學(xué)生:sumnsumn 75 85 95 75 85 95第第3 3名學(xué)生:名學(xué)生:yang 85 95 65yang 85 95 65第第4 4名學(xué)生:名學(xué)生:ningning 45 78 96 45 78 96第第5 5名學(xué)生:名學(xué)生:chenchen 87 67 92 87 67 92平均成績:平均成績:第一科:第一科:70.4 70.4 第二科:第二科:79.0 79.0 第三科:第三科:85.685.6知識點結(jié)構(gòu)體數(shù)組的定義和初始化 定義結(jié)構(gòu)體數(shù)組與定義結(jié)構(gòu)體變量一樣,可以在定義結(jié)構(gòu)體類型的同時定義,也可以在定義結(jié)構(gòu)體類型之后定義,也可以直接定義。如:struct stu c

12、har name30; char sex2; int age; char addr40; int number; float score;stu12=“張文”,“男”,21,“上海路2#”,301,80,“賈麗”,“女”,18,“建設(shè)路123#”,302,92; 知識點結(jié)構(gòu)體數(shù)組的成員變量v 同一般數(shù)組一樣,結(jié)構(gòu)體數(shù)組的引用也是通過數(shù)組名和下標來引用的。v 其引用格式為: 數(shù)組名下標.成員變量名做中學(xué)做中學(xué)6-3 6-3 共用體類型變量的定義及使用。共用體類型變量的定義及使用。6.3 共用體類型變量#include #include union un /*定義共用體類型*/ int b23;

13、char c21; double d;void main( ) union un u; /*定義共用體變量*/ int i,j,k; strcpy(u.c,歡迎使用共用體變量!); /*共用體變量成員賦值*/ printf(%sn,u.c); k=0; for (i=0;i2;i+)程程序序清清單單 k=0; for (i=0;i2;i+) for (j=0;j3;j+) k+; u.bij=k; /*共用體變量成員賦值*/ for (i=0;i2;i+) for (j=0;j3;j+) printf(%2d ,u.bij); printf(n); u.d=9.1256; /*共用體變量成員賦

14、值*/ printf(%6.3fn,u.d);程程序序清清單單輸出結(jié)果輸出結(jié)果 歡迎使用共用體變量1 2 34 5 69.126知識點共用體類型及共用體變量的定義v 共用體類型的語法格式與結(jié)構(gòu)體定義相同,如下: union共用體名 類型名1 成員名1; 類型名2 成員名2; 類型名n 成員名n; ;v union為定義共用體的關(guān)鍵字,共用體名的命名應(yīng)該符合C語言中標識符的命名規(guī)則。如: union stu char name8; float spend; int class; ; 定義了一個stu類型的共用體,它包含有name、spend和class 3個成員。這3個成員在內(nèi)存中的存儲如上圖所

15、示(若為VC+環(huán)境,整型為4B)。 stu類型的變量共占8B,共用體變量所占存儲空間字節(jié)數(shù)為占用空間最多的那個成員占用空間的字節(jié)數(shù),所有成員共享空間。共用體變量的引用v 同定義結(jié)構(gòu)體類型的變量一樣,不能整體引用共用體變量來進行輸入和輸出,只能引用共用體變量的成員。v 如果共用體的成員為構(gòu)造類型,那么就需要逐級引用,直至最低一級的成員為止。注 意 共用體變量的各個成員共同使用同一段內(nèi)存空間。邊學(xué)邊練邊學(xué)邊練設(shè)計一個程序,對某個學(xué)?;蚰诚档膶W(xué)生信息進行輸入、顯示和修改處理。拓展提升拓展提升6.4 枚舉類型 6.4.1 枚舉類型的定義v 定義枚舉類型的一般格式為: enum 枚舉類型名 枚舉元素1,

16、枚舉元素2,枚舉元素n;v C語言將枚舉元素作為整型常量處理 如:enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Sat; C語言將第一個枚舉元素的值指定為7,第二個元素的值指定為1,對于后面沒有指定值的枚舉元素,自動按照前一個元素的值加1的原則定義它的值,即Tue=2,Wed=3,Thu=4,F(xiàn)ri=5,Sat=6。各個枚舉元素為常量,程序中不能對枚舉元素賦值。如語句Sat=4;是不對的。 6.4.2 枚舉類型變量v 枚舉變量的定義l 定義枚舉類型之后定義枚舉變量: enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Sat; enum wee

17、k day1,day231;l 在定義枚舉類型的同時定義枚舉變量: enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,Satday1,day231;l 直接定義枚舉變量; enum Sun=7,Mon=1,Tue,Wed,Thu,Fri,Satday1,day231;枚舉類型變量的定義和引用v 枚舉類型變量的引用 枚舉變量的引用方法同普通類型的變量一樣。但是枚舉變量的取值只能在該枚舉類型定義的取值范圍內(nèi)。做中學(xué)做中學(xué)6-4 6-4 輸出一個星期的英文名稱。輸出一個星期的英文名稱。#include enum weekSun=7,Mon=1,Tue,Wed,Thu,Fri,

18、Sat; /*定義枚舉類型*/void main( )enum week day; /*定義枚舉類型變量*/int i=2;char* name=Monday,Tuesday,Wednesday,Thursday,Friday,Satday,Sunday;for (day=Mon;day=Sun;day=(enum week)i+) /*用枚舉類型變量控制循環(huán)輸出*/printf(%2d: %sn,day,nameday-1); 程程序序清清單單輸出結(jié)果輸出結(jié)果 1: Monday 2: Tuesday 3: Wednesday 4: Thursday 5: Friday 6: Satday 7: Sunday6.5 自定義數(shù)據(jù)類型 簡單的名字替換v 例如:typedef int INTEGER;v 功能:是將int型定義為INTEGER,這二者等價,在程序中就可以用INTEGER作為類

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論