1 / 29

第10讲 结构体

第10讲 结构体. 一、 结构体类型 二、 结构体变量 三、 结构体变量的引用 四、结构体变量的初始化 五、结构体数组. 结构体类型的数据由数目固定,类型不同的若干成员构成,在内存中占有一段连续的存储空间。不同的结构体类型其成员不同。. 在程序中使用结构体,必须先做两项工作: 1)定义结构体类型:描述该结构体的成员名称、成员类型。 2)定义结构体类型变量:根据结构体类型位为定义的结构体变量分配存储空间。. 一、 结构体类型. 结构体类型声明的格式为:. struct 结构体名 { 类型名1 结构成员名1 ;

chaim
Download Presentation

第10讲 结构体

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第10讲结构体 一、结构体类型 二、结构体变量 三、结构体变量的引用 四、结构体变量的初始化 五、结构体数组

  2. 结构体类型的数据由数目固定,类型不同的若干成员构成,在内存中占有一段连续的存储空间。不同的结构体类型其成员不同。 在程序中使用结构体,必须先做两项工作: • 1)定义结构体类型:描述该结构体的成员名称、成员类型。 • 2)定义结构体类型变量:根据结构体类型位为定义的结构体变量分配存储空间。

  3. 一、结构体类型 结构体类型声明的格式为: • struct 结构体名 • { 类型名1 结构成员名1 ; • 类型名2 结构成员名2 ; • ··· • 类型名n 结构成员名n ; • } ;

  4. 结构体类型声明的格式说明: • struct:关键字,是定义结构体类型的标志。 • 结构体名:用户定义的结构体类型名,其命名规则同变量名。 • 类型名1~n:说明了结构成员的类型。 • 结构成员名1~n:用户定义的一个或多个结构体成员的名称,其命名规则同变量名。多个同类型的成员彼此间用逗号分隔。

  5. 定义举例 (1) struct date { int year, month, day ; } ; (2) struct student { char name[8]; int score[2], burse ; int year, month, day ; } ;

  6. 二、结构体变量 • 结构体类型的变量的定义方式: • (1)先声明结构体类型,再定义结构体类型的变量。 • (2)在声明结构体类型的同时定义结构体类型的变量。 • (3)直接定义结构体类型的变量。

  7. year month day yesterday 2字节 2字节 2字节 方式(1) 若事先已声明了结构体类型,那么直接用下面格式定义结构体变量。 struct 结构体名 结构体变量名; 例:struct date yesterday ; 存储形式 :

  8. 方式(2) 在声明结构体类型的同时定义结构体类型的变量。定义格式为: • struct 结构体名 • { 类型名1 结构成员名1 ; • 类型名2 结构成员名2 ; • ··· • 类型名n 结构成员名n ; • } 结构体变量名表 ;

  9. 例:struct student • { char name[8]; • int score[2], burse ; • int year, month, day ; • } tongxue1, gongxue2; 存储形式:

  10. 方式(3) 在声明结构体类型时可以直接定义结构体变量,其定义格式为: • struct • { 类型名1 结构成员名1 ; • 类型名2 结构成员名2 ; • ··· • 类型名n 结构成员名n ; • }结构体变量名表 ;

  11. 例:struct birthday { int year, month, day ; } ; struct { char name[8]; int score[2], burse ; struct birthday csny ; } tongxue1, tongxue2; 存储形式:

  12. 关于结构体的说明: • 类型与变量是不同的概念,注意区分。 • 系统可以对变量赋值、存取、运算,而类型则不能。 • 编译时,系统只对变量分配存贮空间,而类型则不分配 • 结构体中的成员(即"域")也可以是一个结构体变量,即结构体的嵌套。 • 结构体中的成员名可以和程序中的变量同名;不同结构体中的成员名也可以同名。

  13. 三、结构体变量的引用 结构体变量的引用方式为: • 结构体变量名.成员名 其中 ".":为结构体成员运算符,1级运算符。

  14. 结构体变量的引用规则: 例:struct student • { char name[8]; • int score[2], burse; • struct birthday csny ;} t1,t2; • 不能将结构体变量作为一个整体进行输入和输出。 scanf("%s%d%d%d%d%d%d",&t1.name,&t1.score[0], &t1.score[1],&t1.burse,&t1.csny.year, &t1.csny.month,&t1.csny.day); printf("%s,%d,%d,%d,%d,%d,%d\n",t2.name, t2.score[0],t2.score[1],t2.burse, t2.csny.year,t2.csny.month,t2.csny.day);

  15. 内嵌结构体成员的引用,必须逐层使用成员名定位,找到最底层的成员。内嵌结构体成员的引用,必须逐层使用成员名定位,找到最底层的成员。 例t1.burse t2.csny.year。 • 若结构体中的成员是字符型数组时,则可将其看作是“字符串变量”,而直接引用。 例 t1.name是对成员字符数组name的整体引用。 • 若结构体中的成员是数值型数组时,则对该数组成员的引用,应为对该数组元素的引用。 例 t1.score[0] t1.score[1]

  16. 四、结构体变量的初始化 格式: struct 结构体名 结构体变量名={初始化表}; 特点: 对结构体变量进行初始化时,系统是按每个成员在结构体中的顺序一一对应赋初值的。

  17. 例:struct student • {char name[8]; • int score[2], burse; • struct birthday csny; • } tongxue1={“张三”,98,95,1000,1983,5,23}; 存储形式:

  18. 例: 结构体变量的输入与输出。 struct birthday { int year, month, day ; } ; struct student { char name[8]; int score[2], burse ; struct birthday csny ; }; main( ) { struct student t1, t2; scanf("%s%d%d%d%d%d%d",t1.name,&t1.score[0], &t1.score[1], &t1.burse,&t1.csny.year, &t1.csny.month,&t1.csny.day); t2=t1; printf("%s,%d,%d,%d,%d,%d,%d\n",t2.name,t2.score[0], t2.score[1],t2.burse,t2.csny.year,t2.csny.month,t2.csny.day ); }

  19. 五、结构体数组 1、定义 格式: • struct 结构体名 结构体数组名={初始化表}; • struct [ 结构体名 ] { 类型名1 结构成员名1 ; 类型名2 结构成员名2 ; ··· 类型名n 结构成员名n ; } 结构体数组名表 = {初始化表} ;

  20. 定义结构体数组的方法和定义结构体变量的方法一样,只是必须说明其为数组。 定义结构体变量的三种方法都可以用来定义结构体数组。

  21. (1)先定义结构体类型,再定义变量。 struct person { char name[20]; char sex; int age; float height; } ; struct person per[3];

  22. (2)定义类型的同时定义变量。 struct person { char name[20]; char sex; int age; float height; } per[3];

  23. (3)直接定义结构体类型变量,省略类型名。 struct { char name[20]; char sex; int age; float height; } per[3];

  24. 2、初始化 和一般数组一样,结构体数组也可以进行初始化。 数组每个元素的初值都放在一对大括号中,括号中依次排列元素各成员的初始值。

  25. 例:struct person { char name[20]; char sex; int age; float height; } per[3] = {{“Li ping”,’M’,20,175.5}, {“Wang ling”,’F’,19,162.5} {“zhaohui”,’M’,20,176}};

  26. 例题:结构体数组的引用 struct birthday { int year, month, day ; } ; struct student { char name[8]; int score[2], burse ; struct birthday csny ; }; main( ) { struct student t[30]; int i; for (i=0 ; i<30 ; i++ ) scanf("%s%d%d%d%d%d%d",t[i].name,&t[i].score[0], &t[i].score[1], t[i].burse,&t[i].csny.year,&t[i].csny.month,&t[i].csny.day); for (i=0 ; i<30 ; i++ ) printf("%s,%d,%d,%d,%d,%d,%d\n",t[i].name,t[i].score[0], t[i].score[1],t[i].burse, t[i].csny.year,t[i].csny.month,t[i].csny.day); }

  27. 例题:统计学生人数,并计算平均成绩 #define N 6 main( ) { struct student { char name[20]; char sex; int score; }; struct student stu[N]; int i,m_num=0,f_num=0; float average,sum=0;

  28. for(i=0;i<N;i++) { printf(“Please input name :”); \*输入学生信息*\ gets(stu[i].name); \*输入学生成绩*\ printf(" sex :"); scanf("%c",&stu[i].sex); printf(" score:"); scanf("%d",&stu[i].score); getchar(); } for(i=0;i<N;i++) \*计算学生人数和总成绩*\ { if (stu[i].sex=='M'||stu[i].sex=='m') m_num=m_num+1; else f_num=f_num+1; sum=sum+stu[i].score; }

  29. average=sum/N; \*计算平均成绩并输出*\ printf("m_num=%d, f_num=%d,average=%7.2f\n", m_num,f_num,average); }

More Related