关于学习嵌入式七月的总结

宝剑锋从磨砺出,梅花香自苦寒来,不经历风雨,怎么能见彩虹。学习C基础、C高级、数据结构与算法以及文件IO是程序员成长过程中的关键步骤。通过这一段时间的学习,我能够对这些领域有一定的总结和经验。下面是我对这些学习内容的总结:

一.c基础

    C基础是编程学习的第一步,也是最基础的一步。在学习C基础过程中,我了解了C语言的基本语法、数据类型、变量、运算符等。我学会了使用C语言编写简单的程序,掌握了如何使用条件语句、循环语句和函数进行程序设计。此外,我还熟悉了内存管理和指针的概念,学会了如何使用指针进行内存操作和地址传递,在学习过程中,因为基础较差,我觉得最难的就是不能用代码表示出自己想表达的东西。

1.c语言基本语法
  • 变量是指在内存中分配的一块存储空间,用于存储数据。在使用变量之前,需要先声明变量,指定其类型和名称。
  • 变量的赋值通过将一个值分配给变量来完成。例如:int x = 10; 将整数值10赋给变量x。
  • 算术运算符用于执行基本算术运算,如加法(+)、减法(-)、乘法(*)、除法(/)和取余(%)。
  • 关系运算符用于比较两个值的关系,如相等(==)、不等(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
  • 逻辑运算符用于组合和改变条件,如与(&&)、或(||)和非(!)。
2.变量和运算符:
  • C语言提供多种数据类型,如整型(int)、浮点型(float和double)、字符型(char)等。
  • 整型用于存储整数值,包括有符号整型和无符号整型。可选的有char(1字节)、short(2字节)、int(通常4字节)和long(根据系统架构)等。
  • 浮点型用于存储浮点数值,包括float(4字节)和double(通常8字节)。double提供更高的精度。
  • 字符型用于存储单个字符,用单引号括起来。char类型通常使用一个字节来表示。
3.数据类型:
  1. 数组:
  • 数组是一种线性数据结构,由相同类型的元素按照一定顺序组成。
  • 数组的元素在内存中是连续存储的,可以通过索引进行访问。
  • 数组的访问时间复杂度为O(1),通过索引直接定位元素。
  • 插入和删除操作的时间复杂度为O(n),因为可能需要移动其他元素来保持连续性。
  • C语言使用分号(;)表示语句的结束。每条语句必须以分号结束。
  • 大括号({})用于定义代码块,形成作用域。一对大括号内的代码被视为一个独立的块。
  • 注释有单行注释(//)和多行注释(/* … */)两种形式,用于解释代码或暂时禁用代码。
  • 关键字是一些具有特殊含义的单词,如int、char、if、for等。它们不能作为变量名或函数名使用。
  • 标识符是用于表示变量、函数名等的名称,遵循命名规则(字母、数字和下划线组成,不能以数字开头)。
  • C语言基本语法:

二、C高级

    C高级是在C基础的基础上进一步深入学习和掌握C语言。在C高级的学习中,我对C语言的更高级的特性和技巧有了更深入的了解。我学会了使用结构体、联合体和枚举来组织数据,掌握了位操作和位字段的技巧。此外,我还学会了使用动态内存分配和指针的高级应用。此外还附加了一些关于ubton的使用方法。这些知识使我的程序设计更加灵活和高效。指针是好用,也很简便,但是学习起来真的很难,这也是很多同学的痛点,但是经过一个周的学习还是让我受益匪浅,虽不说灵活的去运用,但是也能在写东西时将它运用到程序中。

  1. 结构体、联合体和枚举:
  • 结构体(struct)是一种自定义的数据类型,可用于将不同类型的变量组合在一起,形成一个新的复合类型。
  • 联合体(union)也是一种自定义的数据类型,不同成员共享同一块内存空间,只能存储其中一个成员的值。
  • 枚举(enum)用于定义一组预定义的常量,可以提高代码的可读性和可维护性。
  • 2.指针:
  • 指针是一个变量,用于存储内存地址。
  • 可以通过声明指针变量,使用&运算符获取变量的地址,或者直接赋值一个已知的地址给指针变量。
  • 通过指针可以访问所指向的内存中的数据,使用*运算符进行取值操作。
  • 指针算术包括指针的加法和减法运算,指针加1后指向下一个内存单元。
  • 3.动态内存分配:
  • 动态内存分配使用malloc()函数在运行时分配指定大小的内存块。
  • 使用malloc()函数申请的内存在不需要时应使用free()函数进行释放,以防止内存泄漏。
  • 动态内存分配常用于需要动态变化的数据结构,例如链表、树和图等。

三.数据结构

       数据结构与算法是程序员必备的核心知识之一。学习数据结构与算法,我能够学习和理解不同的数据结构(如数组、链表、栈、队列、树等)及其相应的操作和算法(如插入、删除、查找、排序等)。我学会了使用递归和迭代的方式解决问题,掌握了常见的排序和搜索算法,如冒泡排序、快速排序、二分查找等。这些知识提高了我的问题解决能力和编程效率。数据结构是逻辑性最强的,也是代码量最多的,让我一个头两个大,但是仔细的分析和认真的理清思路后也没有想象中的难,反而在理解之后有一种豁然开朗的感觉。

  1. 数组
  • 数组是一种线性数据结构,它由一系列具有相同数据类型的元素组成。
  • 数组的元素在内存中是连续存储的,可以通过索引来访问。
  • 数组的大小在创建时确定,无法动态改变。
  • 访问数组元素的时间复杂度为O(1),即常数时间。
  • 插入和删除元素的时间复杂度为O(n),因为需要移动其他元素。
    2.链表
  • 链表是一种动态数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针(也可以有指向上一个节点的指针)。
  • 链表中的节点可以在运行时创建和删除,使得链表的大小可以动态调整。
  • 链表的访问时间复杂度为O(n),因为需要按照节点的指针逐个遍历。
  • 链表的插入和删除操作的时间复杂度为O(1),只需要调整节点的指针即可。
   3.栈和队列  
  • 栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。
  • 栈的插入操作称为入栈(push),删除操作称为出栈(pop)。
  • 栈常用于函数调用、表达式求值、深度优先搜索等应用。
  • 队列是一种先进先出(FIFO)的数据结构,允许在队尾插入元素,在队头删除元素。
  • 队列的插入操作称为入队(enqueue),删除操作称为出队(dequeue)。
  • 队列常用于任务调度、缓冲等应用。
   4.树 
  • 树是一种非线性数据结构,由一组节点和边组成,节点之间具有层次关系。
  • 树的最顶层节点称为根节点,每个节点可以有零个或多个子节点。
  • 二叉树是一种特殊的树结构,每个节点最多有两个子节点:左子节点和右子节点。
  • 二叉搜索树(BST)是一种有序的二叉树,左子节点的值小于父节点的值,右子节点的值大于父节点的值。
  • 二叉搜索树支持快速的插入、删除和查找操作,时间复杂度为O(log n)。
   5.图
  • 图是一种非线性数据结构,由节点(顶点)和边组成,表示对象之间的关系。
  • 节点之间的关系可以是有向的或无向的,有向图的边有方向,无向图的边没有方向。
  • 图可以用邻接矩阵或邻接表表示。
  • 邻接矩阵是一个二维数组,其中矩阵中的元素表示两个顶点之间是否有边。
  • 邻接表是一个数组,每个数组元素包含一个链表,表示与该顶点相连的顶点。

    6.哈希表和集合
  • 哈希表是一种基于哈希函数实现快速查找的数据结构。
  • 哈希表由数组和哈希函数组成,将键映射到数组的特定位置。
  • 哈希表支持快速的插入、删除和查找操作,平均情况下时间复杂度为O(1)。
  • 集合是一种不包含重复元素的数据结构,可以基于哈希表或平衡二叉搜索树实现。

四.文件IO

       文件IO是程序中常用的一种操作,用于读写文件和进行文件处理。学习文件IO,我掌握了打开、关闭、读取和写入文件的基本操作。我学会了使用文件指针和文件流来操作文件,了解了文本文件和二进制文件的区别和使用方法。我还学会了处理异常和错误,确保程序在文件IO过程中的稳定性和安全性。正所谓好记性不如烂笔头,这一个周的东西不算很难,但是需要记的东西就很多了,也让我的笔记本又加厚了。

1. 文件的基本概念:


- 文件是在存储介质上持久存储的数据序列,可以是文本文件或二进制文件。
- 文件由一个或多个字节组成,每个字节都有一个唯一的地址。
- 文件名是用于标识文件的唯一名称,可以包含路径信息。

2. 文件IO的基本操作:


-打开文件:通过指定文件名和打开模式,将文件从存储介质加载到内存中进行操作。
- 读取文件:从文件中读取数据并存储在内存中,可以按字节、行或固定大小的数据块读取。
- 写入文件:将数据从内存写入文件,可以按字节、行或固定大小的数据块写入。
- 关闭文件:释放文件资源并将文件从内存中卸载。

3. 文件打开模式:


- 读取模式("r"):打开文件供读取,文件必须存在。
- 写入模式("w"):打开文件供写入,如果文件不存在则创建文件,如果存在则清空文件。
- 附加模式("a"):打开文件供写入,如果文件不存在则创建文件,如果存在则在文件末尾追加写入。
- 二进制模式("b"):以二进制模式打开文件,用于处理非文本文件。
- 文本模式("t"):以文本模式打开文件,用于处理文本文件。
- 读写模式("r+"):以读写模式打开文件,文件必须存在。
- 写读模式("w+"):以读写模式打开文件,如果文件不存在则创建文件,如果存在则清空文件。

4. 文件读取操作:


- 单字节读取:逐个读取文件中的字节数据。
- 按行读取:逐行读取文件中的文本数据。
- 读取固定大小的数据块:按指定大小读取文件中的二进制数据。

5. 文件写入操作:


- 单字节写入:逐个字节向文件中写入数据。
- 按行写入:逐行向文件中写入文本数据。
- 写入固定大小的数据块:按指定大小写入二进制数据。

6. 文件指针:


- 文件指针是用于标识当前读取或写入位置的特殊变量。
- 读取文件时,文件指针指向要读取的下一个字节。
- 写入文件时,文件指针指向要写入的下一个字节。
- 可以通过处理文件指针来控制文件的读取和写入位置。

7. 文件位置操作


- 定位到文件开头(seek(0)):将文件指针移到文件开头。
- 定位到文件末尾(seek(0, 2)):将文件指针移到文件末尾。
- 定位到指定位置(seek(offset, origin)):根据偏移量和起始位置移动文件指针。

总而言之,通过学习C基础、C高级、数据结构与算法和文件IO,我掌握了C语言的基本知识和高级应用,提高了我的编程能力和问题解决能力。这些知识是我成为一个出色的程序员所必备的。虽然现在掌握的知识就如沧海一粟,但是饭要一口口吃,知识要一步步去学,一口吃不成一个大胖子,学习也不可能一蹴而就,但我始终相信学习就如逆水行舟,不进则退,只有坚持不懈,才能有水滴石穿之日,在剩下来的的学习中,我将继续深入学习和实践,不断完善自己的技术水平,同时也感谢老师们的倾囊相授。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值