chap7 结构.ppt
《chap7 结构.ppt》由会员分享,可在线阅读,更多相关《chap7 结构.ppt(63页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、结构、共用、枚举结构、共用、枚举本章简介本章简介结构类型数据的定义和引用结构变量的赋值和初始化结构数组结构指针共用与枚举类型位运算7.1.1 结构类型的声明结构类型的声明语法样例struct 结构类型名数据类型 成员1;数据类型 成员2;数据类型 成员n;struct Pointint x;int y;7.1.1 结构类型的声明结构类型的声明struct Stu_Address /*表示家庭地址的结构类型*/int zipcode;char location100;struct StudentInfo /*表示学生信息的结构*/int id;char name20;char gender;fl
2、oat score3;float average;struct Stu_Address address;/*结构嵌套*/;7.1.2 结构变量的定义和初始化结构变量的定义和初始化1、先声明结构类型,再定义结构变量。、先声明结构类型,再定义结构变量。struct Point p1,p2;/*坐标点的结构变量p1和p2,类型Point前面已声明*/struct StudentInfo st;/*学生信息的结构变量st,类型StudentInfo前面已声明*/struct rectangle rect1,rect2;/*矩形的结构变量rect1和rect2,类型rectangle前面已声明*/7.1
3、.2 结构变量的定义和初始化结构变量的定义和初始化typedef struct Pointint x;int y;POINT;/*将POINT作为struct Point的别名*/在这里,POINT与struct Point完全等价。因此,结构变量的定义就可以简化为:POINT p1,p2;/*坐标点的结构变量p1和p2,POINT是struct Point的别名*/7.1.2 结构变量的定义和初始化结构变量的定义和初始化2、在声明结构类型的同时定义结构变量。、在声明结构类型的同时定义结构变量。例如:struct Pointint x;int y;p1,p2;/*在声明结构类型的同时定义结构变
4、量p1和p2*/该例在声明结构类型Point的同时就定义结构变量p1和p2,变量名写在右花括号和分号之间。7.1.2 结构变量的定义和初始化结构变量的定义和初始化3、在声明结构类型的同时定义结构变量,、在声明结构类型的同时定义结构变量,但省略了结构类型名。但省略了结构类型名。struct /*省略结构类型名*/int x;int y;p1,p2;7.1.2 结构变量的定义和初始化结构变量的定义和初始化7.1.3 结构变量的引用结构变量的引用语法样例结构变量名.成员名p1.x=3;p1.y=5;rect1.lefttop.x=2;rect1.lefttop.y=7;rect1.rightbott
5、om.x=5;rect1.rightbottom.y=3;7.1.3 结构变量的引用结构变量的引用【例7-1】利用结构类型初始化一个矩形,对矩形数据进行修改,并显示其更改后的信息。struct Point /*表示坐标点的结构类型*/int x;int y;struct rectangle /*表示矩形的结构类型*/struct Point lefttop;struct Point rightbottom;typedef struct rectangle Rectangle;/*对结构类型struct rectangle取别名Rectangle*/7.1.3 结构变量的引用结构变量的引用int
6、 main()Rectangle rect1=2,7,5,3;/*定义结构变量rect1表示一个矩形,并初始化*/rect1.lefttop.x=1;/*修改矩形左上角的x坐标*/rect1.lefttop.y=8;/*修改矩形左上角的y坐标*/rect1.rightbottom.x=6;/*修改矩形右下角的x坐标*/rect1.rightbottom.y=2;/*修改矩形右下角的y坐标*/printf(lefttop:(%d,%d)n,rect1.lefttop.x,rect1.lefttop.y);printf(rightbottom:(%d,%d)n,rect1.rightbottom.
7、x,rect1.rightbottom.y);return 0;7.1.3 结构变量的引用结构变量的引用【例7-2】从键盘输入数值以确定一个矩形,并用该矩形的信息为另一个矩形赋值,输出这两个矩形的信息。struct Point int x;int y;struct rectangle struct Point lefttop;struct Point rightbottom;typedef struct rectangle Rectangle;7.1.3 结构变量的引用结构变量的引用int main()Rectangle rect1,rect2;/*定义局部结构变量rect1和rect2*/p
8、rintf(Input lefttop for rect1:);scanf(%d%d,&rect1.lefttop.x,&rect1.lefttop.y);/*输入rect1的左上角坐标*/printf(Input rightbottom for rect1:);scanf(%d%d,&rect1.rightbottom.x,&rect1.rightbottom.y);/*输入rect1的右下角坐标*/rect2=rect1;/*用rect1的值为rect2赋值*/printf(rect1:n);printf(%d,%d),(%d,%d)n,rect1.lefttop.x,rect1.left
9、top.y,rect1.rightbottom.x,rect1.rightbottom.y);printf(rect2:n);printf(%d,%d),(%d,%d)n,rect2.lefttop.x,rect2.lefttop.y,rect2.rightbottom.x,rect2.rightbottom.y);return 0;7.1.3 结构变量的引用结构变量的引用【例7-3】利用结构变量处理单个学生信息。建立一个描述学生信息的结构类型并用它定义一个结构变量,对该结构变量的各个成员赋值,并输出各成员信息。其中,学生信息包括:学号、姓名、性别、三门课程成绩、地址(邮编+地址)。7.1.3
10、 结构变量的引用结构变量的引用struct Stu_Address /*表示地址的结构类型*/int zipcode;char location100;struct StudentInfo /*表示学生信息的结构*/int id;char name20;char gender;float score3;struct Stu_Address address;typedef struct StudentInfo Student;/*取别名为Student*/7.1.3 结构变量的引用结构变量的引用int main()Student s;/*定义结构变量s*/int i;printf(Input s
11、tudent id:);scanf(%d,&s.id);/*id是int,用scanf读取时前面要加&*/printf(Input student name:);scanf(%s,s.name);/*name是字符数组,用%s读取时前面不用加&*/getchar();/*抵消上一个输入的回车符,保证下面的gender能获得正确的取值*/printf(Input student gender:);scanf(%c,&s.gender);printf(Input student 3 courses score:);for(i=0;i3;i+)/*用循环输入三门课程的成绩*/scanf(%f,&s.
12、scorei);printf(Input student Address-Zip code:);scanf(%d,&s.address.zipcode);/*对嵌套结构,要逐层深入引用*/printf(Input student Address-location:);scanf(%s,s.address.location);getchar();return 0;7.1.4 结构数组的定义和引用【例7-4】利用结构数组处理多个学生信息。从键盘输入3个学生的信息,假设学生信息包括:学号、姓名、三门课程成绩,计算每个学生的平均成绩,然后输出所有的信息。7.1.4 结构数组的定义和引用#define
13、SN 3 /*学生人数*/#define CN 3 /*课程数目*/struct StudentInfo /*表示学生信息的结构*/int id;char name20;float scoreCN;float average;typedef struct StudentInfo Student;7.1.4 结构数组的定义和引用int main()Student sSN;/*定义结构数组,具有3个元素,每个元素都是Student结构类型的*/int i,j;float tempsum;/*临时保存某个学生的总分*/for(i=0;iSN;i+)/*用循环来输入SN个学生的信息*/printf(n
14、Input student%d id:,i+1);scanf(%d,&si.id);/*某个学生的学号*/printf(Input student name:);scanf(%s,si.name);/*某个学生的姓名*/printf(Input student%d courses scores:,CN);tempsum=0;for(j=0;jCN;j+)/*用循环处理CN门课的信息*/scanf(%f,&si.scorej);/*某个学生某门课的成绩*/tempsum+=si.scorej;si.average=tempsum/CN;/*求某学生的平均成绩*/7.1.4 结构数组的定义和引用p
15、rintf(n-ID-Name-Score1-Score2-Score3-Average-n);for(i=0;iSN;i+)printf(%4d%8s,si.id,si.name);for(j=0;j结结构成构成员员名名(*结构指针名).结构成员名样例ps-id=1011;(*ps).id=1011;说明最常用的形式。最常用的形式。(*ps)两侧的括号不可少,因为成员符“.”的优先级高于“*”,如去掉括号写成*ps.id则等效于*(ps.id),这样,意义就完全不同了。7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用【例7-5】通过结构指针变量处理一个学生的信息,学生信息包括学号
16、、姓名、三门课成绩,求出平均成绩并显示所有信息。#define SN 3#define CN 3 struct StudentInfo int id;char name20;float scoreCN;float average;typedef struct StudentInfo Student;7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用int main()Student s=1101,anney,90,91,92;/*定义结构变量并初始化,平均分默认为0*/Student*ps;/*定义结构指针变量*/float tempsum=0;int j;ps=&s;/*将结构指针
17、指向结构变量*/for(j=0;jscorej;/*用结构指针访问结构变量的成员*/ps-average=tempsum/CN;printf(-ID-Name-Score1-Score2-Score3-Average-n);printf(%4d%8s,ps-id,ps-name);for(j=0;jscorej);printf(%10.1fn,ps-average);return 0;7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用2指向结构数组的指针指向结构数组的指针此时,结构数组元素各成员的引用形式如下:(pt+i)-id (pt+i)-name (pt+i)-scorej (
18、pt+i)-average7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用【例7-6】通过结构指针变量处理多个学生的信息,学生信息包括学号、姓名、三门课成绩,求出平均成绩并显示所有信息。#define SN 3#define CN 3 struct StudentInfo int id;char name20;float scoreCN;float average;typedef struct StudentInfo Student;7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用Student stSN=/*定义结构数组变量并初始化,平均分默认为0*/1101,ann
19、ey,90,91,92,1102,Frank,92,93,94,1103,Susan,94,95,96;Student*pt;/*定义结构指针变量*/float tempsum=0;int i,j;pt=st;/*将结构指针指向结构数组的首地址,数组名表示数组首地址*/for(i=0;iSN;i+)tempsum=0;for(j=0;jscorej;/*用结构指针访问结构数组元素的成员*/(pt+i)-average=tempsum/CN;7.1.5 结构指针变量的定义和引用结构指针变量的定义和引用本例对结构数组元素的引用,也可以采用以下形式:pt=st;for(i=0;iSN;i+)temp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap7 结构
限制150内