C語言程序設計 教案 第8章 結構體和共用體_第1頁
C語言程序設計 教案 第8章 結構體和共用體_第2頁
C語言程序設計 教案 第8章 結構體和共用體_第3頁
C語言程序設計 教案 第8章 結構體和共用體_第4頁
C語言程序設計 教案 第8章 結構體和共用體_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計教案第8章結構體和共用體授課內容第8章結構體和共用體任課教師授課形式理實一體任課班級教學方法本節(jié)采用以教師為主導,在教學過程中同時采用提問法、討論法和互動式教學方法。教學重點(1)結構體和共用體的概念。(2)結構體變量的引用和初始化的方法。(3)了解枚舉類型的概念。教學難點(1)結構體數(shù)組的基本應用。(2)枚舉類型的基本應用。教學目標教學目標(1)熟練掌握結構體的定義和應用。(2)熟練掌握共用體的定義和應用。技能目標(1)具備使用結構體處理信息的能力。(2)具備使用共用體處理信息的能力。素質目標(1)通過結構體的學習,讓同學們明白每一個集體都需要每個成員遵守相應的規(guī)則。(2)通過結構體的學習,培養(yǎng)同學們細致鉆研的學風、求真務實的品德。(3)通過共用體的學習,增強同學們之間互幫互助,常懷感恩之心。思政目標教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容教學步驟及內容:教學過程:復習舊課導出新課講授新課8.1結構體8.1.1結構體類型變量的定義與引用1.結構體概述前面的課程學習了一些簡單數(shù)據(jù)類型(整型、實型、字符型)的定義和應用,還學習了數(shù)組(一維、二維)的定義和應用,這些數(shù)據(jù)類型的特點是:要定義某一特定數(shù)據(jù)類型,就限定該類型變量的存儲特性和取值范圍。對簡單數(shù)據(jù)類型來說,既可以定義單個變量,也可以定義數(shù)組。而數(shù)組的全部元素都具有相同的數(shù)據(jù)類型,或者說是相同數(shù)據(jù)類型的一個集合。在日常生活中,我們會遇到一些需要填寫的登記表,例如,住宿表、成績表、通信地址等。在這些表中,填寫的數(shù)據(jù)是不能用同一種數(shù)據(jù)類型來描述,在住宿表中通常會登記上姓名、性別、身份證號碼等;在通信地址表中會填寫姓名、郵箱地址、電話號碼等項目。這些表中集合了各種數(shù)據(jù),無法用前面學過的任何一種數(shù)據(jù)類型完全描述,因此C語言引入一種能集中表示不同數(shù)據(jù)類型于一體的數(shù)據(jù)類型——結構體類型。由一系列具有相同類型或不同類型的數(shù)據(jù)構成的數(shù)據(jù)集合,被稱為結構體。結構體是這些元素的集合,這些元素稱為結構體的成員。結構體類型的變量可以擁有不同數(shù)據(jù)類型成員,是不同數(shù)據(jù)類型成員的集合?!敖Y構體”是用同一個名字引用的相關變量的集合。結構體中可包含多種不同類型數(shù)據(jù)的變量,這些不同類型數(shù)據(jù)的變量稱為結構體的“成員”,每一個成員可以是一個基本數(shù)據(jù)類型或者又是一個構造類型。2.結構體類型的定義每個結構體有一個名字,稱為結構體名,所有成員都組織在該名字之下。一個結構體由若干成員組成,它是組成結構體的要素,每個成員的數(shù)據(jù)類型可以不同,也可以相同。每個成員有自己的名字,稱為結構體成員名。結構體類型的定義的一般格式如下:struct結構體名稱{數(shù)據(jù)類型成員1的名字;數(shù)據(jù)類型成員2的名字;數(shù)據(jù)類型成員3的名字;……};結構體名是由用戶指定的,又稱“結構體標記”,符合標識符命名規(guī)范。大括號內是該結構體所包含的子項,即結構體成員。3.結構體變量的定義結構體類型定義好后,只定義了一個變量的類型,系統(tǒng)并沒有給變量分配存儲空間,還需要給結構體定義變量,結構體變量的定義方法有以下3種方式:(1)間接定義。此方法中,需要先定義結構體類型,再定義結構體變量。例如,要定義日期結構體變量,需要先定義好一個名為date的結構體類型,再定義兩個名為date1,date2的結構體變量。(2)直接定義。此方法中,定義結構體類型的同時定義結構體類型變量。4.結構體類型變量的引用定義了結構體變量后,可以引用該變量。要對結構體變量進行賦值、存取或運算,實質上是對結構體成員的操作。訪問結構體變量的成員,需要使用“成員運算符”(也稱為“圓點運算符”),其一般形式如下:結構體類型變量名.成員名例如,已定義了date為struct類型的結構體變量,則date.year表示date變量中year成員,在程序中可以用date.year=2022;對變量的成員賦值。5.結構體類型變量的初始化在定義結構體變量的同時,可以對其進行賦值,即對其初始化。結構體類型變量的初始化一般格式如下:struct結構體名結構體變量名={初始數(shù)據(jù)};其中,數(shù)據(jù)與數(shù)據(jù)之間用逗號隔開;數(shù)據(jù)的個數(shù)要與被賦值的結構體成員的個數(shù)相等;數(shù)據(jù)類型要與相應結構體成員的數(shù)據(jù)類型一致。由于結構體類型變量匯集了各類不同數(shù)據(jù)類型的成員,所以結構體類型變量的初始化就略顯復雜。(1)一次性給結構體變量的成員賦初值。由于每一個結構體變量都有一組成員,這就如同數(shù)組有若干個元素一樣,所以這種賦值方式有點像數(shù)組的賦值,將成員值用“{”和“}”括起來。(2)分散性地給結構體變量的成員賦值。可以用運算符操縱結構體成員對其賦值。8.1.2結構體數(shù)組一個結構體變量中可存放一組數(shù)據(jù)。若一個班級有30個學生,則這30個學生的信息都可以用結構體變量來表示,它們具有相同的數(shù)據(jù)類型,因此,可以用數(shù)組來表示,這就是結構體數(shù)組。結構體數(shù)組中每個數(shù)組元素都是一個結構體類型的變量,它們都分別包括各個成員項。1.結構體數(shù)組的定義結構體數(shù)組必須先定義,后引用。其定義形式與定義結構體變量的方法類似,只需說明其為數(shù)組即可。structstu{ intnum; charname[30]; charsex; intage; floatscore;}s[30]; 定義了一個結構體數(shù)組s,共有30個元素,s[0]~s[29],每個元素都具有structstu的結構形式。2.結構體數(shù)組的初始化結構體數(shù)組也可在定義的同時進行賦值,即對其進行初始化。例如,structstus[30]={{202101,"Wangyan",'M',18,89},{202102,"Lishan",'M',18,95},{202101,"Zhanghai",'F',18,78}};表示對結構體數(shù)組s[30]的前3個元素進行初始化,其他未被指定初始化的數(shù)值型數(shù)組元素成員被系統(tǒng)初始化為0,字符型數(shù)組元素成員被系統(tǒng)初始化為'\0'。3.結構體數(shù)組應用8.1.3結構體指針結構體指針是指向結構體變量的指針,該指針變量的值就是結構體變量的起始地址,其目標變量是一個結構體變量。1.指向結構體變量的指針指向結構體變量的指針變量的基類型必須與結構體變量的類型相同。例如,structstu*p;,定義指針變量p,指向structstu類型的變量。p并沒有指向一個確定的存儲單元,其值是一個隨機值。為使p指向一個確定的存儲單元,需要對指針變量進行初始化。例如,structstu*p=&s1;,定義指針p,指向結構體變量s1。C語言規(guī)定了兩種用于訪問結構體成員的運算符,一種是成員運算符,也稱圓點運算符;另一種是指向運算符,也稱箭頭運算符,其一般格式如下:指向結構體的指針變量名->成員名例如,p->202207;使用指針p訪問結構體成員。2.指向結構體數(shù)組的指針指向結構體對象的指針變量既可指向結構體變量,也可指向結構體數(shù)組中的元素。例如,定義一個結構體數(shù)組s[3],語句structstus[3],*p;p=s;可使結構體指針p指向該結構體數(shù)組的首地址。3.結構體指針的應用8.2共用體、枚舉和typedef類型定義8.2.1共用體1.共用體類型的定義共用體也稱為聯(lián)合體,是一種將不同類型的數(shù)據(jù)組織在一起共同占用同一段內存的構造數(shù)據(jù)類型。同樣都是將不同類型的數(shù)據(jù)組織在一起,但它與結構體不同的是,共用體是從同一起始地址開始存放成員的值,即讓所有成員共享同一段內存單元。共用體與結構體的類型聲明方法類似,只是使用關鍵數(shù)union。一般格式如下:union共用體名{ 數(shù)據(jù)類型 成員1的名字; 數(shù)據(jù)類型 成員2的名字; 數(shù)據(jù)類型 成員3的名字;……};2.共用體變量的定義共用體變量的定義與結構體變量的定義方式類似,也有3種方法。(1)先定義共用體類型后定義共用體變量。(2)在定義共用體類型的同時定義結構變量。這種定義方法是在定義出共用體類型的同時直接定義所需變量,好處是可以簡化語句。(3)直接定義共用體變量??梢允÷越Y構體類型名來定義一個結構體類型。3.共用體成員的引用及初始化對共用體變量的使用是通過對其成員的引用實現(xiàn)的,引用共用體變量成員一般格式如下:共用體變量名.成員名例如,x.b=10;給共用體變量x的成員b賦值為10。在使用共用體類型數(shù)據(jù)時應注意以下4個特點。(1)共用體變量與結構體變量不同的是,不能在定義的同時初始化,但可對第一個成員賦初值。例如,uniondatax={'A'};只為第一個成員賦初值,是合法的。uniondatax={'A',10,23.5};為全部成員賦值是錯誤的,因為各成員共用同一空間。(2)對于一個共用體變量來說,每次只能給一個成員賦值,不能同時給多個成員賦值。共用體變量的所有成員的首地址都相同,并且等于共用體變量的地址。(3)對共用體任何一個成員賦值都會導致共享區(qū)域數(shù)據(jù)發(fā)生變化,所以共用體只能保證有一個成員的值是有效的。(4)在共用體中,同一個內存段可用來存放幾種不同類型的成員,但每一次只能存放其中一種,而不是同時存放所有的類型。也就是說,共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后原有的成員就會失去作用。8.2.2枚舉類型若一個變量只有幾種可能的取值,則可以將其定義為枚舉類型。所謂“枚舉”是指將變量可能的值一一列舉出來,枚舉變量的取值只限于枚舉常量范圍之內。1.枚舉類型的定義枚舉類型定義的一般格式如下:enum枚舉類型名{枚舉元素列表};其中,enum為關鍵字,表示定義一個枚舉類型。枚舉類型名必須為C語言合法的標識符。花括號內的標識符稱為枚舉元素或枚舉常量,各枚舉常量之間用逗號隔開,注意右大括號后的分號不能省略。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT};定義一個枚舉類型week,SUN、MON、TUE、WED、THU、FRI、SAT稱為枚舉元素或枚舉常量。2.枚舉類型變量的定義(1)先定義枚舉類型后定義枚舉變量。與結構體或共用體類型變量定義的基本方法相似,這種方法先定義枚舉類型,然后使用“enum枚舉類型名”來定義這種類型的變量。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}; /*定義week類型*/enumweekday; /*定義week類型的枚舉變量day*/(2)在定義枚舉類型的同時定義枚舉變量。這種方法是在定義枚舉類型的后面直接定義出該類型的變量,可以簡化程序。enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day; /*定義week類型同時定義變量day*/(3)直接定義枚舉類型的變量。這種定義方法可以省略枚舉類型名,直接定義出枚舉變量。但不能在其他位置再定義這種枚舉類型的變量。enum{SUN,MON,TUE,WED,THU,FRI,SAT}day; /*定義枚舉類型時直接定義變量day*/3.枚舉變量的應用枚舉變量只能取相應枚舉類型列表中的各值。例如,enumweek{SUN,MON,TUE,WED,THU,FRI,SAT}day;day=WED;8.2.3typedef聲明新類型名關鍵字typedef用于為系統(tǒng)固有的或自定義數(shù)據(jù)類型定義一個別名。數(shù)據(jù)類型的別名通常使用首字母大寫的方式表示,以便與系統(tǒng)提供的標準類型標識符相區(qū)別。聲明一個新類型名的一般格式為:typedef原類型名新類型名;其中,typedef為關鍵字,表示重定義。原類型名是C語言提供的任一種數(shù)據(jù)類型,可以是簡單數(shù)據(jù)類型,也可以是構造數(shù)據(jù)類型;新類型名是代表原類型名的一個別名。C程序中不僅包括簡單的類型,還包括了許多看起來比較復雜的類型。有些類型形式復雜,難以理解,容易寫錯,因此,C語言允許程序設計者用一個簡單的名字代替復雜的類型形式。(1)命名一個新的類型名代表結構體類型。(2)命名一個新的類型名代表數(shù)組類型。(3)命名一個新的類型名代表指針類型。(4)命名一個新的類型名代表指向函數(shù)的指針類型。8.3常見錯誤分析8.3.1結構體類型聲明時漏掉分號結構體類型聲明是一條完整的語句,因此,大括號后面的分號不能少,初學者很容易忘記這一點。8.3.2混淆結構體數(shù)據(jù)類型和結構體變量要注意區(qū)別結構體數(shù)據(jù)類型和結構體變量,不能對結構體類型進行賦值。8.3.3結構體類型使用不當定義結構體類型變量時需要使用struct關鍵字,許多初學者容易遺漏這個關鍵字。8.4結構體與共用體應用實戰(zhàn)8.4.1實戰(zhàn)背景“一帶一路”(TheBeltandRoad,B&R)是“絲綢之路經濟帶”和“21世紀海上絲綢之路”的簡稱,一帶一路高舉和平發(fā)展的旗幟,積極發(fā)展與沿線國家的經濟合作伙伴關系,共同打造政治互信、經濟融合、文化包容的利益共同體、命運共同體和責任共同體。截至2022年5月27日,中國已與150個國家、32個國際組織簽署200多份共建“一帶一路”合作文件。8.4.2實戰(zhàn)目的(1)掌握結構體數(shù)組的定義和使用。(2)掌握結構體指針的定義和使用。8.4.3實戰(zhàn)內容編程實現(xiàn)輸入“一帶一路”中線城市編號、城市名稱、城市面積和城市簡介,并在屏幕上顯示該信息。8.4.4實戰(zhàn)過程#include<stdio.h>#include<malloc.h>structintroduction{ intnum; floatarea; charname[10],city[200]; structintroduction*next;};structintroduction*creat(intn){ structintroduction*head,*pf,*pb; inti; for(i=0;i<n;i++) { pb=(structintroduction*)malloc(sizeof(structintroduction)); printf("請輸入中線城市編號、城市名稱、城市面積(平方千米)、城市簡介\n"); scanf("%d%s%f%s",&pb->num,&pb->name,&pb->area,&pb->city); if(i==0) pf=head=pb; else pf->next=pb; pb->next=NULL; pf=pb; } return(head);}voidprint(structintroduction*head){ printf("城市編號\t城市名稱\

溫馨提示

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

評論

0/150

提交評論