Linux C语言学习day11:递归与结构体
【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字节。
Linux C语言学习day11:递归与结构体相关推荐
- Linux学习-文件IOA1——用结构体和文件操作函数实现文件的拷贝
Linux学习-文件IOA1--用结构体和文件操作函数实现文件的拷贝 其实我们不必选用结构体去实现模仿拷贝功能的,但是为了锻炼我们的思维以及对结构体.文件操作函数的使用,所以我们就这样来折腾自己. 学 ...
- linux c语言学习_学习Linux是我们的爱情语言
linux c语言学习 2019年是Cherry家族学习的一年. 我是一名高级软件工程师,致力于学习新技能,并且一路教给我的丈夫克里斯. 通过教给他一些我学到的东西,并请他完成技术演练文章,我帮助Ch ...
- c语言用数组直接填充结构体,C语言第11题:结构体数组的定义与使用 + 结构体数组排序...
C语言第11题:结构体数组的定义与使用 + 结构体数组排序 C语言第11题:结构体数组的定义与使用 + 结构体数组排序 注意: 一下赋值是不能使用的 但是在结构体中是可以直接进行赋值操作的 st[1] ...
- C语言 匿名联合体和匿名结构体
C语言 匿名联合体和匿名结构体 匿名联合体和匿名结构体顾名思义,就是没有名字的联合体和结构体,没有名字哪怎么用?拿来用? 在嵌入式数据通信里面,大部分都是使用联合体,将有实际意义的结构体和字节数组互相 ...
- C语言中函数如何返回结构体?
//#include "stdafx.h"//If the vc++6.0, with this line. #include "stdio.h" #inclu ...
- C语言学生信息管理系统(结构体数组,文件)
C语言学生信息管理系统(结构体数组,文件) 这是初学时写的一个程序,比较菜,不喜勿喷.在一个结构体里定义结构体内所有的信息(如果信息也需要分类则可以再定义一个结构体并在当前结构体内声明,我的这个代码在 ...
- Nwafu-Oj-1444 Problem l C语言实习题七——2.结构体数组的定义与引用
问题 : C语言实习题七--2.结构体数组的定义与引用 时间限制: 1 Sec 内存限制: 128 MB 提交: 4459 解决: 2011 [提交][状态][讨论版] 题目描述 定义一个职工结构 ...
- 学习STM32单片机之结构体思想
学习目标: 掌握 STM32 基础知识 学习STM32单片机之------结构体思想 学习内容: 1.我们在操作寄存器的时候,操作的是寄存器的绝对地址,如果每个寄存器都这样操作,那将非常麻烦. 2.我 ...
- Linux内核中的PCB里面task_struct结构体中的具体信息
1.PCB进程控制块--->task_struct 广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合. 每个进程在内核中都有一个进程控制块来维护进程的相关信息 ...
- Lawliet|C语言学习笔记5——循环结构
C语言学习笔记--循环结构 1.求1+2+3+-+100 #include<stdio.h> int main() {int i=1,sum=0; //定义变量i的初值为1,sum的初值为 ...
最新文章
- 拆卸台式电脑主机,cpu,硬盘,内存条等
- word2vector 讲的比较好的文章
- Unity3D对手机屏幕触摸的控制脚本
- 程序员锁死公司服务器,导致600万元资金打水漂。网友神回复
- ios 学习札记 细节(四)
- 关于梯度下降法、牛顿法、高斯-牛顿、LM方法的总结
- 建议推出专门用于开发的电脑
- 30 | 答疑文章(二):用动态的观点看加锁
- 写好PPT的四大要点
- 2022 SpringBoot/SSM的药品售货机平台 H5药品购买商城
- ArcGIS及ENVI软件下载链接(持续更新...)
- Charles 使用
- 网站克隆工具_Kali Linux工具篇十三:网站克隆技巧Httrack使用技巧
- 第二语言教学的5c标准是哪5c,第二语言教学法知识小结(一)
- 项目经理需要什么职称 计算机,项目经理要什么职称
- 梦幻西游手游经验任务链计算机,梦幻西游手游经验和道具任务链攻略
- java企业号开发教程_详解java微信企业号开发之开发模式的开启步骤
- cdn刷新api_缓存刷新与查询
- 常见的数据集合——栈
- 看得见的算法蒙特卡洛问题——使用蒙特卡洛算法求PI值
热门文章
- 机器视觉学习笔记(6)——双目摄像机标定参数说明
- android 触摸屏校准,android实现触摸屏校准
- stylecloud:一款可以制作个性化词云图的 Python 神器
- 建模实训报告总结_建模实习工作总结
- excel如何选中空单元格并计算总计、平均值、率
- Learning the Model Update for Siamese Trackers论文解读
- 苹果电脑如何双开微信
- C语言文件指针偏移的使用(点阵字库txt文件取字)
- w10怎样关闭对计算机更改,w10电脑定时关机怎么设置 让w10系统自动关闭的设置方法...
- ODl之VTN详解-VTN概述