面向过程程序设计的任务_第1页
面向过程程序设计的任务_第2页
面向过程程序设计的任务_第3页
面向过程程序设计的任务_第4页
面向过程程序设计的任务_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、面向过程程序设计的任务: 小结内存分配指令分配数据描述过程描述数据类型 解决的问题:将问题中的数据以适当的方式组织起来,其方式应便于程序对这些数据的处理、存储和输出。1关于基本数据类型:整型、实型、字符型、指针型组合的数据类型:数组结构体2学生信息用什么类型? 新问题学号 班号 姓名 性别 数学 计算机 外语 物理 军训学生信息:完成功能 存档 统计成绩 成绩查询 数据维护存在问题 同一问题中存在不同类型的数据项,如何组织?解决方法:构造新的数据类型3第十一章 结构体与共用体本章内容结构体的概念结构体的定义及使用结构体数组结构体指针结构在函数间的传递共用体411-1 结构体的概念 XH XM

2、XB SX JSJ TY 简单变量:只存放一个数据数组变量:存放同类型的多个变量结构体:解决不同类型的多个变量 的存储问题问题:不同类型数据的统一存储 981202 陈继良 m 85.5 90.0 70 Unsigned *p char float float int 类型变量名字节数 5 6 2 4 4 2 结构体(23 字节)可使变量、数组、指针具有该结构5一、结构体的定义例:struct xs unsigned xh; char *xm; char xb; float sx; int ty; ; 11-2 结构体的定义及使用 方法一:定义类型 struct 结构体名 成员表列; 结构体名

3、成员名结构体方法二:定义类型和变量 struct 结构体名 成员表列 变量名表列; Cj1,cj2;说明cj1和cj2变量具有xs类型,并分配内存。6方法三:直接定义结构型变量 struct 成员表列 变量名表列; 例:struct unsigned xh; char *xm; char xb; float sx; float jsj; int ty; cj1,cj2; 二、结构体的嵌套定义struct 结构体名 成员1; 成员2; struct 另一结构名 本成员名; 成员n; 变量名表列; struct xs unsigned xh; char *xm; char xb; float sx

4、; float jsj; int ty; ; struct xs xsgl; struct xstj tj;嵌套定义,tj是结构型指定xsgl具有xs结构类型7结构定义实例为了描述日期可以定义如下结构: struct date int year;/* 年。整型作为结构中的成员 */ int month; /* 月 */ int day; /* 日 */ ;结构类型名称为date,可称这个结构类型为date。在date结构中,有三个成员year,month和day,三个成员均为整型。8为了处理通信录,可以定义如下结构:struct address char name30; /* 字符数组作为结构

5、中的成员 */ char street40; /* 街道名称 */ char city20; /* 城市 */ char state2; /* 省市代码 */ unsigned long zip; /* 邮政编码。无符号长整型*/ ;例:将变量today说明为date型的结构变量: struct date today; 说明多个address型的结构变量: struct address wang, li, zhang;结构变量同样具有存储类型,它的存储特性与一般变量完全相同。9结构变量占用内存情况结构变量的各个成员分量在内存中占用连续存储区域,所占内存大小为结构中每个成员的占用内存的长度之和。

6、结构变量today和wang占用内存的情况如图所示。 today 6字节,wang (struct address) 96字节name 30个字节Street 40个字节city 20个字节state 2个字节zip 4个字节year 2个字节month 2个字节day 2个字节10求结构变量占用内存大小使用sizeof运算。sizeof是单目运算,其功能是求出运算对象所占的内存空间的字节数目。使用的一般形式为:sizeof(变量或类型说明符)11例:sizeof运算的意义。main ( ) char str20; struct date /* 定义结构date */ int year, mo

7、nth, day; today; /* 说明结构变量today */ struct address /* 定义结构address */ char name30, street40, city20, state2; unsigned long int zip; wang; /* 说明结构变量wang */printf(char: %dt, sizeof(char); /* char型长度 */printf(“int: %dt”, sizeof(int); /* int型长度 */printf(long: %dt, sizeof(long); /* long型长度 */printf(float:

8、%dn, sizeof(float); /* float型长度 */printf(double: %dt, sizeof(double); /* double型长度 */printf(str: %dt, sizeof(str); /* 变量str长度 */printf(date: %dt, sizeof(struct date); /* date长度 */printf(wang: %dn, sizeof(wang); /* 变量wang长度 */12三、结构体的引用1、结构体成员的访问 结构体变量名.成员名 结构体成员运算符例:cj1.*xm cj2.sx2、结构体成员的赋值 cj1.xh=9

9、81202; cj1.sx=85.5; cj1.jsj=90; xsgl.tj.sg=1.78; cj2=cj1; 不能直接访问tj因为是结构型可对结构变量整体赋值13对结构变量的整体操作要对结构进行整体操作有很多限制,语言中能够对结构进行整体操作的运算只有赋值“”和 取地址“”操作。例如:struct date sunday, today;sunday=today; /* 结构变量整体赋值 */14例1:输入今天的日期,然后输出该日期。#include main ( ) struct date /* 在函数中定义结构类型date */ int year, month, day; ;struc

10、t date today; /* 说明结构变量today */printf (Enter today date:);scanf(“%d%d%d”, &today.year, &today.month, &today.day);printf(“%d.%d.%dn”, today.year,today.month,today.day); 15例2:要用结构描述一个人的基本情况,可以定义如下结构:struct person/* 定义person结构类型 */ char name 30; char sex; struct date birthday;/* 结构的嵌套定义 */ man;如果要在变量ma

11、n中存入一个1960年3月28日出生的zhang先生,可以采用如下赋值语句:strcpy(,“zhang”); /*注意:不能写成=zhang; */ man.sex =M; /* 为结构中的字符成员赋值 */ man.birthday.year = 1960; man.birthday.month = 3; man.birthday.day=28; /*为嵌套定义的结构中的成员赋值 */16如果要将“zhang”改为“zhong”,只要将结构变量man中的数组成员name下标为2的元素a改为o即可。可以使用下列语句:2=o;/* 为结构变量中的

12、数组成员的一个元素赋值 */173、结构体成员的运算 以 参与各种运算 例:cj1.xh+; av=(cj1.sx+cj1.jsj+cj1.ty)/3;4、结构体成员的输出 以 逐个输出 例:printf(“ %d,%s,%f”,cj1.xh,cj1.*xm,av);185、结构体变量的初始化 在定义变量时初始化,而不是在定义结构时初始化。例:对外部存储的结构体变量初始化 struct xs unsigned xh; char *xm; char xb; float sx; cj1=1202,“ chenjl”,m,85.5; main() 对静态存储的结构体变量初始化,其定义可放在函数体内

13、main() static struct xs unsigned xh; char *xm; char xb; float sx; cj1=1202; 19结构体变量初始化 struct xstj unsigned xh; float sg; ; struct xs unsigned xh; char *xm; char xb; float sx; int ty; struct xstj tj; cj1=1202,chenjl,m;20 main() float av; struct xs cj2; cj2=cj1; scanf(%f,%d,&cj2.sx,&cj2.ty); scanf(%f

14、,&cj2.tj.sg); av=(cj2.sx+cj2.ty)/2; printf(%d,%s,cj2.xh,cj2.xm); printf(”%c,%5.1f,cj2.xb,cj2.sx); printf(”%3d,%5.1fn,cj2.ty,av); 指定cj2变量类型输入:80.5,701.78输出结果:1202,chenjl,m, 80.5, 70, 75.22111-3 结构体数组结构体数组:存放结构体类型数据的数组一、结构体的定义例:struct xs unsigned xh; char *xm; char xb; float sx; int ty; ; struct xs xs

15、cj96; 或:struct xs unsigned xh; char *xm; char xb; float sx; int ty; xscj96; 结构数组96个元素都具有结构体数据类型22结构与数组的关系其一:在结构中使用数组类型作为结构的一个成员;其二:用结构类型作为数组元素的基类型构成数组。结构数组结构数组是一个数组,数组中的每一个基本元素都是结构类型。 说明结构数组的方法:先定义一个结构,然后用结构类型说明一个数组变量。23例:为记录100个人的基本情况。可以说明一个有100个元素的数组。每个元素的基类型为一个结构,在说明数组时可以写成: struct person man 100

16、 ;man就是有100个元素的结构数组,数组的每个元素为 person 型。要访问结构数组中的具体结构,必须遵守数组使用的规定,按下标进行访问,要访问结构数组中某个具体结构下的成员,又要遵守有关访问结构成员的规定,使用“.”访问运算符和成员名。24二、结构体数组的初始化例:struct xs unsigned xh; ; struct xs xscj3,; 或:struct xs unsigned xh; xscj3,; 一个数组元素的数据25三、结构数组的引用main()struct xscj xs4=01,70,80, 02,78,67,03,56,78, 04,90,80; int i;

17、 for (i=0;iav=(p-cj0+p-cj1)/2; printf(%s,%5.1f,%5.1f,%5.1fn,p-xh, p-cj0,p-cj1,p-av);struct xscj char *xh; float cj2; float av; xs=02,78,67;定义结构指针并初始化用指针访问结构成员的两种方法:(*指针名).成员名指针名-成员名访问结构成员输出:02, 78.0, 67.0, 72.527二、指向结构数组的指针main() struct xscj xs4=01,70,80, 02,78,67,03,56,78, 04,90,80; struct xscj *p;

18、 for (p=xs;pav=(p-cj0+p-cj1)/2.0; printf(%s,%5.1f,%5.1f,%5.1fn,p-xh, p-cj0,p-cj1,p-av); struct xscj char *xh; float cj2; float av; ;结构数组结构指针输出:01, 70.0, 80.0, 75.002, 78.0, 67.0, 72.503, 56.0, 78.0, 67.004, 90.0, 80.0, 85.0指向2811-5 结构在函数间的传递函数参数可是:常数、变量、数组、指针、字符 也可以是:结构体(传送成批数据) 传递方法:值传递、返回值、全局变量一、结构成员的传递struct xscj char *xh; float cj2; float av; ;29main() struct xscj xs4=01,70,80, 02,78,67,03,56,78, 04,90,80; int i; for

温馨提示

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

评论

0/150

提交评论