1、第1页,共35页。1.结构类型结构类型 是指由用户自行定义的是指由用户自行定义的不同数据类型不同数据类型的组合体。的组合体。学生的基本数据:学生的基本数据:学号学号 长整型长整型姓名姓名 字符型数组字符型数组年龄年龄 整形整形性别性别 字符型字符型成绩成绩 实型数组实型数组第2页,共35页。2.结构类型的构建结构类型的构建结构类型结构类型一般形式为:一般形式为:struct 结构类型名结构类型名 类型类型1 成员成员1;类型类型2 成员成员2;类型类型n 成员成员n;第3页,共35页。2.结构类型的构建结构类型的构建示例示例struct stu1 /定义一个定义一个stu1数据类型数据类型 l
2、ong Num;/成员成员1:长整型:长整型 学号学号 char Name;/成员成员2:字符型:字符型 姓名姓名 char Sex;/成员成员3:字符型:字符型 性别性别 int Age;/成员成员4:整整 型型 年龄年龄 float Scorce3;/成员成员5:实型数组:实型数组 成绩成绩;第4页,共35页。1.结构类型变量的定义结构类型变量的定义方法方法1:先定义结构类型,再定义结构变量:先定义结构类型,再定义结构变量step1:构建结构类型:构建结构类型如:如:struct stu1 long Num;char Name;char Sex;float Score3;step2:定义相
3、应变量:定义相应变量如:如:struct stu1 a,b,c;第5页,共35页。1.结构类型变量的定义结构类型变量的定义方法方法2:定构建结构类型的同时定义相应变量:定构建结构类型的同时定义相应变量如:如:struct stu1 long Num;char Name;char Sex;float Score3;a,b,c;第6页,共35页。2.结构类型变量的引用结构类型变量的引用引用规则如下:引用规则如下:(1)结构变量和结构体中成员,都不能单独引用;)结构变量和结构体中成员,都不能单独引用;(2)只能将结构变量与结构体成员)只能将结构变量与结构体成员合起来合起来引用。引用。引用格式:结构变
4、量引用格式:结构变量.结构体成员结构体成员如:如:a.age第7页,共35页。3.结构类型变量的初始化结构类型变量的初始化(1)定义结构变量同时进行初始化。如:)定义结构变量同时进行初始化。如:struct student long Num;char Name20;float Score3;a=520,”WangXin”,78.5,49.5,90;第8页,共35页。(2)也可以先定义结构变量,再进行初始化。如:)也可以先定义结构变量,再进行初始化。如:struct student long Num;char Name20;float Score3;main()struct student a;
5、a=520,”WangXin”,78.5,49.5,90;第9页,共35页。例例6-1 分析程序,写出运行结果分析程序,写出运行结果main()struct stu1 long Num;char Name20;char sex;int age;float Score3;a=99123L,Wang Xin,F,23,78.5,49.5,90.0;int i;printf(num:%1d name:%s sex:%c age:%dn,a.Num,a.Name,a.sex,a.age);for(i=0;i3;i+)printf(%8.1f,a.Scorei);第10页,共35页。例例6-2 编写求两
6、复数之和的程序编写求两复数之和的程序struct stu3 int x;int y;main()struct stu3 a,b,c;scanf(%d,%d,%d,%d,&a.x,&a.y,&b.x,&b.y);c.x=a.x+b.x;c.y=a.y+b.y;printf(c=%d+%din,c.x,c.y);第11页,共35页。(3)结构变量占用的存储空间)结构变量占用的存储空间(size):是结构体中所有成员:是结构体中所有成员所占空间之和。如:所占空间之和。如:struct student long Num;char Name20;float Score3;main()struct stu
7、dent a;printf(%dn,sizeof(a);第12页,共35页。1.结构类型数组的定义结构类型数组的定义(1)在构建结构类型的同时定义相应的数组。)在构建结构类型的同时定义相应的数组。一般形式一般形式示例示例struct 结构类型名结构类型名 成员表列;成员表列;数组名数组名 数组长度数组长度;struct student long Num;char Name20;float score3;No8class 45;第13页,共35页。(2)先构建结构类型,再定义相应的数组。)先构建结构类型,再定义相应的数组。一般形式一般形式示例示例在已经定义好结构类型后,在已经定义好结构类型后,使
8、用如下形式定义结构数使用如下形式定义结构数组:组:struct 结构类型名结构类型名 数组数组名名 数组长度数组长度struct student No8class 45;第14页,共35页。2.结构数组的初始化结构数组的初始化在构建结构类型的同时对数组初始化。如:在构建结构类型的同时对数组初始化。如:struct stu4 long Num;char Name20;float Score3;a2=520,“WanXin”,78.5,49.5,90 ,240,“LiMing”,66.5,72.5,88 ;第15页,共35页。上例中的存储关系:上例中的存储关系:a0a1NumNameScore3N
9、umNameScore3520 WanXin78.549.590240 LiMing 66.572.588第16页,共35页。例例6-3输入输入50个学生的基本信息个学生的基本信息(如图如图6-1所示所示),计算各个学,计算各个学生的平均分,并输出各人的学号、姓名及平均。生的平均分,并输出各人的学号、姓名及平均。main()int i,j;float s;struct stu5 /*定义名为定义名为stu5的结构类型的结构类型*/long num;/*学号学号*/char name20;/*姓名姓名*/float score3;/*三门课成绩三门课成绩*/float ave;/*平均分平均分*
10、/a50;/*50个学生个学生,各个学生具有以上信息各个学生具有以上信息*/第17页,共35页。for(i=0;i50;i+)printf(请输入第请输入第%d个同学的学号个同学的学号,姓名姓名,(i+1);scanf(%Ld,%s,&ai.num,ai.name);printf(请输入第请输入第%d个同学三门课成绩个同学三门课成绩,(i+1);for(j=0;j3;j+)scanf(%f,&ai.scorej);/*输入第输入第i个同学三门课成绩个同学三门课成绩*/for(i=0;i50;i+)/*下面求各人三门课平均值下面求各人三门课平均值*/s=0.0;for(j=0;j3;j+)s=s
11、+ai.scorej;/*第第i个同学的第个同学的第j门课成绩累加门课成绩累加*/ai.ave=s/3.0;for(i=0;inum,p-name,p-age,p-score);printf(num:%Ld name:%s age:%2d score:%4.1fn,(*p).num,(*p).name,(*p).age,(*p).score);第20页,共35页。2.指向结构数组的指针指向结构数组的指针指针变量也可以指向结构数组,其定义方法和指向一般指针变量也可以指向结构数组,其定义方法和指向一般数组一样。如数组一样。如:struct student long Num;char Name20;
12、float Score3;a2,*p=a;struct student long Num;char Name20;float Score3;struct studenta2,*p=a;第21页,共35页。结构体成员的引用的形式:结构体成员的引用的形式:形式形式示例示例结构变量结构变量.成员名成员名;a.Num;(*指针变量名)指针变量名).成员成员;(*p).Num;指针变量名指针变量名-成成员名员名;P-Num;第22页,共35页。例例6-5 指向结构数组的指针示例。指向结构数组的指针示例。main()struct stu7 int x;float y;char z;a3=2,1.5,x,3
13、,4.6,y,4,7.8,z;struct stu7*p;/*定义指向结构类型指针定义指向结构类型指针*/int i;/*定义变量定义变量i*/p=a;/*P指针指向结构数组指针指向结构数组a*/for(i=0;i agestruct person char name20;int age;aLi,20,*p=&a;则对结构体变量则对结构体变量a中成员中成员age错误的引用是(错误的引用是()。)。第24页,共35页。2.(2010.4单选)已知单选)已知:A s-num B *pp-num C (*pp)-num D (*pp).numStruct person char name15;lon
14、g num;float score;s,*pp=&s;则对结构变量成员正确的引用是(则对结构变量成员正确的引用是()。)。第25页,共35页。1.已知已知如下程如下程序代码,序代码,分析并分析并写出它写出它的运算的运算结果。结果。第26页,共35页。题题1分析分析queue_t0queue_t1 成员成员1成员成员2 成员成员1成员成员2iPiece0iPiece1iBlock0iBlock1iPiece0iPiece1iBlock0iBlock112345678第27页,共35页。2.下列哪个是正确的结构变量的定义?下列哪个是正确的结构变量的定义?A struct AAA int a;int
15、 b;int c;int d;a,b,c;B struct BBB int a;int b;int c;int d;struct BBB a,b,c;C struct CCC int a;int b;int c;int d;struct CCC a;b;c;D struct DDD int a;int b;int c;int d;DDD a,b,c;第28页,共35页。3.已知有如下结构类型的定义:已知有如下结构类型的定义:A a=1;B a.a=2;C a.a.a=3;D a.a.a.a=4;下列哪个是正确的对结构类型变量下列哪个是正确的对结构类型变量a的赋值?(的赋值?()第29页,共35
16、页。4.下列哪个是正确的对结构类型变量的赋值(下列哪个是正确的对结构类型变量的赋值()。)。A struct T1 int a;T1 a=1;B struct T1 int a;T1=1;C struct T1 int a;struct t1 a;a.a=1;D struct T1 int a;T1.a=1;第30页,共35页。5.已知有如下定义:已知有如下定义:A 1 B 2 C 3 D 4那么那么printf(%d,sizeof(a);的输出结果是(的输出结果是()。)。第31页,共35页。6.已知有如下定义:已知有如下定义:A 1 B team2 C 3 D team4那么那么printf(%d,*(p+2);的输出结果是(的输出结果是()。)。第32页,共35页。7.下列程序的功能是将输入学生的信息打印出来,试填写下列程序的功能是将输入学生的信息打印出来,试填写完整代码:完整代码:第33页,共35页。8.程序设计:程序设计:利用结构类型,编写一个程序,当输入五组长方体的利用结构类型,编写一个程序,当输入五组长方体的长、宽、高后,可以输出体积最大的长方体的体积及其长长、宽、高后,可以输出体积最大的长方体的体积及其长、宽、高。、宽、高。第34页,共35页。8.程序设计:程序设计:第35页,共35页。