C语言程序设计7章 结构体_第1页
C语言程序设计7章 结构体_第2页
C语言程序设计7章 结构体_第3页
C语言程序设计7章 结构体_第4页
C语言程序设计7章 结构体_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、c c语言程序设计语言程序设计 第第7 7章章 结构体与共用体结构体与共用体 c programming结构体结构体 结构与函数结构与函数 共用体共用体 本章主要内容提示本章主要内容提示典型程序分析与设计典型程序分析与设计 c programming 本章学习目标本章学习目标知识目标知识目标 理解结构体的含义理解结构体的含义 理解指针变量的定义、引理解指针变量的定义、引用及运算用及运算 掌握结构体数组的应用掌握结构体数组的应用 掌握动态分配函数掌握动态分配函数 掌握链表的相关操作掌握链表的相关操作 能力目标能力目标 能利用结构体实现构造类能利用结构体实现构造类型数据的操作型数据的操作 能利用结

2、构体和指针的相能利用结构体和指针的相关知识实现链式存储结构关知识实现链式存储结构的应用的应用【学习提示】在数组一章中介绍了关于同类型数据的处理方法,比如,多个【学习提示】在数组一章中介绍了关于同类型数据的处理方法,比如,多个数据的排序等操作,但是对于不同数据类型该如何处理?例如,一个班级有数据的排序等操作,但是对于不同数据类型该如何处理?例如,一个班级有4040名同学,每个同学有如下属性:姓名,学号,英语成绩,数据库成绩,名同学,每个同学有如下属性:姓名,学号,英语成绩,数据库成绩,c c语语言成绩,姓名、性别以及各科成绩,这些属性的数据类型不同,使用二维数言成绩,姓名、性别以及各科成绩,这些

3、属性的数据类型不同,使用二维数组难以完成,我们就要应用到一种新的构造类型组难以完成,我们就要应用到一种新的构造类型-结构体类型。结构体类型。 c programming7.1 结构体【7-17-1】输入学生的学号、姓名及三门课成绩,并输出。#include main()struct student char num9; char *name; float math; float english; float chinese;s; /*结构体变量s*/scanf(%s%s%f%f%f,s.num,,&s.math,&s.english,&s.chinese);

4、/*输入数据*/printf(numtnametmathtenglishtchinesen);printf(%st%st%.1ft%.1ft%.1fn,s.num,,s.math,s.english,s.chinese); /*输出数据*/c programming上例输出结果为:输入:101 lilin 90 89 85则输出:num name math english chinese 101 lilin 90.0 89.0 85.0【说明】(1)定义结构体类型的关键字是struct(2)student是结构体类型名(3)s是结构体变量名(4)student结构体类型共有5个成员

5、(5)在使用结构体变量是要引用成员(6)通过引用s变量,我们既可以使用字符串,也可以使用实型数据。 c programming二。结构体变量的定义与初始化 一结构体类型的定义1.定义一个结构的一般形式为:struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .;成员名的命名应符合标识符的书写规定。例如:例 struct student int num; char name20; float score; char addr30; ; c programming2结构体类型的嵌套定义例 struct data int year; int month; int day; ; 例 st

6、ruct student int num; char name20; struct data birthday; /*结构体类型变量作为成员*/ stu1;c programming3.结构类型变量的定义说明结构变量有以下三种方法。以上面定义的student为例来加以说明。先定义结构,再说明结构变量。如:struct student int num; char name20; float score; char addr30; ; struct student stu1,stu2;在定义结构类型的同时说明变量。例如:struct student int num; char name20; fl

7、oat score; char addr30; stu1,stu2;直接说明结构变量。例如:struct int num; char name20; float score; char addr30; stu1,stu2;c programming二.结构体变量初始化。main() struct student /*定义结构*/ int num; char name20; char sex; int age; float score; char addr30; stu1,stu2=102,zhang ping,m,78.5; stu1=stu2;printf(number=%dnname=%s

8、n,boy2.num,);printf(sex=%cnscore=%fn,boy2.sex,boy2.score);c programming【注意】(1)结构体类型:不分配内存; 结构体变量:分配内存(2)结构体类型:不能赋值、存取、运算; 结构体变量:可以(3)结构体可嵌套(4)结构体成员名与程序中变量名可相同,不会混淆c programming例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr2字节2字节2

9、0字节1字节4字节30字节.结构体类型定义描述结构的组织形式,不分配内存结构体类型定义的作用域c programming三.结构体变量的使用1表示结构变量成员的一般形式是:结构变量名.成员名例如:stu1.num 即stu1的学号 即stu2的姓名如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:stu1.birthday.month2结构变量的赋值结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。c programming【例7-2】给结构变量赋值并输出其值。#include #include main()struct stuint num;ch

10、ar name20;float score; s1,s2;s1.num=12;strcpy(,wangfang);s1.score=90.0;/*为各成员赋值*/s2=s1; /*将s1的值赋给s2*/printf(number=%dtname=%stscore=%.1fn,s2.num,,s2.score);c programming四.结构体数组 数组的元素也可以是结构类型的。因此可以构成结构型数组。结构数组的每一个元素都是具有相同结构类型的结构变量。结构体数组的定义三种形式:形式一: 先定义结构体类型再定义结构体数组形式二: 定义结构体类型同时定义结构体数组形

11、式三: 直接定义结构体数组c programming例 struct int num; char name20; char sex; int age; stu =10101,”li lin”, m,18, 10101,”li lin”, m,18, 10101,”li lin”, m,18;结构体数组初始化c programmingstruct stuint num;char *name;char sex;float score;boy5=101,zhou ping,m,45,102,zhang ping,m,62.5,103,liou fang,f,92.5,104,cheng ling,f

12、,87,105,wang ming,m,58,;main()struct stu *ps;printf(notnametttsextscoretn);for(ps=boy;psnum,ps-name,ps-sex,ps-score); 例 输出数组内容c programming7.2 结构体与函数一.结构体数组作为函数参数【例7-5】编写input()和output()函数输入,输出5个学生的数据记录。#define n 5struct student char num6;char name8;int score4; stun; /*定义结构体数组,长度为5*/input(struct stu

13、dent stu) /*输入学生记录*/ int i,j;for(i=0;in;i+) 输入过程略;print(struct student stu) int i,j; printf(nno. name score1 score2 score3n); for(i=0;i成员名结构体变量名.成员名指向运算符优先级: 1结合方向:从左向右例 int n; int *p=&n; *p=10; n=10struct student stu1;struct student *p=&stu1;stu1.num=101; (*p).num=101二.结构体指针c programmingstr

14、uct stuint num;char *name;char sex;float score;boy5=101,li ping,m,45,102,zhang ping,m,62.5,103,he fang,f,92.5,104,cheng ling,f,87,105,wang ming,m,58,;main()struct stu *ps;void ave(struct stu *ps);ps=boy;ave(ps);void ave(struct stu *ps)int c=0,i;float ave,s=0;for(i=0;iscore;if(ps-scoredata); p=p-next

15、;c programming三、处理链表所需函数1、malloc()2、calloc()3、free()c programming 1、malloc()功能:申请一个结点空间形式:void *malloc(unsigned int size);例如:p=(struct node*)malloc(sizeof(struct node);c programming#include #include #define null 0struct nodeint data; struct node *next;main()struct node a,b,c,*head,*p;p=(struct node*

16、)malloc(sizeof(struct node);scanf(%d,&p-data);a=*p;p=(struct node*)malloc(sizeof(struct node);scanf(%d,&p-data);b=*p;p=(struct node*)malloc(sizeof(struct node);scanf(%d,&p-data);c=*p;head=&a;a.next=&b;b.next=&c;c.next=null;p=head;while(p!=null)printf(%dt,p-data); p=p-next;c p

17、rogramming2、calloc()功能:申请n个结点空间形式:void *calloc(unsigned n,unsigned size);举例:p=(struct node*)calloc(3,sizeof(struct node);c programming#include #include #define null 0struct nodeint data; struct node *next;void main()struct node a,b,c,*head,*p;p=(struct node*)calloc(3,sizeof(struct node);scanf(%d,&am

18、p;p-data);a=*p;p+;scanf(%d,&p-data);b=*p;p+;scanf(%d,&p-data);c=*p;head=&a;a.next=&b;b.next=&c;c.next=null;p=head;while(p!=null)printf(%dt,p-data); p=p-next;c programming3、free()功能:释放空间形式:void free(void *p)例如:free(p)c programming共用体类型定义定义形式:union 共用体名 类型标识符 成员名; 类型标识符 成员名; .;例 union data int i; char ch; float f; ;fchi*类型定义不分配内存7.3共用体共用体c progr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论