




免费预览已结束,剩余6页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机等级考试专用资料 第7章 结构体与共用体第7章 结构体与共用体结构型、共用型、枚举型结构型共用型结构型变量的定义和引用结构型数组的定义和引用结构型指针变量的定义和引用结构型数据的作用和特点用户自定义类型枚举型变量的定义和引用枚举型共用型数据的作用和特点共用型变量的定义和引用枚举型数据的特点知识网络图 考点分析 7.1 概述数组只能存放一组类型完全相同的数据,无法实现对不同类型的一组数据的存放。因此需要使用结构体。结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。例、一个学生的学号、姓名、性别、年龄、成绩、地址,是互相联系的数据,在C语言中用“结构体(structure)”来定义。struct student intnum; /* 学号 */char name20;/* 姓名 */ char sex; /* 性别 */int age; /* 年龄 */floatscore; /* 成绩 */char addr30;/* 地址 */; struct student a,b;struct 是关键字,不能省略。student是定义的结构体类型名。结构体中的每一项数据,称为结构体“成员”。struct YG int bh;char xm20;float gz,jj,sf;struct YG x,y;7.2 结构体变量的定义结构体是一种数据类型(像int、char、float是数据类型一样),可以用它定义变量。用结构体类型定义变量的方式有两种:一、先定义结构体类型,再定义变量:struct 类型名 变量名;例:struct studentintnum; /* 学号 */char name20;/* 姓名 */char sex; /* 性别 */int age; /* 年龄 */floatscore; /* 成绩 */char addr30;/* 地址 */; struct student student1, student2;结构体变量中的各成员,在内存中顺序存放。结构体变量所占内存大小用运算符sizeof计算(结构体变量长度=所有成员长度之和)。 例:printf( %d %d n,sizeof(struct student), sizeof(student1);结果为:59 59二、在定义类型的同时定义变量(此时可省略类型名)struct studentintnum; /* 学号 */char name20;/* 姓名 */char sex; /* 性别 */int age; /* 年龄 */floatscore; /* 成绩 */char addr30;/* 地址 */student1, student2; struct intnum; /* 学号 */char name20;/* 姓名 */char sex; /* 性别 */int age; /* 年龄 */floatscore; /* 成绩 */char addr30;/* 地址 */student1, student2;三、结构体类型的嵌套定义struct student intnum; /* 学号 */char name20;/* 姓名 */char sex; /* 性别 */int age; /* 年龄 */struct date int year,month,day;birthday; /* 成员是另一个结构体变量 */char addr30;/* 地址 */ student1, student2; 7.3 结构体变量的引用1、结构体变量成员的引用方法结构体变量名.成员名 .是“成员运算符”例1:printf(%d,%s,%c,%d,%f,%s, student1.num, , student1.sex,student1.age, student1.score, sutdent1.addr);printf(%d,%s,%c,%d,%f,%s, student1);是错误的。例2:student2.score = student1.score;sum = student1.score + student2.score;student1.age+;+student1.age;例3:scanf(%d, &student1.num); scanf(%s, ); scanf(%d%s , &student1.num, );2、当结构体类型嵌套定义时,内层成员的引用例4:student1.birthday.month; student1.birthday.day; student1.birthday.year;3、仅在以下两种情况下,可以把结构体变量作为一个整体来访问结构体变量整体赋值例:student2 = student1; student2.num=student1.num; strcpy(, ); student2.sex=student1.sex; student2.age=student1.age; student2.birthday.year=student1.birthday.year;取结构体变量地址: &student17.4 结构体变量的初始化struct student long num; /* 学号 */char name20;/* 姓名 */char sex; /* 性别 */char addr20;/* 地址 */;struct student a=89031,Li Lin,M,123 Beijing Road,b=12121,Li ning,M, 123 xinfu Road; 7.5 结构体数组一、结构体数组的定义struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu3; /*3个元素的结构体数组 */二、结构体数组的初始化struct student int num;char name20;char sex;int age;float score;char addr30;stu3 = 10101,Li Lin, M, 18, 87.5, 103 Bejing Road, 10102,Zhang Fun,M, 19, 99, 130 Shanghai Roaad, 10104,Wang Min, F, 20, 78.5, 1010 Zhongshan Road ;三、举例例对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各候选人得票结果。#define N 10#include stdio.h#include string.hstruct hxrchar name20; int count;a3=Li, 0,zhang,0,wang, 0;main() int i,j; char b20; for(i=1;i=N;i+) scanf(%s, b); if (strcmp(b,)=0) a0.count+;if (strcmp(b,)=0) a1.count+;if (strcmp(b,)=0) a2.count+; printf(n); for(i=0;i引用结构体中的成员:指针变量-成员名p-num (*p).num stu_1.nump-name (*p).name stu_1.namep-sex (*p).sex stu_1.sexp-score (*p).score stu_1.score(*p).num方式几乎不用。注意:( ) . - 的优先级别并列第一 二、指向结构体数组的指针struct student stu3;struct student *p = stu; /* 指向stu0 */stui*(stu+i)pi*(p+i)三、举例例1 有4个学生,每个学生包括学号、姓名和成绩。要求找出成绩最高者的姓名和成绩。方法一:struct student int num;char name20;int score;main() struct student stu4,max;int i;for(i=0; i4; i+)scanf(%d %s %d, &stui.num, , &stui.score); max=stu0;for(i=1; i4; i+)if (max.scorestui.score) max = stui; printf(nmax:n);printf(No.: %dn name: %sn score: %dn,max.num,, max.score);方法二:struct studentint num; char name20; int score;main() struct student stu4,*p; int i; printf(ninput 4 students:); for(i=0; i4; i+) scanf(%d %s %d, &stui.num, , &stui.score);for(p=&stu0, i=1; iscorenum,p-name,p-score); 7.7 共用体一、共用体的概念共用体的定义形式:union 共用体名成员列表; ;a.w0a.w1a.xa.wunion 共用体名 变量列表;union qqlong x;char w2;union qq a;注意区分:“共用体”:各成员占相同的起始地址(有共处存储单元的特点,故称为共用类型),所占内存长度等于最长的成员所占字节数。“结构体”:各成员占不同的地址,所占内存长度等于全部成员所占字节数之和。二、共用体变量成员的引用 变量名.成员名 union datashort x; short y;a; 变量a的成员为: a.x a.y三、共用体类型数据的特点、共用体变量中的值是最后一次存放的成员的值,如:union datashort x; short y;a; a.xa.y0000 01110000 0000a.x=6;a.y=7;完成以上两个赋值语句后,a.x与a.y的值均是7。、共用体变量不能初始化,例、union data int x;char y;a=6,7; 注意:1.共用类型数据长度的求解:长度等于最长的成员所占字节数。2.共用类型数据成员值的求解。例1:写出程序的运行结果:#include stdio.hmain() union datashort x; short y;a;a.x=3;a.y=4;printf(“%d”,a.x+a.y); 结果:8 例2:写出程序的运行结果:#include stdio.hmain()union datashort x; char w2;a;a.x=0x1213;printf(“%d,%d”,a.w0,a.w1);printf(“n%x,%x”,a.w0,a.w1);a.xa.w00x13a.w10x12结果:19,18 13,12例3:写出程序的运行结果:#include stdio.hmain()union datashort x; char w2;a;a.w0=0x03;a.w1=0x01;printf(“%d,%d”,a.x,a.w0);a.xa.w00x03a.w10x01a.x=0x0103 a.w0=0x03结果为:259,3例4:写出程序的运行结果:#include stdio.hmain()union aa double x3;float y2;char w6;struct bblong x,y; union aa z;char w2;a,b2;printf(“%d”,sizeof(a)+sizeof(struct bb)+sizeof(b);结果为:136 34+34+687.8 枚举类型如果一个变量只有几种可能的值,可以定义为枚举类型。“枚举”:将变量可能的值一一列举出来。变量的值只能取列举出来的值之一。用关键字enum定义枚举类型:例:enum weekday sun, mon, tue, wed, thu, fri, sat;weekday是枚举类型名,可以用于定义变量,如、enum weekday work, rest; 定义了两个枚举变量:work与rest, 它们只能取sun到sat之一,如、 work= mon;rest= sun;sun、mon、.、sat称为 “枚举常量”。说明:1、枚举常量在编译器中,按定义的顺序取值0、1、2、.。例:work= mon;printf(%d,work); 输出整数1。2、枚举常量不能被赋值。sun = 0; mon = 1; 但在定义枚举类型时,可以指定枚举常量的值,如:enum weekday sun=6, mon=0, tue, wed, thu, fri, sat;此时,未指定值的枚举常量比前一枚举常量大1。如,tue的值为1。enum ww three=3,two,one=1; two为43、枚举值可以作判断,例:if (work = = mon).if (work sun).4、整型与枚举类型是不同的数据类型,不能直接赋值(在turbo C中例外),如、work = 2; /* work是枚举类型, 在turbo C中正确*/但可以通过强制类型转换赋值,如、work = (enum weekday)2; work=wed;5枚举常量必须是满足用户标识符的命名规则,不能是已存在的常量。如:enu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东惠州市龙门县乡村公益性岗位招聘26人模拟试卷附答案详解(典型题)
- 2025安徽中医药大学专职辅导员招聘10人模拟试卷及答案详解一套
- 2025年湖南高速土地资源经营有限公司第二批任务型劳动合同人员招聘考前自测高频考点模拟试题及答案详解(典优)
- 2025广西南宁市司法局招聘工作人员3人考前自测高频考点模拟试题有完整答案详解
- 2025年西北(西安)电能成套设备有限公司招聘(4人)考前自测高频考点模拟试题及一套参考答案详解
- 2025北京市朝阳区教育委员会所属事业单位招聘毕业生394人模拟试卷及答案详解(新)
- 2025河北中核二四劳务有限公司招聘200人考前自测高频考点模拟试题及1套完整答案详解
- 2025辽宁盘锦建设投资有限责任公司招聘工作人员和考前自测高频考点模拟试题完整参考答案详解
- 2025年三门峡黄河明珠(集团)有限公司公开招聘高校毕业生8人模拟试卷附答案详解(突破训练)
- 2025年杭州淳安县第二人民医院公开招聘合同制工作人员2人模拟试卷及答案详解(历年真题)
- 1 《中国人民站起来了》课件高二上学期语文大单元教学同步备课课件(统编版选择性必修上册)
- 2024-2030年中国橡塑密封件行业发展分析及发展趋势预测与投资风险研究报告
- 闽2023-G-01先张法预应力高强混凝土管桩DBJT13-95
- 安全事故应急处置流程
- 玻璃纤维模压成型工艺
- 新生儿呕吐护理查房课件
- 高级茶艺师理论知识试题
- 【高中地理】中国的耕地资源与粮食安全+课件+地理人教版(2019)选择性必修3
- APD自动化腹膜透析机的使用
- 食品的生物保藏技术
- 中海油劳动合同范本
评论
0/150
提交评论