资源简介 (共26张PPT)C 语言程序设计2023翻转课堂实用教程10.1 结构体引入结构体前面章节中学到的数组,用于存储相同类型的数据,如每位应届生的薪资。若保存每位应届生的个人信息,比如姓名、性别、年龄、毕业学校、毕业时间等,可以定义不同的变量,但体现不了他们同属一个人的信息的内在联系。结构体可用来存放一组不同类型的、具有内在联系的数据。姓名性别年龄毕业学校毕业时间123结构体类型的定义结构体变量的定义结构体变量的初始化和使用知识点结构体案例案例分析结构体相关练习题练习题10.1.1结构体知识点程序员自定义的构造数据类型, “模板”,包含多个属性,用变量来表示,每个变量称为结构体成员。struct,定义结构体类型的关键字,不可省略1、结构体类型的定义形式如下 :struct 结构体名{数据类型名 变量1; //又称为结构体成员1数据类型名 变量2; //又称为结构体成员2…}; //此处的分号不可以省略结构体类型名为:struct 结构体名举例1:定义一张桌子的结构体类型,桌子包括长、宽、高、价格、材质这5个属性。struct desk{double length,width,height; //同类型的结构体成员可用逗号,隔开一起定义double price;char material[6]; //用字符串来保存材质,如木、铁等。};代表着实际应用中的桌子模板,5个结构体成员,分别表示长、宽、高、价格、材质这5个属性。1、结构体类型的定义形式如下 :10.1.1结构体知识点举例2:定义一个表示三维坐标点的结构体类型,坐标点包含x,y,z三个坐标值。struct point{int x, y,z;};typedef struct point Point; //给struct point起个短一些的别名Point虽然x,y,z都是整形,可以用数组来存储,但用结构体来表示,更能体现x,y,z为同一个点的三个坐标,反应三者的内在联系1、结构体类型的定义形式如下:10.1.1结构体知识点举例3:结构体类型的嵌套定义struct size{double length;double width;double height;};typedef struct size Size; //为struct size起的别名Size,后面用Size代替struct sizestruct desk{Size mySize; //成员变量也为一个结构体类型double price;char material[6];};1、结构体类型的定义形式如下 :10.1.1结构体知识点10.1.1结构体知识点2、结构体变量的定义 :结构体类型是一种构造数据类型,定义好数据类型后,就可以定义该数据类型的变量了。三种结构体变量的定义方式:(1)分开定义(2)同时定义(3)无类型定义10.1.1结构体知识点2、结构体变量的定义 :(1)分开定义指先定义结构体类型,再定义这种结构体类型的变量,一般形式如下:struct 结构体名{数据类型名 变量1; //又称为结构体成员1数据类型名 变量2; //又称为结构体成员2…};struct 结构体名 结构体变量名表;10.1.1结构体知识点2、结构体变量的定义 :(1)分开定义例如:struct desk{double length,width,height;double price;char material[6];} ;struct desk desk1,desk2;10.1.1结构体知识点2、结构体变量的定义 :(2)同时定义指在结构体类型的定义最后定义变量,一般形式如下:struct 结构体名{数据类型名 变量1; //又称为结构体成员1数据类型名 变量2; //又称为结构体成员2…}结构体变量名表; //多个变量名之间用逗号,隔开10.1.1结构体知识点2、结构体变量的定义 :(2)同时定义例如:struct desk{double length,width,height;double price;char material[6];} desk1,desk2;10.1.1结构体知识点2、结构体变量的定义 :(3)无类型定义是指采用同时定义的方式时,省略结构体类型名。struct{数据类型名 变量1; //又称为结构体成员1数据类型名 变量2; //又称为结构体成员2…}结构体变量名表; //多个变量名之间用逗号,隔开10.1.1结构体知识点2、结构体变量的定义 :(3)无类型定义例如:struct {double length,width,height;double price;char material[6];} desk1,desk2;无类型名定义方式只适合于后续不再需要用该结构体类型定义新变量的情况。10.1.1结构体知识点2、结构体变量的定义 :结构体类型与结构体变量的区别:Desk Size price materiallength width height 1 0.6 1.2 0.6 150 塑料2表头/结构体类型条目/结构体变量系统不会为结构体类型分配存储空间,会为结构体变量分配内存空间。10.1.1结构体知识点2、结构体变量的定义 :举例:结构体变量占用内存大小#includestruct desk{double length; //8个字节double width; //8个字节double height; //8个字节double price; //8个字节char material[6]; //6个字节};int main(){struct desk desk1;printf("sizeof desk1 is %d",sizeof(struct desk));return 0;}运行结果:在64位机器下运行:sizeof desk1 is 40为了提高存取效率,编译器会自动进行内存对齐,在64位机器中,默认以8字节对齐。某个变量不足8个字节,同样分配8个字节。10.1.1结构体知识点3、结构体变量的初始化和使用 :(1)在定义结构体变量时整体赋值(2)在定义结构体变量后,逐个对单个成员进行赋值。10.1.1结构体知识点(1)定义时赋值struct 结构体名 结构体变量名 = {成员值表};或者struct 结构体名 结构体变量名 = 同类型结构体变量;举例:struct desk desk1 = {2,0.75,0.75,1000,"木质"};struct desk desk2 = desk1;3、结构体变量的初始化和使用 :10.1.1结构体知识点(2)定义后,结构体成员单独赋值获取结构体成员的一般形式:结构体变量.成员名举例:struct desk desk1;desk1.length = 2.0;desk1.width = 0.75;desk1.height = 0.75;desk1.price = 1000;strcpy(desk1.material,"木质");3、结构体变量的初始化和使用 :. 成员运算符10.1.2结构体案例分析#includeint main(){int i;struct complex{double real; //复数实部double imag; //复数虚部}num;printf("请输入复数的实部和虚部,用空格隔开:\n");scanf("%lf %lf",&num.real,&num.imag);printf("the complex num is (%.2f+%.2fi)",num.real,num.imag);return 0;}案例10.1.1 定义一个表示复数的结构体,输入一个复数,并将该复数输出出来。请输入复数的实部和虚部,用空格隔开:3.2 5.1↙the complex num is (3.20+5.10i)运行结果10.1.2结构体案例分析要求:输入整数n,随后输入n个候选人信息,候选人信息包括:姓名、学号、班级、得票数,并输出得票数最多的学生会主席候选人信息。//姓名、学号、班级、得票数struct candidate{char name[10]; //姓名int no; //学号char grade[20]; //班级int votes; //得票数};typedef struct candidate Candidata;案例10.1.2 学生会主席候选人信息统计,以及最高票候选人信息输出。#include//姓名、学号、班级、得票数struct candidate{char name[10]; //姓名int no; //学号char grade[20]; //班级int votes; //得票数};typedef struct candidate Candidata;int main(){Candidata max,stu;int i,n;案例10.1.2 程序代码printf("请输入候选人的人数:\n");scanf("%d",&n);printf("请输入候选人的信息:姓名、学号、班级和票数:\n");for(i=0;iif(i==0){scanf("%s %d %s %d",stu.name,&stu.no,stu.grade,&stu.votes);max = stu; //先假设第一个学生的投票数最多}else{scanf("%s %d %s %d",stu.name,&stu.no,stu.grade,&stu.votes);if(stu.votes > max.votes) max = stu;}}printf("得票最多的候选人:\n");printf("%s %d %s %d",stu.name,stu.no,stu.grade,stu.votes);return 0;}10.1.2结构体案例分析请输入候选人的人数:3↙请输入候选人的信息:姓名、学号、班级和票数:Emily 20231000 23软件工程 28↙Peter 20221034 22信息安全 30↙Eric 20222029 22会计 42↙得票最多的候选人:Eric 20222029 22会计 42运行结果10.1.3结构体课堂练习题课堂练习题10.1.1:写出执行下面程序后的输出结果。#includetypedef struct desk{double length, width,height,price;char material[6];}Desk;int main(){Desk desk1 = {2,0.75,0.75,1000,"木质"},desk2 = desk1;desk2.price = 1250;strcpy(desk2.material,"铁质");printf("the infomation of desk1 is %.2f,%.2f,%.2f,%.2f,%s\n",desk1.length,desk1.width,desk1.height,desk1.price,desk1.material);printf("the infomation of desk2 is %.2f,%.2f,%.2f,%.2f,%s\n",desk2.length,desk2.width,desk2.height,desk2.price,desk2.material);return 0;}10.1.3结构体课堂练习题课堂练习题10.1.2:在案例10.1.1的基础上,输入两个复数,并输出这两个复数的和与积 。课堂练习题10.1.3:给定若干个二维坐标中的点,计算并输出这些点离原点的距离。谢谢观看程序设计基础 展开更多...... 收起↑ 资源预览