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

下載本文檔

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

文檔簡介

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

能夠使用typedef進行類型定義

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

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

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

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

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

例如:structStudent{char*name;//姓名intnum;//學號floatmath;//數(shù)學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來定義學生結(jié)構(gòu)體變量,語句: structstudentstu1; structstudentstu2;結(jié)構(gòu)體類型

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

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

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

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

算法設(shè)計結(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ù)組名[元素個數(shù)];或:struct結(jié)構(gòu)體名數(shù)組名[元素個數(shù)];結(jié)構(gòu)體數(shù)組2.結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組元素也是通過數(shù)組名和下標來引用的,但其元素是結(jié)構(gòu)體類型的數(shù)據(jù),因此,對結(jié)構(gòu)體數(shù)組元素的引用與對結(jié)構(gòu)體變量的引用一樣,也是逐級引用,只能對最低級的成員進行存取和運算。結(jié)構(gòu)體數(shù)組的引用的一般形式為: 數(shù)組名[下標].成員名結(jié)構(gòu)體數(shù)組3.結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)數(shù)組也可以在定義時進行初始化,其方法是在定義結(jié)構(gòu)數(shù)組的之后緊跟等號和初始化數(shù)據(jù)。 其一般形式是:struct結(jié)構(gòu)體類型結(jié)構(gòu)數(shù)組名[n]={{初值表1},{初值表2},…,{初值表n}};結(jié)構(gòu)體數(shù)組例8-2一個學習小組有N名學生,學生的信息包含學號、姓名、語文、數(shù)學、英語三門課的成績,從鍵盤上輸入N名學生的信息,要求統(tǒng)計總成績并顯示總分最高的學生信息。(1)以學生的信息數(shù)據(jù)項為成員,定義結(jié)構(gòu)體類型和相應(yīng)的結(jié)構(gòu)體數(shù)組;(2)循環(huán)輸入每個學生的信息,統(tǒng)計總成績,存儲在結(jié)構(gòu)體數(shù)組中;(3)循環(huán)比較求出總分最高的學生,并顯示。

算法設(shè)計結(jié)構(gòu)體數(shù)組程序代碼#include"stdio.h"#defineN3/*學生人數(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)計算每個學生的總分*/{stStu[i].iTotal=stStu[i].iChinese+stStu[i].iMath+stStu[i].iEnglish;

結(jié)構(gòu)體數(shù)組for(i=0;i<N;i++)/*求出總分最高的學生的數(shù)組元素下標*/{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++)/*求出總分最高的學生的數(shù)組元素下標*/{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)體變量作為一個整體可以傳遞給函數(shù)以及由函數(shù)返回,作為函數(shù)參數(shù)時形參實參都應(yīng)是結(jié)構(gòu)體類型,返回值為結(jié)構(gòu)體類型時,函數(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ù)中實現(xiàn)計算、比較平均分并且顯示平均分數(shù)較高的學生信息的功能。(1)定義外部結(jié)構(gòu)體類型;(2)聲明用戶自定義函數(shù);(3)在主函數(shù)中輸入數(shù)據(jù)并且調(diào)用函數(shù)。

算法設(shè)計結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞程序代碼#include"stdio.h"structstudent{charcName[8];intiMiddle,iFinal;floatfAve;};/*由于在多個函數(shù)中應(yīng)用,所以結(jié)構(gòu)體類型定義為外部*/voidfnBest(structstudentstS1,structstudentstS2);/*顯示平均分較高學生信息的函數(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)體變量為實參調(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)變量中各成員值的改變,對相應(yīng)實參結(jié)構(gòu)變量產(chǎn)生影響。結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞例8-4修改例8-2,在函數(shù)中將N個學生的數(shù)據(jù)輸入并統(tǒng)計總分和求出最高分的學生并顯示。(1)定義全局結(jié)構(gòu)體類型structstudent;(2)聲明用戶函數(shù)fnInput和fnDisp;(3)編寫fnInput程序?qū)崿F(xiàn)輸入N個學生信息并計算總分;(4)編寫函數(shù)fnDisp求N個學生中總分最高的并且顯示;(5)編寫主函數(shù)定義結(jié)構(gòu)體類型數(shù)組,調(diào)用函數(shù)實現(xiàn)輸入題目要求。

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

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞intiTotal;/*存放總分*/};voidfnInput(structstudentstStud[],intn);/*輸入學生信息并計算總分*/voidfnDisp(structstudentstStud[],intn);/*求總分最高的學生并顯示其信息*/voidfnInput(structstudentstStud[],intn)/*輸入學生信息并計算總分*/{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)/*求總分最高的學生并顯示其信息*/{

結(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個學生的信息并且計算其總分*/fnDisp(stPerson,N);/*調(diào)用函數(shù),求出總分最高的學生的下標并顯示*/getch();}

結(jié)構(gòu)體和函數(shù)參數(shù)的傳遞3.函數(shù)的返回值是結(jié)構(gòu)體類型變量結(jié)構(gòu)體變量也可以作為函數(shù)的返回值,這時在函數(shù)定義時,需要說明返回值的類型為相應(yīng)的結(jié)構(gòu)類型。如:structStudentfnFuction(){ structStudentp; /*定義結(jié)構(gòu)體變量p … /*省略其它操作語句*/ return(p); /*返回結(jié)構(gòu)體變量p*/}其中,函數(shù)名“fnFuction”前面的類型說明符“structStudent”是用于對函數(shù)返回值P的類型進行說明的。共用體1.共用體變量的定義有時為了節(jié)省存儲空間或為了用多種類型訪問一個數(shù)據(jù)等原因,需要使幾種不同類型的變量存放到同一段內(nèi)存單元中。例如,把一個短整型變量i,一個字符變量ch和一個單精度實型變量f放在地址為1000的起始內(nèi)存單元,i,ch,f分別占據(jù)2個,1個和4個字節(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)鍵字,是定義共用體類型必不可少的標識符;共用體名是程序員自己命名的標識符。{}中的內(nèi)容為共用體成員的類型說明,與結(jié)構(gòu)體類型的成員說明相同。共用體的成員可以是任何類型,包括共用體類型和結(jié)構(gòu)體類型。例如:uniondata{inti;charch;doublef;}; 共用體共用體變量的定義形式有三種:方式1:先定義共用體類型,后定義共用體變量,共用體變量定義形式為:union共用體類型名變量名;例如:uniondataa,b,c;

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

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

a.ch;

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

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

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

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

1.定義基本類型的別名定義基本類型別名的形式為:typedef基本類型名別名標識符;例如:typedefintWORD;/*定義WORD為int的別名*/

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

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

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

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

記錄修改就是對指定的學號的學生,修改其它字段的數(shù)據(jù)。

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

溫馨提示

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

評論

0/150

提交評論