版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1C程序设计程序设计(chn x sh j)第第11章章第一页,共45页。名字名字年龄年龄出生时间出生时间 年年 月月 日日性别性别名字名字发射时间发射时间 年年 月月 日日重量重量直径直径轨道半径轨道半径与赤道夹角与赤道夹角第1页/共45页第二页,共45页。n结构体类型结构体类型(lixng)n结构体类型结构体类型(lixng)是分量的集合是分量的集合n分量也称成员、成分、域分量也称成员、成分、域结构体类型定义形式结构体类型定义形式A结构体类型定义形式结构体类型定义形式Bstruct t id,. ,id ; . t id,. ,id ;struct sid t id,. ,id ;
2、. t id,. ,id ;第2页/共45页第三页,共45页。enum sext male , female ;struct date int year ,month ,day ;struct preson char name10 ; int age ; enum sext sex ; struct date birthdate ; struct mansatellite char name10 ; struct date lounchdate ; float weight, diameter, orbitrad, angle ; ;第3页/共45页第四页,共45页。year:month:da
3、y:ndate是一个结构是一个结构(jigu)体类型,包含三个成分体类型,包含三个成分n成分成分year为为int类型类型n成分成分month为为int类型类型n成分成分day为为int类型类型第4页/共45页第五页,共45页。npreson是一个结构体类型,包含四个成分是一个结构体类型,包含四个成分(chng fn)n成分成分(chng fn)name为数组类型为数组类型n成分成分(chng fn)age为为int类型类型n成分成分(chng fn)sex为枚举类型为枚举类型n成分成分(chng fn)birthdate仍为一个结构体类型仍为一个结构体类型name:age:sex:year:
4、birthdate:month:day:第5页/共45页第六页,共45页。nmansatellite是一个结构体类型,包含是一个结构体类型,包含(bohn)六个六个成分成分name:year:lounchdate: month:day:weight:diameter:orbitrad:angle:第6页/共45页第七页,共45页。n结构体类型引用结构体类型引用(ynyng)n 在在struct后跟以结构体标签,称为后跟以结构体标签,称为“结构体类结构体类型引用型引用(ynyng)”。在例。在例11-1的结构体类型定的结构体类型定义的意义下义的意义下:n struct daten struct
5、presonn struct mansatelliten 都是结构体类型引用都是结构体类型引用(ynyng),使用它们将,使用它们将分别标记相应结构体定义。分别标记相应结构体定义。第7页/共45页第八页,共45页。n结构体类型说明符结构体类型说明符:结构体类型定义和结构体类型引用统称结构体类型定义和结构体类型引用统称“结构体结构体类型说明符类型说明符”n使用使用(shyng)结构体类型说明符可以结构体类型说明符可以n定义结构体类型的类型名定义结构体类型的类型名n声明结构体类型变量声明结构体类型变量第8页/共45页第九页,共45页。n使用使用 typedef 可以定义结构体可以定义结构体 类型类
6、型(lixng)名名typedef 结构体类型结构体类型(lixng)说明符说明符 标识符标识符n例子例子ntypedef struct int y,m,d datetype;nstruct date int y,m,d ;typedef struct date datetype;第9页/共45页第十页,共45页。例例11-2 定义定义(dngy)结构体类型名结构体类型名typedef struct date int year,month,day ; datetype ;typedef char tstring1010;typedef struct tstring10 name ; int a
7、ge ; enum sext sex ; struct date birthdate ; presontype ; typedef struct mansatellite mansatellitetype datetype birthdate; 第10页/共45页第十一页,共45页。n结构体类型变量声明可以采取如下三种形式之一结构体类型变量声明可以采取如下三种形式之一n使用结构体类型引用使用结构体类型引用(ynyng)n直接使用结构体类型定义直接使用结构体类型定义n使用使用typedef定义的结构体类型名定义的结构体类型名第11页/共45页第十二页,共45页。struct preson zha
8、ng ;struct date int year,month,day ; dateofbirth;struct char author10 ;datetype publish_date ;int page_number ; programming ;mansatellitetype first_east ;变量zhang用结构体类型(lixng)引用声明是struct preson类型(lixng),具有如图结构name:age:sex:year:birthdate:month:day:第12页/共45页第十三页,共45页。struct preson zhang ;struct date in
9、t year,month,day ; dateofbirth;struct char author10 ;datetype publish_date ;int page_number ; programming ;mansatellitetype first_east ;变量(binling)programming使用不带结构体标签的结构体类型定义声明,包含3个成分,分别为字符数组类型的author、datetype类型的publish_date、int类型的page_number,结构如图所示;author:year:publish_date: month:day:page_number:第
10、13页/共45页第十四页,共45页。struct preson zhang ;struct date int year,month,day ; dateofbirth;struct char author10 ;datetype publish_date ;int page_number ; programming ;mansatellitetype first_east ;变量first_east使用typedef定义的类型(lixng)标识符mansatellitetype声明,具有如图结构name:year:lounchdate: month:day:weight:diameter:or
11、bitrad:angle:第14页/共45页第十五页,共45页。n类型定义不分配存储空间,只说明一个数据类型的框架结类型定义不分配存储空间,只说明一个数据类型的框架结构。构。n变量声明时才给变量分配存储空间,并且使得被声明的变变量声明时才给变量分配存储空间,并且使得被声明的变量具有相应类型的结构。量具有相应类型的结构。n到目前为止声明的四个变量到目前为止声明的四个变量zhang、dateofbirth、programming、first_east具有实体,被分配存储空间。具有实体,被分配存储空间。n类型标识符类型标识符datetype、 mansatellitetype只是只是(zhsh)定义
12、定义了一个数据类型的框架,不占用存储空间,只给相应类型了一个数据类型的框架,不占用存储空间,只给相应类型起一个名字。起一个名字。第15页/共45页第十六页,共45页。nC可以定义可以定义(dngy)指向任何类型的指针类指向任何类型的指针类型,并声明相应指针类型的变量,结构体型,并声明相应指针类型的变量,结构体类型当然不例外。类型当然不例外。第16页/共45页第十七页,共45页。struct preson *pointer_preson ; struct date int year,month,day ; *dateofpointer ; struct char author10 ; datet
13、ype publish_date ; int page_number ; *p ; mansatellitetype *p_east变量pointer_preson为指向(zh xin)标签为preson的结构体类型变量的指针变量。 pointer_preson可以指向(zh xin)相应结构体类型的变量。比如 pointer_preson = &zhang ;变量(binling)p为指向无标签结构体类型变量(binling)的指针变量(binling)。 P 可以指向相应结构体类型的变量(binling)。比如 p = &programming ;变量p_east为指向结构体类型mansa
14、tellitetype变量的指针变量。 p_east 可以指向相应结构体类型的变量。比如 p_east = &first_east ;第17页/共45页第十八页,共45页。结构结构(jigu)体变量的成分体变量的成分n访问访问(fngwn)结构体变量的一个成分,使用成员选择表结构体变量的一个成分,使用成员选择表达式达式n成员选择表达式成员选择表达式 直接成员选择直接成员选择n 间接成员选择间接成员选择n直接成员选择直接成员选择 后缀表达式后缀表达式 . 标识符标识符n间接成员选择间接成员选择 后缀表达式后缀表达式 - 标识符标识符 第18页/共45页第十九页,共45页。n直接成员选择直接成员选
15、择n直接成员选择表达式针对直接成员选择表达式针对(zhndu)一般的结构一般的结构体变量。体变量。n 形式是:形式是:n r . w nr 是后缀表达式,最终计算出一个结构体变量;是后缀表达式,最终计算出一个结构体变量;nw是是 r 所属结构体类型中的一个成员名字所属结构体类型中的一个成员名字n下述成员选择表达式是合法的下述成员选择表达式是合法的:n n programming_pascal.author第19页/共45页第二十页,共45页。n间接成员选择间接成员选择n间接成员选择表达式针对指向结构体变量的指针变量间接成员选择表达式针对指向结构体变量的指针变量n形式是形式是
16、n p-w np 是后缀表达式,最终计算出一个是后缀表达式,最终计算出一个(y )指向结构体变量的指指向结构体变量的指针变量;针变量;nw 是是p所指向结构体变量所属类型中的一个所指向结构体变量所属类型中的一个(y )成员名字成员名字n下述成员选择表达式是合法的下述成员选择表达式是合法的:n pointer_preson - name n p_east - weight n p_east - lounchdate第20页/共45页第二十一页,共45页。n也可首先对指针变量进行求地址也可首先对指针变量进行求地址(dzh)运算运算n然后使用直接成员选择然后使用直接成员选择n比如上述三个选择表达式还
17、可以写成如下形式。比如上述三个选择表达式还可以写成如下形式。由于优先级的原因,这里的括号是必须的由于优先级的原因,这里的括号是必须的n(*pointer_preson).namen(*p_east).weight n(*p_east).lounchdate第21页/共45页第二十二页,共45页。n由于成员选择表达式本身也是一个变量访问,它由于成员选择表达式本身也是一个变量访问,它是相应成分类型的一个变量,它与成分类型的其是相应成分类型的一个变量,它与成分类型的其它变量一样它变量一样n凡是可以使用那些变量的地方凡是可以使用那些变量的地方(dfng)都可以使都可以使用成员选择表达式。用成员选择表达
18、式。n对于嵌套结构体,可以认为对于嵌套结构体,可以认为“成员选择表达式成员选择表达式”仍然是一个仍然是一个“后缀表达式后缀表达式”,所以可以继续应用,所以可以继续应用“成员选择表达式成员选择表达式”的规则访问里层的成分。的规则访问里层的成分。nzhang.birthdate.monthnp_east - lounchdate.year第22页/共45页第二十三页,共45页。解:解: /* 复数复数(fsh)类型类型 */ typedef struct complex float real_part,imaginary_part ; complex_type第23页/共45页第二十四页,共45页
19、。/* 复数(fsh)加法 */complex_type complex_add(complex_type x, complex_type y) complex_type add; add.real_part=x.real_part+y.real_part; add.imaginary_part=x.imaginary_part+y.imaginary_part; return add;第24页/共45页第二十五页,共45页。/* 复数(fsh)乘法 */ complex_type complex_mul ( complex_type x, complex_type y ) complex_t
20、ype product ; product.real_part = x.real_part * y.real_part + x.imaginary_part * y.imaginaty_part ; product.imaginary_part = x.real_part * y.imaginary_part + x.imaginaty_part * y.real_part ; return product ; 第25页/共45页第二十六页,共45页。已知图书检索卡的结构如图所示,建立该卡片的数据结构,并编出根据书号检索相应(xingyng)书名、作者名、语种、摘要的函数。书名书名:作者作者:
21、语种语种 出版日期出版日期: 年年 月月 日日书号书号:类号类号序号序号摘要摘要:解: 显然应该用结构体类型来描述该卡片(kpin)。设每个结构体变量为一张卡片(kpin), 全部卡片(kpin)存放在文件 card.dat 中。函数先读入书号;对欲检索的书号采用顺序检索方式检索; 检索到后输出书名、作者名、语种、摘要;最后输出提示信息“search end!”。第26页/共45页第二十七页,共45页。假设主程序中有下述一系列声明FILE * cardpointer ; /* 文件(wnjin)指针 */struct bookno / 书号结构体 char catalogue ; char o
22、rder8 ; ;struct date / 日期结构体 int year,month,day ; ;struct bookcard / 检索卡结构体 char name32,author16,languge16 ; struct date publishingdate ; struct bookno no ; char abstract256; ;第27页/共45页第二十八页,共45页。并且在主函数中已经用cardpointer=fopen(card.dat,r );打开了文件card.dat ,则 检索函数 searchbook 输出检索结果(ji gu)的函数out_anser如下:第2
23、8页/共45页第二十九页,共45页。/* 输出检索(jin su)结果函数 */void out_anser(struct bookcard card ) int i , j , k ; printf( “NAME:%sn”, ); printf( “AUTHOR:%sn”, card.author); printf( “LANGUGE:%sn”, card.languge ); printf(Publish date:%d-%d-%d ,card.publishdate.year ,card.publishdate.month ,card.publishdate.day)
24、; printf( “ABSTRACT:n” ) ; for ( i=0; i3; i+ ) printf( “ ” ) ; for ( k=1; k=64; k+ ) printf( “%c”,card.abstract64*i+j) ; printf(“n”); 第29页/共45页第三十页,共45页。 /* 检索函数 */ void searchbook( void ) char catalogue0 ; char order08 ; struct bookcard card; /* 输入(shr)欲检索的类别, 书号 */ printf ( pleace input catalogue
25、, order : ) ; scanf( “%c” , &catalogue0 ) ; scanf( “%s” , order0 ); /* 检索*/ rewind(cardpointer); while ( !feof(cardpointer) ) fread( &card , sizeof(struct bookcard) ,1, cardpointer); if ( ( card.no.catalogue = catalogue0 ) & ( card.no.order = order0 ) ) out_anser(card) ; printf(“search end!n”);第30页/
26、共45页第三十一页,共45页。n结构体与函数的关系结构体与函数的关系n返回结构体值的函数返回结构体值的函数n函数的结构体参数函数的结构体参数(cnsh)n在在C中允许函数类型为结构体类型,即函数可以返回一个结构体值;中允许函数类型为结构体类型,即函数可以返回一个结构体值;n还允许结构体作为函数的参数还允许结构体作为函数的参数(cnsh),用参数,用参数(cnsh)的方式向的方式向函数传递结构体类型的值。函数传递结构体类型的值。第31页/共45页第三十二页,共45页。n函数函数(hnsh)的计算结果可能是一个结构体值。在的计算结果可能是一个结构体值。在C中,中,有两种途径能够把该结构体值通过函数
27、有两种途径能够把该结构体值通过函数(hnsh)调用带调用带回调用函数回调用函数(hnsh)的主程序。的主程序。n使用指针使用指针函数函数(hnsh)的结果类型是指向结构体类型变量的指针的结果类型是指向结构体类型变量的指针类型类型n直接使用结构体类型直接使用结构体类型函数函数(hnsh)的结果类型是结构体类型,直接把一个结的结果类型是结构体类型,直接把一个结构体值带回调用函数构体值带回调用函数(hnsh)的主程序的主程序第32页/共45页第三十三页,共45页。n第一种方式就是第一种方式就是(jish)返回指针的函数,只不过相返回指针的函数,只不过相应指针是指向结构体类型变量的指针。与其它类型返应
28、指针是指向结构体类型变量的指针。与其它类型返回指针的函数没有任何区别,本书在第八章回指针的函数没有任何区别,本书在第八章8.2节已节已经介绍过,此处不再赘述。经介绍过,此处不再赘述。n本章的例本章的例11-5已经使用了第二种方式,下边再举例介已经使用了第二种方式,下边再举例介绍这种方式。绍这种方式。第33页/共45页第三十四页,共45页。n一个人事档案管理系统中,职工一个人事档案管理系统中,职工(zhgng)登记卡包含姓名、性别、出生时间等信息。登记卡包含姓名、性别、出生时间等信息。为该人事档案管理系统编写输入一个职工为该人事档案管理系统编写输入一个职工(zhgng)卡片的函数,供主管理系统使
29、用。卡片的函数,供主管理系统使用。第34页/共45页第三十五页,共45页。解:职工登记卡的类型定义如下(rxi)。 typedef enum male , female sextype ; typedef struct int year,month,day ; datetype; typedef struct cardperson char name8 ; /* 姓名 */ datetype birthdate ; /* 出生时间 */ sextype sex; /* 性别 */ typecardperson ; 第35页/共45页第三十六页,共45页。typecardperson readc
30、ard(void)typecardperson card; / 说明一个卡片类型变量int sex_tag;printf( pleace input name:); / 以下开始输入scanf(%s,); / 姓名printf( please input birthdate:year、month、day);scanf(“%d %d %d”, &(card.birthdate.year), &(card.birthdate.month), &(card.birthdate.day) );/出生(chshng)时间 printf( pleace input sex(0:male
31、, 1:female);scanf(%d, &sex_tag);/ 性别if ( sex_tag=0 ) card.sex = male ;else card.sex = female ;return card; / 带着一张卡片card值返回第36页/共45页第三十七页,共45页。在主程序中,将使用函数readcard带回的card值。比如主程序中具有(jyu)功能:输入所有职工卡片、填加一张职工卡片等,这些功能的实现都将调用该函数。如果用数组保存所有卡片并且设不超过100个职工,并有声明: #define n 100 int v,flag; typecardperson card_arrn
32、;第37页/共45页第三十八页,共45页。可以设计(shj)实现输入功能的程序片段如下: v=0; flag=1; while (flag) card_arrv = read_card();v+;printf( please choose 0_end 1_continue :); scanf(%d, &flag); 其中语句“card_arrv = read_card();”调用函数read_card 函数带回的值是结构体值,直接送入数组成分变量card_arrv中第38页/共45页第三十九页,共45页。n在函数之间,通过参数传送结构体值也有两种方法在函数之间,通过参数传送结构体值也有两种方法
33、n用指向结构体变量的指针作函数参数用指向结构体变量的指针作函数参数n直接用结构体变量作函数参数直接用结构体变量作函数参数n第一种方式就是指针作函数参数,只不过相应指针是指向第一种方式就是指针作函数参数,只不过相应指针是指向结构体类型结构体类型(lixng)变量的指针。与指向其它类型变量的指针。与指向其它类型(lixng)变量的指针没有任何区别。变量的指针没有任何区别。n本章的例本章的例11-6已经使用了第二种方式,下边再举例介绍这种已经使用了第二种方式,下边再举例介绍这种方式。方式。第39页/共45页第四十页,共45页。n人事档案管理问题。为该人事档案管理系统编一个查询人事档案管理问题。为该人事档案管理系统编一个查询函数,供主管理系统使用。该函数带入被检索人员的全函数,供主管理系统使用。该函数带入被检索人员的全部信息,在档案库中检索,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届湖南省高一下生物期末联考模拟试题含解析
- 山东省济宁市邹城一中2026届高一下生物期末学业水平测试模拟试题含解析
- 2025年小店教师事业编考试真题及答案
- 2025年学生会外联部面试题库及答案
- 2025年酒馆行政助理招聘笔试题及答案
- 2025年保健医生事业编考试题及答案
- 2025年应届生fpga工程师面试题库及答案
- 2025年南京铁道职业技术学院马克思主义基本原理概论期末考试模拟题含答案解析(夺冠)
- 2025年安庆医药高等专科学校马克思主义基本原理概论期末考试模拟题含答案解析(夺冠)
- 2025年饶平县幼儿园教师招教考试备考题库带答案解析(必刷)
- 2026年湖南大众传媒职业技术学院单招综合素质笔试备考试题含详细答案解析
- 生产过程监督管理制度
- 血液灌流在维持性血液透析患者中的临床应用专家共识(2025年版)
- 2026年烟台汽车工程职业学院单招综合素质笔试备考试题带答案解析
- 涉密人员社交媒体使用保密指南
- 项目纸打印合同范本
- 传染病影像学课件
- 研发资料规范管理制度(3篇)
- GB/T 16770.1-2025整体硬质合金直柄立铣刀第1部分:型式与尺寸
- 工业产品销售单位质量安全日管控周排查月调度检查记录表
- 年龄段护理知识培训内容课件
评论
0/150
提交评论