10.1 结构体 课件(共26张PPT)《C语言程序设计》(西安电子科技大学出版社)

资源下载
  1. 二一教育资源

10.1 结构体 课件(共26张PPT)《C语言程序设计》(西安电子科技大学出版社)

资源简介

(共26张PPT)
C 语言程序设计
2023
翻转课堂实用教程
10.1 结构体
引入结构体
前面章节中学到的数组,用于存储相同类型的数据,如每位应届生的薪资。
若保存每位应届生的个人信息,比如姓名、性别、年龄、毕业学校、毕业时间等,可以定义不同的变量,但体现不了他们同属一个人的信息的内在联系。
结构体可用来存放一组不同类型的、具有内在联系的数据。
姓名
性别
年龄
毕业学校
毕业时间
1
2
3
结构体类型的定义
结构体变量的定义
结构体变量的初始化和使用
知识点
结构体案例
案例分析
结构体相关练习题
练习题
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 size
struct 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 material
length width height 1 0.6 1.2 0.6 150 塑料
2
表头/
结构体类型
条目/
结构体变量
系统不会为结构体类型分配存储空间,会为结构体变量分配内存空间。
10.1.1结构体知识点
2、结构体变量的定义 :
举例:结构体变量占用内存大小
#include
struct 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结构体案例分析
#include
int 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:写出执行下面程序后的输出结果。
#include
typedef 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:给定若干个二维坐标中的点,计算并输出这些点离原点的距离。
谢谢观看
程序设计基础

展开更多......

收起↑

资源预览