《《结构体与共同体》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《结构体与共同体》PPT课件.ppt(44页珍藏版)》请在装配图网上搜索。

1、第9章 结构体与共同体,9.1 结构体 9.2 结构体数组 9.4 共用体,9.1 结构体,确定该类型数据的表示形式、取值范围、存储结构及其允许参加的运算。 在程序中每个变量在使用前要确定其类型,在前面所定义的类型都是标准类型。 在前面介绍的内容均为系统定义类型,用户只要按要求用这些类型说明变量即可。,类型的作用,例如: int x; float y; char a30;,这些基本类型只能解决简单的问题,而实际应用中的类型是千变万化的。,简单类型(整、实、字)的变量是独立的,变量之间无内在的联系;数组类型虽能同时存放多个数据,但必须是同类型的。 C允许用户按需求自己定义类型。,例如:在计算机等。

2、级考试管理系统中,若每个考生 都有如下信息 :,考号 : 长整型 姓名 :字符串 性别 :字符 年龄 :无符号整型 报考等级:字符串 成绩 :实型,数据分属不同的类型,显然不能采用前面已介绍过的类型来处理。 C语言提供了解决这类问题的类型结构体类型。,struct student1 int num; char name20; char class10; char sex; float score; ,struct student2 int num; char name20; char class10; date birth; ,struct date short year; short mon。

3、th ; short day; ,结构类型的定义,struct student1 stu1, stu2,方法1:,方法2:,struct student2 int num; char name20; char class10; date birth; stu1,stu2,在VC中若文件名*.cpp,用结构类型说明变量时可省略struct。,结构类型变量的定义,1. 由于结构类型是一个复合类型,其由多个成员组成,因此不能访问结构体变量(同数组),只能按如下方法访问变量的成员。 变量名 . 成员名 变量名 . 一级成员 . 二级成员 (嵌套时),结构类型变量的访问,struct student1 。

4、stu1= 2001802,李, 计011,女,85.2 ; struct student2 stu2= 2001802,李, 计011,女, 12, 3, 1986, 85.2 ;,scanf(%d, stu1.num ); gets( stu2.name ); stu1.sex=getchar( ); stu1.birth.day=12; printf(“%d”, stu1.birth.day ); puts( stu2.name ),2.对成员,可根据其类型进行相应的运算。,3.由于结构型变量的成员多,C允许两个同 类型的结构变量可互相整体赋值。,例如: struct s int no;。

5、 float score; stu1,stu2= 200123, 76.5 ; stu1=stu2;,4. 结构体变量中的各成员在内存中占一片连续的单元,其长度为: 各成员所占单元之和,5. 不能在定义类型时给成员赋值。,struct stu long num=97031; char name20 =li ming; char sex=m; student;,错,不能对类型赋值!,可用结构类型定义指针。即存放结构对象的首地址。,例如: struct student int num; char name20; char sex; float score; ;,struct student x,*。

6、p; p=,由于结构类型变量占用连续单元,故p存放num成员的首地址,指向结构体的指针,结构型变量 . 成员名 结构型指针成员名,访问成员时,有两种表示:,见P.198 例9.3,结构体变量作为函数参数,因为结构体变量中的每个成员都被分配了存储单元, 故当参数是结构体变量时, 采用值传递方式, 将实参的每个成员对应传递给形参成员。 见P.200 例9.4,9.5,9.2 结构体数组,单个结构型变量没有实际的意义,可用简单变量来完成工作。仅当结构体与数组相结合时,才能解决复杂问题,弥补数组的缺点。,用结构类型定义数组。即每个数组元素是结构类型。 见P.202-203,结构体数组的定义,stu1=。

7、97001; 错误 stu1.num=97001; 正确,1. 可引用数组元素的成员,不能引用数组元素。因为每 个数组元素是结构类型。,2. 同一结构体类型变量及数组元素之间可整体赋值。,struct student s1,s10; s1=s2; s1=s0; 正确,结构体数组的访问,struct student int num; char name20; char class10; char sex; float score4; void main() struct student stu3; int j ;,例如:输入/出3个学生的信息,每个学生的信息如下:学号,姓名,班级,性别,4门成绩。

8、。,for( j=0; j3; j+) scanf(“%d”, ,输出同上。,例程9-1:,某单位有3人参加04年计算机等级考试。现需将每名考生的准考证号、姓名、性别、报考级别和成绩录入计算机,并统计平均分和及格率。,例程9-02: 利用指针访问结构型数组。,9.3 链 表,一、链表的概述:,将数组与结构配合起来使用,可以解决复杂的数据结构,但数组仍需静态定义。,虽然可利用malloc函数动态分配存储单元,但这些动态分配的单元地址不连续,或只能按数组的形式分配单元,仍然不是完全动态分配。,C程序提供了链表类型来解决上述矛盾。,1、什么是链表?,一种动态分配的数据结构。即用指针变量和结构变量将非。

9、连续的数据块连成一个整体的一种数据结构。,例如:,A,B,C,上述三个变量间没有任何联系,若希望象数组那样,借助于一个变量的首地址,就能访问到其他变量。,将B的地址存放到A中,将C的地址存放到B中,将A的地址保存,这样就可以通过A变量找到其他变量。,只能按如下方法处理:,即每个变量必须是结构类型,至少有两个成员:一个用来存放本变量的数据,另一个存放某变量的地址。这样只要知道第一个结构变量的地址,就能通过该变量的地址成员中的地址找到某变量。,链表:将若干数据项按一定的原则连接起来的表,表中由若干元素组成,每个元素称为接点。, pnew=p=(struct stu *)malloc(LEN); 并。

10、给首结点各域赋值。,3)在循环中: 1) 利用malloc函数,产生动态单元(pnew )。 2)给动态单元pnew赋值。 3)将动态单元pnew挂到链表的尾部。,#define LEN sizeof( STU ) struct STU long num; float score; STU next; ;,同时定义三个指向这种类型的指针变量head, pnew, p.,例程: 写一个函数,建立5名学生数据的单向链表,每一个学生的数据块(结点)定义如下:,STU creat( ) / 赋初值 STU head, p, pnew ,int n=0; head=NULL; pnew=p=( STU 。

11、) malloc( LEN ); scanf( %d %f , ,建立链表,pnew=(STU ) malloc(LEN); scanf(%ld, %f, ,pnext=NULL; / 给尾指针赋空 return(head); ,while ( pnewnum != 0 ) n+ +; if( n= =1) head=pnew ; / 将结点挂到表尾 else pnext =pnew;,p=pnew; / 使hear指向当前表尾,void print ( STU head ) STU p; p=head; if (p = = NULL) printf(“Null List!”); do pri。

12、ntf(%ld %5.1f n, pnum, pscore); p=pnext ; while (p!=NULL); ,输出链表,例如:,2、链表的删除和插入,链表的删除 :,删除结点操作: 若用2个指针操作 p.next=p1.next 若用1个指针操作 p.next=p.next.next,一般给出某一条件,当某一条件成立时,则删除该结点:,STU del ( STU head, long num ) STU p1, p ; if ( head= =NULL ) printf( n list null!=n“ ); return (head); ,1)表为空时,无任何删除 2)当第一个结点。

13、被删除时,修改表头 3)当最后一个结点不满足条件时,返回。,p1=head; while ( num != p1num 寻找删除点,if ( num= =p1num ) if (p1= =head) head=p1next; else pnext=p1next; printf (delete: %ld n, num); n ; else printf (%ld not been found!n, num);,一般链表中结点的关键数据按顺序输入,待插入结点的关键数据与链表中的关键数据一一比较,插入适当的位置。,链表的插入,head,例如:,插入操作: new.next=p.next; p.nex。

14、t=new;,步骤: 1)定义3个指针new(指向待插入结点),p1(当前待操作结点),p(p1之前的结点),并赋初值。,2)若链表为空,则插入到表头,作为第一个结点。,3)若链表不为空,寻找插入点。 a. 若插入到第一个结点之前,则改变头指针的值。 b. 若插入在表中或表尾,则执行相应的插入操作。,算法:,STU insert( STU *head, STU *new ) 待插入的结点可在函 STU *p1, *p; 数中输入 p1=head; if( head=NULL) 若为空表,将结点挂 head=new; newnext=NULL; 在头结点 else while( newnum p。

15、1num ) 寻找插入点,if( newnum =p1num ) if (head = p1) head=new; 插入在表头 else pnext=new; 插入在表中 newnext=p1; else p1next=new ; newnext=NULL; 插入在表尾 n+; return( head ); 9-4.c 9-5.c,9.4 共有体,二、共用体数据类型的特点,几个不同类型的数据共用同一个存储单元。共用体变量所占内存长度=最长成员的长度,各成员轮流使用一个单元,所以共同体变量及其各成员地址相同。每一瞬间只能存放一个成员,共用体中起作用的是最后一次存入的成员。,一、共用体类型定义,。

16、把结构体类型中的关键字struct换成union即可。,例如: struct memb, float v;,int n;,char c;, stag;,stag占内存7个字节的空间,union memb, float v;,int n;,char c;, ustag;,utag分配 4字节, 共用体类型变量每次只能存放一个成员的值。,三、共用体类型变量的引用,(共用体类型变量名). 成员名,1、共用体类型变量的访问同结构体类型变量。 2、不能对共同体变量初始化。 union int i; char ch; x=6, A 错误,例程 #include,union memb, float v;,int n;,char c;,main( ), union memb utag;,utag.v=36.7,utag.c=T ,utag.n=18,printf(%5.1fn%dn%cn, utag.v, utag.n, utag.c);,例程9-3: 某单位有3名职工参加计算机办公应用技能考试。设每个人的数据包括考号、姓名、年龄、和成绩。单位规定年龄为25岁以下的职工进行笔试,成绩为百分制,60分以上为及格。而25岁以上的职工进行操作考试,考试成绩为A、B、C 、D,C级以上为及格。请统计考试及格的人数,并输出每位考生考试的成绩。

c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt相关推荐

  1. c语言 结构体 ppt,C语言结构体ppt课件

    <C语言结构体ppt课件>由会员分享,可在线阅读,更多相关<C语言结构体ppt课件(25页珍藏版)>请在人人文库网上搜索. 1.01,02,03,9.1 结构体,9.2 共用体 ...

  2. C语言基础12——自定义类型。结构体、位段、枚举、联合体。通讯录

    目录 结构体 结构体的声明 结构体自引用 结构体变量的定义.初始化以及访问 结构体内存对齐 结构体传参 位段 枚举 枚举是什么? 枚举的声明 枚举的优点 枚举类型的大小 联合体 联合体类型的定义 联合 ...

  3. 简单介绍C语言使用四种方法初始化结构体

    这篇文章说明了什么是结构体,介绍了结构体的概念和使用优点,在C语言中如何使用和初始化结构体方法,通过详细的代码展开进行说明,希望该篇文章对你有所帮助 什么是结构体 在实际问题中,一组数据往往有很多种不 ...

  4. c语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数,C语言学习笔记结构体02结构体指针变量与结构体变量的函数参数.docx...

    C 语言学习笔记[结构体02]结构体指针变量与结构体变量 的函数参数 C 语言学习笔记之结构体指针变量一提指针,那可 是 C 语言的核心了,有多少学子曾拜倒在指针的脚下.单纯的说指针,其实并不难,但是 ...

  5. c语言函数的参数是结构变量,何去运用结构体变量和结构的变量的指针作为函数的参数...

    在C语言中我们如何去运用结构体变量和结构的变量的指针作为函数的参数呢,其实我们对于结构体的变量是有一定的了解的,他们就是将一个结构体变量的值传递给另外一个函数,那么这种有三种方法,希望大家都能够了解一 ...

  6. c语言如何宏定义枚举型结构体,C语言学习笔记--枚举结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  7. c语言用分支结构判断最大字符,第3章C语言 分支结构PPT课件.ppt

    <第3章C语言 分支结构PPT课件.ppt>由会员分享,可在线阅读,更多相关<第3章C语言 分支结构PPT课件.ppt(36页珍藏版)>请在人人文库网上搜索. 1.第三章 分支 ...

  8. C语言结构体详解(结构体定义,使用,结构体大小等)

    c语言结构体详解 1.c语言结构体 1.1 结构体基础知识 1.2 结构体声明 1.3 结构体特殊声明 1.4 结构体的自引用 1.5 结构体的大小的计算 1.5.1了解结构体大小计算规则 1.5.2 ...

  9. python 结构体指针_C语言结构体指针(指向结构体的指针)详解

    当一个指针变量指向结构体时,我们就称它为C语言结构体指针的定义形式一般为: struct 结构体名 *变量名; 下面是一个定义结构体指针的实例: //结构体 struct stu{ char *nam ...

最新文章

  1. There is no tracking information for the current branch
  2. php网址变量怎么输出,【PHP网站】如何使用dedecms v5.7前台模版里输出变量
  3. Java main()方法
  4. Linux服务器安全配置实例(二)用户账户权限配置
  5. mysql 5.6.41-winx64,Mysql-5.6.41内存爆满一例
  6. 让Grub 2来拯救你的 bootloader
  7. 分布式事务框架-TX-LCN
  8. 自己整理的90分以上最新物联网技术导论期末选择填空大题总考点
  9. 下载Android源码详细过程记录
  10. 无线传感器网络(双语)复习
  11. hive和hadoop版本对应关系
  12. typecho博客,typecho插件,typecho博客搭建
  13. 人的9种2266对联文字的世界纪录(图)
  14. 【百度编辑器】修改上传图片缩略图大小
  15. Redis 数据丢失问题排查
  16. Omni研究系列【USDT raw transaction】
  17. C语言|《C Primer Plus》|数据类型
  18. 大雄宝殿的“大雄”是什么意思
  19. word目录中页码没有向右对齐的解决方法
  20. 停车还能360全方位影像_路虎(揽胜运动星脉极光发现)车主如何选购360全景安全辅助系统...

热门文章

  1. C和C++里的const常量、volatile修饰符的深层次说明
  2. 快慢指针寻找循环节点
  3. MATLAB函数记录
  4. 推荐一个不到300k的Gif处理神器 - Gifsicle(免费下载)
  5. [云炬创业基础笔记]第十一章创业计划书测试3
  6. 北理工 管理系统计算机仿真作业,20秋北理工《CADCAM原理与应用》--模拟3-答案 更…...
  7. java bitmap获取图片大小_android 通过uri获取bitmap图片并压缩
  8. 基于暗通道优先算法的去雾应用Matlab
  9. 串口通信模块1:串口基础知识
  10. [OS复习]虚拟存储管理技术2