C語言程序設(shè)計(jì) 課件 8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目_第1頁
C語言程序設(shè)計(jì) 課件 8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目_第2頁
C語言程序設(shè)計(jì) 課件 8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目_第3頁
C語言程序設(shè)計(jì) 課件 8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目_第4頁
C語言程序設(shè)計(jì) 課件 8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目_第5頁
已閱讀5頁,還剩67頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

C語言程序設(shè)計(jì)項(xiàng)目8利用結(jié)構(gòu)體實(shí)現(xiàn)項(xiàng)目目標(biāo)TARGET知識(shí)目標(biāo)掌握結(jié)構(gòu)體、共用體和枚舉類型數(shù)據(jù)的使用。掌握C程序的實(shí)現(xiàn)過程和結(jié)構(gòu)

能夠使用typedef進(jìn)行類型定義

掌握結(jié)構(gòu)體類型和變量的定義及應(yīng)用掌握共用體類型的定義及應(yīng)用

枚舉類型的定義及應(yīng)用目標(biāo)TARGET技能目標(biāo)會(huì)使用結(jié)構(gòu)體、共用體和枚舉類型數(shù)據(jù)能夠使用不同的數(shù)據(jù)類型解決實(shí)際問題用結(jié)構(gòu)體實(shí)現(xiàn)數(shù)據(jù)的增加、刪除、修改和顯示任務(wù)8.1任務(wù)8.1用結(jié)構(gòu)體實(shí)現(xiàn)數(shù)據(jù)的增加、刪除、修改和顯示

任務(wù)描述本項(xiàng)目任務(wù)是對(duì)學(xué)生成績(jī)管理系統(tǒng)進(jìn)行數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),即解決學(xué)生成績(jī)信息的存儲(chǔ)結(jié)構(gòu),編寫代碼實(shí)現(xiàn)系統(tǒng)的各功能模快。任務(wù)分析要實(shí)現(xiàn)系統(tǒng)的各功能模塊,必須確定信息的存儲(chǔ)結(jié)構(gòu)。學(xué)生的基本信息包括:學(xué)號(hào)、姓名、3門課程成績(jī)、總成績(jī)等,所以,存儲(chǔ)結(jié)構(gòu)的核心是定義學(xué)生基本信息的類型。那么本案例的任務(wù)是:(1)定義學(xué)生基本信息的結(jié)構(gòu)類型;(2)確定學(xué)生成績(jī)信息的存儲(chǔ)變量,(3)編寫代碼實(shí)現(xiàn)各模塊功能。1認(rèn)識(shí)結(jié)構(gòu)體Part◎結(jié)構(gòu)體類型◎結(jié)構(gòu)體數(shù)組◎結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞◎結(jié)構(gòu)體概述◎共用體◎枚舉類型◎類型定義◎?qū)W生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)結(jié)構(gòu)體概述

結(jié)構(gòu)體是一種構(gòu)造類型,它是由若干成員組成,每個(gè)成員可以具有不同的數(shù)據(jù)類型。所以說,結(jié)構(gòu)體是若干個(gè)類型相同或不同數(shù)據(jù)項(xiàng)的集合。例如,學(xué)生的基本信息包含以下數(shù)據(jù)項(xiàng):學(xué)號(hào)(no)、姓名(name)、數(shù)學(xué)(math)、語文(yw)、英語(eng)和總分(sum)。那么這個(gè)類型就應(yīng)該如圖8-1所示。結(jié)構(gòu)體類型

結(jié)構(gòu)體類型,是將該結(jié)構(gòu)體的所有成員的類型說明按約定的方法結(jié)合在一起,結(jié)構(gòu)體的各個(gè)元素(常稱之為成員)可以是不同的數(shù)據(jù)類型。1.結(jié)構(gòu)體類型的形式定義結(jié)構(gòu)體類型的一般形式為:struct結(jié)構(gòu)類型名{類型名成員名1;類型名成員名2;…類型名成員名n;};結(jié)構(gòu)體類型

例如:structStudent{char*name;//姓名intnum;//學(xué)號(hào)floatmath;//數(shù)學(xué)floatyw;//語文floateng;//英語};說明:(1)成員聲明語法同變量,示例:數(shù)據(jù)類型成員名;(2)字段的類型可以為:基本類型、數(shù)組或指針、結(jié)構(gòu)體等結(jié)構(gòu)體類型

2.結(jié)構(gòu)體變量的定義結(jié)構(gòu)體類型定義后,就可以用它來定義相應(yīng)的結(jié)構(gòu)體變量。定義結(jié)構(gòu)體類型變量有以下兩種方法:(1)間接定義法先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量.struct結(jié)構(gòu)類型名{成員列表;};結(jié)構(gòu)體變量的定義:struct結(jié)構(gòu)類型名變量名;例如,使用8.1.1定義的結(jié)構(gòu)體類型student來定義學(xué)生結(jié)構(gòu)體變量,語句: structstudentstu1; structstudentstu2;結(jié)構(gòu)體類型

(2)直接定義法在定義結(jié)構(gòu)體類型的同時(shí)定義變量。定義的一般形式為:struct[結(jié)構(gòu)類型名] /*結(jié)構(gòu)類型名可缺省*/{類型名成員名1;類型名成員名2;…類型名成員名n;}變量名表;例如:structStudent{char*name;//姓名intnum;//學(xué)號(hào)floatmath;//數(shù)學(xué)結(jié)構(gòu)體類型

floatyw;//語文floateng;//英語}stu1,stu2;結(jié)構(gòu)體類型

3.結(jié)構(gòu)體變量的引用(1)簡(jiǎn)單結(jié)構(gòu)變量的引用結(jié)構(gòu)體變量的使用是通過對(duì)其每個(gè)成員的引用來實(shí)現(xiàn)的,一般形式如下:結(jié)構(gòu)體變量名.成員名其中,“.”是結(jié)構(gòu)體的成員運(yùn)算符,它在所有運(yùn)算符中優(yōu)先級(jí)最高,因此,上述引用結(jié)構(gòu)體成員的寫法可以作為一個(gè)整體看待。結(jié)構(gòu)體變量中的每個(gè)成員都可以象同類型的普通變量一樣進(jìn)行各種運(yùn)算。(2)同類型結(jié)構(gòu)變量間的引用ANSIC新標(biāo)準(zhǔn)允許將一個(gè)結(jié)構(gòu)類型的變量,作為一個(gè)整體賦給另一個(gè)具有相同結(jié)構(gòu)類型的變量。如有定義:structstudentstud1,stud2;結(jié)構(gòu)體類型

4.結(jié)構(gòu)體變量的初始化在定義結(jié)構(gòu)變量的同時(shí),允許對(duì)結(jié)構(gòu)變量初始化,但要注意結(jié)構(gòu)成員的數(shù)據(jù)類型與初值一致。例如:structCStudent{ longno;/*學(xué)號(hào)*/ charname[16];/*姓名*/ intage; /*年齡*/ intscore;/*成績(jī)*/}stu={2013001,"ZhanSan",17,80};結(jié)構(gòu)體類型例8-1考試結(jié)束后老師登記學(xué)生成績(jī),學(xué)生的基本信息包括姓名(chName)、期中成績(jī)(iMiddle)、期末成績(jī)(iFinal)和總評(píng)成績(jī)(fAve),要求輸入兩個(gè)同學(xué)的期中、期末成績(jī),將平均分?jǐn)?shù)較高的同學(xué)的成績(jī)單輸出。(1)定義一個(gè)結(jié)構(gòu)體類型,同時(shí)定義兩個(gè)結(jié)構(gòu)體變量(2)從鍵盤輸入兩個(gè)變量的chName,iMiddle,iFinal等成員值(3)分別計(jì)算平均分?jǐn)?shù)(4)比較平均分,將平均分?jǐn)?shù)較高的同學(xué)的成績(jī)單輸出到屏幕上

算法設(shè)計(jì)結(jié)構(gòu)體類型程序代碼#include"stdio.h"voidmain(){structstudent{charchName[8];intiMiddle,iFinal;floatfAve;}stStu1,stStu2;/*直接定義法定義結(jié)構(gòu)體類型及變量*/scanf("%s%d%d",stStu1.chName,&stStu1.iMiddle,&stStu1.iFinal);

結(jié)構(gòu)體類型scanf("%s%d%d",stStu2.chName,&stStu2.iMiddle,&stStu2.iFinal);stStu1.fAve=(stStu1.iMiddle+stStu1.iFinal)/2.0;stStu2.fAve=(stStu2.iMiddle+stStu2.iFinal)/2.0;if(stStu1.fAve>stStu2.fAve)printf("%s:%d%d%0.1f",stStu1.chName,stStu1.iMiddle,stStu1.iFinal,stStu1.fAve);elseprintf("%s:%d%d%0.1f",stStu2.chName,stStu2.iMiddle,stStu2.iFinal,stStu1.fAve);getch();}結(jié)構(gòu)體數(shù)組1.結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義與結(jié)構(gòu)體變量類似,只是結(jié)構(gòu)體變量替換成數(shù)組。定義結(jié)構(gòu)體數(shù)組的一般形式如下struct結(jié)構(gòu)體名{成員列表;}數(shù)組名[元素個(gè)數(shù)];或:struct結(jié)構(gòu)體名數(shù)組名[元素個(gè)數(shù)];結(jié)構(gòu)體數(shù)組2.結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組元素也是通過數(shù)組名和下標(biāo)來引用的,但其元素是結(jié)構(gòu)體類型的數(shù)據(jù),因此,對(duì)結(jié)構(gòu)體數(shù)組元素的引用與對(duì)結(jié)構(gòu)體變量的引用一樣,也是逐級(jí)引用,只能對(duì)最低級(jí)的成員進(jìn)行存取和運(yùn)算。結(jié)構(gòu)體數(shù)組的引用的一般形式為: 數(shù)組名[下標(biāo)].成員名結(jié)構(gòu)體數(shù)組3.結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)數(shù)組也可以在定義時(shí)進(jìn)行初始化,其方法是在定義結(jié)構(gòu)數(shù)組的之后緊跟等號(hào)和初始化數(shù)據(jù)。 其一般形式是:struct結(jié)構(gòu)體類型結(jié)構(gòu)數(shù)組名[n]={{初值表1},{初值表2},…,{初值表n}};結(jié)構(gòu)體數(shù)組例8-2一個(gè)學(xué)習(xí)小組有N名學(xué)生,學(xué)生的信息包含學(xué)號(hào)、姓名、語文、數(shù)學(xué)、英語三門課的成績(jī),從鍵盤上輸入N名學(xué)生的信息,要求統(tǒng)計(jì)總成績(jī)并顯示總分最高的學(xué)生信息。(1)以學(xué)生的信息數(shù)據(jù)項(xiàng)為成員,定義結(jié)構(gòu)體類型和相應(yīng)的結(jié)構(gòu)體數(shù)組;(2)循環(huán)輸入每個(gè)學(xué)生的信息,統(tǒng)計(jì)總成績(jī),存儲(chǔ)在結(jié)構(gòu)體數(shù)組中;(3)循環(huán)比較求出總分最高的學(xué)生,并顯示。

算法設(shè)計(jì)結(jié)構(gòu)體數(shù)組程序代碼#include"stdio.h"#defineN3/*學(xué)生人數(shù)*/structstudent{chariId[15];charchName[15];intiChinese,iMath,iEnglish;intiTotal;};結(jié)構(gòu)體數(shù)組voidmain(){inti,iMax=0;structstudentstStu[N]={{"06003","Tom",80,85,80},{"06005","Alice",90,80,95},{"06002","Ellen",80,78,59}};/*定義結(jié)構(gòu)體數(shù)組并且初始化*/for(i=0;i<N;i++)/*循環(huán)計(jì)算每個(gè)學(xué)生的總分*/{stStu[i].iTotal=stStu[i].iChinese+stStu[i].iMath+stStu[i].iEnglish;

結(jié)構(gòu)體數(shù)組for(i=0;i<N;i++)/*求出總分最高的學(xué)生的數(shù)組元素下標(biāo)*/{if(stStu[i].iTotal>stStu[iMax].iTotal)iMax=i;}printf("\nThebeststudent'sinformation:\n");printf("%s,%s,%d,%d,%d,%d",stStu[iMax].iId,stStu[iMax].cName,stStu[iMax].iChinese,stStu[iMax].iMath,stStu[iMax].iEnglish,stStu[iMax].iTotal;結(jié)構(gòu)體數(shù)組for(i=0;i<N;i++)/*求出總分最高的學(xué)生的數(shù)組元素下標(biāo)*/{if(stStu[i].iTotal>stStu[iMax].iTotal)iMax=i;}printf("\nThebeststudent'sinformation:\n");printf("%s,%s,%d,%d,%d,%d",stStu[iMax].iId,stStu[iMax].cName,stStu[iMax].iChinese,stStu[iMax].iMath,stStu[iMax].iEnglish,stStu[iMax].iTotal;getch();}

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞1.結(jié)構(gòu)體變量作為函數(shù)參數(shù)結(jié)構(gòu)體變量作為一個(gè)整體可以傳遞給函數(shù)以及由函數(shù)返回,作為函數(shù)參數(shù)時(shí)形參實(shí)參都應(yīng)是結(jié)構(gòu)體類型,返回值為結(jié)構(gòu)體類型時(shí),函數(shù)應(yīng)定義為結(jié)構(gòu)體類型,聲明方式如下:struct結(jié)構(gòu)體類型函數(shù)名(結(jié)構(gòu)體類型參數(shù),結(jié)構(gòu)體類型參數(shù)2);如無返回值則函數(shù)定義為void類型。結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞例8-3修改例8-1,要求在函數(shù)中實(shí)現(xiàn)計(jì)算、比較平均分并且顯示平均分?jǐn)?shù)較高的學(xué)生信息的功能。(1)定義外部結(jié)構(gòu)體類型;(2)聲明用戶自定義函數(shù);(3)在主函數(shù)中輸入數(shù)據(jù)并且調(diào)用函數(shù)。

算法設(shè)計(jì)結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞程序代碼#include"stdio.h"structstudent{charcName[8];intiMiddle,iFinal;floatfAve;};/*由于在多個(gè)函數(shù)中應(yīng)用,所以結(jié)構(gòu)體類型定義為外部*/voidfnBest(structstudentstS1,structstudentstS2);/*顯示平均分較高學(xué)生信息的函數(shù)*/voidfnBest(structstudentstS1,structstudentstS2)

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞{stS1.fAve=(stS1.iMiddle+stS1.iFinal)/2.0;stS2.fAve=(stS2.iMiddle+stS2.iFinal)/2.0;if(stS1.fAve>stS2.fAve)

printf("%s:%d%d%0.1f",stS1.cName,stS1.iMiddle,stS1.iFinal,stS1.fAve);elseprintf("%s:%d%d%0.1f",stS2.cName,stS2.iMiddle,stS2.iFinal,stS2.fAve);}結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞{voidmain(){structstudentstA,stB;scanf("%s%d%d",stA.cName,&stA.iMiddle,&stA.iFinal);scanf("%s%d%d",stB.cName,&stB.iMiddle,&stB.iFinal);fnBest(stA,stB);/*以結(jié)構(gòu)體變量為實(shí)參調(diào)用函數(shù)*/getch();}結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞2.結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)結(jié)構(gòu)數(shù)組作為函數(shù)參數(shù),與數(shù)組作為函數(shù)參數(shù)的處理方式完全相同。即采用“地址傳遞”方式,形參結(jié)構(gòu)變量中各成員值的改變,對(duì)相應(yīng)實(shí)參結(jié)構(gòu)變量產(chǎn)生影響。結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞例8-4修改例8-2,在函數(shù)中將N個(gè)學(xué)生的數(shù)據(jù)輸入并統(tǒng)計(jì)總分和求出最高分的學(xué)生并顯示。(1)定義全局結(jié)構(gòu)體類型structstudent;(2)聲明用戶函數(shù)fnInput和fnDisp;(3)編寫fnInput程序?qū)崿F(xiàn)輸入N個(gè)學(xué)生信息并計(jì)算總分;(4)編寫函數(shù)fnDisp求N個(gè)學(xué)生中總分最高的并且顯示;(5)編寫主函數(shù)定義結(jié)構(gòu)體類型數(shù)組,調(diào)用函數(shù)實(shí)現(xiàn)輸入題目要求。

算法設(shè)計(jì)結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞程序代碼#include"stdio.h"#include"stdio.h"#defineN3/*表示學(xué)生人數(shù)*/structstudent{charcNo[15];/*存放學(xué)號(hào)*/charcName[15];/*存放姓名*/intiChinese,iMath,iEnglish;/*存放語文、數(shù)學(xué)、英語成績(jī)*/

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞intiTotal;/*存放總分*/};voidfnInput(structstudentstStud[],intn);/*輸入學(xué)生信息并計(jì)算總分*/voidfnDisp(structstudentstStud[],intn);/*求總分最高的學(xué)生并顯示其信息*/voidfnInput(structstudentstStud[],intn)/*輸入學(xué)生信息并計(jì)算總分*/{inti;printf("pleaseinputthreestudents'information\n");

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞for(i=0;i<n;i++){scanf("%s%s%d%d%d",stStud[i].cNo,stStud[i].cName,&stStud[i].iChinese,&stStud[i].iMath,&stStud[i].iEnglish);stStud[i].iTotal=stStud[i].iChinese+stStud[i].iMath+stStud[i].iEnglish;}}voidfnDisp(structstudentstStud[],intn)/*求總分最高的學(xué)生并顯示其信息*/{

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞inti=0,iMax=0;for(i=1;i<n;i++)if(stStud[i].iTotal>stStud[iMax].iTotal)iMax=i;printf("\nThebeststudent'sinformation:\n");printf("%s,%s,%d,%d,%d,%d",stStud[iMax].cNo,stStud[iMax].cName,stStud[iMax].iChinese,stStud[iMax].iMath,stStud[iMax].iEnglish,stStud[iMax].iTotal);}結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞voidmain(){structstudentstPerson[N];/*定義結(jié)構(gòu)體數(shù)組*/fnInput(stPerson,N);/*調(diào)用函數(shù),循環(huán)輸入N個(gè)學(xué)生的信息并且計(jì)算其總分*/fnDisp(stPerson,N);/*調(diào)用函數(shù),求出總分最高的學(xué)生的下標(biāo)并顯示*/getch();}

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞3.函數(shù)的返回值是結(jié)構(gòu)體類型變量結(jié)構(gòu)體變量也可以作為函數(shù)的返回值,這時(shí)在函數(shù)定義時(shí),需要說明返回值的類型為相應(yīng)的結(jié)構(gòu)類型。如:structStudentfnFuction(){ structStudentp; /*定義結(jié)構(gòu)體變量p … /*省略其它操作語句*/ return(p); /*返回結(jié)構(gòu)體變量p*/}其中,函數(shù)名“fnFuction”前面的類型說明符“structStudent”是用于對(duì)函數(shù)返回值P的類型進(jìn)行說明的。共用體1.共用體變量的定義有時(shí)為了節(jié)省存儲(chǔ)空間或?yàn)榱擞枚喾N類型訪問一個(gè)數(shù)據(jù)等原因,需要使幾種不同類型的變量存放到同一段內(nèi)存單元中。例如,把一個(gè)短整型變量i,一個(gè)字符變量ch和一個(gè)單精度實(shí)型變量f放在地址為1000的起始內(nèi)存單元,i,ch,f分別占據(jù)2個(gè),1個(gè)和4個(gè)字節(jié),這種使用不同變量共占同一段內(nèi)存的結(jié)構(gòu)稱為“共用體”類型的結(jié)構(gòu),共用體類型也是一種構(gòu)造類型,與系統(tǒng)定義的數(shù)據(jù)的基本類型不同,它必須定義后才能使用。共用體類型定義的一般形式為:union共用體類型名 {數(shù)據(jù)類型成員1; 數(shù)據(jù)類型成員2;……數(shù)據(jù)類型成員n;};

共用體其中union是關(guān)鍵字,是定義共用體類型必不可少的標(biāo)識(shí)符;共用體名是程序員自己命名的標(biāo)識(shí)符。{}中的內(nèi)容為共用體成員的類型說明,與結(jié)構(gòu)體類型的成員說明相同。共用體的成員可以是任何類型,包括共用體類型和結(jié)構(gòu)體類型。例如:uniondata{inti;charch;doublef;}; 共用體共用體變量的定義形式有三種:方式1:先定義共用體類型,后定義共用體變量,共用體變量定義形式為:union共用體類型名變量名;例如:uniondataa,b,c;

方式2:定義共用體類型的同時(shí)定義共用體變量,例如:uniondata{inti;charch;

共用體doublef;}a,b,c方式3:不用出現(xiàn)共用體名,直接定義共用體變量,例如:union{inti;charch;doublef;}a,b,c 共用體2.共用體變量的引用共用體變量的引用方式與結(jié)構(gòu)變量的引用方式也非常類似。共用體變量中成員的引用形式為:共用體變量名.成員名例如,前面定義了共用體變量a后,則對(duì)其成員變量的引用分別為:a.i;

a.ch;

a.f;C語言最初引入共用體的目的之一是為了節(jié)省存儲(chǔ)空間,另外一個(gè)目的是可以將一種類型的數(shù)據(jù)不通過顯式類型轉(zhuǎn)換而作為另一種類型數(shù)據(jù)使用。 枚舉類型

在實(shí)際問題中,有些變量只有幾種可能的取值。例如,一個(gè)星期只有7天,一年只有12個(gè)月,人的性別只有兩種,等等。在C語言中對(duì)這樣取值比較特殊的變量可以定義為“枚舉”類型。在“枚舉”類型的定義中列舉出變量所有可能的取值,被定義為“枚舉”,該類型的變量取值不能超過定義的范圍。應(yīng)該說明的是,“枚舉”類型是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因?yàn)樗荒茉俜纸鉃槿魏位绢愋汀? 枚舉類型1.枚舉類型的定義枚舉類型的定義形式如下:enum枚舉類型名{取值表};enum是定義枚舉類型的關(guān)鍵詞?;ɡㄌ?hào)中的取值表稱為枚舉表,取值為所有可能的取值,每個(gè)枚舉表項(xiàng)是常量,各常量之間以逗號(hào)分隔,使用時(shí)不要在常量的兩端加單、雙引號(hào)。例如:enumweekday{sun,mon,tue,wed,thu,fri,sat};該枚舉名為weekday,枚舉常量共有7個(gè),反被說明為weekday類型的變量取值只能是七天中的某一天。 枚舉類型2.枚舉變量的定義(1)先定義枚舉類型,后定義枚舉變量例如:enumcolor{red,yellow,blue,green,white,black};/*定義枚舉類型*/

enumcolorc;/*定義枚舉變量*/即:c定義為enumcolor型的枚舉變量。(2)在定義枚舉類型的同時(shí)定義枚舉變量例如:enum[color]{red,yellow,blue,green,white,black}c,b;即:c、b定義為enumcolor型的枚舉變量。此時(shí),枚舉類型名color可缺省。 類型定義

C語言提供了許多標(biāo)準(zhǔn)類型名,如int,char,float等。用戶可以直接使用這些類型名來定義所需要的變量。同時(shí)C語言還允許使用typedef語句定義一種新的類型名來代替已有類型名,定義新的類型名稱之后,可像標(biāo)準(zhǔn)數(shù)據(jù)類型那樣用新的類型名稱定義變量。 類型定義

1.定義基本類型的別名定義基本類型別名的形式為:typedef基本類型名別名標(biāo)識(shí)符;例如:typedefintWORD;/*定義WORD為int的別名*/

typedeffloatREAL; /*定義REAL為float的別名*/

typdefunsignedcharBYTE;/*定義BYTE為unsignedchar的別名*/指定用WORD代表int類型,REAL代表float,BYTE代表unsignedchar。所以,以下兩種形式對(duì)變量a、b和c的定義是等價(jià)的。(1)inta;floatb;unsignedcharc;

(2)WORDa;REALb;BYTEc;類型定義

2.定義自定義的數(shù)據(jù)類型的別名聲明自定義類型別名的形式為:typedef自定義類型說明信息別名標(biāo)識(shí)符;例如:typedefstructstudent{ longno; charname[16]; intage,score;}STUDENT;類型定義3.類型定義的步驟(1)按定義變量的方法,寫出定義體;(2)將變量名換成別名;(3)在定義體最前面加上typedef。例如:給unsignedint定義一個(gè)別名DWORD。(1)按定義變量的方法,寫出定義體:unsignedinta;(2)將變量名換成別名:unsignedintDWORD;(3)在定義體最前面加上typedef:typedefunsignedintDWORD;學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)1.存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)(1)確定學(xué)生基本信息的類型對(duì)學(xué)生的基本信息進(jìn)行處理,首先需要把學(xué)生的基本信息,包括學(xué)號(hào)、姓名、3門課程成績(jī)、總成績(jī)等相關(guān)信息錄入計(jì)算機(jī),保存到相應(yīng)的變量中,否則計(jì)算機(jī)無法對(duì)這些數(shù)據(jù)進(jìn)行處理。2.數(shù)據(jù)錄入與瀏覽(1)數(shù)據(jù)錄入模塊設(shè)計(jì)思路:將結(jié)構(gòu)體數(shù)組作為函數(shù)的形參,已錄入的記錄總數(shù)m定義為全局變量。利用循環(huán)結(jié)構(gòu),交互式提示用戶錄入記錄。同時(shí),定義學(xué)號(hào)為關(guān)鍵字,程序需對(duì)錄入的學(xué)號(hào)進(jìn)行合法性檢查,不能有重復(fù)的學(xué)號(hào)。學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)(2)記錄瀏覽模塊對(duì)函數(shù)的形參進(jìn)行操作,注意到記錄的總數(shù)由全局變量m保存,按%-8.1f的格式輸出記錄。(3)運(yùn)行測(cè)試編譯、連接、運(yùn)行程序。按數(shù)字鍵1選擇“數(shù)據(jù)錄入”菜單,按照系統(tǒng)提示錄入若干條記錄,如圖8-1所示。再按8選擇“記錄瀏覽”菜單,系統(tǒng)將顯示所有學(xué)生信息。如圖8-2所示。學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)3.記錄查詢與修改(1)記錄查詢?cè)O(shè)計(jì)思路:輸入要查找的學(xué)生之學(xué)號(hào),以學(xué)號(hào)為關(guān)鍵字,在結(jié)構(gòu)數(shù)組中查找匹配,如果匹配成功,顯示該學(xué)生的記錄;否則提示未找到等提示信息。運(yùn)行效果如圖8-3所示。學(xué)生成績(jī)管理系統(tǒng)的實(shí)現(xiàn)(2)記錄修改

記錄修改就是對(duì)指定的學(xué)號(hào)的學(xué)生,修改其它字段的數(shù)據(jù)。

設(shè)計(jì)思路:輸入要修改的學(xué)生學(xué)號(hào),以學(xué)號(hào)為關(guān)鍵字,首先查詢確認(rèn)該學(xué)生記錄的存在性。如果該學(xué)號(hào)不存在,則提示相應(yīng)提示信息;否則輸入該學(xué)生的其它字段數(shù)據(jù)。拓展案例案例8-1結(jié)構(gòu)體的應(yīng)用問題描述現(xiàn)有一個(gè)同學(xué)的原始成績(jī)單,內(nèi)容包括學(xué)號(hào)、姓名、英語成績(jī)、高等數(shù)學(xué)、程序設(shè)計(jì)三門課的成績(jī)以及出生年月,請(qǐng)將其拷貝入另一個(gè)結(jié)構(gòu)體變量進(jìn)行備份,并且將數(shù)據(jù)輸出進(jìn)行核對(duì)是否備份正確。結(jié)構(gòu)體類型算法設(shè)計(jì)(1)根據(jù)題意,定義結(jié)構(gòu)體structdate描述出生年月(2)定義結(jié)構(gòu)體描述structstudent描述學(xué)生信息,其中出生年月為structdate類型(3)定義兩個(gè)structstudent變量stOrg和stBak,其中stOrg初始化賦值(4)將stOrg復(fù)制到stBak(5)輸出stBak的各成員值,與stOrg的各初始化數(shù)據(jù)對(duì)比結(jié)構(gòu)體類型程序代碼#include"stdio.h"structdate{intiYear,iMonth,iDay;};/*定義表示日期的結(jié)構(gòu)體類型*/structstudent{charcName[8];intiEng,iMath,iProg;structdatestBirth;};/*定義表示學(xué)生信息的結(jié)構(gòu)體類型*/結(jié)構(gòu)體類型程序代碼voidmain(){structstudentstOrg={"Tom",80,90,85,1986,11,30},stBak;stBak=stOrg;/*同一個(gè)類型的結(jié)構(gòu)體變量直接賦值*/printf("%s,%d,%d,%d,%d-%d-%d",stBak.cName,stBak.iEng,stBak.iMath,stBak.iProg,stBak.stBirth.iYear,stBak.stBirth.iMonth,stBak.stBirth.iDay);getch();}拓展案例案例8-2結(jié)構(gòu)體的應(yīng)用問題描述現(xiàn)有一張關(guān)于學(xué)生信息和教師信息的表格。學(xué)生信息包括姓名、編號(hào)、性別、職業(yè)、分?jǐn)?shù),教師的信息包括姓名、編號(hào)、性別、職業(yè)、教學(xué)科目。請(qǐng)看下面的表格,使用共用體編程完成.拓展案例算法設(shè)計(jì)(1)根據(jù)題意,定義結(jié)構(gòu)體structPerson描述學(xué)生和教師信息(2)其中score和course定義為共用體(3)定義結(jié)構(gòu)數(shù)組(4)輸入數(shù)組元素,根據(jù)職業(yè)進(jìn)行判定是老師還是學(xué)生(5)輸出相應(yīng)信息拓展案例程序代碼#defineTOTAL1//人員總數(shù)structPerson{charname[20];intnum;charsex;charprofession;union{floatscore;拓展案例charcourse[20];}sc;};voidmain(){inti;structPersonpersons[TOTAL];//輸入人員信息for(i=0;i<TOTAL;i++){printf("Inputinfo:");拓展案例scanf("%s%d%c%c",persons[i].name,&(persons[i].num),&(persons[i].sex),&(persons[i].profession));if(persons[i].profession=='s'){//如果是學(xué)生scanf("%f",&persons[i].sc.score);}else{//如果是老師scanf("%s",persons[i].sc.course);//輸出人員信息}fflush(stdin);}拓展活動(dòng)各負(fù)其責(zé),合作共贏通過對(duì)結(jié)構(gòu)體學(xué)習(xí),引導(dǎo)學(xué)生合作共贏,在團(tuán)隊(duì)中,每一個(gè)成員的角色都不可替代,要遵從團(tuán)隊(duì)規(guī)則,也要各負(fù)其責(zé)。項(xiàng)目小結(jié)(1)結(jié)構(gòu)體可以表達(dá)類似于數(shù)據(jù)庫中“記錄”的數(shù)據(jù),使用結(jié)構(gòu)體來表達(dá)數(shù)據(jù),必須先定義結(jié)構(gòu)體類型,再用此類型定義結(jié)構(gòu)體變量。結(jié)構(gòu)體中的每個(gè)數(shù)據(jù)叫做成員,在進(jìn)行輸入輸出等操作時(shí)要用成員引用符號(hào)“.”引用到具體成員。(2)定義一個(gè)結(jié)構(gòu)體變量,系統(tǒng)分配的內(nèi)存空間是該結(jié)構(gòu)體變量中所有成員占據(jù)內(nèi)存空間的總和。(3)結(jié)構(gòu)體數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)體類型數(shù)據(jù),均含結(jié)構(gòu)體類型的所有成員。結(jié)構(gòu)體數(shù)組元素通過數(shù)組名和下標(biāo)來引用,但其元素是結(jié)構(gòu)體體類型的數(shù)據(jù),因此,對(duì)結(jié)構(gòu)體數(shù)組元素的引用與對(duì)結(jié)構(gòu)體變量的引用一樣,也是逐級(jí)引用,只能對(duì)最低級(jí)的成員進(jìn)行項(xiàng)目小結(jié)進(jìn)行存取和運(yùn)算。一般的引用形式為: 數(shù)組名[下標(biāo)].成員名(4)結(jié)構(gòu)體變量可以傳遞給函數(shù)以及由函數(shù)返回,作為函數(shù)參數(shù)的傳遞方式與簡(jiǎn)單變量作為函數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論