1、typedef struct date int year,month,day;datetype;typedef char tstring1010;typedef struct tstring10 name;int age;enum sext sex;struct date birthdate;presontype;typedef struct mansatellite mansatellitetype datetype birthdate;变量变量zhang用结构体类型引用声明用结构体类型引用声明是是struct preson类型,具有如图结构类型,具有如图结构变量变量programming使
2、用不带结构体标签的结构体类型定使用不带结构体标签的结构体类型定义声明,包含义声明,包含3个成分,分别为字符数组类型的个成分,分别为字符数组类型的author、datetype类型的类型的publish_date、int类型的类型的page_number,结构如图所示;结构如图所示;变量变量first_east使用使用typedef定义的类型标识符定义的类型标识符mansatellitetype声明,具有如图结构声明,具有如图结构struct preson *pointer_preson;struct date int year,month,day;*dateofpointer;struct c
3、har author10;datetype publish_date;int page_number;*p;mansatellitetype *p_east变量变量pointer_preson为指向标签为为指向标签为preson的结构体类型变量的的结构体类型变量的指针变量。指针变量。pointer_preson可以指向相应结构体类型的变量。可以指向相应结构体类型的变量。比如比如 pointer_preson=&zhang;变量变量p为指向无标签结构体类型变量的指针变量。为指向无标签结构体类型变量的指针变量。P 可以指向可以指向相应结构体类型的变量。比如相应结构体类型的变量。比如 p=&prog
4、ramming;变量变量p_east为指向结构体类型为指向结构体类型mansatellitetype变量的指针变变量的指针变量。量。p_east 可以指向相应结构体类型的变量。比如可以指向相应结构体类型的变量。比如 p_east=&first_east;/*复数加法复数加法*/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_par
5、t;return add;已知图书检索卡的结构如图所示,建立该卡片的数据结构,并已知图书检索卡的结构如图所示,建立该卡片的数据结构,并编出根据书号检索相应书名、作者名、语种、摘要的函数。编出根据书号检索相应书名、作者名、语种、摘要的函数。解解:显然应该用结构体类型来描述该卡片。设每个结构体变量为显然应该用结构体类型来描述该卡片。设每个结构体变量为一张卡片一张卡片,全部卡片存放在文件全部卡片存放在文件 card.dat 中。函数先读入书号;中。函数先读入书号;对欲检索的书号采用顺序检索方式检索;对欲检索的书号采用顺序检索方式检索;检索到后输出书名、检索到后输出书名、作者名、语种、摘要;最后输出提
6、示信息作者名、语种、摘要;最后输出提示信息“search end!”。假设主程序中有下述一系列声明假设主程序中有下述一系列声明FILE*cardpointer;/*文件指针文件指针*/struct bookno /书号结构体书号结构体 char catalogue;char order8;;struct date /日期结构体日期结构体 int year,month,day;;struct bookcard /检索卡结构体检索卡结构体 char name32,author16,languge16;struct date publishingdate;struct bookno no;char
7、abstract256;;并且在主函数中已经用并且在主函数中已经用cardpointer=fopen(card.dat,r);打开了文件打开了文件card.dat,则,则 检索函数检索函数 searchbook 输出检索结果的函数输出检索结果的函数out_anser如下:如下:解:职工登记卡的类型定义如下。解:职工登记卡的类型定义如下。typedef enum male,female sextype;typedef struct int year,month,day;datetype;typedef struct cardperson char name8;/*姓名姓名*/datetype b
8、irthdate;/*出生时间出生时间*/sextype sex;/*性别性别*/typecardperson;在主程序中,将使用函数在主程序中,将使用函数readcard带回的带回的card值。比值。比如主程序中具有功能:输入所有职工卡片、填加一张如主程序中具有功能:输入所有职工卡片、填加一张职工卡片等,这些功能的实现都将调用该函数。如果职工卡片等,这些功能的实现都将调用该函数。如果用数组保存所有卡片并且设不超过用数组保存所有卡片并且设不超过100个职工,并有声个职工,并有声明:明:#define n 100 int v,flag;typecardperson card_arrn;可以设计实
9、现输入功能的程序片段如下:可以设计实现输入功能的程序片段如下: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中中int search_card(typecardperson current_card)int r=0;while(rn)if(current_card.name=card_arrr.name¤t_card.birthdate.year=card_arrr.birthdate.year¤t_card.birthdate.month=card_arrr.birthdate.month¤t_card.birthdate.day=card_arrr.birthdate.day¤t_card.sex=card_arrr.sex )return r;r+;return-1;