实验9 结构体、共用体与枚举类型答案
- 格式:pdf
- 大小:151.97 KB
- 文档页数:9
实验11 结构体、共用体和枚举类型一、实验目的:1、掌握结构体类型定义和结构体变量定义、初始化的方法;2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法;3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序;4、熟悉共用体类型、枚举类型、typedef的基本用法。
二、实验内容1、下列程序的功能是:先定义结构体Book,再定义两个变量book1、book2,其中一个初始化,另一个从键盘输入数据,最后输出book1、book2的值。
程序运行结果如下:请根据题意和注释填写下列程序所缺代码,并回答相关问题:#include<stdio.h>//定义结构体Book,成员有:书名(title),字符数组,长度为100;//作者(authors),字符数组,长度为30;ISBN,字符数组,长度为20;//页数(pages),整型;价格(price),单精度浮点数。
/*代码段_1*/int main(){//定义两个Book型变量book1、book2,其中book1用我们本学期所使用教材的数据初始化/*代码段_2*///从键盘输入我们本学期所使用实验指导书的数据给book2/*代码段_3*/printf("请输入实验指导书的信息:书名、作者、ISBN、页数、作者:\n");/*代码段_4*/printf("\n教材、实验书信息如下:\n");/*代码段_5*/return 0;}问题:(1)如何定义结构体类型?(2)怎样定义结构体变量,并初始化?(3)怎样输入、输出结构体变量各成员的值?2、请按下列要求编程:(1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int);(2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型;(3)然后定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。
第十二讲结构体、共用体和枚举类型(C语言)第十二讲结构体、共用体和枚举类型本讲主要介绍C语言中的三种类型的定义和使用,其中两种是构造类型:结构体类型和共用体类型,一种是C语言的基本类型:枚举类型。
要求大家掌握结构体类型、共用体类型和枚举类型的变量的定义,掌握结构体类型和共用体类型变量及其成员的引用等基本操作,理解结构体数组的应用,理解结构体和共用体变量存储形式的不同,了解枚举类型变量的处理方式。
知识要点结构体类型的定义1. 结构体类型定义的一般形式2. 结构体类型定义中的注意事项结构体类型变量1. 结构体类型变量定义的三种方法2. 结构体类型变量的初始化3. 对结构体变量中成员的引用4. 对整个结构体变量的引用结构体数组1. 结构体数组定义的三种方法2. 结构体数组的初始化3. 对结构体数组元素的成员进行引用共用体1. 共用体类型和共用体变量定义的方式2. 共用体变量与结构体变量的区别3. 共用体变量成员的引用4. 共用体变量作为结构体变量的成员枚举类型1. 枚举类型和枚举变量定义的一般形式2. 枚举元素的处理§12.1 结构体类型的定义结构体类型定义的一般形式为:struct 结构体名{类型名1 成员名1;类型名2 成员名2;……类型名n 成员名n;};其中,struct是关键字,是结构体类型的标志。
结构体名是由用户定义的标识符,它规定了所定义的结构体类型的名称。
结构体类型的组成成分称为成员,成员名的命名规则与变量名相同。
§12.2 结构体类型变量一、结构体变量的定义定义结构体类型的变量有三种方法:1.先定义结构体类型,再定义变量。
注意:定义变量时,struct person必须在一起使用,它的用法与int、char等类型名的用法相同。
2.定义类型的同时定义变量。
3.直接定义结构体类型变量,省略类型名。
二、结构体变量的初始化将结构体变量各成员的初值顺序地放在一对大括号中,并用逗号分隔。
实验9 结构体实验9-结构体实验9结构体的使用【实验目的】1:掌握结构体类型的定义。
2:掌控结构体类型变量的定义,赋值及初始化。
3:掌控结构体类型变量成员的出访。
【调试作业】1、定义一个学生student结构体类型,其中涵盖4个成员:姓名、性别、数学成绩、英语成绩。
赢入5个具有student类型的学生相关信息,分别输出数学和英语最高分的学生全部信息。
要求:性别使用枚举类型定义,输出用男或女。
提示:structstudent{char*name;longno;doublemath;doubleenglish;}s1[5];参考课本p70页例题,求最大值算法。
假设最高分为第一个学生的。
2定义一个日期结构体变量,建议输出年,月,日,程序能够排序本日在本年中就是第几天?特别注意闰年问题。
提示信息:structdate{intyear;intmonth;intday;}date1;cin>>date1.month;switch(date1.month){case1:sumd=date1.day;break;case2:sumd=date1.day+31;break;case3:sumd=date1.day+ 59;break;case4:sumd=date1.day+90;break;case5:sumd=date1.day+120;break;……..case12:sumd=date1.day+334;break;}if(((date1.year%4==0sumd=sumd+1;&&date1.year0!=0)||date1.year@0==0)&& date1.month>=3)【思索与练】1.指出下面程序中的错误并改正。
2下面程序的运转结果就是.的优先级别高于++。
实验九、结构体程序设计一、实验目的1.掌握结构、结构数组、结构指针的定义及使用;2.掌握简单的链表的定义及使用;3.掌握共用体和枚举类型的定义及使用;4.掌握文件的简单的定义、打开、写、关闭等操作。
二、实验内容1.[题目内容]某考点建立一个考生人员情况登记表、表格内容如下:1)根据上表正确定义该表格内容要求的数据类型。
2)分别输入各成员项数据,并打印输出(为简便,假设有3个考生)编程序,然后上机调试运行程序。
2.[题目内容]某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
3.[题目内容]设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。
4.[题目内容]定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。
编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。
5.[题目内容]利用上一题的结构类型,创建包含10个结点的无序链表。
编写5个函数分别实现下述功能(参考前面第三部分内容):(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩排序。
三、课后作业(写实验报告)1.学生成绩管理:有5个学生,每个学生的数据包括学号、班级、姓名、三门课成绩。
从键盘输入5个学生数据,要求打印出每个学生三门课的平均成绩,以及每门课程平均分、最高分学生数据(包括学号、班级、姓名、三门课成绩,平均分)。
(1)定义学生结构体。
(2)用一个函数实现5个学生数据的输入,用另一个函数负责求每个学生三门课程的平均成绩,再用一个函数求出平均分最高的学生并输出该学生的数据。
实验9-1 结构体和共用体(1)1【实验目的】掌握结构体类型变量的定义和使用掌握结构体类型数组的概念和应用了解链表的概念和操作方法【实验要求】掌握结构体类型变量的定义和使用了解链表的概念和操作方法【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、第几天/acmhome/problemdetail.do?&method=showdetail&id=1071描述:给定一个日期,输出这个日期是该年的第几天。
输入输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
输出:对于每组输入数据,输出一行,表示该日期是该年的第几天。
样例输入:2000-01-01样例输出:12、学生成绩/JudgeOnline/problem.php?id=1518题目描述现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。
编写一个函数input,用来输入一个学生的数据记录。
编写一个函数print,打印一个学生的数据记录。
在主函数调用这两个函数,读取N条记录输入,再按要求输出。
N<100输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入2a100 zhblue 70 80 90b200 newsclan 90 85 75样例输出a100,zhblue,70,80,90b200,newsclan,90,85,753、平均分和最高分/JudgeOnline/problem.php?id=1519题目描述有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
实验9 结构体数组作函数参数【实验任务】学生成绩管理系统V5.0某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目为数学(MT)、英语(EN)和物理(PH)。
参考例12.7,定义结构体类型,用结构体数组作函数参数,编程实现如下菜单驱动的学生成绩管理系统:(1)录入每个学生的学号、姓名和各科考试成绩;(2)计算每门课程的总分和平均分;(3)计算每个学生的总分和平均分;(4)按每个学生的总分由高到低排出名次表;(5)按每个学生的总分由低到高排出名次表;(6)按学号由小到大排出成绩表;(7)按姓名的字典顺序排出成绩表;(8)按学号查询学生排名及其考试成绩;(9)按姓名查询学生排名及其考试成绩;(10)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;(11)输出每个学生的学号、姓名、各科考试成绩,以及每门课程的总分和平均分。
要求程序运行后先显示如下菜单,并提示用户输入选项:1.Append record2.Caculate total and average score of every course3.Caculate total and average score of every student4.Sort in descending order by total score of every student5.Sort in ascending order by total score of every student6.Sort in ascending order by number7.Sort in dictionary order by name8.Search by number9.Search by name10.Statistic analysis for every course11.List record0.ExitPlease enter your choice:然后,根据用户输入的选项执行相应的操作。
c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。
main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。
掌握C语言环境下结构体和共用体类型变量的定义和使用方法实验目的:(1) 掌握C语言环境下结构体和共用体类型变量的定义和使用方法;(2) 掌握结构体类型数组的概念和使用;(3) 掌握指向结构体变量的指针变量、尤其是链表概念;实验内容:1.首先熟悉结构体类型变量的基本声明方法、结构体类型变量的内存分配原则、初始化和引用结构体变量及其成员变量的基本方法;然后掌握结构体变量的输入、输出方法。
(参见教材例10-1~10-5)2.基于结构体数组的应用实验。
(1) 有n个学生,每个学生的数据包括学好(num)、姓名(name[20])、性别(sex)、年龄(age),以及三门课程的成绩(score[3])。
要求:在main()函数中输入这些学生的这些数据,然后设计一个函数count()来计算每个学生的总分和平均分,最后,打印出所有数据信息(包含原来输入的学生原始数据信息和求解出来的新信息)。
(2)对第(1)题实验,求出其中成绩最好的人和成绩最差的人,并显示出来。
(假定成绩最好和最差的人都只有一个)(3)*如果假定成绩最好和最差的人的个数不一定唯一,程序应该如何修改才能完成求出所有最好和最差者,以及输出它们来。
3.*链表实验。
(1) 建立一个链表,每个结点包含:职工号、工资。
用malloc()函数开辟新结点,用free()函数回收不用的结点空间。
要求从键盘输入5个员工的数据信息(用create_list()),然后,用函数output_list()将它们一一打印出来,用free_list()将链表中的结点空间回收。
假设职工编号为1001,1005,1008,1010,1101。
注:malloc()和free()为系统函数。
create_list(),output_list(),free_list()为用户自定义函数。
(2)在(1)的基础上,新增一个函数inset_node()插入员工1006和1032的数据信息。
实验9 结构体实验9-结构体实验9结构的使用【实验目的】1:掌握结构类型的定义。
2:掌握结构体类型变量的定义,赋值及初始化。
3:掌握结构体类型变量成员的访问。
[调试]1、定义一个学生student结构体类型,其中包含4个成员:姓名、性别、数学成绩、英语成绩。
输输入五名学生类型的相关信息,并分别输出数学和英语成绩最高的学生的所有信息。
要求:按枚举类型定义性别,输出为男性或女性。
提示:structstudent{字符*名称;朗诺;双重数学;双重英语;}s1[5];参考教科书p70页上的例子,找出最大算法。
假设得分最高的是第一个学生。
2定义一个日期结构体变量,要求输入年,月,日,程序能计算本日在本年中是第几天?注意闰年问题。
提示:结构日期{intyear;intmonth;intday;}日期1;cin>>日期1。
月switch(date1.month){案例1:sumd=date1。
白天打破案例2:sumd=date1。
第31天;打破案例3:sumd=date1。
第59天;打破案例4:sumd=date1。
第90天;打破案例5:sumd=date1。
日+120;打破;……。
case12:sumd=date1.day+334;break;}if(((date1.year%4==0sumd=sumd+1;&&date1.year0!=0)||date1.year@0==0)&&日期1。
月份>=3)【思考与练习】1.指出以下程序中的错误并予以纠正。
2下面程序的运行结果是优先于++。