【1】递归函数
1.概念:自己调自己的函数
2.注意:
递归函数需要有终止条件
3.递归函数调用的执行过程分为两个阶段:
递推阶段:从原问题出发,按递归公式递推从未知到已知,最终达到递归终止条件。
回归阶段:按递归终止条件求出结果,逆向逐步代入递归公式,回归到原问题求解。
递推阶段:古之欲明明德于天下者,先治其国;欲治其国者,先齐其家;欲齐其家者,先修其身;欲修其身者,先正其心;欲正其心者,先诚其意;欲诚其意者,先致其知,致知在格物。
回归阶段:物格而后知至,知至而后意诚,意诚而后心正,心正而后身修,身修而后家齐,家齐而后国治,国治而后天下平。
练习:用递归函数实现打印斐波那契数列第20项的值。
已知第一项和第二项的值为1.
1 1 2 3 5 8 13 21 34 55 ...
【2】结构体
1.概念:用户自己定义的一种数据类型,用于描述复杂事物,表示多种不同数据类型的集合。
2.格式:
struct 结构体名
{
数据类型 成员1;
数据类型 成员2;
....
数据类型 成员n;
};
3.注意:
1)struct是结构体的关键字,用于说明这个是个结构体类型,不可省略。
2){...}部分称为成员列表,也称为域表。
3)结构体末尾必须有 ; 以表示结束。
4)结构体成员之间以 ; 隔开。
4.结构体大小:
1)遵循字节对齐原则:
向value(4字节)对齐
这个结构体中最大的数据类型来跟value比较,按字节数小的来开辟空间。
如果结构体成员所占空间大小不满足字节序的整数倍,那么系统则会自动补齐。
2)节省空间原则
在不破坏成员数据类型空间的前提下,在内存空间中我们的成员可以向上压缩,以节省空间。
如果结构体中没有成员,结构体的空间大小为0.
【2】结构体变量
1.概念:用结构体类型定义的变量称之为结构体变量。
2.定义格式:
1)定义结构体的同时定义结构体变量。
struct student
{
int id;
char name[10];
float score;
}stu1,stu2;
2)先定义结构体,再定义结构体变量。
struct student
{
int id;
char name[10];
float score;
};
struct student stu1;
3)省略结构体名定义结构体变量。
struct student
{
int id;
char name[10];
struct { //省略结构体名
int yuwen;
float math;
}score; //一般用于结构体嵌套使用
};
3.结构体变量赋值
1)定义结构体变量的同时进行初始化。
struct student
{
int id;
char name[10];
float score;
};
struct student stu1 = {01,"kitty",95.5};
2)先定义结构体变量,未进行初始化,
再分别对通过结构体变量名访问每个成员进行赋值。
访问格式: 结构体变量名.成员
struct student
{
int id;
char name[10];
float score;
};
struct student stu1;
stu1.id = 02;
strcpy(stu1.name,"John");
stu1.score = 68.5;
4.typedef给结构体重命名
typedef int size; //给int起别名为size
size a;
1)定义结构体的同时进行重定义
typedef struct student
{
int id;
char name[10];
float score;
}STU;
STU stu1; //定义结构体变量
1)先定义结构体,再对结构体类型进行重定义。
struct student
{
int id;
char name[10];
float score;
};
typedef struct student STU;
STU stu1; //定义结构体变量
【3】结构体数组
1.概念:存放结构体变量的数组称之为结构体数组。
2.定义格式:
1)定义结构体的同时定义结构体数组。
struct student
{
int id;
char name[10];
float score;
}stu[5];
2)先定义结构体,再定义结构体数组。
struct student
{
int id;
char name[10];
float score;
};
struct student stu[5];
3.结构体数组的初始化和赋值
1)定义结构体数组的同时进行初始化。
struct student
{
int id;
char name[10];
float score;
}stu[5] = {
{1,"张飞",99},
{2,"关羽",98},
{3,"赵云",89},
{4,"黄忠",90},
{5,"马超",91},
};
2)先定义结构体数组,再对结构体数组的每个元素分别赋值。
struct student
{
int id;
char name[10];
float score;
}stu[5];
stu[0].id = 1;
strcpy(stu[0].name,"张飞");
stu[0].score = 100;
4.结构体数组大小
结构体类型大小 * 数组元素个数
【4】结构体指针
1.概念:指向结构体变量的指针称之为结构体指针。
2.定义格式:
struct 结构体名 *结构体指针名;
struct student
{
int id;
char name[10];
float score;
}stu1,stu2;
struct student *p = &stu1;
3.结构体指针赋值
格式:结构体指针名 -> 成员
p->id = 1;
4.结构体指针大小
本质是个指针,所以大小为4字节。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。