C课件-结构体数组做函数参数.ppt_第1页
C课件-结构体数组做函数参数.ppt_第2页
C课件-结构体数组做函数参数.ppt_第3页
C课件-结构体数组做函数参数.ppt_第4页
C课件-结构体数组做函数参数.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第十讲,第十章 结构体和共用体,结构体类型的定义 结构体类型变量的定义 结构体类型变量的初始化和引用 结构体数组,10.1 结构体,问题 数组能方便的处理一组同类型的数据,那么对一组不同类型的数据如何管理和引用呢? 使用结构体。,例: 学生姓名,性别,年龄,身高,体重等,,结构体属于构造类型,在内存中占据连续的存储空间。 C语言本身没有结构体类型,用户要做两项工作: 1)定义结构体类型:描述结构体成员及其类型; 2)定义结构体变量:为结构体成员分配存储空间。,10.1.1 结构体类型的定义,结构体类型的定义 一般格式,struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ;,struct date int year,month,day; ;,10.1.1 结构体类型的定义,结构体类型定义的格式说明: struct:关键字,是定义结构体类型的标志。 结构体名:标识符,其命名规则同变量名。 struct 结构体名:结构体类型名,作用等同于int、float等关键字,用于定义结构体变量。 类型名1n:说明了结构体成员的数据类型。 成员名1n:用户定义的一个或多个结构体成员的名称,其命名规则同变量名。多个同类型的成员彼此间用逗号分隔。,10.1.2 结构体类型变量的定义,注意: 结构体类型的定义只是指出了该结构体的组成情况,系统并不会为它分配实际的存储单元。应在定义了结构体类型以后,再定义该结构体类型的变量(简称结构体变量),以便在结构体变量中存放具体的数据。 结构体变量的定义方式有三种: 先定义结构体类型,再定义结构体变量。 在定义结构体类型的同时定义结构体变量。 直接定义结构体变量。,10.1.2 结构体类型变量的定义,方式I.先定义结构体类型,再定义结构体变量,10.1.2 结构体类型变量的定义,struct date int year; int month; int day; ; struct data today,tomorrow;,year month day 2012 5 16 2012 5 17,today tomorrow,12个字节,today和tomorrow的存储形式为:,例:,10.1.2 结构体类型变量的定义,方式II. 在定义结构体类型的同时定义结构体变量。,struct student int num; char name10; char sex; float score4; stu1,stu2;,struct date int year; int month; int day; today,tomorrow;,例:,10.1.2 结构体类型变量的定义,方式III. 定义无名结构体变量,struct int num; char name10; char sex; float score4; stu1,stu2;,struct int year; int month; int day; today,tomorrow;,例:,10.1.2 结构体类型变量的定义,关于结构体的说明: 1、类型与变量是不同的概念,应注意区分。 系统可以对变量赋值、存取、运算,而类型则不能。 编译时,系统只为变量分配存储单元,而类型则不分配。,10.1.2 结构体类型变量的定义,2、不同结构体的成员名可以相同,不互相冲突。,struct date int year,month,day; ; struct Book char title50,writer20,publisher50; int year,month; ; int year,month,day;,10.1.2 结构体类型变量的定义,3、结构体的成员可以是基本类型和构造类型。,struct date int year,month,day; ; struct student int num; char name10; char sex; struct date birthday; float score4; stu1,stu2;,struct student int num; char name10; char sex; struct date int year,month,day; birthday; float score4; stu1,stu2;,10.1.2 结构体类型变量的定义,4、可以使用typedef关键字为结构体类型定义一个别名。,typedef struct _Student char id10; char name10; int score3; int sum; Student;,以后就可以用Student代替结构体类型名来定义结构体变量了。 例如: Student stu1, stu2; 等价于: struct _Student stu1, stu2;,10.1.3 结构体类型变量的初始化和引用,结构体变量的初始化类似于对数组的初始化,由于结构体变量的成员可以有不同的数据类型,所以各个初值必须与相应成员保持类型一致或兼容。,例:,struct _Student char id10; char name10; int score3; int sum; stu1 = “2012301101“, “胡树伟“, 87, 71, 81;,10.1.3 结构体类型变量的初始化和引用,10.1.3 结构体类型变量的初始化和引用,例:,struct date int year, month, day; ; struct _student2 char num15; char name10; struct date birth; int score3; int aver; stu1=“200361070001“,“Hushuwei“,1984,10,8,87,71,81;,10.1.3 结构体类型变量的初始化和引用,对结构体变量初始化的说明: 对结构体变量进行初始化时,系统是按每个成员在结构体变量中的顺序一一对应赋初值的。若只对部分成员进行初始化,则只能给前面的若干成员赋值,而不允许跳过前面的成员给后面的成员赋值。 例如:前面两例中结构体变量stu1和stu2的成员sum没有获得指定初值,而是获得默认初值0。,10.1.3 结构体类型变量的初始化和引用,对结构体变量中成员的引用 一般格式 结构体变量名 . 成员名,其中:“为结构体成员运算符,1级运算符。 例如:stu1.sum表示对结构体变量stu1中的sum成员进行引用。,10.1.3 结构体类型变量的初始化和引用,结构体变量的引用规则: 1、不能将结构体变量作为一个整体进行输入和输出。 例如:,struct _Student3 long num; int age; char sex; st;,下面的写法是错误的: scanf(“%ld%d%c“, ,10.1.3 结构体类型变量的初始化和引用,结构体变量的引用规则: 2、内嵌结构体成员的引用,必须逐层使用成员名定位,找到最底层的成员。 例如: struct date int year, month, day; ; struct _Student2 char id10, name10; struct date birth; int score3, sum; stu2 = “20123002“, “李冬“, 1987, 5, 3, 75, 85, 76; printf(“birthday=%d年%d月%d日n“, stu2.birth.year, stu2.birth.month, stu2.birth.day);,10.1.3 结构体类型变量的初始化和引用,结构体变量的引用规则: 3、若结构体的成员是字符数组,可对其进行直接引用。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(“%s%s“, stu1.id, ); printf(“id=%s, name=%s“, stu1.id, );,10.1.3 结构体类型变量的初始化和引用,结构体变量的引用规则: 4、若结构体的成员是数值型数组,则应逐个引用数组中的元素。 例如: struct _Student char id10; char name10; int score3; int sum; stu1; scanf(“%d%d%d“, ,10.1.3 结构体类型变量的初始化和引用,例 结构体变量的输入和输出 typedef struct _Student char id10, name10; int score3, sum; Student; /*定义结构体类型别名*/ void main( ) Student stu1, stu2; /*定义结构体变量*/ scanf(“%s%s%d%d%d“, stu1.id, , ,10.1.4 结构体数组,一个结构体变量一次只能存放一组数据,如一个学生的信息。 全班学生信息,则用结构体数组。 结构体数组的每个数组元素都是一个结构体变量,它们都分别包括各个成员项。,10.1.4 结构体数组,结构体数组的定义 三种形式,10.1.4 结构体数组,结构体数组的初始化 结构体数组的初始化与普通数组的初始化相似。,struct _student char num15,name10; int score3; float aver; stu50=“200361070001”,“Hushuwei”,87,71,81, “200361070002“,“Zhangfan“,76,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.4 结构体数组,结构体数组的引用 结构体数组的引用与结构体变量的引用相似。,例:查询学生基本信息。 (学生数据包括:学号,姓名,性别,年龄和成绩。),#include #define N 5 struct student long int num; char name10; char sex; int age,score; stuN=20123001,“Zhang Mei“,M,18,85, 20123002,“Wang Hai“,M,19,87, 20123003,“Liu Jun“,F,18,90, 20123004,“Li Hui“,M,19,80, 20123005,“Chen Ming“,M,18,92;,10.1.4 结构体数组,void main() int s,t; long int xh; printf(“请输入学号:n“); scanf(“%ld“, ,请输入学号: 20123003 20123003 Liu Jun F 18 90,10.1.6 结构体数组名作为函数参数,结构体作为参数传递给函数的几种方法: 1、结构体变量的成员作为函数参数 与普通变量做函数参数一样,传值方式; 2、结构体变量作为函数参数 是一种多值传递,需要对整个结构体做一份拷贝,效率低。 3、结构体指针做函数参数 4、结构体数组名作为函数参数,10.1.6 结构体数组名作为函数参数,结构体数组名作为函数参数与普通数组名作为函数参数相似,传递的也是数组的首地址。,例:计算平均成绩,打印排序成绩表,#include #define N 3 #define M 3 void sort(struct _student ss , int n); struct _student char num15,name10; int score3; float aver; stuN=“200361070001“,“Lishuwei“,68,71,91, “200361070002“,“Zhangfan“,92,78,85, “200361070003“,“Wujiaxin“,70,91,78;,10.1.6 结构体数组名作为函数参数,void main() int i,j,sumN; for(i=0;iN;i+) sumi=0; for(j=0;jM;j+) sumi=sumi+stui.scorej; stui.aver=sumi/3.0; sort(stu,N); for(i=0;iN;i+) printf(“%3d%15s%12s%8.2fn“,i+1,stui.num,, stui.aver); ,10.1.6 结构体数组名作为函数参数,void sort(struct _student ss , int n) int i,j; struct _studen

温馨提示

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

最新文档

评论

0/150

提交评论