C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和

上传人:E**** 文档编号:89422822 上传时间:2019-05-25 格式:PPT 页数:72 大小:315KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和_第1页
第1页 / 共72页
C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和_第2页
第2页 / 共72页
C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和_第3页
第3页 / 共72页
C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和_第4页
第4页 / 共72页
C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 王煜 等 第10章 结构体、枚举和(72页珍藏版)》请在金锄头文库上搜索。

1、第10章 结构体、枚举和共用体类型,10.1 结构体类型 10.2结构体和函数 10.3 动态数据结构链表 10.4枚举类型 10.5共用体类型 10.6 用户自定义类型,10.1 结构体类型,结构体类型的定义 结构体类型中可以根据需要包含若干相同或不同类型的成员,这些成员所代表的信息必须是相关的信息。 结构体类型定义的格式为: struct 结构体名 类型名 成员名1; 类型名 成员名2; 类型名 成员名n; ; 例如,struct date int year; int month; int day; ;,10.1 结构体类型,struct student int number; /*学号*

2、/ char name8; /*姓名*/ char sex; /*性别*/ float score4; /*成绩*/ ; struct是结构体类型的标识,是关键字。struct和后面的结构体名共同构成结构体类型名。结构体名应符合标识符的命名规则。 结构体所有成员的定义用花括弧括起来。结构体成员的定义方式和变量的定义方式一样,成员类型可以是基本类型的,也可以是构造类型的。各成员之间用分号分隔。 结构体内的各个成员名不能重名,但成员名可以与结构体外其他标识符同名,并不产生冲突。,10.1 结构体类型,结构体变量的定义 用已经定义的结构体类型定义结构体变量。 struct student stu;

3、定义结构体类型的同时定义结构体变量。stu1,stu2。 struct student int number; /*学号*/ char name8; /*姓名*/ char sex; /*性别*/ float score4; /*成绩*/ stu1,stu2;,10.1 结构体类型,定义无名结构体类型的同时定义结构体变量。这种定义形式省略了结构体名。不再需要定义此种类型变量的情况才可采用这种方式。 struct int number; /*学号*/ char name8; /*姓名*/ char sex; /*性别*/ float score4; /*成绩*/ stu 结构体变量各个成员按照定

4、义的顺序依次占用连续的空间。可以定义指针变量指向结构体类型变量。 结构体变量的地址虽与其第一个成员的地址的值是相同的,但它们的类型是不同的。它们之间不能直接相互赋值,但是可以先将其用强制类型转换,转换为同一类型指针后相互赋值。,10.1 结构体类型,结构体变量的初始化和引用 结构体变量的初始化 若在定义之后进行初始化操作,只能对每个成员单独进行赋值。 若在定义变量的同时进行初始化,则用一对花括弧括起各个成员值的列表并用赋值号和变量连接,成员值之间逗号分隔,具体格式为: 结构体类型名 结构体变量=成员值列表; 例如, struct student stu=1001, “wang“, f, 60.

5、5,80,75,90; 结构体变量的引用 只能引用结构体变量的成员,不能引用整个结构体变量。结构体变量的成员引用形式为: 结构体变量名.成员名 其中“.”称为成员运算符。如果是通过指向结构体变量的指针引用结构体成员,形式为: (*指针变量名).成员名 或 指针变量名-成员名,10.1 结构体类型,如果结构体的成员仍然是构造类型,则需要逐级引用,直至最低级的成员,即只能对结构体变量最低级的成员进行存取和运算。 【例10.1】输入学生的各项信息,计算总分和平均成绩后输出。 #include “stdio.h“ struct date int year; int month; int day; ;

6、/*定义结构体类型struct date*/ struct student int number; /*学号*/ char name10; /*姓名*/ struct date birthday; /*生日, struct date类型*/,10.1 结构体类型,float score4; /*四门课成绩*/ float total; /*总分*/ float ave; /*平均成绩*/ ; /*定义结构体类型struct student*/ main( ) struct student stu,*p; int k; printf(“please enter number,10.1 结构体类型

7、,for(stu.total=0,k=0;knumber); printf(“name :%sn“, p-name); printf(“birthday :%d,%d,%dn“, (*p).birthday.year, (*p).birthday.month, (*p).birthday.day); printf(“score: “); for(k=0;kscorek); printf(“ntotal: %6.2f n“,stu.total);,10.1 结构体类型,printf(“average: %6.2f n “,stu.ave); 某次程序运行结果为: please enter num

8、ber& name: 1002 li please enter birthday(year,month,day):1975 6 8 please enter the score(4):80 78.5 92 83.5 number :1002 name :li birthday :1975,6,8 score: 80.00 78.50 92.00 83.50 total:334.00 average: 83.50,10.1 结构体类型,结构体数组 结构体数组的定义、初始化 若数组元素的类型为结构体类型,数组为结构体数组。 定义结构体数组的同时也可对数组进行初始化操作。例如, struct stu

9、dent int number; /*学号*/ char name10; /*姓名*/ float score4; /*四门课程成绩*/ float total; /*总分*/ float ave; /*平均成绩*/ stu3= 461,“liu“,80,78,67,80,0,0,032,“geng“,98,78,86,90, 0,0, 103, “qian“,79,89,68,80,0,0 ; 可以定义指向结构体数组元素的指针变量,然后通过指针对数组元素操作。,10.1 结构体类型,结构体数组的引用 结构体数组元素也是通过数组名和下标来引用,但要注意只能对最低级的成员进行存取和运算。引用的一

10、般形式为: 数组名下标.成员名 例如,stu1.number 、stu0.score2、 stu2.ave 通过指针引用结构体数组元素的形式和通过指针引用结构变量形式一样,为: (*指针变量名).成员名 或 指针变量名-成员名 例如,语句“p=,10.1 结构体类型,【例10.2】计算某班期末考试中所有学生的总分和平均成绩。 #define N 50 #include “stdio.h“ struct student int number; /*学号*/ char name10; /*姓名*/ float score4; /*四门课程成绩*/ float total; /*总分*/ float

11、 ave; /*平均成绩*/ ; main( ) struct student stuN,*p; int i,k; for(i=0, p=stu;pstu +N;p+,i+) /*输入学生的信息*/ printf(“the %d studentn “,i); printf(“number,10.1 结构体类型,scanf(“%d %s“, ,10.2结构体和函数,结构体变量的成员作为函数参数 结构体变量的成员可作为函数的实际参数,但是不适合作函数的形式参数。 结构体变量的成员作函数实参的用法与普通变量作函数实参的用法相同,形参与实参之间仍然是“值传递”的方式。 【例10.3】重新编写例10.2

12、。 #define N 50 #include “stdio.h“ struct student int number; /*学号*/ char name10; /*姓名*/ float score4; /*四门课程成绩*/ float total; /*总分*/ float ave; /*平均成绩*/ ;,10.2结构体和函数,float total(float s,int n) /*计算总成绩*/ int k; float sum=0; for(k=0;kn;k+) sum+=sk; return(sum); float average( float x, int n ) return(x

13、/n) ; /*返回平均值*/ main( ) struct student stuN; int i,k; for(i=0;iN;i+) /*输入学生的信息*/ printf(“the %d studentn “,i); printf(“number,10.2结构体和函数,scanf(“%d %s“, ,10.2结构体和函数,结构体指针变量作为函数参数 允许函数之间传递结构体变量,若形参是结构体变量,那么实参也应是同类型的结构体。被调用函数对形参结构体变量的修改不能传递给实参。形参结构体变量占用内存空间、接收实参数据带来空间和时间的巨大开销。因此语法上虽然允许,但一般很少采用这种方式。 若向函

14、数传递结构体变量的地址,则可以通过指针对实参结构体变量的空间操作,从而改变实参的值。参数传递时只需传递一个地址,空间和时间的代价都很小。 一般采用结构体指针作为函数参数,而不采用结构体变量作为函数参数。,10.2结构体和函数,【例10.4】重新编写例10.3。 #define N 50 #include “stdio.h“ struct student int number; /*学号*/ char name10; /*姓名*/ float score4; /*四门课程成绩*/ float total; /*总分*/ float ave; /*平均成绩*/ ; void input(struct student *stu) /*输入学生信息*/ int k; printf(“number,10.2结构体和函数,for(k=0;kscorek); void total_average(struct student *stu) /*计算总成绩和平均值*/ int k; stu-tota

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号