C语言程序设计(第7章).ppt
《C语言程序设计(第7章).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计(第7章).ppt(56页珍藏版)》请在三一办公上搜索。
1、第七章 结构体与共用体,高级语言程序设计,计算机基础教研室,本章主要内容,本章介绍:如何自己构造数据类型(构造型数据)结构体内存分配函数共用体枚举类型类型定义,教学目的与要求掌握结构体和共同体类型的说明结构体和共用体变量的定义及初始化方法掌握结构体与共用体变量成员的引用领会存储动态分配和释放领会链表的基本概念和基本操作领会枚举类型变量的定义了解Typedef的作用重点与难点结构体的基本概念结构体类型及变量的定义结构数组用指针处理链表共用体及枚举类型的基本概念Typedef的基本概念,C(C+)数据类型,一、结构体,1概述数 组 是构造类数据,其数组元素必须是同一数据类型的。结构体 也是构造类数
2、据,但其成员可以是任何类型的。构造类型使用户可以象处理单个变量一样来处理复杂的数据结构。,诸如学生花名册、通讯录之类的数据,最适合用结构体来处理。因为这类数据具有如下特点:每个人信息都是一个复合的构造数据,如由姓名、学号、性别、年龄、家庭住址、联系电话等“成员”组成。不同的人,数据的值不同,但都有共同的成员组成。,使用结构体的一般步骤,根据问题的要求定义一个结构体类型用自己定义的结构体类型定义结构体变量在程序中使用结构体变量处理问题 比较普通变量的情况:用系统给定的数据类型定义变量在程序中使用变量处理问题,如何定义结构体类型?,struct 结构体名 类型标识符 成员名;;,关键字 用户指定,
3、/*struct 结构体名合称“结构类型标识符”*/,/*成员表列*/,/*此处分号不能省略*/,一个示例,【例一】main()struct student int number;char name6;char sex;int age;char address20;,本质上,它定义了一个名为”student”的“结构体类型”(表头)。,小结:什么是“结构体类型”?,用户自己定义的构造型数据类型由若干数据项(成员)组成同一结构体中的成员可以具有不同的数据类型注意成员定义与普通变量定义的区别:成员定义时不为其分配内存 变量定义时为其分配内存,结构体类型的特点:,组成结构体的成员本身必须是一种已有定
4、义的数据:基本类型成员(整型/字符型/实型)指针类型成员数组类成员其他构造类成员(包括已定义的另一种结构体)注意:成员变量,故成员名可与变量名同名 结构体类型可以有千千万万种,表示由若干不同数据项组 成的复合类型。定义结构体类型时,系统不会为该结构体分配内存(只是定义类型,而非变量声明),2、结构体类型变量的定义,定义了以上结构体类型后,struct student 相当于标准数据类型关键字char,int,float我们可以用它来定义“结构体变量”。在结构体类型定义后,用 struct 结构体名 复合词定义 struct 结构体名;struct 结构体名 变量名1,变量名2,变量名n;如:s
5、truct student a,b30,*p;a 为struct student类型的变量 b 为struct student类型的数组(每个元素都是一个结构 体变量,都有众成员)p 为指向struct student类型的指针变量,还有两种合二为一方法,在定义结构体类型的同时定义结构体类型变量 struct 结构体名 变量名1,变量名2,变量名n;直接定义结构体类型变量 struct 变量名1,变量名2,变量名n;,实际使用中,还可以使用以下形式:先定义#define STU struct student尔后 STU student1,student2;,【例二】定义结构体类型的同时定义结构
6、体类型变量。main()struct student int number;char name6;char sex;int age;char address20;a,b30,*p;,【例三】不定义结构体类型,直接定义结构体类型变量。main()struct int number;char name6;char sex;int age;char address20;a,b30,*p;,其他有关知识,实际使用中,还可以使用以下形式:#define STU struct student STU stu1,stu2;比较一下两种变量定义方式的异同:int a,b,c;定义三个整型变量,每个变量占二个字
7、节,可单独赋值。struct student a,b,c;定义三个结构体类型变量,每个变量下有若干“成员”。其占用的内存长度等于各成员项长度之和。,示例,【例四】main()struct student int number;char name6;char sex;int age;char address20;printf(%dn,sizeof(struct student);,结果:31,示例,【例五】若有以下定义,则正确的赋值语句为。struct complex float real;float image;struct value int no;struct complex com;va
8、l1;A)com.real=1;B)plex.real=1;C).real=1;D)val1.real=1;,答案:C).real=1,3、结构体变量的初始化和赋值,使一个结构体变量获得数据“值”(实际上是给其各个成员赋值)有三种方法:定义时初始化之 用赋值语句对各成员分别赋值 同类型的结构体变量间相互赋值 如 student1=student2,示例:定义时初始化之,【例六】main()struct char name15;char class12;long num;stu=Wenli,Computer,200113;printf(%sn%sn%ldn,stu.name,stu.class,
9、stu.num);,结果:Wenli Computer 1 200113,示例:用赋值语句对各成员分别赋值,【例七】main()struct char name15;char class12;long num;stu=Wenli,Computer,200113;stu.name0=1;stu.class2=A;stu.num=1111;printf(%s,%s,%dn,stu.name,stu.class,stu.num);,结果:1enli,CoAputer,1111,示例:用赋值语句对各成员分别赋值,【例七】main()struct char name15;char class12;lon
10、g num;stu=Wenli,Computer 1,200113;stu.name0=1;stu.class2=A;stu.num=1111;printf(%s,%s,%dn,stu.name,stu.class,stu.num);,结果:1enli,CoAputer,1111,进行所谓“结构体变量赋值”只能逐个成员进行,不能将结构体变量作为一个整体进行输入和输出。如对结构体变量stu,以下语句是错误的:scanf(“%s,%s,%ld”,stu);printf(“%s,%s,%ld”,stu);,正确编程:main()struct char name15;char class12;long
11、 num;stu;scanf(%s,stu.name);scanf(%s,stu.class);scanf(%ld,亦可用以下赋值语句:strcpy(stu.name,”wenli”);strcpy(stu.class,“Computer”);stu.num=200113;,为什么啊?,但是如果改为stu.name=”wenli”是错误的。,4、结构体变量的引用,只能引用其成员变量 用圆点(成员运算符)优先级最高 如 val1.no+可以将成员变量按普通变量运算方式处理,包括取地址:&val1(函数间传递用)&val1.no对多级结构体,只能对最低级的成员进行赋值、存取及运算处理。,示例,以下
12、函数getdays()计算某年某月某日是该年的第几天。如2001年2月5日是该年的第36天。闰年的二月有29天,表达式“(year%4=0&year%100!=0)|(year%400)=0”值为真,即为闰年,其中year表示年号。,示例,#include stdio.hstruct datetp unsigned year,month,day;unsigned months=0,31,28,31,30,31,30,31,31,30,31,30,31;main()struct datetp d;printf(请输入年 月 日:);scanf(%u%u%u,答案:【1】&d.day【2】stru
13、ct datetp【3】monthsi,5、结构体数组,定义 P265定义结构体后定义 定义结构体时同时定义,定义结构体后定义struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu3;,定义结构体时同时定义struct student int num;char name20;char sex;int age;float score;char addr30;stu3;,5、结构体数组,初始化 P266一般初始化省略维数 定义后初始化,一般初始化struct stu
14、dent int num;char name20;char sex;int age;float score;stu3=10101,李宁,M,18,87.5,10102,张凡,M,19,99,10103,王敏,F,20,78.5;,定义后初始化struct student int num;char name20;char sex;int age;float score;;Struct student stu3=10101,李宁,M,18,87.5,10102,张凡,M,19,99,10103,王敏,F,20,78.5;,一般初始化示例,main()struct student int num;c
15、har name20;char sex;int age;float score;stu3=10101,李宁,M,18,87.5,10102,赵凡,M,19,99,10103,王敏,F,20,78.5;int i;clrscr();for(i=0;i3;i+)printf(%s,学号%d,成绩:%.2fn,stui.name,stui.num,stui.score);,试一试运行结果,这里面的花括号能不能去掉?,6、指向结构体类型的指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址。如 struct student stu;struct student*p;p=,如果 struct s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计
链接地址:https://www.31ppt.com/p-6503995.html