实验9 结构体、共用体与枚举类型答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5、已知仓库存书的信息如下表所示 书号 (ISBN) 7115177810 书名 作者 出版社 出版日期 (title) (author) (publisher) (pubdate) 价格 (元) (price)
Java实 人民邮电出 2008年5月 32.00 李钟尉 用教程 版社 汇编语 中国铁道出 7113101015 言程序 白小明 2009年8月 35.00 版社 设计 清华大学出 2005年7月 26.00 7302108535 C语言程 谭浩强 序设计 版社 网络工 北京大学出 7301123713 程实用 汪新民 2008年2月 34.00 版社 教程 机械工业出 2010年3月 28.00 7111283812 软件工 郑人杰 程概论 版社 试编程求书的平均价格,并输出价格小于30元的书籍的书号、书 名、作者、出版社、出版日期,价格等信息。源程序以ex9_9.c命名,
解: #include <stdio.h> struct worker { char department[20]; int num; char name[20]; float salary; }work[5] = {{"技术科",10002,"张援朝",6800}, {"生产科",20006,"李明瑞", 2600}, {"检验科",30018,"王国庆", 4800}, {"后勤部",40026,"刘小兵",3700}, {"经营科",50068,"吴 伟",1900}}; main() {
本网络 103班 本网络
040006
刘
伟
92
050007 吴 菲 49 106班 试编程求这5位同学该门课程的平均成绩,并输出成绩不及格的同 学的班级、学号、姓名与成绩等信息。源程序以ex9_7.c命名,保存在 自己的文件夹内。
解: #include <stdio.h> struct student { char banji[20]; char num[8]; char name[20]; float score; }stu[5] = {{"本网络102","01002","张小兵",89}, {"本软件103班","02001","李莉嘉", 54}, {"本软件106班","03008","王明星", 68}, {"本网络103班","04006","刘 伟", 92}, {"本网络106班","05007","吴 菲", 49}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += stu[i].score; if(stu[i].score<60) { printf("班级:%s ",stu[i].banji); printf("学号:%d ",stu[i].num); printf("姓名:%s ",stu[i].name); printf("成绩:%.2f\n",stu[i].score);
2、试用结构体定义一个学院教师的信息表,包含如下成员:工 号、姓名、性别、年龄、参加工作日期、联系电话。源程序以ex9_6.c 命名,保存在自己的文件夹内。
解: struct teacher { char number[20]; char name[20]; char sex; int age; char worked_time[80]; char phone[20]; }; 注:本题答案中变量的名称和类型可由学生自行取,只要 遵守标识符的命名规则和数据类型与实际情况相吻合。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);
应知: 1、结构体、共用体、枚举类型的概念及其定义方法; 2、结构体变量、共用体变量、枚举类型变量的定义; 3、动态内存分配的概念及动态内存分配函数。 4、链表的概念。 应会: 1、结构体变量、共用体变量、枚举类型变量的使用; 2、结构体数组及结构体指针的使用; 3、动态内存分配函数的使用; 4、链表的使用。
率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
【实验思考】
1、当定义一个结构体变量时,系统为它分配的内存空间是多少? 答案: 当定义一个结构体变量时,系统为它分配的内存是各成员所占内存 量的总和。 2、结构体与数组的区别是什么? 答案: 数组只能存放同样类型的数据,而结构体则能够存放不同类型的数 据,结构体里面也可以有结构体。 3、用结构体指针作为函数参数与用结构体变量作为函数参数有什 么不同? 答案: 首先,调用函数时,因为函数参数要临时存放到栈中,若结构体变 量作为参数,则需要生成一个结构体的副本,将其存放到栈中;而结构 体指针作为变量,只需将指针存放到栈中即可,提高了程序的空间效
printf("作者:%s ",book[i].author); printf("出版社:%s ",book[i].publisher); printf("出版日期:%s ",book[i].pubdate); printf("价格:%.2f\n",book[i].price); } } average = s/5 ; printf("平均价格:%.2f\n",average); } 【实验小结】
int i; float average, s=0; for(i=0; i<5; i++) { s += work[i].salary; if(work[i].salary<3000) { printf("部门:%s ",work[i].department); printf("工号:%d ", work[i].num); printf("姓名:%s ", work[i].name); printf("月收入:%.2f\n", work[i].salary); } } average = s/5 ; printf("平均月收入:%.2f\n",average); }
解:struct worker {Baidu Nhomakorabeachar number[20]; char name[20]; char sex; int age; char worked_time[80]; char phone[20]; }; 注:本题答案中变量的名称和类型可由学生自行取,只要 遵守标识符的命名规则和数据类型与实际情况相吻合。
3、5位同学《C语言程序设计》课程考核成绩如下表所示: C语言程序设 班级 计课程考核成 学号 姓名 (char 绩 (int num) (char name) banji) (float score) 本网络 010002 张小兵 89 102班 本软件 020001 李莉嘉 54 103班 本软件 030008 王明星 68 106班
实验九 结构体、共用体与枚举类型
实验时间: 年 月 日 一、上机验证与分析题 1、写出程序ex9_1.c运行的结果。 /*文件名ex9_1.c*/ #include <stdio.h> struct HAR { int x,y; struct HAR *p; }h[2]; int main() { h[0].x=1; h[0].y=2; h[1].x=3; h[1].y=4; h[0].p=&h[1]; h[1].p=h; printf("%d %d\n",(h[0].p)->x,(h[1].p)->y); return 0; } 答案:3 2 2、写出程序ex9_2.c运行的结果。 /*文件名ex9_2.c*/ #include "stdio.h" void main() { int z; union data { int x; int y; }a; a.x=3; a.y=6; z=a.x+a.y; printf("z=%d\n",z); } 答案:z=12
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
3、阅读程序ex9_3.c,预测结果并上机验证。 /*文件名ex9_3.c*/ #include <stdio.h> void main() { union data { int i; char ch; float f; }a,b,c; a.i=9; b=a; c=b; printf("b.i=%d,c.i=%d\n",b.i,c.i); } 答案:b.i=9,c.i=9 4、运行下列程序,写出结果 /*文件名ex9_4.c*/ #include <stdio.h> void main() { struct List { int data ; struct List *next; }; struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p; p=&a[1] ; printf("%d\n",--p->data); printf("%d\n",p->next->data); printf("%d\n",p--->data); } 答案:1 3 1 三、编程题: 1、试用结构体定义一个工厂职工的信息表,包含如下成员:工 号、姓名、性别、年龄、参加工作日期、联系电话。源程序以ex9_5.c 命名,保存在自己的文件夹内。
Java实 人民邮电出 2008年5月 32.00 李钟尉 用教程 版社 汇编语 中国铁道出 7113101015 言程序 白小明 2009年8月 35.00 版社 设计 清华大学出 2005年7月 26.00 7302108535 C语言程 谭浩强 序设计 版社 网络工 北京大学出 7301123713 程实用 汪新民 2008年2月 34.00 版社 教程 机械工业出 2010年3月 28.00 7111283812 软件工 郑人杰 程概论 版社 试编程求书的平均价格,并输出价格小于30元的书籍的书号、书 名、作者、出版社、出版日期,价格等信息。源程序以ex9_9.c命名,
解: #include <stdio.h> struct worker { char department[20]; int num; char name[20]; float salary; }work[5] = {{"技术科",10002,"张援朝",6800}, {"生产科",20006,"李明瑞", 2600}, {"检验科",30018,"王国庆", 4800}, {"后勤部",40026,"刘小兵",3700}, {"经营科",50068,"吴 伟",1900}}; main() {
本网络 103班 本网络
040006
刘
伟
92
050007 吴 菲 49 106班 试编程求这5位同学该门课程的平均成绩,并输出成绩不及格的同 学的班级、学号、姓名与成绩等信息。源程序以ex9_7.c命名,保存在 自己的文件夹内。
解: #include <stdio.h> struct student { char banji[20]; char num[8]; char name[20]; float score; }stu[5] = {{"本网络102","01002","张小兵",89}, {"本软件103班","02001","李莉嘉", 54}, {"本软件106班","03008","王明星", 68}, {"本网络103班","04006","刘 伟", 92}, {"本网络106班","05007","吴 菲", 49}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += stu[i].score; if(stu[i].score<60) { printf("班级:%s ",stu[i].banji); printf("学号:%d ",stu[i].num); printf("姓名:%s ",stu[i].name); printf("成绩:%.2f\n",stu[i].score);
2、试用结构体定义一个学院教师的信息表,包含如下成员:工 号、姓名、性别、年龄、参加工作日期、联系电话。源程序以ex9_6.c 命名,保存在自己的文件夹内。
解: struct teacher { char number[20]; char name[20]; char sex; int age; char worked_time[80]; char phone[20]; }; 注:本题答案中变量的名称和类型可由学生自行取,只要 遵守标识符的命名规则和数据类型与实际情况相吻合。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);
应知: 1、结构体、共用体、枚举类型的概念及其定义方法; 2、结构体变量、共用体变量、枚举类型变量的定义; 3、动态内存分配的概念及动态内存分配函数。 4、链表的概念。 应会: 1、结构体变量、共用体变量、枚举类型变量的使用; 2、结构体数组及结构体指针的使用; 3、动态内存分配函数的使用; 4、链表的使用。
率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
【实验思考】
1、当定义一个结构体变量时,系统为它分配的内存空间是多少? 答案: 当定义一个结构体变量时,系统为它分配的内存是各成员所占内存 量的总和。 2、结构体与数组的区别是什么? 答案: 数组只能存放同样类型的数据,而结构体则能够存放不同类型的数 据,结构体里面也可以有结构体。 3、用结构体指针作为函数参数与用结构体变量作为函数参数有什 么不同? 答案: 首先,调用函数时,因为函数参数要临时存放到栈中,若结构体变 量作为参数,则需要生成一个结构体的副本,将其存放到栈中;而结构 体指针作为变量,只需将指针存放到栈中即可,提高了程序的空间效
printf("作者:%s ",book[i].author); printf("出版社:%s ",book[i].publisher); printf("出版日期:%s ",book[i].pubdate); printf("价格:%.2f\n",book[i].price); } } average = s/5 ; printf("平均价格:%.2f\n",average); } 【实验小结】
int i; float average, s=0; for(i=0; i<5; i++) { s += work[i].salary; if(work[i].salary<3000) { printf("部门:%s ",work[i].department); printf("工号:%d ", work[i].num); printf("姓名:%s ", work[i].name); printf("月收入:%.2f\n", work[i].salary); } } average = s/5 ; printf("平均月收入:%.2f\n",average); }
解:struct worker {Baidu Nhomakorabeachar number[20]; char name[20]; char sex; int age; char worked_time[80]; char phone[20]; }; 注:本题答案中变量的名称和类型可由学生自行取,只要 遵守标识符的命名规则和数据类型与实际情况相吻合。
3、5位同学《C语言程序设计》课程考核成绩如下表所示: C语言程序设 班级 计课程考核成 学号 姓名 (char 绩 (int num) (char name) banji) (float score) 本网络 010002 张小兵 89 102班 本软件 020001 李莉嘉 54 103班 本软件 030008 王明星 68 106班
实验九 结构体、共用体与枚举类型
实验时间: 年 月 日 一、上机验证与分析题 1、写出程序ex9_1.c运行的结果。 /*文件名ex9_1.c*/ #include <stdio.h> struct HAR { int x,y; struct HAR *p; }h[2]; int main() { h[0].x=1; h[0].y=2; h[1].x=3; h[1].y=4; h[0].p=&h[1]; h[1].p=h; printf("%d %d\n",(h[0].p)->x,(h[1].p)->y); return 0; } 答案:3 2 2、写出程序ex9_2.c运行的结果。 /*文件名ex9_2.c*/ #include "stdio.h" void main() { int z; union data { int x; int y; }a; a.x=3; a.y=6; z=a.x+a.y; printf("z=%d\n",z); } 答案:z=12
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
3、阅读程序ex9_3.c,预测结果并上机验证。 /*文件名ex9_3.c*/ #include <stdio.h> void main() { union data { int i; char ch; float f; }a,b,c; a.i=9; b=a; c=b; printf("b.i=%d,c.i=%d\n",b.i,c.i); } 答案:b.i=9,c.i=9 4、运行下列程序,写出结果 /*文件名ex9_4.c*/ #include <stdio.h> void main() { struct List { int data ; struct List *next; }; struct List a[3]={1,&a[1],2,&a[2],3,&a[0]}, * p; p=&a[1] ; printf("%d\n",--p->data); printf("%d\n",p->next->data); printf("%d\n",p--->data); } 答案:1 3 1 三、编程题: 1、试用结构体定义一个工厂职工的信息表,包含如下成员:工 号、姓名、性别、年龄、参加工作日期、联系电话。源程序以ex9_5.c 命名,保存在自己的文件夹内。