使用结构体类型处理组合数据.ppt
《使用结构体类型处理组合数据.ppt》由会员分享,可在线阅读,更多相关《使用结构体类型处理组合数据.ppt(49页珍藏版)》请在三一办公上搜索。
1、辽宁科技大学资源与土木工程学院测绘教研室,第9章用户自定义数据类型,C语言程序设计(第2版),主要内容,9.1 定义和使用结构体变量9.结构体数组9.结构体指针9.用结构体变量和结构体变量的指针 作 函数参数9.5 共用体类型9.6 枚举类型,9.1 定义和使用结构体变量,现实生活中存在这样的数据,学生信息,测量坐标表,自己建立结构体类型,C语言允许用户自己建立由不同类型数据组成的结合型的数据结构,称为“结构体”(structre)。结构体中包含的数据元素称为成员。,定义一个结构体类型的一般形式为:struct 结构体名类型说明符1 成员名1;.类型说明符n 成员名n;每个成员都是该结构体类型
2、的一个组成部分,每个成员可以是一个基本数据类型,也可以是一个构造类型。成员名的命名应符合标识符的书写规范。结构体名是由用户指定的,又称“结构体标记”,以区别于其他的结构体类型。,struct coordinate char pointname20;/*点名为字符串*/double x;/*x坐标为双精度*/double y;/*y坐标为双精度*/double H;/*高程H为双精度*/;/*注意最后有一个分号*/,struct student int num;/*学号为整型*/char name15;/*姓名为字符串*/char sex;/*性别为字符*/int age;/*年龄为整型*/ch
3、ar department 20;/*系别为字符串*/char speciality20;/*专业为字符串*/;/*注意最后有一个分号*/,说明:结构体变量的成员可以是另一个结构体变量。例如:struct date/*声明一个结构体类型struct date*/int moth;/*月*/int day;/*日*/int year;/*年*/;,struct student int num;char name15;char sex;struct date birthday;/*struct data类型*/char department 20;char speciality20;,自己建立结构
4、体类型,9.1.2 定义结构体类型变量,结构体类型一旦定义,它相当于一个模型,并没有定义变量,其中并无具体数据,系统对它也不分配实际的内存单元,相当于设计好了图纸,但并未建成具体的房屋。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。可以采用 3种方法定义结构体类型变量。,9.1.2 定义结构体类型变量,struct student long no;char name15;char sex;int age;float score;struct student stu1,stu2;,struct coordinate char pointname20;dou
5、ble x;double y;double H;struct coordinate pt1,pt2;,1先定义结构体类型,再定义结构体变量。,9.1.2 定义结构体类型变量,2在定义结构体类型的同时定义结构体变量。,struct student long no;char name15;char sex;int age;float score;stu1,stu2;,struct coordinate char pointname20;double x;double y;double H;pt1,pt2;,9.1.2 定义结构体类型变量,3直接定义结构体类型的变量。,struct long no;
6、char name15;char sex;int age;float score;stu1,stu2;,struct char pointname20;double x;double y;double H;pt1,pt2;,这种形式指定了一个无名的结构体类型,它没有名字(不出现结构体名)。显然不能再以此结构体类型去定义其他变量。这种方式用得不多。,(1)结构体类型与结构体变量是不同的概念,不要混淆。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。(2)结构体类型中的成员名可以与程序中的变量名相同,但二者不代表同一对象。(3)对结构
7、体变量中的成员(即“域”),可以单独使用,它的作用相当于普通变量。,关于结构体类型的几点说明:,9.1.2 定义结构体类型变量,9.1.3 结构体的初始化和引用,在定义结构体变量时,可以对它初始化,即赋予初始值,然后可以引用这个变量。,【例9-1】把一个坐标点的信息放在一个结构体变量中,然后输出这个点的信息。,解题思路:先在程序中建立一个结构体类型,包括坐标点的各成员,然后用它定义结构体变量,同时赋以初值(一个点的信息),最后输出该结构体变量的各成员(即点的信息)。,#includevoid main()struct coordinate char pointname20;/*点名为字符串*/
8、double x;/*x坐标为双精度*/double y;/*y坐标为双精度*/double H;/*高程H为双精度*/pt1=氮肥厂,2503396.5128,709934.8769,532.743;printf(点名:%snx坐标:%.4fny坐标:%.4fn高程:%.3fn,pt1.pointname,pt1.x,pt1.y,pt1.H);,9.1.3 结构体的初始化和引用,引用结构体变量应遵守以下规则:(1)可以引用结构体变量中成员的值,引用方式为结构体变量名.成员名如在程序中可以对变量的成员赋值pt1.H=576.237;“.”是成员运算符,它在所有的运算符中优先级最高,因此可以把p
9、t1.H作为一个整体来看待。注意:不能通过结构体变量名来得到结构体变量中所有成员的值。printf(“%sn”,pt1);/*企图用结构体变量名输出所有成员的值*/只能对结构体变量中的各个成员分别进行输入和输出。,9.1.3 结构体的初始化和引用,引用结构体变量应遵守以下规则:(2)如果成员本身又属于一个结构体类型,则要用多个成员运算符,一级一级地找到最低一级的成员。只能对最低级的成员进行赋值或存取以及运算。如引用成员的方式为:student1.no(结构体变量student1的成员no)(结构体变量student1中的成员birthday中的成员month),9.1.3 结构体的初始化和引用
10、,引用结构体变量应遵守以下规则:(3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。如:pt1.H=pt1.H+1.5(赋值运算)(减法运算)(4)同类的结构体变量可以互相赋值,如:pt1=pt2;,9.1.3 结构体的初始化和引用,引用结构体变量应遵守以下规则:(5)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。scanf(“%f”,结构体变量的地址主要用作函数参数,通过它来传递结构体变量的地址。,9.1.3 结构体的初始化和引用,【例9-2】输入两点的x坐标、y坐标和高程,输出两点间的距离和高差。,解题思路:,#include#include
11、void main()struct coordinatechar name20;double x;double y;double H;pt1,pt2;double S,h;scanf(%s%lf%lf%lf,pt1.name,【例9-3】如下图为按图根水准测量要求施测某闭合水准路线观测成果略图。A点为已知点高程,图中箭头表示水准测量的前进方向,试计算待定点B、C、D点的高程。,9.2 结构体数组,计算闭合差,判断闭合差是否超限,计算各测段观测高差的改正数,计算各测段的改正后的高差,计算各点的高程值,检查闭合差是否分配完,闭合水准路线成果计算,9.2 结构体数组,7,1.864,10,-2.56
12、9,4,-1.663,8,2.313,BM.A,BM.A,已知点,25.654,BM.A,B,C,D,29,-0.055,0.013,0.019,0.008,0.015,1.877,-2.550,-1.655,2.328,0,27.531,24.981,23.326,25.654,B,C,B,D,BM.A,0.055,#include#includestruct CD/*CD代表测段的意思*/char CDname10;/*测段名*/char CZname;/*测点名*/double CDZS;/*测段站数*/double CDh;/*测段高差*/double CDGZV;/*测段改正数*/d
13、ouble CDGZh;/*测段改正高差*/double H;/*H为测站高程*/CDS4=AB,A,7,1.864,0.0,0.0,25.654,BC,B,10,-2.569,0.0,0.0,0.0,CD,C,4,-1.663,0.0,0.0,0.0,DA,D,8,2.313,0.0,0.0,0.0,;,void main()int i;double sumCDZS=0,sumCDh=0;/*sumCDZS为测站总数,sumCDh为高差之和*/double f;/*f为允许误差*/for(i=0;i4;i+)sumCDZS=sumCDZS+CDSi.CDZS;/*sumCDZS为测站总数*/
14、sumCDh=sumCDh+CDSi.CDh;/*sumCDh为高差之和*/f=12*sqrt(sumCDZS)/1000;printf(nt=中间计算过程=nn);printf(tt测站总数为%.f站,测站高差之和为%.3fmntt允许误差为:%.3fm,sumCDZS,sumCDh,f);,if(fabs(sumCDh)=f)printf(闭合差未超限!n);for(i=0;i4;i+)CDSi.CDGZV=CDSi.CDZS/sumCDZS*sumCDh*(-1);CDSi.CDGZh=CDSi.CDh+CDSi.CDGZV;printf(tt%c点高差改正数为%.3fm,改正后高差为%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 结构 类型 处理 组合 数据
链接地址:https://www.31ppt.com/p-4940449.html