第10章 结构体共用体.ppt_第1页
第10章 结构体共用体.ppt_第2页
第10章 结构体共用体.ppt_第3页
第10章 结构体共用体.ppt_第4页
第10章 结构体共用体.ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础(26) C语言/C,山东工商学院计算机系吕凤顺电子邮箱:第10章结构和公共体,本章大纲要求:(10)结构(即“结构”)和公共体(即“联合”)1结构和公共体类型数据的定义方法和引用方法。建立、输出、删除和插入带有指针和结构的链表。基本类型变量相互独立,没有任何联系;数组只能用于表示同一类型的一批数据;有时,许多不同类型的数据需要作为一个整体来对待。例如,一个班有很多学生,每个学生的人数、姓名、性别、年龄、年级和地址需要作为一个整体来对待。c语言使用“结构”类型来处理由许多不同类型的数据组成的数据集,这相当于其他语言或数据库中的“记录”。10.1结构类型的定义,1。结构类型定义格式,

2、结构是一种构造类型,必须在使用前定义。struct是定义结构类型的关键字;“struct structure type name”是用于创建结构变量的类型名,相当于int和float。结构中的每一项数据都被称为结构的“成员”或“组件”。结构类型名称和成员名称是标识符。花括号后必须有分号。结构成员可以是基本类型的变量、数组或指针,也可以是其他结构或公共体的变量、数组或指针,它们可以被嵌套和定义。结构结构类型名称类型成员名称1;类型成员名称n;结构类型的范围:根据定义的位置是局部的和全局的结构类型;引用由其他文件定义的结构,它可以包含在#include中。struct student /*学生结构

3、*/int num;/*学生id */char name 20;/*名称*/浮动分数;/*成就*/;/*语句的末尾必须有分号*/。例如,结构类型的定义包括学生标识、姓名、性别、年龄、年级和地址。/*学生id */char name 20;/*姓名*/char性别;/*性别*/年龄;/*年龄*/浮动分数;/*成就*/char addr 30;/*地址*/;/*语句的末尾必须有分号*/。struct student是已定义的结构类型名称,它包含六个成员:num、name、性别、年龄、分数和addr。注意:struct student只声明一个新的结构类型,就像char、int和float一样,不占

4、用内存,也不能存储数据。结构中的数据成员不是变量的定义,而是纯粹的声明。例如,数量、年龄等。没有存储单元,只有当结构变量由结构类型定义时,系统才根据每个成员变量为结构变量分配内存来存储特定数据。第二,结构变量的定义,1。首先定义结构类型,然后分别定义结构变量:结构化学生;指导学生s1、S2;注意:第三种方法不能再定义新的结构变量。在定义了结构类型之后,它可以用来定义变量,数组,指针,函数等等。就像系统定义的类型int、long和float一样。2.在定义结构类型的同时定义结构变量:结构学生S1,S2;3。直接定义结构变量结构s1、S2;c结构名可以直接用作类型名structstudent学生s

5、1、S2;定义结构变量就是根据类型的定义依次为每个成员分配内存。结构变量的地址是第一个成员的地址。内存中结构变量占用的字节数是内存中每个成员占用的字节数之和。3。结构变量的引用,例如,定义一个结构变量,存储老师的信息并输出它。#包含stdio.h main () struct教师/*本地结构类型,此函数中的作用域是*/char name 20;/*姓名*/char性别;/*性别*/年龄;/*年龄*/char位置10;/*职称*/浮动工资;/*工资*/;/*您可以直接在这个分号前定义结构变量*/结构教师p;/*定义局部变量p */strcpy(,Wang Li);/*为每个成员赋值*

6、/p。性别=f;p.age=30strcpy(p位置,中间);p .薪金=1600;姓名性别年龄职位工资;printf(n%-10s s %8.2f,p .姓名,p .性别,p .年龄,p .职位,p .工资);通常,结构变量不能作为一个整体使用,其成员只能由“成员运算符”(组件运算符)引用。结构变量名。成员名称。如果有手术:p.age相当于:(p.age)。一个示例定义了地址簿的结构类型。通讯录包含以下信息:姓名、年龄、电话和邮寄地址;定义结构变量、输入数据和输出。# includes dio . h struct address _ list/*在函数体*之外定义全局结构类型/char n

7、ame 10;/*此类型的范围在此程序内*/int age;char tel10char address40;/*您可以在此定义结构全局变量*/,main()结构地址列表;/*定义结构的局部变量s,它占用62字节的内存*/printf(ninputname 3360);获取(s . name);printf(输入年龄:);Scanf(%d)是结构的嵌套定义,添加了出生日期:它被定义为具有年、月和日的结构类型,然后嵌入struct student_1(嵌套定义)。定义后嵌入(常用方法):结构日期类型年;int月;国际日;struct student _ 1 int numchar name20迷

8、人的性爱;国际年龄;结构日期类型生日;浮动分数;char addr30;直接嵌套定义:struct student _ 1 int numchar name20迷人的性爱;国际年龄;结构日期类型int yearint月;国际日;生日;浮动分数;char addr30;4.结构变量的初始化。结构变量也可以在定义的同时初始化。每个成员数据用逗号分隔并括起来。该示例定义了一个结构类型,包括员工的人数、姓名和工资。定义变量来存储两个人的数据,然后交换它们,并在交换前后输出信息。# include stdio . h main()struct salary _ list char no 10;char

9、name30浮动工资;z,x=10,李明,2000;/*结构变量初始化*/struct工资_列表y=12,王燕,2500;printf(无名称salary yn);printf(x:%-5s%-9s.2fn,x .不,x .名字,x .薪水);printf(y:%-5s%-9s.2fn,y .不,y .名字,y .薪水);z=x;x=y;y=z;/*交换两个结构变量*/printf(在exchange:n之后);printf(x:%-5s%-9s.2fn,x .不,x .名字,x .薪水);printf(y:%-5s%-9s.2fn,y .不,y .名字,y .薪水);注:同一类型的结构变量可

10、以作为一个整体赋值,即一个结构变量可以作为一个整体赋给另一个相同类型的结构变量。描述:首先定义结构类型,然后定义结构变量。注意区分两个不同的概念:定义类型和定义变量。当结构成员被单独引用时,它等同于一个普通变量。成员名称可以与程序中的其他变量名相同,并且相互之间没有影响。当一个成员是另一个结构变量时,应该逐级引用它。例如:学生1。生日。月份;除了初始化之外,在分配、输入和输出结构变量时,应该分别访问每个成员,并且不能执行整个分配或输入和输出。例如,printf(%s%c%d%s%f,p);错了。p=王力,f,30,中,1600;错了。只有在下列情况下,才能通过访问: (1)将结构变量作为一个整

11、体进行初始化:结构学生S1=20001,李明;(2)结构变量之间的总体分配。例如,p2=p1(3)获取结构变量的地址:printf(%x,f是指向结构变量的指针)(4)结构变量用作函数参数。,例10.1分析程序,#包括#pragma包(1) /*C内存分配根据成员的实际大小不对齐*/main()结构样本短整型n;char c10浮动f。s;printf(%d,%d,%dn,sizeof(s.n),sizeof(s.c),sizeof(s . f);printf(%dn,sizeof(s);成员函数可以在c结构中定义,成员函数可以作为全局变量直接操作结构的成员。成员函数可以定义自己的局部变量(包

12、括形式参数),这些变量只在函数中有效。成员函数只属于结构变量,必须通过结构变量调用。每个结构变量都有自己的成员和成员函数。结构学生整数;/*学生id */char name 20;/* name */float score 4;/* score数组*/int getNum()返回num/*获取学生编号成员函数*/char* getName()返回名称;/*获取名称成员函数*/void set name(char * n)str cpy(name,n);/*修改名称*/float GetVerScore()/*获得平均分数*/int I;浮点s=0;对于(I=0;i4;I)s=得分;返回s/4;

13、示例结构成员函数# includes dio . h # includes tring . h struct student int num;/*学生id */char name 20;/* name */float score 4;/* score数组*/int getNum()返回num/*获取学生编号成员函数*/char* getName()返回名称;/*获取名称成员函数*/void set name(char * n)str cpy(name,n);/*修改名称*/float GetVerScore()/*获得平均分数*/int I;浮点s=0;对于(I=0;i4;I)s=得分;返回s

14、/4;学生x1=2001,张华,75,86,93,88,x2=2002,王莉,72,80,85,90;printf(360%-10s,v=%fn,x1.getNum(),x1.getName(),x 1 . GetVerScore();printf(360%-10s,v=%fn,x2.getNum(),x2.getName(),x 2 . GetVerScore();x1.setName(刘桦);printf(360%-10s,v=%fn,x1.getNum(),x1.getName(),x 1 . GetVerScore();结构学生整数;char name20,性别;国际年龄;浮动分数;char addr30stu3,10.2结构数组,1。结构数组的定义,用于存储一批相同类型的结构数据。每个数组元素都是一个结构变量。例如,有三种方法来定义结构数组:1 .首先定义结构,然后分别定义数组;2.在定义结构类型的同时定义结构数组;3.直接定义结构数组;2.初始化结构数组,构造学生整数;char name20迷人的性爱;国际年龄;浮动分数;char addr30stu3=101,李林,M,18,87.5,103北京路,102张畈,M,19,

温馨提示

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

最新文档

评论

0/150

提交评论