[其它考试]计算机二级必备之 第07章 结构体与共用体.ppt
《[其它考试]计算机二级必备之 第07章 结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《[其它考试]计算机二级必备之 第07章 结构体与共用体.ppt(49页珍藏版)》请在三一办公上搜索。
1、1,第七章结构体、共用体和枚举,2,本章要点,结构体类型的定义和引用结构体数组指向结构体变量的指针共用体枚举,3,问题的引出,在日常生活中,我们常常会遇到一些需要填写的登记表,如住宿表、成绩表、通讯地址等等。例如:填写一个学生的学号、姓名、性别、年龄和地址等信息。int num;char name20;char sex;int age;float score;char addr30,应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。,4,7.1.1 结构体类型的定义,定义一个结构体类型的一般形式为:struct 结构体名 成员表列;如:struct stu
2、dent int num;char name20;char sex;int age;float score;char addr30;,结构体名,类型名,成员名,7.1 结构体类型的定义和引用,5,7.1.2 结构体类型变量的定义,可以采取以下3种方法定义结构体类型变量:(1)先定义结构体类型,再定义变量名例如:struct student student1,student2;|结构体类型名 结构体变量名 定义了student1和student2为struct student类型的变量,即它们具有struct student类型的结构。,6,当定义了结构体类型后,系统不分配内存空间,只有当定义了
3、结构体类型变量之后,系统才会为之分配内存空间。例如:struct student int num;char name20;char sex;int age;float score;char addr30;struct student student1,student2;student1和student2在内存中各占59个字节(2+20+1+2+4+30=59)。,7,(2)在声明类型的同时定义变量 定义的一般形式如下:struct结构体名 成员表列 变量名表列;,例如:struct student int num;char name20;char sex;int age;float score
4、;char addr30;student1,student2;,8,(3)直接定义结构体类型变量 其一般形式为:struct 成员表列变量名表列;即不出现结构体名。,注意:(1)类型与变量是不同的概念,不要混同。我们只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。,注意:(2)对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量。(3)成员也可以是一个结构体变量。(4)成员名可以与程序中的变量名相同,二者不代表同一对象。,9,例如:struct date int month;int day;int year;struct
5、employee char name20;struct date birthday;char department30;char address30;long box;long phone;char email30;employee1,employee2;,10,由于结构体类型变量汇集了各类不同数据类型的成员,所以结构体类型变量的初始化就略显复杂。结构体类型变量的定义和初始化为:struct stu char name20;char sex;long num;float score3;struct stu student=“liping”,f,970541,98.5,97.4,95;,7.1.
6、3 结构体类型变量的初始化,struct stu student=“liping”,f,970541,98.5,97.4,95;,11,7.1.4 结构体类型变量的引用,引用结构体变量中成员的方式为:结构体变量名.成员名例如,定义结构体类型及变量如下:struct data int day;int month;int year;time1,time2;,time1.day表示time1变量中的day成员,即time1的day项。可以对变量的成员赋值,例如:time1.day=10;“.”是成员(分量)运算符,它在所有的运算符中优先级最高,因此可以把time1.day作为一个整体来看待。上面赋值
7、语句的作用是将整数10赋给time1变量中的成员day。,12,注意:如果成员本身又属一个结构体类型,则要用若干个成员运算符,逐级地找到最低一级的成员。只能对最低级的成员进行赋值或存取以及运算。,例如,对定义的结构体变量employee1,可以这样访问各成员:employee1.nameemployee1.birthday.day,struct date int month;int day;int year;struct employee char name20;struct date birthday;char department30;char address30;long box;lon
8、g phone;char email30;employee1,employee2;,13,应遵守以下规则:不能将一个结构体变量作为一个整体进行输入和输出。例如,已定义student1和student2为结构体变量并且它们已有值。不能这样引用:printf(“%d,%s,%c,%d,%f,%sn”,student1);只能对结构体变量中的各个成员分别进行输入和输出。(2)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。例如:student2.score=student1.score;sum=student1.score+student2.score;studen
9、t1.age+;+student1.age;(3)可以引用结构体变量成员的地址,也可以引用结构体变量的地址如:scanf(%d“,但不能用以下语句整体读入结构体变量,如:scanf(%d,%s,%c,%d,%f,%s“,&student1);,14,7.2 结构体类型数组的定义和使用,一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们又都分别包括各个成员(分量)项。,15,7.2.1 定义结构体数组 和定义结构体变量的方
10、法相仿,只需说明其为数组即可。例如:struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu3;,以上定义了一个数组stu,数组有个元素,均为struct student类型数据。,16,也可以直接定义一个结构体数组,例如:struct student int num;stu3;或:strcut int num;stu3;,17,7.2.2 结构体数组的初始化 与其他类型的数组一样,对结构体数组可以初始化。例如:struct student int num;cha
11、r name20;char sex;int age;float score;char addr30;stu2=10101,LiLin,M,18,87.5,103 BeijingRoad,10102,Zhang Fun,M,19,99,130 Shanghai Road;,18,当然,数组的初始化也可以用以下形式:struct student int num;struct studentstr=,;即先声明结构体类型,然后定义数组为该结构体类型,在定义数组时初始化。,结构体数组初始化的一般形式是在定义数组的后面加上“初值表列;”。,19,7.2.3 结构体数组应用举例,例2:对候选人得票的统计程
12、序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。#include#include struct person char name20;int count;leader3=“Li”,0,”Zhang”,0,”Fun”,0;,20,void main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;printf(“n”);for(i=0;i3;i+)
13、printf(“%5s:%dn”,leaderi.name,leaderi.count);,运行结果::,21,7.3 结构体指针的定义和引用,指针变量非常灵活方便,可以指向任一类型变量的起始地址。同样,若定义指针变量指向结构体类型变量,则表示指向该结构体变量的起始地址,因此也可以通过指针来引用结构体类型变量。7.3.1 指向结构体类型变量的使用 下面通过一个简单例子来说明指向结构体变量的指针变量的应用。,22,例指向结构体变量的指针的应用#include#include void main()struct student long num;char name20;char sex;float
14、 score;struct student stu_1;struct student*p;p=,printf(No.:%ldnname:%snsex:%cn score:%fn,stu-1.num,stu-1.name,stu-1.sex,stu-1.score);printf(No.:%ldnname:%snsex:%cn score:%fn,(*p).num,(*p).name,(*p).sex,(*p).score);,运行结果:89101 name:LiLin sex:score:89.500000:89101 name:LiLin sex:score:89.500000,23,程序分
15、析:在函数的执行部分将结构体变量_的起始地址赋给指针变量,也就是使指向-,然后对_的各成员赋值。第一个函数是输出_的各个成员的值。用_ 表示_中的成员,依此类推。第二个函数也是用来输出_各成员的值,但使用的是(*)这样的形式。注意*p两侧的括弧不可省,因为“”优先于“*”运算符,*p.num就等价于*(p.num)了。,图11-7,24,在C语言中,为了使用方便和使之直观,可以把(*p)num改用p-num来代替,它表示*p所指向的结构体变量中的num成员。同样,(*p).name等价于p-name。也就是说,以下三种形式等价:结构体变量成员名(*p)成员名 p-成员名 上面程序中最后一个pr
16、intf函数中的输出项表列可以改写为p-num,p-name,p-sex,p-score。,请分析以下几种运算:-得到指向的结构体变量中的成员的值。-得到指向的结构体变量中的成员的值,用完该值后使它加。-得到指向的结构体变量中的成员的值加,然后再使用它。,25,例4 指向结构体数组的指针的应用#include struct student int num;char name20;char sex;int age;struct student str3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,WangMing,F,20;,void main()s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 其它考试 其它考试计算机二级必备之 第07章 结构体与共用体 其它 考试 计算机 二级 必备 07 结构 共用

链接地址:https://www.31ppt.com/p-6034691.html