C语言程序设计ppt课件第8章.ppt
《C语言程序设计ppt课件第8章.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt课件第8章.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、返回主目录返回主目录 本章主要介绍结构体和共用体的本章主要介绍结构体和共用体的基本知识,让学生学会利用结构体和基本知识,让学生学会利用结构体和共用体编写程序。共用体编写程序。1.1.结构体的概念结构体的概念2.2.结构体类型数组结构体类型数组3.3.指向结构体类型数据的指针指向结构体类型数据的指针4.4.结构体类型数据与函数结构体类型数据与函数5.5.链表链表6.6.共用体共用体一、结构体一、结构体如果在程序设计时,需要将不同类型的数据组成一个有机如果在程序设计时,需要将不同类型的数据组成一个有机整体来引用,此时,用数组是无法完成的,整体来引用,此时,用数组是无法完成的,C C语言允许用语言允
2、许用户自己可以定义这种特殊的数据结构,称之为结构体。结户自己可以定义这种特殊的数据结构,称之为结构体。结构体中可以包含若干个类型不同的数据项。构体中可以包含若干个类型不同的数据项。二、结构体类型的定义二、结构体类型的定义C C语言中没有现成的结构体类型,如果用户要使用结构体类语言中没有现成的结构体类型,如果用户要使用结构体类型,必须自己定义。结构体类型的一般定义形式如下:型,必须自己定义。结构体类型的一般定义形式如下:struct struct 结构体类型名结构体类型名 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;注
3、意:定义结构体类型时,注意:定义结构体类型时,“结构体名结构体名”是结构体类型标志,是结构体类型标志,与与struct共同组成结构体类型名。共同组成结构体类型名。说明说明:struct studentstruct student是一个结构体类型名,在是一个结构体类型名,在使用过程中与系统提供的标准类型使用过程中与系统提供的标准类型(如如intint、floatfloat等等)具有同样的地位和作用。具有同样的地位和作用。一个结构体类型可以包含若干个成员,一个结构体类型可以包含若干个成员,每个成员的类型可以不一样。每个成员的类型可以不一样。一个结构体类型数据在存储时所占的内一个结构体类型数据在存储
4、时所占的内存单元字节数相当于每个成员所占内存单存单元字节数相当于每个成员所占内存单元字节数的总和。例如:前面定义的元字节数的总和。例如:前面定义的struct studentstruct student结构体类型数据存储时所占结构体类型数据存储时所占内存单元为内存单元为6969字节。字节。例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;
5、char address50;三、结构体类型变量的定义三、结构体类型变量的定义结构体类型变量通常采取以下三种形式定义:结构体类型变量通常采取以下三种形式定义:1.1.先定义结构体类型,再定义结构体类型变量先定义结构体类型,再定义结构体类型变量结构体类型名结构体类型名 结构体变量名;结构体变量名;例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address
6、50;char address50;struct student stud1,stud2;struct student stud1,stud2;例如:例如:struct studentstruct studentint number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;char address50;stud1,stud2stud1,stud2;2.2.在定义结构体类型的同时定义变量在定义结构体类型的同时定义变量s
7、truct struct 结构体名结构体名 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;变量名表列;变量名表列;例如:例如:struct struct int number;int number;char name10;char name10;char sex;char sex;int age;int age;float scroce;float scroce;char address50;char address50;stud1,stud2stud1,stud2;3.3.直接定义结构体类型变量直接定义结构体类型变量
8、struct struct 类型名类型名1 1 成员名成员名1 1;类型名类型名2 2 成员名成员名2 2;.类型名类型名n n 成员名成员名n n;变量名表列;变量名表列;注意:注意:结构体类型和结构体类型变量是两结构体类型和结构体类型变量是两 个不同的概念,使用时,先定义类个不同的概念,使用时,先定义类 型,后定义变量。型,后定义变量。在程序中只能对结构体类型变量进在程序中只能对结构体类型变量进 行操作。行操作。结构体中的成员可以单独使用,相结构体中的成员可以单独使用,相 当于一个普通变量,成员名可以和程当于一个普通变量,成员名可以和程 序中的普通变量同名,互不干扰。序中的普通变量同名,互
9、不干扰。结构体中的成员可以是一个结构体变结构体中的成员可以是一个结构体变 量。量。例如:例如:struct datestruct dateint month;int month;int day;int day;int year;int year;struct student1struct student1int number;int number;char name10;char name10;char sex;char sex;struct date struct date birthday;birthday;float scroce;float scroce;char address50;
10、char address50;stu1,stu2;stu1,stu2;四、结构体类型变量的引用和初始化四、结构体类型变量的引用和初始化结构体类型变量一旦被定义后,就可以在程序中使用,结构体类型变量一旦被定义后,就可以在程序中使用,与数组相似,与数组相似,在程序中不能直接引用结构体类型变量在程序中不能直接引用结构体类型变量,也不能对结构体类型变量进行整体输入输出,也不能对结构体类型变量进行整体输入输出,只能引只能引用其中的各个成员用其中的各个成员,对其中的各个成员进行输入输出。对其中的各个成员进行输入输出。引用结构体变量成员时,象引用普通变量一样,可以引用结构体变量成员时,象引用普通变量一样,可
11、以进行各种运算。进行各种运算。引用结构体变量成员的一般形式如下:引用结构体变量成员的一般形式如下:结构体变量名结构体变量名.成员名成员名例如:前面定义了结构体类型变量例如:前面定义了结构体类型变量stud1stud1和和stud2stud2,可,可以对变量的各个成员进行各种操作以对变量的各个成员进行各种操作,例如:例如:stud1.number=10001;stud1.number=10001;stud2.number=10002;stud2.number=10002;.printf(%d,&d,stud1.number,stud2.number);printf(%d,&d,stud1.num
12、ber,stud2.number);另外,在程序中,还另外,在程序中,还可以用指向结构体变量的指针变量可以用指向结构体变量的指针变量来引用结构体变量成员。来引用结构体变量成员。例如:例如:struct student stud1;struct student stud1;struct student*p1=stud1;struct student*p1=stud1;(*p1).number=10001;(*p1).number=10001;.注意:注意:“-”“-”是指向是指向结构体成员运结构体成员运算符,算符,“.”“.”是是结构体成员运结构体成员运算符,它们的算符,它们的结合方式从左结合方
13、式从左到右,优先级到右,优先级别最高。别最高。上述程序段,还可以写成下面的形式:上述程序段,还可以写成下面的形式:struct student stud1;struct student stud1;struct student*p1=stud1;struct student*p1=stud1;p1-number=10001;p1-number=10001;.#include stdio.h#include stdio.h#include string.h#include string.hstruct studentstruct studentint number;int number;char
14、 name10;char name10;int age;int age;float score;a;float score;a;main()main()a.number=1001;a.number=1001;strcpy(a.name,liming);strcpy(a.name,liming);a.age=18;a.age=18;a.score=89.5;a.score=89.5;printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);例例
15、8-1 利用结构体变量输出学生信息。利用结构体变量输出学生信息。#include stdio.h#include stdio.hstruct studentstruct studentint number;int number;char name10;char name10;int age;int age;float score;float score;a=1001,liming,18,89.5;a=1001,liming,18,89.5;main()main()printf(%-8d%s%8d%6.1f,a.number,a.name,a.age,a.score);printf(%-8d%s
16、%8d%6.1f,a.number,a.name,a.age,a.score);例例8-2 利用结构体变量输出学生信息。利用结构体变量输出学生信息。一、结构体数组的定义和引用一、结构体数组的定义和引用结构体数组同普通数组一样,所有元素类型相同,是同一个结结构体数组同普通数组一样,所有元素类型相同,是同一个结构体类型。构体类型。要定义一个结构体类型数组,必须先定义结构体类型,要定义一个结构体类型数组,必须先定义结构体类型,定义结构体类型数组的一般形式如下:定义结构体类型数组的一般形式如下:struct struct 结构体名结构体名 数组名数组名 常量表达式常量表达式;例如:例如:struct
17、student a3;struct student a3;同普通数组相似,在程序中不能整体引用结构体数组,也不能同普通数组相似,在程序中不能整体引用结构体数组,也不能引用结构体数组元素,引用结构体数组元素,只能引用结构体数组元素的成员只能引用结构体数组元素的成员。例如:例如:a1.number=10001;a2.number=10002;a1.number=10001;a2.number=10002;二、结构体数组初始化和应用二、结构体数组初始化和应用例如:例如:struct sst struct sst int num;int num;char name10;char name10;int
18、age ;int age ;struct sst a3=1001,zhangsan,18,struct sst a3=1001,zhangsan,18,1002,lisi,19,1002,lisi,19,1003,wangwu,20;1003,wangwu,20;.结构体数组初始化与普通数组初始化相似,可以先定义结构体结构体数组初始化与普通数组初始化相似,可以先定义结构体类型,再定义结构体数组并初始化。类型,再定义结构体数组并初始化。例例8-3 8-3 某班级学生进行学生干部选举,候选人有张三、李四、王五三位同某班级学生进行学生干部选举,候选人有张三、李四、王五三位同学,全班共有学生学,全班共
19、有学生4040名,编写一个程序统计候选人的得票数。名,编写一个程序统计候选人的得票数。#include string.h#include string.h#include stdio.h#include stdio.hstruct numstruct numchar name10;char name10;int number;int number;main()main()struct num a3=zhangsan,0,lisi,0,wangwu,0;struct num a3=zhangsan,0,lisi,0,wangwu,0;int i,j;int i,j;char inputname2
20、0;char inputname20;printf(please input the list of candidate:n);printf(please input the list of candidate:n);for(i=0;i40;i+)for(i=0;i40;i+)scanf(%s,inputname);scanf(%s,inputname);for(j=0;j3;j+)for(j=0;j3;j+)if(strcmp(inputname,aj.name)=0)aj.number+;if(strcmp(inputname,aj.name)=0)aj.number+;printf(n)
21、;printf(n);for(i=0;i3;i+)for(i=0;i3;i+)printf(%10s:%2dn,ai.name,ai.number);printf(%10s:%2dn,ai.name,ai.number);C C语言规定:在程序中不能直接对结构体类型数组元素进语言规定:在程序中不能直接对结构体类型数组元素进行输入输出,只能对结构体类型数组元素的成员进行输入输行输入输出,只能对结构体类型数组元素的成员进行输入输出。结构体类型数组元素的成员的输入与输出与普通数组元出。结构体类型数组元素的成员的输入与输出与普通数组元素的输入与输出类似,通常利用循环语句来完成。素的输入与输出类似,通常
22、利用循环语句来完成。三、结构体类型数组的输入与输出三、结构体类型数组的输入与输出main()main()int n,i,sumSIZE;int n,i,sumSIZE;printf(How many students?n);printf(How many students?n);scanf(%d,&n);scanf(%d,&n);for(i=0;in;i+)for(i=0;in;i+)printf(Name?n);scanf(%s,studi.name);printf(Name?n);scanf(%s,studi.name);printf(No?n);scanf(%d,&studi.num);
23、printf(No?n);scanf(%d,&studi.num);printf(Score1,Score2,Score3?n);printf(Score1,Score2,Score3?n);scanf(%f,%f,%f,&studi.score0,&studi.score1,&studi.score2 scanf(%f,%f,%f,&studi.score0,&studi.score1,&studi.score2););sumi=studi.score0+studi.score1+studi.score2;sumi=studi.score0+studi.score1+studi.score2
24、;studi.ave=sumi/3.0;studi.ave=sumi/3.0;printf(n NAME No.SCORE1 SCORE2 SCORE3 AVEn);printf(n NAME No.SCORE1 SCORE2 SCORE3 AVEn);printf(-n);printf(-n);for(i=0;in;i+)for(i=0;i成员名成员名 指向结构体类型变量的指针变量引用指向结构体类型变量的指针变量引用注意:注意:“-”是指向结构体成员运算符,是指向结构体成员运算符,“.”是取结构体成员运算是取结构体成员运算符,它们的结合方式从左到右,优先级别最高。符,它们的结合方式从左到右,
25、优先级别最高。在程序中只能将结构体类型变量的地址赋给一个指向结在程序中只能将结构体类型变量的地址赋给一个指向结构体类型的指针变量,一个指向结构体类型的指针变量只能指构体类型的指针变量,一个指向结构体类型的指针变量只能指向结构体类型变量,不能指向变量的成员。向结构体类型变量,不能指向变量的成员。例如:例如:struct studentint number;char name10;int age;float score;struct student stud1;.struct student*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 ppt 课件
限制150内