C語言程序設(shè)計(jì)第8章課件_第1頁
C語言程序設(shè)計(jì)第8章課件_第2頁
C語言程序設(shè)計(jì)第8章課件_第3頁
C語言程序設(shè)計(jì)第8章課件_第4頁
C語言程序設(shè)計(jì)第8章課件_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

本章主要介紹結(jié)構(gòu)體和共用體的基本知識,讓學(xué)生學(xué)會利用結(jié)構(gòu)體和共用體編寫程序。

1.結(jié)構(gòu)體的概念

2.結(jié)構(gòu)體類型數(shù)組

3.指向結(jié)構(gòu)體類型數(shù)據(jù)的指針

4.結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)

5.鏈表

6.共用體本章主要介紹結(jié)構(gòu)體和共用體的基本知識,讓學(xué)生學(xué)一、結(jié)構(gòu)體如果在程序設(shè)計(jì)時,需要將不同類型的數(shù)據(jù)組成一個有機(jī)整體來引用,此時,用數(shù)組是無法完成的,C語言允許用戶自己可以定義這種特殊的數(shù)據(jù)結(jié)構(gòu),稱之為結(jié)構(gòu)體。結(jié)構(gòu)體中可以包含若干個類型不同的數(shù)據(jù)項(xiàng)。一、結(jié)構(gòu)體如果在程序設(shè)計(jì)時,需要將不同類型的數(shù)據(jù)組成一個有機(jī)二、結(jié)構(gòu)體類型的定義C語言中沒有現(xiàn)成的結(jié)構(gòu)體類型,如果用戶要使用結(jié)構(gòu)體類型,必須自己定義。結(jié)構(gòu)體類型的一般定義形式如下:struct結(jié)構(gòu)體類型名{類型名1成員名1;類型名2成員名2;

.

.....類型名n成員名n;};注意:定義結(jié)構(gòu)體類型時,“結(jié)構(gòu)體名”是結(jié)構(gòu)體類型標(biāo)志,與struct共同組成結(jié)構(gòu)體類型名。二、結(jié)構(gòu)體類型的定義C語言中沒有現(xiàn)成的結(jié)構(gòu)體類型,如果用戶要說明:①structstudent是一個結(jié)構(gòu)體類型名,在使用過程中與系統(tǒng)提供的標(biāo)準(zhǔn)類型(如int、float等)具有同樣的地位和作用。②一個結(jié)構(gòu)體類型可以包含若干個成員,每個成員的類型可以不一樣。③一個結(jié)構(gòu)體類型數(shù)據(jù)在存儲時所占的內(nèi)存單元字節(jié)數(shù)相當(dāng)于每個成員所占內(nèi)存單元字節(jié)數(shù)的總和。例如:前面定義的structstudent結(jié)構(gòu)體類型數(shù)據(jù)存儲時所占內(nèi)存單元為69字節(jié)。例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];};說明:例如:三、結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量通常采取以下三種形式定義:1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名;例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];};structstudentstud1,stud2;三、結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量通常采取以下三種形式定例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];}stud1,stud2;2.在定義結(jié)構(gòu)體類型的同時定義變量struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;}變量名表列;例如:2.在定義結(jié)構(gòu)體類型的同時定義變量例如:struct{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];}stud1,stud2;

3.直接定義結(jié)構(gòu)體類型變量struct{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;}變量名表列;例如:3.直接定義結(jié)構(gòu)體類型變量注意:①結(jié)構(gòu)體類型和結(jié)構(gòu)體類型變量是兩個不同的概念,使用時,先定義類型,后定義變量。②在程序中只能對結(jié)構(gòu)體類型變量進(jìn)行操作。③結(jié)構(gòu)體中的成員可以單獨(dú)使用,相當(dāng)于一個普通變量,成員名可以和程序中的普通變量同名,互不干擾。④結(jié)構(gòu)體中的成員可以是一個結(jié)構(gòu)體變量。例如:structdate{intmonth;intday;intyear;};structstudent1{intnumber;charname[10];charsex;structdatebirthday;floatscroce;charaddress[50];}stu1,stu2;注意:例如:四、結(jié)構(gòu)體類型變量的引用和初始化結(jié)構(gòu)體類型變量一旦被定義后,就可以在程序中使用,與數(shù)組相似,在程序中不能直接引用結(jié)構(gòu)體類型變量,也不能對結(jié)構(gòu)體類型變量進(jìn)行整體輸入輸出,只能引用其中的各個成員,對其中的各個成員進(jìn)行輸入輸出。引用結(jié)構(gòu)體變量成員時,象引用普通變量一樣,可以進(jìn)行各種運(yùn)算。四、結(jié)構(gòu)體類型變量的引用和初始化結(jié)構(gòu)體類型變量一旦被定義后,引用結(jié)構(gòu)體變量成員的一般形式如下:結(jié)構(gòu)體變量名.成員名例如:前面定義了結(jié)構(gòu)體類型變量stud1和stud2,可以對變量的各個成員進(jìn)行各種操作,例如:

stud1.number=10001;stud2.number=10002;

.........printf(″%d,&d″,stud1.number,stud2.number);引用結(jié)構(gòu)體變量成員的一般形式如下:例如:前面定義了結(jié)構(gòu)體類型另外,在程序中,還可以用指向結(jié)構(gòu)體變量的指針變量來引用結(jié)構(gòu)體變量成員。例如:structstudentstud1;structstudent*p1=stud1;

(*p1).number=10001;.........注意:“->”是指向結(jié)構(gòu)體成員運(yùn)算符,“.”是結(jié)構(gòu)體成員運(yùn)算符,它們的結(jié)合方式從左到右,優(yōu)先級別最高。上述程序段,還可以寫成下面的形式:

structstudentstud1;structstudent*p1=stud1;

p1->number=10001;

.........另外,在程序中,還可以用指向結(jié)構(gòu)體變量的指針變量來引用結(jié)構(gòu)體#include"stdio.h"#include"string.h"structstudent{intnumber;charname[10];intage;floatscore;}a;main(){a.number=1001;strcpy(,"liming");a.age=18;a.score=89.5;printf("%-8d%s%8d%6.1f",a.number,,a.age,a.score);}例8-1利用結(jié)構(gòu)體變量輸出學(xué)生信息。#include"stdio.h"例8-1利用結(jié)構(gòu)體變#include"stdio.h"structstudent{intnumber;charname[10];intage;floatscore;}a={1001,"liming",18,89.5};main(){printf("%-8d%s%8d%6.1f",a.number,,a.age,a.score);}例8-2利用結(jié)構(gòu)體變量輸出學(xué)生信息。#include"stdio.h"例8-2利用結(jié)構(gòu)體變一、結(jié)構(gòu)體數(shù)組的定義和引用結(jié)構(gòu)體數(shù)組同普通數(shù)組一樣,所有元素類型相同,是同一個結(jié)構(gòu)體類型。要定義一個結(jié)構(gòu)體類型數(shù)組,必須先定義結(jié)構(gòu)體類型,定義結(jié)構(gòu)體類型數(shù)組的一般形式如下:struct結(jié)構(gòu)體名數(shù)組名[常量表達(dá)式];例如:structstudenta[3];同普通數(shù)組相似,在程序中不能整體引用結(jié)構(gòu)體數(shù)組,也不能引用結(jié)構(gòu)體數(shù)組元素,只能引用結(jié)構(gòu)體數(shù)組元素的成員。例如:a[1].number=10001;a[2].number=10002;一、結(jié)構(gòu)體數(shù)組的定義和引用結(jié)構(gòu)體數(shù)組同普通數(shù)組一樣,所有元素二、結(jié)構(gòu)體數(shù)組初始化和應(yīng)用例如:

structsst{intnum;charname[10];intage};structssta[3]={{1001,"zhangsan",18},{1002,"lisi",19},{1003,"wangwu",20}};.........結(jié)構(gòu)體數(shù)組初始化與普通數(shù)組初始化相似,可以先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體數(shù)組并初始化。二、結(jié)構(gòu)體數(shù)組初始化和應(yīng)用例如:結(jié)構(gòu)體數(shù)組初始化與普通數(shù)組初例8-3某班級學(xué)生進(jìn)行學(xué)生干部選舉,候選人有張三、李四、王五三位同學(xué),全班共有學(xué)生40名,編寫一個程序統(tǒng)計(jì)候選人的得票數(shù)。#include"string.h"#include"stdio.h"structnum{charname[10];intnumber;};main(){structnuma[3]={{"zhangsan",0},{"lisi",0},{"wangwu",0}};inti,j;charinputname[20];printf("pleaseinputthelistofcandidate:\n");for(i=0;i<40;i++){scanf("%s",inputname);for(j=0;j<3;j++)if(strcmp(inputname,a[j].name)==0)a[j].number++;}printf("\n");for(i=0;i<3;i++)printf("%10s:%2d\n",a[i].name,a[i].number);}例8-3某班級學(xué)生進(jìn)行學(xué)生干部選舉,候選人有張三、李四C語言規(guī)定:在程序中不能直接對結(jié)構(gòu)體類型數(shù)組元素進(jìn)行輸入輸出,只能對結(jié)構(gòu)體類型數(shù)組元素的成員進(jìn)行輸入輸出。結(jié)構(gòu)體類型數(shù)組元素的成員的輸入與輸出與普通數(shù)組元素的輸入與輸出類似,通常利用循環(huán)語句來完成。三、結(jié)構(gòu)體類型數(shù)組的輸入與輸出C語言規(guī)定:在程序中不能直接對結(jié)構(gòu)體類型數(shù)組元素進(jìn)行輸入輸出main(){intn,i,sum[SIZE];printf("Howmanystudents?\n");scanf("%d",&n);for(i=0;i<n;i++){printf("Name?\n");scanf("%s",stud[i].name);printf("No?\n");scanf("%d",&stud[i].num);printf("Score1,Score2,Score3?\n");scanf("%f,%f,%f",&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];stud[i].ave=sum[i]/3.0;}printf("\nNAMENo.SCORE1SCORE2SCORE3AVE\n");printf("---------------------------------------------------\n");for(i=0;i<n;i++)printf("%-10s%3d%8.1f%8.1f%8.1f%8.1f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);}例8.4利用結(jié)構(gòu)體數(shù)組輸入并輸出一個班學(xué)生信息。#include"stdio.h"#defineSIZE100structstudent{charname[10];intnum;floatscore[3];floatave;}stud[SIZE];main()例8.4利用結(jié)構(gòu)體數(shù)組輸入并輸出一個班學(xué)生信1、指向結(jié)構(gòu)體類型數(shù)據(jù)的指針

以個結(jié)構(gòu)體類型變量的指針就是該結(jié)構(gòu)體類型變量所占據(jù)的內(nèi)存單元的起始地址。在C語言程序中,可以設(shè)置一個指針變量,用來指向一個結(jié)構(gòu)體類型的數(shù)據(jù)。1、指向結(jié)構(gòu)體類型數(shù)據(jù)的指針以個結(jié)構(gòu)體類型變量的指2、指向結(jié)構(gòu)體類型變量的指針變量在程序中,如果設(shè)置了一個指針變量來專門存放一種結(jié)構(gòu)體類型變量的地址,則該變量就是指向這種結(jié)構(gòu)體類型數(shù)據(jù)的指針變量,該變量的值就是存放某個結(jié)構(gòu)體類型數(shù)據(jù)的內(nèi)存單元的起始地址。2、指向結(jié)構(gòu)體類型變量的指針變量在程序中,如果設(shè)置了一個指例如:structstudent{intnumber;charname[10];intage;floatscore;}/*定義結(jié)構(gòu)體類型*/.........structstudent*p;/*定義指向結(jié)構(gòu)體類型變量的指針變量*/.........⑴指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量一般說明形式如下:

struct結(jié)構(gòu)體類型名變量名;例如:⑴指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量一般說明形式如下:利用指向結(jié)構(gòu)體類型的指針變量引用結(jié)構(gòu)體變量成員的一般形式如下:(*指針變量名).成員名或指針變量名->成員名⑵指向結(jié)構(gòu)體類型變量的指針變量引用注意:①“->”是指向結(jié)構(gòu)體成員運(yùn)算符,“.”是取結(jié)構(gòu)體成員運(yùn)算符,它們的結(jié)合方式從左到右,優(yōu)先級別最高。②在程序中只能將結(jié)構(gòu)體類型變量的地址賦給一個指向結(jié)構(gòu)體類型的指針變量,一個指向結(jié)構(gòu)體類型的指針變量只能指向結(jié)構(gòu)體類型變量,不能指向變量的成員。利用指向結(jié)構(gòu)體類型的指針變量引用結(jié)構(gòu)體變量成員的一般形式如下例如:structstudent{intnumber;charname[10];intage;floatscore;}structstudentstud1;.........structstudent*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10002;.........printf(″%d,&d″,(*p1).number,(*p2).number);printf(″%d,&d″,p1->number,p2->number);例如:例8.8#include"stdio.h"structstudent{intnum;charname[20];charsex;floatscore;};main(){structstudentstu1={1001,"LiMing",'M',95.0};structstudent*p;p=&stu1;printf("%d,%s,%c,%.1f\n",stu1.num,,stu1.sex,stu1.score);printf("%d,%s,%c,%.1f\n",(*p).num,(*p).name,(*p).sex,(*p).score);printf("%d,%s,%c,%.1f\n",p->num,p->name,p->sex,p->score);}例8.8在程序中,如果將一個結(jié)構(gòu)體類型數(shù)組的地址賦給一個結(jié)構(gòu)體類型的變量,那么該變量就是一個指向結(jié)構(gòu)體類型數(shù)組的指針變量??梢岳迷撝羔樧兞縼硪脭?shù)組元素的各個成員。3、指向結(jié)構(gòu)體類型數(shù)組的指針對于指向結(jié)構(gòu)體類型數(shù)組的指針變量。其引用的方式和指向普通數(shù)組的指針變量的引用相類似。在程序中,如果將一個結(jié)構(gòu)體類型數(shù)組的地址賦給一個結(jié)構(gòu)體類型的例8.9#include"stdio.h"structstudent{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Zhouping",'M',45},{102,"Zhangping",'M',62.5},{103,"Liufang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58}};main(){structstudent*ps;printf("No.\tName\t\t\tSex\tScore\t\n");for(ps=boy;ps<boy+5;ps++)printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);}例8.9注意:ps是指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量,只能將數(shù)組的地址或某個數(shù)組元素的地址賦給ps,不能將數(shù)組元素的成員或成員的地址賦給ps,否則,程序?qū)鲥e。例如:ps=boy;/*正確*/ps=&boy[0];/*正確*/ps=boy[0].num;/*錯誤*/ps=&boy[0].num;/*錯誤*/注意:1、結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)⑴結(jié)構(gòu)體類型變量的成員作函數(shù)參數(shù)在函數(shù)調(diào)用時,可以將結(jié)構(gòu)體類型變量各成員的值作函數(shù)的實(shí)參進(jìn)行數(shù)據(jù)傳遞。其用法和用普通變量作函數(shù)實(shí)參是一樣的,屬于“值傳遞”方式。注意:在調(diào)用函數(shù)時,應(yīng)注意實(shí)參與形參的類型保持一致。1、結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)⑴結(jié)構(gòu)體類型變量的成員作函數(shù)參main(){structstudenta;.........f(a.score);.........}#include"stdio.h"structstudent{intnum;charname[20];charsex;floatscore;};voidf(floatx){.........}例如:main()#include"stdio.h"voidfC語言(ANSIC)允許使用結(jié)構(gòu)體變量作實(shí)參進(jìn)行數(shù)據(jù)傳遞,將主調(diào)函數(shù)中結(jié)構(gòu)體變量所占用內(nèi)存單元的內(nèi)容全部順序傳遞給形參。這是一種“值傳遞”方式,要求形參也必須是同類型的結(jié)構(gòu)體變量。⑵結(jié)構(gòu)體類型變量作函數(shù)參數(shù)C語言(ANSIC)允許使用結(jié)構(gòu)體變量作實(shí)參進(jìn)行數(shù)據(jù)傳遞,例8.10有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和3門課的成績。要求分別編寫兩個不同的函數(shù)輸出學(xué)生的學(xué)號、姓名和3門課的成績及總成績。#include"stdio.h"#include"string.h"#defineFORMAT"%5d%9s%8.1f%8.1f%8.1f"structstudent{intnum;charname[20];floatscore[3];};

例8.10有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和voidpri1(structstudentstt){printf("numnamescore1score2score3sumscore\n");printf(FORMAT,stt.num,,stt.score[0],stt.score[1],stt.score[2]);}voidpri2(floatxx[]){floatsum;sum=xx[0]+xx[1]+xx[2];printf("%9.1f",sum);}main(){structstudentstu={1001,"LiMing",67.5,89.0,78.6};pri1(stu);pri2(stu.score);}voidpri1(structstudentstt)⑶指向結(jié)構(gòu)體類型變量的指針作為函數(shù)參數(shù)在程序中,如果用指向結(jié)構(gòu)體變量的指針作函數(shù)的實(shí)參,可以將結(jié)構(gòu)體變量的地址傳給形參,使實(shí)參和形參共同指向同一段存儲單元,得到函數(shù)的返回值。⑶指向結(jié)構(gòu)體類型變量的指針作為函數(shù)參數(shù)在程序中,如果用指向例8.11有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和3門課的成績,利用函數(shù)編程按升序輸出學(xué)生的成績。#include"stdio.h"#include"string.h"#defineFORMAT"%5d%9s%8.1f%8.1f%8.1f"#defineN3structstudent{intnum;charname[20];floatscore[N];};例8.11有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和3門voidpri(structstudent*stt){inti,j;floatt;for(i=0;i<N;i++)for(j=0;j<N-1;j++)if(stt->score[j]>stt->score[j+1]){t=stt->score[j];stt->score[j]=stt->score[j+1];stt->score[j+1]=t;}}main(){structstudentstu={1001,"LiMing",67.5,89.0,78.6};structstudent*p=&stu;pri(p);printf(FORMAT,stu.num,,stu.score[0],stu.score[1],stu.score[2]);}voidpri(structstudent*stt)⑷結(jié)構(gòu)體類型數(shù)組作為函數(shù)參數(shù)在程序中也可以使用結(jié)構(gòu)體類型數(shù)組作函數(shù)的參數(shù),將該結(jié)構(gòu)體類型數(shù)組的地址傳給形參。例8.12有一個結(jié)構(gòu)體類型數(shù)組student,內(nèi)含幾個學(xué)生學(xué)號、姓名、性別和成績。要求編程計(jì)算這組學(xué)生的平均成績,并統(tǒng)計(jì)不及格的人數(shù)。#include"stdio.h"#defineN5structstu{intnum;char*name;charsex;floatscore;};⑷結(jié)構(gòu)體類型數(shù)組作為函數(shù)參數(shù)在程序中也可以使用結(jié)構(gòu)體類型數(shù)voidave(structstu*ps){intc=0,i;floatave,s=0;for(i=0;i<N;i++,ps++){s+=ps->score;if(ps->score<60)c+=1;}ave=s/N;printf("average=%.1f\ncount=%d\n",ave,c);}main(){structstustudent[N]={{101,"Liping",'M',45.0},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87.0},{105,"Wangming",'M',58.0}};ave(student);}voidave(structstu*ps)⑸指向結(jié)構(gòu)體類型數(shù)組的指針作為函數(shù)參數(shù)在程序中,可以用指向結(jié)構(gòu)體類型數(shù)組的指針作函數(shù)參數(shù),將該結(jié)構(gòu)體類型數(shù)組的地址傳給形參。

例8.12中程序的main函數(shù)可以改寫為下面程序代碼。main(){structstustudent[N]={{101,"Liping",'M',45.0},{102,"Zhangping",'M',62.5},{103,"Hefang",'F',92.5},{104,"Chengling",'F',87.0},{105,"Wangming",'M',58.0}};structstu*p=student;ave(p);}⑸指向結(jié)構(gòu)體類型數(shù)組的指針作為函數(shù)參數(shù)在程序中,可以用指函數(shù)的返回值可以是某種類型的數(shù)據(jù),也可以是指向某種類型數(shù)據(jù)的指針。C語言允許函數(shù)調(diào)用時,返回結(jié)構(gòu)體類型指針值。⑹返回值為結(jié)構(gòu)體類型的函數(shù)其函數(shù)原型如下:struct結(jié)構(gòu)體類型名*函數(shù)名(參數(shù)表列);函數(shù)的返回值可以是某種類型的數(shù)據(jù),也可以是指向某種類型數(shù)據(jù)的例8.14在一組的學(xué)生信息中查找某個學(xué)生的信息。如果找到,輸出該學(xué)生信息,否則輸出沒有找到。#include"stdio.h"#defineSIZE100#defineN6#defineFORMAT"%-11s%3d%8d%8d%8d\n"structstudent{charname[30];intnum;intscore[3];};/*定義結(jié)構(gòu)體類型*/例8.14在一組的學(xué)生信息中查找某個學(xué)生的信息。如果找structstudent*search(structstudent*p,int*kk{charnam[30];structstudent*pp;printf("inputthenameofthestudentyouwanttolookfor\n");scanf("%s",nam);for(pp=p;pp<N+p;pp++)if(strcmp(pp->name,nam)==0){*kk=1;break;}returnpp;}voidprint(structstudent*stu){printf("\nNAMENo.SCORE1SCORE2SCORE3\n");printf("------------------------------------------------\n");printf(FORMAT,stu->name,stu->num,stu->score[0],stu->score[1],stu->score[2]);}structstudent*search(structmain(){intkk=0;structstudent*result;structstudentstud[N]={{"zhangsan",1001,75,80,68},{"lisi",1002,66,90,82},{"wangwu",1003,77,86,64},{"liuli",1005,66,70,72},{"zhouqi",1006,79,96,74},{"shunba",1007,76,79,92}};result=search(stud,&kk);if(kk>0)print(result);elseprintf("Notfound!");}main()一、鏈表

鏈表是一種常見的、重要的、特殊的數(shù)據(jù)結(jié)構(gòu),是動態(tài)進(jìn)行存儲分配的一種結(jié)構(gòu)。在C語言程序中,常用鏈表來代替結(jié)構(gòu)體數(shù)組,節(jié)約內(nèi)存資源。

1.鏈表一、鏈表鏈表是一種常見的、重要的、特殊的數(shù)據(jù)結(jié)構(gòu),是動態(tài)進(jìn)在結(jié)構(gòu)體變量中,如果定義最后一個成員為下一個結(jié)構(gòu)體變量的指針時,就形成一種鏈表關(guān)系,&st1st1st10ZhangM18&st2WangF17&st3LiuM17NULLst2…h(huán)ead鏈表中的結(jié)構(gòu)體變量稱為“結(jié)點(diǎn)”,很明顯,鏈表有一個“頭指針”,圖中用head表示,還有一個“表尾”,圖中用NULL表示。每個結(jié)點(diǎn)都包含兩個部分:用戶所需的數(shù)據(jù)和下一個結(jié)點(diǎn)的地址。鏈表中的所有元素在內(nèi)存中不是連續(xù)存放的,要找到某一元素,必須先找到上一個元素,根據(jù)上一元素提供的地址才能找到下一個元素,如果不知道“頭指針”的值,整個鏈表無法訪問。在結(jié)構(gòu)體變量中,如果定義最后一個成員為下一個結(jié)構(gòu)體變量的指針有關(guān)鏈表的操作,除了建立鏈表以外,還有刪除結(jié)點(diǎn)、插入結(jié)點(diǎn)和鏈表的輸出操作,其相應(yīng)操作詳見206頁~215頁。有關(guān)鏈表的操作,除了建立鏈表以外,還有刪除結(jié)點(diǎn)、插入結(jié)點(diǎn)和鏈一、共用體的概念在程序中,為了節(jié)省內(nèi)存資源,經(jīng)常將幾個類型不同的數(shù)據(jù)存放到同一段內(nèi)存單元中,要保證這些數(shù)據(jù)正確存取,只能在某一具體時間段內(nèi)存放其中的一個數(shù)據(jù)。這種使幾個不同類型的數(shù)據(jù)共同占用同一段內(nèi)存的結(jié)構(gòu),稱為“共用體”類型結(jié)構(gòu)。一、共用體的概念在程序中,為了節(jié)省內(nèi)存資源,經(jīng)常將幾個類型二、共用體類型的定義共用體類型的一般形式如下:union共用體名{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;};例如:uniondata{charname[10];intage;floatscore;};注意:一個共用體類型包含若干個成員,每個成員的類型不一樣。共用體類型中的所有成員共同占用同一段存儲空間,在存儲時所占的內(nèi)存單元字節(jié)數(shù)等于其中最長的成員所占內(nèi)存單元字節(jié)數(shù)。二、共用體類型的定義共用體類型的一般形式如下:例如:注意:三、共用體類型變量的定義共用體類型變量的定義,通常采取以下三種形式:1.先定義共用體類型,再定義共用體類型變量定義形式為:共用體類型名共用體變量名;例如:

uniondata{charname[10];intage;floatscore;}uniondatastt1,stt2;上述定義中,stt1,stt2為uniondata類型變量,存儲時,各占10字節(jié)內(nèi)存單元。三、共用體類型變量的定義共用體類型變量的定義,通常采取以下2.在定義共用體類型的同時定義變量定義形式為:union共用體名{類型名1成員名1;類型名2成員名2;

......

類型名n成員名n;}變量名表列;例如:uniondata{charname[10];intage;floatscore;}stt1,stt2;

2.在定義共用體類型的同時定義變量例如:3.直接定義共用體類型變量定義形式為:union{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;}變量名表列;例如:union{charname[10];intage;floatscore;}stt1,stt23.直接定義共用體類型變量例如:四、共用體類型變量的引用在C語言程序中只能引用共用體變量的成員,不能直接引用共用體變量。引用共用體變量成員一般形式如下:變量名.成員名例如:stt1.age=18;四、共用體類型變量的引用在C語言程序中只能引用共用體變量的注意:①共用體是在同一個內(nèi)存段中存放幾種不同類型的成員,但在某一個具體的瞬間,只能存放其中的一個成員,即每一瞬間只有一個成員起作用,不是所有的成員都同時起作用。②共用體變量中起作用的成員是最后一次存放的成員,前面存放的成員被后面存放的成員所覆蓋。③共用體變量的地址與其各成員的地址是同一個地址。即&stt1、&stt1.age、&stt1.score和&是同一個值。④不能直接對共用體變量賦值,也不能直接引用共用體變.

量,更不能對共用體變量進(jìn)行初始化。⑤共用體變量不能作為函數(shù)的參數(shù),函數(shù)的返回值不能為共用體變量。⑥共用體類型可以用于結(jié)構(gòu)體類型定義中,也可以定義共用體類型數(shù)組。結(jié)構(gòu)體類型也可以出現(xiàn)在共用體類型定義中,另外,數(shù)組可以作為共用體的成員。⑦可以使用指向共用體變量的指針變量。注意:一、用typedef定義數(shù)據(jù)類型C語言允許用戶直接使用系統(tǒng)提供的標(biāo)準(zhǔn)數(shù)據(jù)類型(如int、char、float、double、1ong等)和用戶根據(jù)編程需要所聲明的構(gòu)造類型(如結(jié)構(gòu)體類型、共用體類型、指針類型、枚舉類型等),還允許用戶用typedef聲明新的類型名來代替已有的類型名。一、用typedef定義數(shù)據(jù)類型C語言允許用戶直接使用系統(tǒng)提定義數(shù)據(jù)類型的一般形式如下:typedef已有的類型名新的類型名;例如:typedefintINTEGER;typedeffloatREAL;定義數(shù)據(jù)類型的一般形式如下:⑴定義函數(shù)類型例如:typedeffloatFUN();FUNfx;等價于floatfx();⑵定義數(shù)組類型例如:typedeffloatNUM[100];NUMa;等價于floata[100];⑶定義指針類型例如:typedeffloat*POINT;POINTp;等價于float*p;⑴定義函數(shù)類型⑵定義數(shù)組類型⑶定義指針類型⑷定義結(jié)構(gòu)體類型例如:structdata{intmonth;

intday;

intyear;

}typedefstructdataDATADATEbirthday;等價于structdata{intmonth;

intday;

intyear;

}structdatabirthday;⑷定義結(jié)構(gòu)體類型等價于說明:①用typedef可以聲明各種數(shù)據(jù)類型,但不能用來定義變量。②用typedef只能對已經(jīng)存在的數(shù)據(jù)類型增加一個類型名,不能創(chuàng)造出新的數(shù)據(jù)類型。③當(dāng)不同源文件中用到同一類型數(shù)據(jù)(如結(jié)構(gòu)體、共用體等數(shù)據(jù)類型)時,常用typedef聲明一些數(shù)據(jù)類型,把它們單獨(dú)放在一個文件中,然后在需要用到它們的文件中用#include命令把它們包含進(jìn)來。④使用typedef定義數(shù)據(jù)類型有利于程序的通用與移植。說明:

本章主要介紹結(jié)構(gòu)體和共用體的基本知識,讓學(xué)生學(xué)會利用結(jié)構(gòu)體和共用體編寫程序。

1.結(jié)構(gòu)體的概念

2.結(jié)構(gòu)體類型數(shù)組

3.指向結(jié)構(gòu)體類型數(shù)據(jù)的指針

4.結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)

5.鏈表

6.共用體本章主要介紹結(jié)構(gòu)體和共用體的基本知識,讓學(xué)生學(xué)一、結(jié)構(gòu)體如果在程序設(shè)計(jì)時,需要將不同類型的數(shù)據(jù)組成一個有機(jī)整體來引用,此時,用數(shù)組是無法完成的,C語言允許用戶自己可以定義這種特殊的數(shù)據(jù)結(jié)構(gòu),稱之為結(jié)構(gòu)體。結(jié)構(gòu)體中可以包含若干個類型不同的數(shù)據(jù)項(xiàng)。一、結(jié)構(gòu)體如果在程序設(shè)計(jì)時,需要將不同類型的數(shù)據(jù)組成一個有機(jī)二、結(jié)構(gòu)體類型的定義C語言中沒有現(xiàn)成的結(jié)構(gòu)體類型,如果用戶要使用結(jié)構(gòu)體類型,必須自己定義。結(jié)構(gòu)體類型的一般定義形式如下:struct結(jié)構(gòu)體類型名{類型名1成員名1;類型名2成員名2;

.

.....類型名n成員名n;};注意:定義結(jié)構(gòu)體類型時,“結(jié)構(gòu)體名”是結(jié)構(gòu)體類型標(biāo)志,與struct共同組成結(jié)構(gòu)體類型名。二、結(jié)構(gòu)體類型的定義C語言中沒有現(xiàn)成的結(jié)構(gòu)體類型,如果用戶要說明:①structstudent是一個結(jié)構(gòu)體類型名,在使用過程中與系統(tǒng)提供的標(biāo)準(zhǔn)類型(如int、float等)具有同樣的地位和作用。②一個結(jié)構(gòu)體類型可以包含若干個成員,每個成員的類型可以不一樣。③一個結(jié)構(gòu)體類型數(shù)據(jù)在存儲時所占的內(nèi)存單元字節(jié)數(shù)相當(dāng)于每個成員所占內(nèi)存單元字節(jié)數(shù)的總和。例如:前面定義的structstudent結(jié)構(gòu)體類型數(shù)據(jù)存儲時所占內(nèi)存單元為69字節(jié)。例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];};說明:例如:三、結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量通常采取以下三種形式定義:1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體類型變量結(jié)構(gòu)體類型名結(jié)構(gòu)體變量名;例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];};structstudentstud1,stud2;三、結(jié)構(gòu)體類型變量的定義結(jié)構(gòu)體類型變量通常采取以下三種形式定例如:structstudent{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];}stud1,stud2;2.在定義結(jié)構(gòu)體類型的同時定義變量struct結(jié)構(gòu)體名{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;}變量名表列;例如:2.在定義結(jié)構(gòu)體類型的同時定義變量例如:struct{intnumber;charname[10];charsex;intage;floatscroce;charaddress[50];}stud1,stud2;

3.直接定義結(jié)構(gòu)體類型變量struct{類型名1成員名1;類型名2成員名2;

......類型名n成員名n;}變量名表列;例如:3.直接定義結(jié)構(gòu)體類型變量注意:①結(jié)構(gòu)體類型和結(jié)構(gòu)體類型變量是兩個不同的概念,使用時,先定義類型,后定義變量。②在程序中只能對結(jié)構(gòu)體類型變量進(jìn)行操作。③結(jié)構(gòu)體中的成員可以單獨(dú)使用,相當(dāng)于一個普通變量,成員名可以和程序中的普通變量同名,互不干擾。④結(jié)構(gòu)體中的成員可以是一個結(jié)構(gòu)體變量。例如:structdate{intmonth;intday;intyear;};structstudent1{intnumber;charname[10];charsex;structdatebirthday;floatscroce;charaddress[50];}stu1,stu2;注意:例如:四、結(jié)構(gòu)體類型變量的引用和初始化結(jié)構(gòu)體類型變量一旦被定義后,就可以在程序中使用,與數(shù)組相似,在程序中不能直接引用結(jié)構(gòu)體類型變量,也不能對結(jié)構(gòu)體類型變量進(jìn)行整體輸入輸出,只能引用其中的各個成員,對其中的各個成員進(jìn)行輸入輸出。引用結(jié)構(gòu)體變量成員時,象引用普通變量一樣,可以進(jìn)行各種運(yùn)算。四、結(jié)構(gòu)體類型變量的引用和初始化結(jié)構(gòu)體類型變量一旦被定義后,引用結(jié)構(gòu)體變量成員的一般形式如下:結(jié)構(gòu)體變量名.成員名例如:前面定義了結(jié)構(gòu)體類型變量stud1和stud2,可以對變量的各個成員進(jìn)行各種操作,例如:

stud1.number=10001;stud2.number=10002;

.........printf(″%d,&d″,stud1.number,stud2.number);引用結(jié)構(gòu)體變量成員的一般形式如下:例如:前面定義了結(jié)構(gòu)體類型另外,在程序中,還可以用指向結(jié)構(gòu)體變量的指針變量來引用結(jié)構(gòu)體變量成員。例如:structstudentstud1;structstudent*p1=stud1;

(*p1).number=10001;.........注意:“->”是指向結(jié)構(gòu)體成員運(yùn)算符,“.”是結(jié)構(gòu)體成員運(yùn)算符,它們的結(jié)合方式從左到右,優(yōu)先級別最高。上述程序段,還可以寫成下面的形式:

structstudentstud1;structstudent*p1=stud1;

p1->number=10001;

.........另外,在程序中,還可以用指向結(jié)構(gòu)體變量的指針變量來引用結(jié)構(gòu)體#include"stdio.h"#include"string.h"structstudent{intnumber;charname[10];intage;floatscore;}a;main(){a.number=1001;strcpy(,"liming");a.age=18;a.score=89.5;printf("%-8d%s%8d%6.1f",a.number,,a.age,a.score);}例8-1利用結(jié)構(gòu)體變量輸出學(xué)生信息。#include"stdio.h"例8-1利用結(jié)構(gòu)體變#include"stdio.h"structstudent{intnumber;charname[10];intage;floatscore;}a={1001,"liming",18,89.5};main(){printf("%-8d%s%8d%6.1f",a.number,,a.age,a.score);}例8-2利用結(jié)構(gòu)體變量輸出學(xué)生信息。#include"stdio.h"例8-2利用結(jié)構(gòu)體變一、結(jié)構(gòu)體數(shù)組的定義和引用結(jié)構(gòu)體數(shù)組同普通數(shù)組一樣,所有元素類型相同,是同一個結(jié)構(gòu)體類型。要定義一個結(jié)構(gòu)體類型數(shù)組,必須先定義結(jié)構(gòu)體類型,定義結(jié)構(gòu)體類型數(shù)組的一般形式如下:struct結(jié)構(gòu)體名數(shù)組名[常量表達(dá)式];例如:structstudenta[3];同普通數(shù)組相似,在程序中不能整體引用結(jié)構(gòu)體數(shù)組,也不能引用結(jié)構(gòu)體數(shù)組元素,只能引用結(jié)構(gòu)體數(shù)組元素的成員。例如:a[1].number=10001;a[2].number=10002;一、結(jié)構(gòu)體數(shù)組的定義和引用結(jié)構(gòu)體數(shù)組同普通數(shù)組一樣,所有元素二、結(jié)構(gòu)體數(shù)組初始化和應(yīng)用例如:

structsst{intnum;charname[10];intage};structssta[3]={{1001,"zhangsan",18},{1002,"lisi",19},{1003,"wangwu",20}};.........結(jié)構(gòu)體數(shù)組初始化與普通數(shù)組初始化相似,可以先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體數(shù)組并初始化。二、結(jié)構(gòu)體數(shù)組初始化和應(yīng)用例如:結(jié)構(gòu)體數(shù)組初始化與普通數(shù)組初例8-3某班級學(xué)生進(jìn)行學(xué)生干部選舉,候選人有張三、李四、王五三位同學(xué),全班共有學(xué)生40名,編寫一個程序統(tǒng)計(jì)候選人的得票數(shù)。#include"string.h"#include"stdio.h"structnum{charname[10];intnumber;};main(){structnuma[3]={{"zhangsan",0},{"lisi",0},{"wangwu",0}};inti,j;charinputname[20];printf("pleaseinputthelistofcandidate:\n");for(i=0;i<40;i++){scanf("%s",inputname);for(j=0;j<3;j++)if(strcmp(inputname,a[j].name)==0)a[j].number++;}printf("\n");for(i=0;i<3;i++)printf("%10s:%2d\n",a[i].name,a[i].number);}例8-3某班級學(xué)生進(jìn)行學(xué)生干部選舉,候選人有張三、李四C語言規(guī)定:在程序中不能直接對結(jié)構(gòu)體類型數(shù)組元素進(jìn)行輸入輸出,只能對結(jié)構(gòu)體類型數(shù)組元素的成員進(jìn)行輸入輸出。結(jié)構(gòu)體類型數(shù)組元素的成員的輸入與輸出與普通數(shù)組元素的輸入與輸出類似,通常利用循環(huán)語句來完成。三、結(jié)構(gòu)體類型數(shù)組的輸入與輸出C語言規(guī)定:在程序中不能直接對結(jié)構(gòu)體類型數(shù)組元素進(jìn)行輸入輸出main(){intn,i,sum[SIZE];printf("Howmanystudents?\n");scanf("%d",&n);for(i=0;i<n;i++){printf("Name?\n");scanf("%s",stud[i].name);printf("No?\n");scanf("%d",&stud[i].num);printf("Score1,Score2,Score3?\n");scanf("%f,%f,%f",&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);sum[i]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];stud[i].ave=sum[i]/3.0;}printf("\nNAMENo.SCORE1SCORE2SCORE3AVE\n");printf("---------------------------------------------------\n");for(i=0;i<n;i++)printf("%-10s%3d%8.1f%8.1f%8.1f%8.1f\n",stud[i].name,stud[i].num,stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].ave);}例8.4利用結(jié)構(gòu)體數(shù)組輸入并輸出一個班學(xué)生信息。#include"stdio.h"#defineSIZE100structstudent{charname[10];intnum;floatscore[3];floatave;}stud[SIZE];main()例8.4利用結(jié)構(gòu)體數(shù)組輸入并輸出一個班學(xué)生信1、指向結(jié)構(gòu)體類型數(shù)據(jù)的指針

以個結(jié)構(gòu)體類型變量的指針就是該結(jié)構(gòu)體類型變量所占據(jù)的內(nèi)存單元的起始地址。在C語言程序中,可以設(shè)置一個指針變量,用來指向一個結(jié)構(gòu)體類型的數(shù)據(jù)。1、指向結(jié)構(gòu)體類型數(shù)據(jù)的指針以個結(jié)構(gòu)體類型變量的指2、指向結(jié)構(gòu)體類型變量的指針變量在程序中,如果設(shè)置了一個指針變量來專門存放一種結(jié)構(gòu)體類型變量的地址,則該變量就是指向這種結(jié)構(gòu)體類型數(shù)據(jù)的指針變量,該變量的值就是存放某個結(jié)構(gòu)體類型數(shù)據(jù)的內(nèi)存單元的起始地址。2、指向結(jié)構(gòu)體類型變量的指針變量在程序中,如果設(shè)置了一個指例如:structstudent{intnumber;charname[10];intage;floatscore;}/*定義結(jié)構(gòu)體類型*/.........structstudent*p;/*定義指向結(jié)構(gòu)體類型變量的指針變量*/.........⑴指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量一般說明形式如下:

struct結(jié)構(gòu)體類型名變量名;例如:⑴指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量一般說明形式如下:利用指向結(jié)構(gòu)體類型的指針變量引用結(jié)構(gòu)體變量成員的一般形式如下:(*指針變量名).成員名或指針變量名->成員名⑵指向結(jié)構(gòu)體類型變量的指針變量引用注意:①“->”是指向結(jié)構(gòu)體成員運(yùn)算符,“.”是取結(jié)構(gòu)體成員運(yùn)算符,它們的結(jié)合方式從左到右,優(yōu)先級別最高。②在程序中只能將結(jié)構(gòu)體類型變量的地址賦給一個指向結(jié)構(gòu)體類型的指針變量,一個指向結(jié)構(gòu)體類型的指針變量只能指向結(jié)構(gòu)體類型變量,不能指向變量的成員。利用指向結(jié)構(gòu)體類型的指針變量引用結(jié)構(gòu)體變量成員的一般形式如下例如:structstudent{intnumber;charname[10];intage;floatscore;}structstudentstud1;.........structstudent*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10002;.........printf(″%d,&d″,(*p1).number,(*p2).number);printf(″%d,&d″,p1->number,p2->number);例如:例8.8#include"stdio.h"structstudent{intnum;charname[20];charsex;floatscore;};main(){structstudentstu1={1001,"LiMing",'M',95.0};structstudent*p;p=&stu1;printf("%d,%s,%c,%.1f\n",stu1.num,,stu1.sex,stu1.score);printf("%d,%s,%c,%.1f\n",(*p).num,(*p).name,(*p).sex,(*p).score);printf("%d,%s,%c,%.1f\n",p->num,p->name,p->sex,p->score);}例8.8在程序中,如果將一個結(jié)構(gòu)體類型數(shù)組的地址賦給一個結(jié)構(gòu)體類型的變量,那么該變量就是一個指向結(jié)構(gòu)體類型數(shù)組的指針變量。可以利用該指針變量來引用數(shù)組元素的各個成員。3、指向結(jié)構(gòu)體類型數(shù)組的指針對于指向結(jié)構(gòu)體類型數(shù)組的指針變量。其引用的方式和指向普通數(shù)組的指針變量的引用相類似。在程序中,如果將一個結(jié)構(gòu)體類型數(shù)組的地址賦給一個結(jié)構(gòu)體類型的例8.9#include"stdio.h"structstudent{intnum;char*name;charsex;floatscore;}boy[5]={{101,"Zhouping",'M',45},{102,"Zhangping",'M',62.5},{103,"Liufang",'F',92.5},{104,"Chengling",'F',87},{105,"Wangming",'M',58}};main(){structstudent*ps;printf("No.\tName\t\t\tSex\tScore\t\n");for(ps=boy;ps<boy+5;ps++)printf("%d\t%s\t\t%c\t%f\t\n",ps->num,ps->name,ps->sex,ps->score);}例8.9注意:ps是指向結(jié)構(gòu)體類型數(shù)據(jù)的指針變量,只能將數(shù)組的地址或某個數(shù)組元素的地址賦給ps,不能將數(shù)組元素的成員或成員的地址賦給ps,否則,程序?qū)鲥e。例如:ps=boy;/*正確*/ps=&boy[0];/*正確*/ps=boy[0].num;/*錯誤*/ps=&boy[0].num;/*錯誤*/注意:1、結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)⑴結(jié)構(gòu)體類型變量的成員作函數(shù)參數(shù)在函數(shù)調(diào)用時,可以將結(jié)構(gòu)體類型變量各成員的值作函數(shù)的實(shí)參進(jìn)行數(shù)據(jù)傳遞。其用法和用普通變量作函數(shù)實(shí)參是一樣的,屬于“值傳遞”方式。注意:在調(diào)用函數(shù)時,應(yīng)注意實(shí)參與形參的類型保持一致。1、結(jié)構(gòu)體類型數(shù)據(jù)與函數(shù)⑴結(jié)構(gòu)體類型變量的成員作函數(shù)參main(){structstudenta;.........f(a.score);.........}#include"stdio.h"structstudent{intnum;charname[20];charsex;floatscore;};voidf(floatx){.........}例如:main()#include"stdio.h"voidfC語言(ANSIC)允許使用結(jié)構(gòu)體變量作實(shí)參進(jìn)行數(shù)據(jù)傳遞,將主調(diào)函數(shù)中結(jié)構(gòu)體變量所占用內(nèi)存單元的內(nèi)容全部順序傳遞給形參。這是一種“值傳遞”方式,要求形參也必須是同類型的結(jié)構(gòu)體變量。⑵結(jié)構(gòu)體類型變量作函數(shù)參數(shù)C語言(ANSIC)允許使用結(jié)構(gòu)體變量作實(shí)參進(jìn)行數(shù)據(jù)傳遞,例8.10有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和3門課的成績。要求分別編寫兩個不同的函數(shù)輸出學(xué)生的學(xué)號、姓名和3門課的成績及總成績。#include"stdio.h"#include"string.h"#defineFORMAT"%5d%9s%8.1f%8.1f%8.1f"structstudent{intnum;charname[20];floatscore[3];};

例8.10有一個結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和voidpri1(structstudentstt){printf("numnamescore1score2score3sumscore\n");printf(FORMAT,stt.num,,stt.score[0],stt.score[1],stt.score[2]);}voidpri2(floatxx[]){floatsum;sum=xx[0]+xx[1]+xx[2];printf("%9.1f",sum);}main(){structstudentstu={1001,"LiMing",67.5,89.0,78.6};pri1(stu);pri2(stu

溫馨提示

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

評論

0/150

提交評論