C语言程序设计第8章.pptx
《C语言程序设计第8章.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计第8章.pptx(57页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、结构体如果在程序设计时,需要将不同类型的数据组成一个有机整体来引用,此时,用数组是无法完成的,C语言允许用户自己可以定义这种特殊的数据结构,称之为结构体。结构体中可以包含若干个类型不同的数据项。第1页/共57页二、结构体类型的定义C语言中没有现成的结构体类型,如果用户要使用结构体类型,必须自己定义。结构体类型的一般定义形式如下:struct 结构体类型名类型名1 成员名1;类型名2 成员名2;.类型名n 成员名n;注意:定义结构体类型时,“结构体名”是结构体类型标志,与struct共同组成结构体类型名。第2页/共57页说明:struct student是一个结构体类型名,在使用过程中与系统
2、提供的标准类型(如int、float等)具有同样的地位和作用。一个结构体类型可以包含若干个成员,每个成员的类型可以不一样。一个结构体类型数据在存储时所占的内存单元字节数相当于每个成员所占内存单元字节数的总和。例如:前面定义的struct student结构体类型数据存储时所占内存单元为69字节。例如:struct studentint number;char name10;char sex;int age;float scroce;char address50;第3页/共57页三、结构体类型变量的定义结构体类型变量通常采取以下三种形式定义:1.先定义结构体类型,再定义结构体类型变量结构体类型名
3、 结构体变量名;例如:struct studentint number;char name10;char sex;int age;float scroce;char address50;struct student stud1,stud2;第4页/共57页例如:struct studentint number;char name10;char sex;int age;float scroce;char address50;stud1,stud2;2.在定义结构体类型的同时定义变量struct 结构体名类型名1 成员名1;类型名2 成员名2;.类型名n 成员名n;变量名表列;第5页/共57页例如
4、:struct int number;char name10;char sex;int age;float scroce;char address50;stud1,stud2;3.直接定义结构体类型变量struct 类型名1 成员名1;类型名2 成员名2;.类型名n 成员名n;变量名表列;第6页/共57页注意:结构体类型和结构体类型变量是两 个不同的概念,使用时,先定义类 型,后定义变量。在程序中只能对结构体类型变量进 行操作。结构体中的成员可以单独使用,相 当于一个普通变量,成员名可以和程 序中的普通变量同名,互不干扰。结构体中的成员可以是一个结构体变 量。例如:struct dateint
5、 month;int day;int year;struct student1int number;char name10;char sex;struct date birthday;float scroce;char address50;stu1,stu2;第7页/共57页四、结构体类型变量的引用和初始化结构体类型变量一旦被定义后,就可以在程序中使用,与数组相似,在程序中不能直接引用结构体类型变量,也不能对结构体类型变量进行整体输入输出,只能引用其中的各个成员,对其中的各个成员进行输入输出。引用结构体变量成员时,象引用普通变量一样,可以进行各种运算。第8页/共57页引用结构体变量成员的一般形
6、式如下:结构体变量名.成员名例如:前面定义了结构体类型变量stud1和stud2,可以对变量的各个成员进行各种操作,例如:stud1.number=10001;stud2.number=10002;.printf(%d,&d,stud1.number,stud2.number);第9页/共57页另外,在程序中,还可以用指向结构体变量的指针变量来引用结构体变量成员。例如:struct student stud1;struct student*p1=stud1;(*p1).number=10001;.注意:“-”是指向结构体成员运算符,“.”是结构体成员运算符,它们的结合方式从左到右,优先级别最高
7、。上述程序段,还可以写成下面的形式:struct student stud1;struct student*p1=stud1;p1-number=10001;.第10页/共57页#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.number,a.name,a.age,a.score);例8
8、-1 利用结构体变量输出学生信息。第11页/共57页#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 利用结构体变量输出学生信息。第12页/共57页一、结构体数组的定义和引用结构体数组同普通数组一样,所有元素类型相同,是同一个结构体类型。要定义一个结构体类型数组,必须先定义结构体类型,定义结构体类型数组的一般形式如下:struct
9、 结构体名 数组名常量表达式;例如:struct student a3;同普通数组相似,在程序中不能整体引用结构体数组,也不能引用结构体数组元素,只能引用结构体数组元素的成员。例如:a1.number=10001;a2.number=10002;第13页/共57页二、结构体数组初始化和应用例如:struct sst int num;char name10;int age ;struct sst a3=1001,zhangsan,18,1002,lisi,19,1003,wangwu,20;.结构体数组初始化与普通数组初始化相似,可以先定义结构体类型,再定义结构体数组并初始化。第14页/共57页
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+)if(str
11、cmp(inputname,aj.name)=0)aj.number+;printf(n);for(i=0;i3;i+)printf(%10s:%2dn,ai.name,ai.number);第15页/共57页C语言规定:在程序中不能直接对结构体类型数组元素进行输入输出,只能对结构体类型数组元素的成员进行输入输出。结构体类型数组元素的成员的输入与输出与普通数组元素的输入与输出类似,通常利用循环语句来完成。三、结构体类型数组的输入与输出第16页/共57页main()int n,i,sumSIZE;printf(How many students?n);scanf(%d,&n);for(i=0;i
12、n;i+)printf(Name?n);scanf(%s,studi.name);printf(No?n);scanf(%d,&studi.num);printf(Score1,Score2,Score3?n);scanf(%f,%f,%f,&studi.score0,&studi.score1,&studi.score2);sumi=studi.score0+studi.score1+studi.score2;studi.ave=sumi/3.0;printf(n NAME No.SCORE1 SCORE2 SCORE3 AVEn);printf(-n);for(i=0;i成员名 指向结构体
13、类型变量的指针变量引用注意:“-”是指向结构体成员运算符,“.”是取结构体成员运算符,它们的结合方式从左到右,优先级别最高。在程序中只能将结构体类型变量的地址赋给一个指向结构体类型的指针变量,一个指向结构体类型的指针变量只能指向结构体类型变量,不能指向变量的成员。第21页/共57页例如:struct studentint number;char name10;int age;float score;struct student stud1;.struct student*p1=stud1,*p2=stud1;(*p1).number=10001;(*p2).number=10002;.prin
14、tf(%d,&d,(*p1).number,(*p2).number);printf(%d,&d,p1-number,p2-number);第22页/共57页例 8.8#include stdio.hstruct studentint num;char name20;char sex;float score;main()struct student stu1=1001,Li Ming,M,95.0;struct student*p;p=&stu1;printf(%d,%s,%c,%.1fn,stu1.num,stu1.name,stu1.sex,stu1.score);printf(%d,%s
15、,%c,%.1fn,(*p).num,(*p).name,(*p).sex,(*p).score);printf(%d,%s,%c,%.1fn,p-num,p-name,p-sex,p-score);第23页/共57页在程序中,如果将一个结构体类型数组的地址赋给一个结构体类型的变量,那么该变量就是一个指向结构体类型数组的指针变量。可以利用该指针变量来引用数组元素的各个成员。3、指向结构体类型数组的指针对于指向结构体类型数组的指针变量。其引用的方式和指向普通数组的指针变量的引用相类似。第24页/共57页例 8.9#include stdio.hstruct studentint num;char
16、*name;char sex;float score;boy5=101,Zhou ping,M,45,102,Zhang ping,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);第25页/共57页注意:ps是指向结构体类型数据的指针变量,只能将数组的地址或某个数组元素的地址赋给ps,不能将数组元素的成员或成员的地址赋给
17、ps,否则,程序将会出错。例如:ps=boy;/*正确*/ps=&boy0;/*正确*/ps=boy0.num;/*错误*/ps=&boy0.num;/*错误*/第26页/共57页1、结构体类型数据与函数 结构体类型变量的成员作函数参数 在函数调用时,可以将结构体类型变量各成员的值作函数的实参进行数据传递。其用法和用普通变量作函数实参是一样的,属于“值传递”方式。注意:在调用函数时,应注意实参与形参的类型保持一致。第27页/共57页main()struct student a;.f(a.score);.#include stdio.hstruct studentint num;char nam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计
限制150内