ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:53.48KB ,
资源ID:28434394      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28434394.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第7章 结构体与共用体.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第7章 结构体与共用体.docx

1、第7章 结构体与共用体第7章 结构体与共用体知识网络图 考点分析 7.1 概述数组只能存放一组类型完全相同的数据,无法实现对不同类型的一组数据的存放。因此需要使用结构体。结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。例、一个学生的学号、姓名、性别、年龄、成绩、地址,是互相联系的数据,在C语言中用“结构体(structure)”来定义。struct student intnum; /* 学号 */char name20;/* 姓名 */ char sex; /* 性别 */int age; /* 年龄 */floatscore; /* 成绩 */char addr

2、30;/* 地址 */; 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;/* 姓名 *

3、/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; /* 学号 */cha

4、r 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 nam

5、e20;/* 姓名 */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.name, student1.sex,student1.age, student1.score, sutdent

6、1.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, student1.name); scanf(%d%s , &student1.num, student1.name);2、当结构体类型嵌套定义时,内层成员的引用例4:student1.birthday.month; stu

7、dent1.birthday.day; student1.birthday.year;3、仅在以下两种情况下,可以把结构体变量作为一个整体来访问结构体变量整体赋值例:student2 = student1; student2.num=student1.num; strcpy(student2.name, student1.name); student2.sex=student1.sex; student2.age=student1.age; student2.birthday.year=student1.birthday.year;取结构体变量地址: &student17.4 结构体变量的初始

8、化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个元素的

9、结构体数组 */二、结构体数组的初始化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 ;三、举例例对候选人得票的统计程序。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各候选人得票结果。#

10、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,a0.name)=0) a0.count+;if (strcmp(b,a1.name)=0) a1.count+;if (strcmp(b,a2.name)=0) a2.count+; printf(n); for(i=0;i引用结构体中的成员:指针变量-成

11、员名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 n

12、um;char name20;int score;main() struct student stu4,max;int i;for(i=0; i4; i+)scanf(%d %s %d, &stui.num, stui.name, &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.name, max.score);方法二:struct studentint num;

13、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.name, &stui.score);for(p=&stu0, i=1; iscorenum,p-name,p-score); 7.7 共用体一、共用体的概念共用体的定义形式:union 共用体名成员列表; ;a.w0a.w1union 共用体名 变量列表;union qqlong x;char w2;union qq a

14、;注意区分:“共用体”:各成员占相同的起始地址(有共处存储单元的特点,故称为共用类型),所占内存长度等于最长的成员所占字节数。“结构体”:各成员占不同的地址,所占内存长度等于全部成员所占字节数之和。二、共用体变量成员的引用 变量名.成员名 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。、共用体变量不

15、能初始化,例、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%

16、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; uni

17、on 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到s

18、at之一,如、 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

19、 (work = = mon).if (work sun).4、整型与枚举类型是不同的数据类型,不能直接赋值(在turbo C中例外),如、work = 2; /* work是枚举类型, 在turbo C中正确*/但可以通过强制类型转换赋值,如、work = (enum weekday)2; work=wed;5枚举常量必须是满足用户标识符的命名规则,不能是已存在的常量。如:enum ww 1,2,3,4;enum ww “aa”,“bb”,“cc”; enum ww a,b,c;例:#include stdio.hmain()int a5=100,200,300,400,500,s=0;en

20、um color red, yellow, blue, white, blacki;for(i=red; i=black; i+) s=s+ai;printf(“n%d”,s);结果为:15007.9 用typedef定义类型用户自定义类型是为了将已经存在的类型重新取一个新的名字,以便于书写。(1)对基本类型的自定义typedef unsigned long AA;AA x,y,a10,*p; 等价于unsigned long x,y,a10,*p;(2)对指针类型的自定义 typedef int *W; W p,q; 等价于 int *p,*q;(3)对结构类型的自定义typedef struct stuSTU; STU x,a4; 等价于 struct stu x,a4;typedef struct int month;int day;int year;DATE ;DATE birthday,*p,d7; 等价于structint month;int day;int year; birthday,*p,d7;(4)对数组类型的自定义 typedefdouble BB10;BB x,y; 等价于 double x10,y10;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1