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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算机二级C语言结构体要点.docx

1、计算机二级C语言结构体要点结构体与共用体要点一、概述结构体(structure)是一种数据类型,它把互相联系的数据组合成一个整体。把不同类型的数据组合成一个有机的整体,可以用结构体解决。结构体中的每一项数据,称为结构体“成员”(member)或“分量”。声明结构体类型的一般形式:struct 结构体名 成员表列;声明各成员的形式:类型名 成员名;例如:学生数据struct studentint num; char name20; char sex; int age; float score; char addr30; 注意不要忽略最后的分号student结构体类型占59个字节。二、定义结构体类

2、型变量的方法1先声明结构体类型再定义变量名 struct student student1, student2;要求指定为某一特定的结构体类型2在声明类型的同时定义变量struct 结构体名成员表列变量名表列;例如:struct studentint num; char name20; char sex; int age; float score; char addr30; student1, student2;3直接定义结构体类型变量struct 成员表列变量名表列;几点说明:(1)类型与变量是不同的概念;(2)结构体中的成员可单独使用,其作用与地位相当于普通变量;(3)成员也可以是一个结构

3、体变量;(4)成员名与普通变量名相同,不代表同一对象。三、结构体变量的引用(1)不能将结构体变量整体进行输入和输出,只能对各个成员分别进行输入和输出。printf(%d,%s,%c,%d,%f,%sn,student1);错误(2)引用成员的方式:结构体变量名.成员名当成员是另一个结构体变量时,应一级一级地引用成员。仅在以下两种情况下,可以把结构体变量作为一个整体来访问。(1) 结构体变量整体赋值例、student2 = student1;(2)取结构体变量地址例、printf(%x, &student1); /*输出student1的地址 */四、结构体变量的初始化struct studen

4、tlong int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ char addr20; /* 地址 */ a = 89031, Li Lin, M, 123 Beijing Road; 注意:不能在结构体内赋初值。例、下面程序错误struct student long int num = 89031; char name20 = Li Lin; char sex = M; char addr30 = 123 Bejing Road; a;五、结构体数组每个数组元素都是一个结构体类型数据1定义结构体数组和定义结构体变量的方法相仿

5、(三种方法)2结构体数组的初始化在定义数组的后面加上:=初始表列;struct student int num; char name20; char sex; int age; float score; char addr30; 10102,Zhang Fun,M, 19, 99, 130 Shanghai Roaad, ;六、指向结构体类型数据的指针结构体变量的指针:就是该变量所占据的内存段的起始地址。1指向结构体变量的指针(*p).num表示:p指向的结构体变量中的成员num成员运算符“.”优先于“*”运算符三种表示形式:(1)构体变量名. 成员名(2)(*p).成员名 该方式用得很少(3

6、)p-成员名2指向结构体数组的指针注意:(1)p=stu;,则p+指向stu1(2)运算符“-”优先于“+”运算符+p-num:使p所指向的num成员值加1(+p)-num:先使p+1,然后得到它指向的元素中的num成员值例:有4个学生,每个学生包括学号、姓名和成绩。要求找出成绩最高者的姓名和成绩。void main() struct student int num; /* 学号 */char name20; /* 姓名*/float score; /* 成绩 */;struct student stu4; /* 4个学生 */struct student *p;int i;int temp

7、= 0; /*成绩最高学生在数组中的序号,03 */ float max; /* 最高成绩 */for(i=0; i4; i+) /* 输入4个学生的学号、姓名、成绩 */scanf(%d %s %f, &stui.num, stui.name, &stui.score); for(max=stu0.score, i=1; i max)max = stui.score;temp = i; p = stu + temp; /* p指向成绩最高的学生结构 */3、结构体变量、指向结构体的指针均可作为函数参数例:有一个结构体变量stu,内含学生学号、姓名和三门课程的成绩。要求在main中赋以值,在函

8、数print中打印输出。#define format %dn %sn %fn %fn %fnstruct student int num; /*学号 */char name20; /* 姓名*/float score3; /* 三门课程的成绩 */; void print(struct student *p); /*print函数原型声明 */void main()struct student stu;print(&stu); /*如果stu是结构体数组,则不要&符号*/ void print(struct student *p) /*print函数定义 */printf(format, p-

9、num, p-name, p-score0, p-score1, p-score2); printf(n); (1)结构体的成员作函数的参数。与普通变量作函数参数的用法相同。值传送,不能修改实参的值。(2)结构体指针作函数的参数。将结构体的地址传送给函数,效率高,可以修改实参的值。(3)结构体作函数的参数。将结构体的全部成员值传送给函数,效率低,不能修改实参的值。例:struct STUchar name10; int num;void f(char *name,int num)struct STU s2=SunDan,2004,Penghua,20045; num=s0.num; strcp

10、y(name,s0.name);main()struct STU s2=YangSan,20041,LiSiGuo,20042,*p; p=&s1; f(p-name,p-num);前一个参数的地址,后一个是数值 printf(%s %dn,p-name,p-num); getch();运行结果:SunDan 20042前一个随子函数变化,后一个不变仍是主函数中的值。七、用指针处理链表(一定要学会画图)1链表概述链表:动态地进行存储分配的一种结构,它动态地进行存储分配。数组:存放不同班级的学生数据,数组定得足够大,浪费内存。数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。

11、当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)。链表有单向链表、双向链表、环形链表等形式。结点:链表中的每一个元素,包括两部分用户需要的实际数据下一个结点的地址 head AB C D NULL head指向第一个元素,第一个元素又指向第二个元素,直到最后一个元素,该元素不再指向其它元素。表尾:地址部分放一个“NULL”(表示空地址)结点应为结构体类型,一个结点中应包含一个指针变量,用它存放下一个结点的地址。例:struct student

12、int num; float score; struct student next;/*next指向struct student类型数据*/;student链表2简单链表所有结点都是在程序中定义的,不是临时开辟的,是“静态链表”3处理动态链表所需的函数(1)malloc(size)作用:在内存的动态存储区中。函数返回值:该分配域的起始地址。不成功,则返回NULL。(2)calloc(n,size)分配n个长度为size的连续空间(3)free(p)释放由p指向的内存区。函数无返回值。4建立动态链表 即从无到有,一个一个地开辟结点和输入各结点数据,并建立起前后相链的关系。例、写一函数建立一个有3

13、名学生数据的单向动态链表过程:开辟单元输入数据加入链表head:头指针p1、p2:工作指针,p2跟着p1向后走sizeof:求字节运算符(struct student *):返回的指针转换为指向struct student类型数据的指针。5输出链表一般从链表首部依次输出。6对链表的删除操作删去结点,即是把它从链表中分离出来即可。(1)删除头结点(2)删除中后结点7对链表的插入操作 将一个结点按指定次序,插入到一个已有的链表中(1)头部(2)中部(3)后部例:(1)下列程序用来从键盘上读入一行字符,并按输入顺序建立一个“反式”链表。即读入的第1个字符存入尾结点,读入的第2个字符存入倒数第2个结点

14、,依此类推,读入的最后一个字符存入头结点。读入完成后,按链表输出这一行字符,最后释放全部结点空间。 例如:读入abcd,建立的链表如下图 headd c b a 0 最后输出的一行字符为 dcba #define NULL 0 #define LEN sizeof(struct node) struct node char info; struct node *next; main() struct node *head,*p; char c; head= NULL ; while(c=getchar()!=n) p=( struct node *)malloc(LEN); p-info=c;

15、 p-next=head; head= p ; while(head!=NULL) p= head ; head= head-next或p-next ; putchar(p-info); free(p);/*释放一个结点*/ (2)建立一条链,链中的数据按从小到大的顺序排列.struct node int data; struct node *next; ;struct node *addx(struct node *head,int x)struct node *p,*p1,*p2; p=(struct node *)malloc(sizeof(struct node); p-data=x;

16、 if ( head=NULL ) head=p;p-next=NULL;return(head); if (head-data=p-data) ( p-next=head );head=p;return (head); p1=head; p2=p1-next; if (p2=NULL) p1-next=p;p-next=NULL;return (head); while (p2-next!=NULL&( p2-datadata ) p1=( p2 ); p2=p2-next; if (p2-datadata) p2-next=p;p-next=NULL; else ( p-next=p2 )

17、;p1-next=p; return(head); main()struct node *head; int i,x; head=NULL; for (i=0;idata); head=head-next; 八、共用体1共用体的概念几种不同类型的变量共占同一段内存单元(同一地址开始)。共用体变量定义的一般形式:struct 共用体名成员表列变量表列;与结构体一样可以有三种定义形式。例如:union dataint i; char ch; float f; a,b,c; 注意:共用体变量所占的内存长度等于最长的成员的长度。2共用体变量的引用方式 不能引用共用体变量,而只能引用共用体变量中的成员3

18、共用体类型数据的特点 每一瞬间只能存放其中一种成员,起作用的是最后一次存放的成员。例题:main()union int count2; char ch4; un; int i; char letter=6; for(i=0;i2;i+) printf(%d:%x, i;结果:0:706,1:908九、枚举类型枚举类型enmu:将变量的值一一列举出来,变量的值只限于列举出来的值的范围。如声明枚举类型:enum weekdaysun,mon,tue,wed,thu,fri,sat;括号中的称为枚举元素或枚举常量用它来定义变量:enum weekday workday,week_end;(类似的三种方法定义枚举变量)说明:(1)枚举元素是常量,不能被赋值(2)枚举元素是有值的0,1,2,定义时也可以改变枚举元素的值 enum weekdaysun=7,mon=1,tue,wed,thu,fri,sat workday,week_end;(3)枚举值可以用来做判断比较(4)一个数值不能直接赋给一个枚举变量

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

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