前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux C语言:递归与结构体

Linux C语言:递归与结构体

原创
作者头像
好派笔记
修改2021-09-17 18:09:55
3.9K0
修改2021-09-17 18:09:55
举报
文章被收录于专栏:好派笔记好派笔记

【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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com