C语言程序设计课件第8章.ppt
《C语言程序设计课件第8章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课件第8章.ppt(58页珍藏版)》请在三一办公上搜索。
1、返回主目录,C语言程序设计,(第8章 结构体与共用体),本章主要介绍结构体和共用体的基本知识,让学生学会利用结构体和共用体编写程序。,1.结构体的概念2.结构体类型数组3.指向结构体类型数据的指针4.结构体类型数据与函数5.链表6.共用体,一、结构体,如果在程序设计时,需要将不同类型的数据组成一个有机整体来引用,此时,用数组是无法完成的,C语言允许用户自己可以定义这种特殊的数据结构,称之为结构体。结构体中可以包含若干个类型不同的数据项。,二、结构体类型的定义,C语言中没有现成的结构体类型,如果用户要使用结构体类型,必须自己定义。结构体类型的一般定义形式如下:struct 结构体类型名类型名1
2、成员名1;类型名2 成员名2;.类型名n 成员名n;,注意:定义结构体类型时,“结构体名”是结构体类型标志,与struct共同组成结构体类型名。,说明:struct student是一个结构体类型名,在使用过程中与系统提供的标准类型(如int、float等)具有同样的地位和作用。一个结构体类型可以包含若干个成员,每个成员的类型可以不一样。一个结构体类型数据在存储时所占的内存单元字节数相当于每个成员所占内存单元字节数的总和。例如:前面定义的struct student结构体类型数据存储时所占内存单元为69字节。,例如:struct studentint number;char name10;ch
3、ar sex;int age;float scroce;char address50;,三、结构体类型变量的定义,结构体类型变量通常采取以下三种形式定义:1.先定义结构体类型,再定义结构体类型变量结构体类型名 结构体变量名;,例如:struct studentint number;char name10;char sex;int age;float scroce;char address50;struct student stud1,stud2;,例如:struct studentint number;char name10;char sex;int age;float scroce;char
4、 address50;stud1,stud2;,2.在定义结构体类型的同时定义变量struct 结构体名类型名1 成员名1;类型名2 成员名2;.类型名n 成员名n;变量名表列;,例如:struct int number;char name10;char sex;int age;float scroce;char address50;stud1,stud2;,3.直接定义结构体类型变量struct 类型名1 成员名1;类型名2 成员名2;.类型名n 成员名n;变量名表列;,注意:结构体类型和结构体类型变量是两 个不同的概念,使用时,先定义类 型,后定义变量。在程序中只能对结构体类型变量进 行操
5、作。结构体中的成员可以单独使用,相 当于一个普通变量,成员名可以和程 序中的普通变量同名,互不干扰。结构体中的成员可以是一个结构体变 量。,例如:struct dateint month;int day;int year;struct student1int number;char name10;char sex;struct date birthday;float scroce;char address50;stu1,stu2;,四、结构体类型变量的引用和初始化,结构体类型变量一旦被定义后,就可以在程序中使用,与数组相似,在程序中不能直接引用结构体类型变量,也不能对结构体类型变量进行整体输入
6、输出,只能引用其中的各个成员,对其中的各个成员进行输入输出。引用结构体变量成员时,象引用普通变量一样,可以进行各种运算。,引用结构体变量成员的一般形式如下:结构体变量名.成员名,例如:前面定义了结构体类型变量stud1和stud2,可以对变量的各个成员进行各种操作,例如:stud1.number=10001;stud2.number=10002;.printf(%d,另外,在程序中,还可以用指向结构体变量的指针变量来引用结构体变量成员。例如:struct student stud1;struct student*p1=stud1;(*p1).number=10001;.,注意:“-”是指向结构
7、体成员运算符,“.”是结构体成员运算符,它们的结合方式从左到右,优先级别最高。,上述程序段,还可以写成下面的形式:struct student stud1;struct student*p1=stud1;p1-number=10001;.,#include stdio.h#include string.hstruct studentint number;char name10;int age;float score;a;main()a.number=1001;strcpy(a.name,liming);a.age=18;a.score=89.5;printf(%-8d%s%8d%6.1f,a.
8、number,a.name,a.age,a.score);,例8-1 利用结构体变量输出学生信息。,#include stdio.hstruct studentint number;char name10;int age;float score;a=1001,liming,18,89.5;main()printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);,例8-2 利用结构体变量输出学生信息。,一、结构体数组的定义和引用,结构体数组同普通数组一样,所有元素类型相同,是同一个结构体类型。,要定义一个结构体类型数组,必须先定义结构体类型,定义结构
9、体类型数组的一般形式如下:struct 结构体名 数组名常量表达式;,例如:struct student a3;,同普通数组相似,在程序中不能整体引用结构体数组,也不能引用结构体数组元素,只能引用结构体数组元素的成员。例如:a1.number=10001;a2.number=10002;,二、结构体数组初始化和应用,例如:struct sst int num;char name10;int age;struct sst a3=1001,zhangsan,18,1002,lisi,19,1003,wangwu,20;.,结构体数组初始化与普通数组初始化相似,可以先定义结构体类型,再定义结构体数组
10、并初始化。,例8-3 某班级学生进行学生干部选举,候选人有张三、李四、王五三位同学,全班共有学生40名,编写一个程序统计候选人的得票数。,#include string.h#include stdio.hstruct numchar name10;int number;main()struct num a3=zhangsan,0,lisi,0,wangwu,0;int i,j;char inputname20;printf(please input the list of candidate:n);for(i=0;i40;i+)scanf(%s,inputname);for(j=0;j3;j+
11、)if(strcmp(inputname,aj.name)=0)aj.number+;printf(n);for(i=0;i3;i+)printf(%10s:%2dn,ai.name,ai.number);,C语言规定:在程序中不能直接对结构体类型数组元素进行输入输出,只能对结构体类型数组元素的成员进行输入输出。结构体类型数组元素的成员的输入与输出与普通数组元素的输入与输出类似,通常利用循环语句来完成。,三、结构体类型数组的输入与输出,main()int n,i,sumSIZE;printf(How many students?n);scanf(%d,例 8.4 利用结构体数组输入并输出一个班
12、学生信息。,#include stdio.h#define SIZE 100struct studentchar name10;int num;float score3;float ave;studSIZE;,1、指向结构体类型数据的指针,以个结构体类型变量的指针就是该结构体类型变量所占据的内存单元的起始地址。在C语言程序中,可以设置一个指针变量,用来指向一个结构体类型的数据。,2、指向结构体类型变量的指针变量,在程序中,如果设置了一个指针变量来专门存放一种结构体类型变量的地址,则该变量就是指向这种结构体类型数据的指针变量,该变量的值就是存放某个结构体类型数据的内存单元的起始地址。,例如:st
13、ruct studentint number;char name10;int age;float score;/*定义结构体类型*/.struct student*p;/*定义指向结构体类型变量的指针变量*/.,指向结构体类型数据的指针变量一般说明形式如下:struct 结构体类型名 变量名;,利用指向结构体类型的指针变量引用结构体变量成员的一般形式如下:(*指针变量名).成员名或 指针变量名-成员名,指向结构体类型变量的指针变量引用,注意:“-”是指向结构体成员运算符,“.”是取结构体成员运算符,它们的结合方式从左到右,优先级别最高。在程序中只能将结构体类型变量的地址赋给一个指向结构体类型的
14、指针变量,一个指向结构体类型的指针变量只能指向结构体类型变量,不能指向变量的成员。,例如:struct studentint number;char name10;int age;float score;struct student stud1;.struct student*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10002;.printf(%d,例 8.8#include stdio.hstruct studentint num;char name20;char sex;float score;main()struct stud
15、ent stu1=1001,Li Ming,M,95.0;struct student*p;p=,在程序中,如果将一个结构体类型数组的地址赋给一个结构体类型的变量,那么该变量就是一个指向结构体类型数组的指针变量。可以利用该指针变量来引用数组元素的各个成员。,3、指向结构体类型数组的指针,对于指向结构体类型数组的指针变量。其引用的方式和指向普通数组的指针变量的引用相类似。,例 8.9#include stdio.hstruct studentint num;char*name;char sex;float score;boy5=101,Zhou ping,M,45,102,Zhang ping,
16、M,62.5,103,Liu fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;main()struct student*ps;printf(No.tNametttSextScoretn);for(ps=boy;psnum,ps-name,ps-sex,ps-score);,注意:ps是指向结构体类型数据的指针变量,只能将数组的地址或某个数组元素的地址赋给ps,不能将数组元素的成员或成员的地址赋给ps,否则,程序将会出错。例如:ps=boy;/*正确*/ps=/*错误*/,1、结构体类型数据与函数,结构体类型变量的成员作函数参数,在函数调用时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 课件

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