c语言学习,c语言课件第09章_第1页
c语言学习,c语言课件第09章_第2页
c语言学习,c语言课件第09章_第3页
c语言学习,c语言课件第09章_第4页
c语言学习,c语言课件第09章_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 结构体与共用体本章学习意图本章学习意图把握结构体类型的定义把握结构体类型的定义. .谙练把握结构体变量的引用和初始化谙练把握结构体变量的引用和初始化. .把握结构体数组的使用把握结构体数组的使用. .谙练把握指向结构体类型的指针的使用谙练把握指向结构体类型的指针的使用. .把握共用体信息类型的定义和引用把握共用体信息类型的定义和引用. .领会枚举类型和用领会枚举类型和用TYPEDEFTYPEDEF定义类型定义类型. . Return9.1 结构体类型与结构体变量的定义 9.2 结构体变量的引用与初始化 9.3 结构体数组 9.4 指向结构体类型信息的指针 9.5 共用体 9.6 枚举类

2、型 9.7 用typedef定义类型 9.8 结构体应用举例 9.1 结构体类型与结构体变量的定义 9.1.1 结构体类型的定义结构体类型的定义 在生活中我们往往会在住宿表上登记姓名、性不、身份证号码等项目;在通讯地址表中记录姓名、邮编、邮箱地址、电话号码、E-mail等项目.这些表中集合了各种类型的信息,无法用前面学过的任一种简单信息类型完全描述,所以C引入一种能分散差别信息类型于一体的信息类型结构体类型. 姓名(字符串)性不(字符)职业(字符串)年纪(整型)身份证号码(长整型或字符串)住宿表可由下面的项目构成: 下面让我们对比一下住宿表、成绩表、通讯地址等信息的特点. 成绩表可由下面的项目

3、构成: 班级(字符串) 学号(长整型) 姓名(字符串) 操纵系统(实型) 信息结构(实型) 统计机*络(实型) 姓名(字符串) 任务单位(字符串) 家庭住址(字符串) 邮编(长整型) 电话号码(字符串或长整型) 通讯地址表可由下面的项目构成: E-mail(字符串) 明显,这些登记表中见谅多种差别信息类型的信息项,用简单类型的变量无法描述清楚.但可用C语言提供的结构体类型描述似下: *住宿表结构*struct accommodchar name20; *姓名* char sex; *性不* char job40; *职业* int age; *年纪* long number;*身份证号码* ;

4、 *成绩表结构*struct score char grade20; * 班级* long number; *学号* char name20; *姓名* float os; *操纵系统* float datastru;*信息结构* float compnet;*统计机*络* ; *通讯地址表结构*struct addr char name20; char department30 ;*部分* char address30; *住址* long box; *邮编* long phone; *电话号码* char email30; *Email*; 像这些对差别登记表的信息结构的描述类型称为结构体

5、类型 C语言对结构体类型定义的一样形式似下: struct struct 结构体名结构体名 成员项表列成员项表列 ; * * 此行分号不能少!此行分号不能少!* * 有了结构体类型,我们便能够定义结构体类型变量,对差别变量的各成员履行引用. 9.1.2 结构体类型变量的定义结构体类型变量的定义 结构体类型变量的定义与其它类型的变量的定义是一样的,但因为结构体类型需要面向咨询题事先自行定义,所以结构体类型变量的定义形式便增加了灵活性,共计有3种形式,分不讲解似下: 1. 1. 先定义结构体类型先定义结构体类型, ,再定义结构体类型变量再定义结构体类型变量: : struct stu *定义学生结

6、构体类型* char name20; * 学生姓名*char sex; * 性不*long num; *学号*float score3; * 三科考试成绩*; struct stu student1,student2; * 定义结构体类型变量*用此结构体类型,能够定义更多的该结构体类型变量. 2. 2. 定义结构体类型同时定义结构体类型变量定义结构体类型同时定义结构体类型变量: : struct data int day;int month;int year; time1,time2 ; 也能够再定义似下变量:struct data time3,time4 ; 用此结构体类型,同样能够定义更多

7、的该结构体类型变量. 3. 3. 直截了当定义结构体类型变量直截了当定义结构体类型变量: :struct char name20; *学生姓名* char sex; *性不* long num; *学号* float score3; *三科考试成绩* person1,person2; *定义该结构体类型变量*注重注重:该定义方式因为无法记录该结构体类该定义方式因为无法记录该结构体类型型,所以除直截了当定义外所以除直截了当定义外,不能再定义该结构不能再定义该结构体类型变量体类型变量. 对于结构体类型,有几点要讲明: (1)类型与变量是差别的概念,不要混同.只能对变量赋值、存取或运算,而不能对一个

8、类型赋值、存取或运算.在编译时,对类型是不安排空间的,只对变量安排空间.(2)信息类型一样的信息项,既可追个、追行分不定义,也可合同时成一行定义.例似,上面的日期结构类型,也可改为似下形式: struct date int year, month, day; ; (3)结构体中的成员,既能够是根基信息类型,也许可是另一个差不多定义的结构类型.似:struct data int day; int month; int year;struct stu *定义学生结构体类型* char name20; * 学生姓名* char sex; * 性不* long num; *学号* struct dat

9、a birthday;* birthday是struct data类型* float score3; * 三科考试成绩*student1,student2; 在stu结构中的birthday成员又是一个结构体(struct data)类型的变量. (4)成员名能够与程序中的变量名一样,但二者不代表同一对象. 9.2 结构体变量的引用与初始化 9.2.1 9.2.1 结构体类型变量的引用结构体类型变量的引用 引用结构体类型变量的一样形式为引用结构体类型变量的一样形式为: : 结构体类型变量名结构体类型变量名 . .成员名成员名其中其中“.”.”是成员是成员( (重量重量) )运算符运算符, ,它

10、在全部运算符中优先级最高它在全部运算符中优先级最高. . 讲明讲明: :(1)(1)结构体类型变量的各成员与相应的简单类型变量一样能够履行结构体类型变量的各成员与相应的简单类型变量一样能够履行各种运算各种运算, ,例似例似: :student2.score1= student1.score1;student2.score1= student1.score1;sum=stud1.score0+stud1.score1+stud1.score2;sum=stud1.score0+stud1.score1+stud1.score2;(2)(2)似果成员自已又属一个结构体类型似果成员自已又属一个结构体

11、类型, ,那么要用如果干成员运那么要用如果干成员运算符算符, ,一级一级地寻到最低的一级成员一级一级地寻到最低的一级成员. .只能对最低级的成员履只能对最低级的成员履行赋值或存取以及运算行赋值或存取以及运算. .例似例似: :student1. birthday.day=01student1. birthday.day=01;student1.birthday.month=10student1.birthday.month=10;student.birthday.year=2021student.birthday.year=2021; (3)能够引用结构体类型变量成员的地址,也能够引用结构体变

12、量的地址.例似: scanf(%f,&student.scorei) 9.2.2 结构体类型变量的初始化结构体类型变量的初始化 和其他类型变量一样,对结构体变量能够在定义时指定初始值,但结构体类型变量分散了各类差别信息类型的成员,所以结构体类型变量的初始化便略显复杂.例似:struct stu *定义学生结构体类型* char name20; * 学生姓名*char sex; * 性不*long num; *学号*float score3; * 三科考试成绩*;struct stu student=liping,f,970541,98.5,97.4,95;毫无疑咨询我们也能够通过C提供

13、的输入输出函数完成对结构体类型变量成员的赋值.因为结构体类型变量成员的信息类型往往是不一样的,所以一样是将结构体类型变量成员以字符串的形式输入,操纵C的类型变形函数将其变形为所需类型.类型变形的函数有:int atoi( char *str); * 变形str所指向的字符串为整型.*double atof(char *str); * 变形str所指向的字符串为实型. *long atol(char *str); * 变形str所指向的字符串为长整型.*使用上述函数,要见谅头文件stdlib.h. 例似,对上述的结构体类型变量student各成员赋值能够采纳以下方式:char temp20;ge

14、ts() ; * 输入姓名*student.sex=getchar( ) ; * 输入性不*gets(temp) ; * 输入学号*student.num=atol(temp) ; * 变形为长整型*for(i=0;i3;i+) * 输入三科成绩*gets(temp) ; student.scorei=atoi(temp) ; * 变形为整型* 9.3 结构体数组 结构体数组与前面讲解过的根基信息类型数组的差别之处是每个数组元素根基上一个结构体类型的信息,都包罗多个成员信息项. 9.3.1 9.3.1 结构体数组的定义结构体数组的定义 和定义结构体变量的方式相仿,只需讲

15、明其为数组即可.似:struct stu *定义学生结构体类型* char name20; *学生姓名*char sex; *性不*long num; *学号*float score3; *三科考试成绩*;struct stu stud3; *定义结构体类型数组stud * 9.3.2 9.3.2 结构体数组的初始化结构体数组的初始化 与其他类型一样,对结构体数组能够初始化.似: struct stu char name20; char sex; long num; float score3; ;struct stu stud3=liping,m,9901,78.4,68.5,99.4, we

16、ifeng,f,9902,67.4,88.5,90.0, xiaoling,m,9903,87.5,97.5,80.0; 结构数组名结构数组名nn初值表初值表1,1,初值表初值表2,.,2,.,初值表初值表nn; 9.3.3 结构体数组应用举例结构体数组应用举例 【例【例9-19-1】创站一个有】创站一个有4 4个人的电子通信录个人的电子通信录, ,同时输出通信录的内同时输出通信录的内容容. . 【思路导航】设通信录的每一条记录都包罗姓名、性不、出生年【思路导航】设通信录的每一条记录都包罗姓名、性不、出生年月、通信地址和联系电话几项月、通信地址和联系电话几项, ,而在这几项中而在这几项中, ,

17、出生年月又包罗年出生年月又包罗年份、月份和日期份、月份和日期, ,通信地址又包罗邮编和家庭地址两项通信地址又包罗邮编和家庭地址两项, ,我们把这我们把这些联系较为紧密的内容又用单独的结构示意些联系较为紧密的内容又用单独的结构示意. .对对4 4个人的记录能够个人的记录能够定义一个见谅定义一个见谅4 4个元素的结构体数组个元素的结构体数组. . * *exam9_1exam9_1* *#include stdio.h#include stdio.hstruct addr struct addr * *通信地址结构定义通信地址结构定义* * char postcode10; char postco

18、de10; * *邮编邮编* * char addr40; char addr40; * *家庭住址家庭住址* * ; ; struct birth *出生年月结构定义* int year; int month; int day;struct friend *电子通信录结构定义* int number; char name20; char sex; struct birth birthday; struct addr address; char telephone13;friends4; int main(void) int i;*以下是输入信息* for(i=0;i4;i+) friends

19、i.number=i+1; printf(tenter NO.%d s data:n,i+1); printf(tenter name:); scanf(%s,); getchar(); *排除键盘缓冲区对输入的作用* printf(ntenter sex(mf):); scanf(%c,&friendsi.sex); printf(ntenter birthday:); printf(nttyear:); scanf(%d,&friendsi.birthday.year); printf(nttmonth:); scanf(%d,&frien

20、dsi.birthday.month); printf(nttday:); scanf(%d,&friendsi.birthday.day); printf(ntpostcode:); scanf(%s,friendsi.address.postcode); printf(ntaddress:); scanf(%s,friendsi.address.addr); printf(ntphone:); scanf(%s,friendsi.telephone); * 以下是输出信息* for(i=0;ipostcode=”510070”;p-addr=”guangzhou”;结构体变量在内存

21、中的起始地址称为结构体变量的指针. 下面通过一个简单例子来讲明指向结构体变量的指针的应用. 【例【例9-29-2】先从键盘给一个结构体类型变量的各成员赋值】先从键盘给一个结构体类型变量的各成员赋值, ,接着接着在屏幕输出在屏幕输出. . * *exam9_2exam9_2* *#includestdio.h #includestdio.h #includestdlib.h #includestdlib.h * *使用使用malloc()malloc()需要需要* *struct addrstruct addr char name10; char name10; char department1

22、0 ; char department10 ; * * 部分部分* * char address20; char address20; * *住址住址* * char code10; char code10; * * 邮编邮编* * char phone12; char phone12; * * 电话号码电话号码* * char email20; char email20; * * Email Email * *; ; int main(void) *定义main()函数* struct addr *person; * 定义结构体类型指针变量* person = malloc(sizeof(s

23、truct addr); * 为指针变量安排安然的地址* printf(enter name,department,address,postcode, phone, Email:n); gets(person-name); gets(person-department) ; gets(person-address); gets(person-code); gets(person-phone); gets(person-email); *以下打印输出各成员项的值* printf(nname:%sn,person-name); printf(department:%sn,person-depart

24、ment); printf(address:%sn,person-address); printf(postcode:%sn,person-code); printf(phone:%sn,person-phone); printf(Email:%sn,person-email); return 0; 通过指向结构变量的指针来会见结构变量的成员,与直截了当使用结构变量的结果是一样的,只是使用的成员运算符差别,前者为“-”,后者为“.”.似果指针变量pointer已指向结构变量var,那么以下三种形式是等价的:(1)var.成员(2)pointer-成员 *“-”称为指向运算符*(3)(*poin

25、ter).成员 *括号不能省!* 演示9.4.2 指向结构体数组的指针指向结构体数组的指针 定义结构体类型的指针,既能够指向结构体变量,也能够指向结构体数组.例似,能够在例9-2中定义的结构体类型根本上再定义结构体数组及指向结构体类型的指针似下:struct addr char name10; char department10 ; * 部分* char address20; *住址* char code; * 邮编* char phone; * 电话号码* char email20; * Email *;struct addr person4,*p; * 定义结构体数组person及指向结构

26、体类型的指针p*p=person; 语句“p=person;”使指针p指向了结构体数组person.对数组元素的引用可采纳三种方式.1) 地址法person+i和p+i均示意数组第i个元素的地址,数组元素各成员的引用形式为:(person+i)-name、(person+i)-department和(p+i)-name、(p+i)-department等.person+i和p+i与&personi意义一样.2) 指针法如果p指向数组的某一个元素,那么p+便指向其后续元素.3) 指针的数组示意法如果p=person,我们讲指针p指向数组person,pi示意数组的第i个元素,其结果与pe

27、rsoni等同.对数组成员的引用描述为: 、pi. department等.【例【例9-39-3】指向结构体数组的指针变量的使用】指向结构体数组的指针变量的使用. . * *exam9_3exam9_3* *#include stdio.h#include stdio.hstruct addrstruct addr char name10; char name10; char department10 ; char department10 ; * * 部分部分* * char address20; char address20; * *住址住址* * char code10;

28、char code10; * * 邮编邮编* * char phone12; char phone12; * * 电话号码电话号码* * char email20; char email20; * * Email Email * *; ; int main(void)int main(void) int i; int i; struct addr struct addr * *p,person4=p,person4= liying, liying,信息学院信息学院,文明路文明路5 5号东号东3 3栋栋302,302, 524001, 3385201,liying163, 524001, 338

29、5201,liying163, wangping,文法学院,文明路5号东5栋402, 524001, 3385212,wangpingtom, libo ,航海学院,解放路34号西4栋205, 5 2 4 0 1 1 , 2 3 8 2 4 2 4 , l i b o h o t m a i l , xuyan,工程学院,海滨路43号2号楼302, 524005, 2382465,xuyanyahoo;p=person; *将数组的首地址赋值给指针p , p 指向了一维数组person*for(i=0;iname); printf(部分:%sn,(p+i)-department); print

30、f(地址:%sn,(p+i)-address); printf(邮编:%sn,(p+i)-code); printf(电话:%sn,(p+i)-phone); printf(Email:%sn,(p+i)-email);return 0; 演示9.5 共用体 共用体类型也是用来描述类型差别的信息,但与结构体类型差别,共用体信息成员存储时采纳覆盖技术,各信息成员共享(或部分共享)同一块存储空间.在结构体中增加共用体类型成员,可使结构体中产生动态成员.共用体类型在有的书中亦称为联合体. 9.5.1 9.5.1 共用体类型的定义共用体类型的定义共用体的定义用关键字共用体的定义用关键字unionuni

31、on标识标识, ,形式为形式为: :union union 共用体名共用体名 成员表列成员表列 ;例似:union data int i; char ch; float f;; 共用体信息类型union data见谅一个整型成员、一个字符成员和一个单精度浮点数类型成员.共用体信息类型与结构体在形式上非常相近,但其示意的含义及存储是完全差别的.结构体中的成员有各自的存储空间,结构体变量所占的内存长度等于各成员的长度之和,而共用体的各成员是共用一段内存空间,所以共用体变量所占的内存长度等于最长成员的长度,似图9-2所示. 4字节1字节变量i变量f变量ch结构体 ich共用体f图9-2共用体类型与结

32、构体类型占用存储空间的对比2字节9.5.2 共用体变量的定义共用体变量的定义 共用体变量的定义与结构体变量的定义类似,也有三种方式:1.先定义共用体类型,再定义共用体类型变量.似:union data int i; char ch; float f;;union data un1, un2, un3; 这个地方先定义了共用体类型data,接着定义了三个共用体变量un1、un2、un3. 2.定义共用体类型同时定义共用体类型变量.似:union data int i; char ch; float f; un1, un2, un3;3.直截了当定义共用体类型变量.似:union int i; c

33、har ch; float f; un1, un2, un3;提倡使用第一种方式. 9.5.3 9.5.3 共用体变量的引用共用体变量的引用共用变量体的引用与结构体变量一样,也只能追个引用共用体变量的成员.例似,会见共用体变量un1各成员的标准为:un1.i、un1.ch、un1.f.讲明:(1)共用体变量中,能够见谅如果干个成员及如果干种类型,但共用体成员不能同时使用.在每一时候,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型.(2)共用体信息成员存储时采纳覆盖技术,实现共用体变量各成员的内存共享,所以在某一时候,存放的和起作用的是末了一次存入的成员值.例似,履行un1.i=1

34、, un1.ch=c, un1.f=3.14后,un1.f才是有效的成员. (3)因为全部成员共享同一内存空间,故共用变量与其各成员的地址一样.例似,un1un1.iun1.chun1.f.(4)不能对共用变量履行初始化(注重:结构变量能够);也不能将共用变量做为函数指标,以及使函数返回一个共用信息,但能够使用指向共用变量的指针.(5)共用类型能够表此刻结构类型定义中,反之亦然. 【例9-5】设有如果干人员的信息,其中有学生和教师,教师的信息中包罗编号、姓名、职业、职务,学生的信息中包罗编号、姓名、职业、班级.现要求把这些信息放在同表格中,似图9-3. 【思路导航】这些信息中【思路导航】这些信

35、息中, ,编号、姓名、职业是三个固定字段编号、姓名、职业是三个固定字段, ,第第四个字段是动态字段四个字段是动态字段, ,大概是职务(字符型)大概是职务(字符型), ,也大概是班级(整也大概是班级(整型)型), ,两个中选一个两个中选一个, ,故用共用体类型描述故用共用体类型描述. .假定思考三个人员的信假定思考三个人员的信息息, ,用结构体数组来描述用结构体数组来描述. . * *exam9_5exam9_5* *#include stdio.h#include stdio.h#include string.h#include string.hunion cf union cf * *定义共

36、用体定义共用体cfcf* * int classes; int classes; * *班级班级* * char position10; char position10; * *职务职务* *;struct struct int num; int num; * *编号编号* * char name10; char name10; * *姓名姓名* * char job4; char job4; * * 职业职业* * union cf categroy; union cf categroy; * *该成员为共用体成员该成员为共用体成员, ,存放班级或存放班级或职务职务* *person3; p

37、erson3; * *定义结构体数组定义结构体数组* * int main(void) int i;for(i=0;i3;i+) printf(输入第输入第%d个人员的资料个人员的资料:n,i+1); scanf(%d%s%s,&personi.num,, personi.job); if(!strcmp(personi.job,学生学生) scanf(%d,&personi.categroy.classes); else scanf(%s,personi.categroy.position); for(i=0;iSunMonSun、SatSat最大最大

38、. .(4 4)枚举元素的值也是能够人为改变的)枚举元素的值也是能够人为改变的: :在定义时由程序指定在定义时由程序指定. .例似例似, ,似果似果enum weekdays Sun=enum weekdays Sun=, Mon, Mon ,Tue, Wed, Thu, ,Tue, Wed, Thu, Fri, SatFri, Sat;那么;那么Sun=Sun=,Mon=,Mon=, ,从从Tue=2Tue=2最先最先, ,依次增依次增. . 【例【例9-59-5】从键盘输入一整数】从键盘输入一整数, ,表现与之对应的星期值表现与之对应的星期值. . *exam9_5*#include st

39、dio.hint main(void) enum weekdays Mon=1,Tue,Wed,Thu,Fri,Sat, sun workday; int i; printf(请输入一个整数请输入一个整数:n); scanf(%d,&i); workday=(enum weekdays )i; *将将i强制变形为枚举类型强制变形为枚举类型* switch(workday) case Sun:printf(Sundayn); break; case Mon:printf(Mondayn); break; case Tue:printf(Tuesdayn); break; case Wed

40、:printf(Wednesdayn); break; case Thu:printf(Thursdayn); break; case Fri:printf(Fridayn); break; case Sat:printf(Saturdayn); break; default:printf(Input errorn); return 0; 演示9.7 用typedef定义类型 在C语言中除可直截了当使用提供的规格类型和自定义的类型(结构体、共用体、枚举等)外,也可使用typedef定义已有类型的不名.该不名与规格类型名一样,可用来定义相应的变量.typedef类型定义的含义是给某个已有的信息类

41、型再一次命名,即许可给指定的信息类型定义一个新的名字(原标题仍旧可用),其形式为:typedef 类型名 新标题其中,“typedef”类型定义的语句的关键字;“类型名”是系统提供的规格类型名,大概是一个已定义的类型名;“新标题”为用户定义的与类型名等价的一个不名. 例似:typedef float REAL; * 给实型float定义一个不名REAL*REAL a,b; *定义实型变量a、b* typedef struct date int year, month, day; DATE; *为结构体定义一个不名DATE * DATE birthday;*定义一个结构体类型的变量birthda

42、y* typedef int NUM10; *定义NUM 为见谅10个元素的数组类型*NUM a,b;*定义了两个见谅有10个元素的一维数组a、b* 相当于int a10,b10; 讲明:(1) 用typedef只是给已有类型增加个不名,同时不能制造个新的类型.便似同人一样,除学名外,能够再取一个小名(或雅号),但同时不能制造出另一个人来.(2) typedef与#define有相近之处,但二者是差别的:前者是由编译器在编译时操作的;后者是由编译预操作器在编译预操作时操作的,并且只能作简单的字符串替换.(3) 定义的不名一样使用大写字母,以便与系统的规格类型标识符相区不.(4) 当差别源文件中

43、用到同一信息类型(特别是像数组、指针、结构体、共用体等信息类型)时,常用typedef表明部分信息类型,把它们单独放在一个文件中,接着在需要用到它们的文件中用#include号令把它们见谅进来.(5)使用typedef有利于程序的通用与移植.例似有系统int 型为2个字节,而有的为4个字节,如果要履行程序移植,必然会表现咨询题,倘如果在甲机器上int 为2 个字节,在程序中如此定义:“typedef int INTEGER;”,程序中便可用INTEGER定义变量.此刻如果想移植到乙机器上,而其int为4个字节,那么只需将“typedef int INTEGER;”改动为:“typedef lo

44、ng INTEGER;”便能够了,其它地点不用修改.9.8 结构体应用举例 【例【例9-79-7】以下是】以下是4 4个学生的成绩登记表个学生的成绩登记表, ,除姓名、学号外除姓名、学号外, ,还有还有三科成绩三科成绩, ,编程实现对表格的统计编程实现对表格的统计: :求出各人的平均分以及各科求出各人的平均分以及各科的平均分的平均分, ,同时按各人平均成绩由高分到低分输出同时按各人平均成绩由高分到低分输出. . Name number English Physics Mathema AverageLiping 001 78 98 76Wangling 002 66 90 86Jiangbo 0

45、03 89 70 76Yangming 004 90 100 67咨询题要求的咨询题多,采纳模块化编程方式,将咨询题履行分化似下:1) 结构体类型数组的输入.2) 求解各学生的三科平均成绩.3) 按学生的平均成绩排序.4) 按表格要求输出.5) 求解各学生单科平均成绩同时输出.6) 定义main()函数,调用各子程序. 第一步,依照具体情况定义结构体类型.struct stuchar name20; *姓名*long number; *学号*float score4; *数组依此存放English、Mathema、Physics,及Average*; 因为有多个子模块需要使用该结构体类型,所以

46、将其定义为外部的结构体类型,放在程序的最前面. 第二步第二步, ,定义结构体类型数组的输入模块定义结构体类型数组的输入模块. .* *输入结构体类型数组输入结构体类型数组arrarr的的n n个元素个元素* *void input(struct stu arr ,int n)void input(struct stu arr ,int n) int i,j; int i,j;char temp30;char temp30;for(i=0;in;i+)for(i=0;in;i+) * *打印提示信息打印提示信息* * printf(ninputname,number,English,mathem

47、a,physicn); printf(ninputname,number,English,mathema,physicn); gets(); gets(); * *输入姓名输入姓名* * gets(temp); gets(temp); * *输入学号输入学号* * arri.number=atol(temp); arri.number=atol(temp); for(j=0;j3;j+) for(j=0;j3;j+) gets(temp); gets(temp); * *输入三科成绩输入三科成绩* * arri.scorej=atof(temp); arri.scorej=atof(temp); 第三步,求解各学生的三科平均成绩.结构体数组中第i个元素arri的成员score的前三个元素为已知,第四个Average需统计猎取.void aver(struct stu arr ,int n) int i,j;for(i=0;in;i+) *n个学生*arri.score3=0;for(j=0;j3;j+)arri.score3=arri.score3+arri.scorej;*求和*arri.score3=arri.score33; *平均成绩* 第四步,按平均成绩由大到小排序,排序算法采纳冒泡法.void order(str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论