宝剑锋从磨砺出,梅花香自苦寒来,不经历风雨,怎么能见彩虹。学习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.数据类型:
- 数组:
- 数组是一种线性数据结构,由相同类型的元素按照一定顺序组成。
- 数组的元素在内存中是连续存储的,可以通过索引进行访问。
- 数组的访问时间复杂度为O(1),通过索引直接定位元素。
- 插入和删除操作的时间复杂度为O(n),因为可能需要移动其他元素来保持连续性。
- C语言使用分号(;)表示语句的结束。每条语句必须以分号结束。
- 大括号({})用于定义代码块,形成作用域。一对大括号内的代码被视为一个独立的块。
- 注释有单行注释(//)和多行注释(/* … */)两种形式,用于解释代码或暂时禁用代码。
- 关键字是一些具有特殊含义的单词,如int、char、if、for等。它们不能作为变量名或函数名使用。
- 标识符是用于表示变量、函数名等的名称,遵循命名规则(字母、数字和下划线组成,不能以数字开头)。
- C语言基本语法:
二、C高级
C高级是在C基础的基础上进一步深入学习和掌握C语言。在C高级的学习中,我对C语言的更高级的特性和技巧有了更深入的了解。我学会了使用结构体、联合体和枚举来组织数据,掌握了位操作和位字段的技巧。此外,我还学会了使用动态内存分配和指针的高级应用。此外还附加了一些关于ubton的使用方法。这些知识使我的程序设计更加灵活和高效。指针是好用,也很简便,但是学习起来真的很难,这也是很多同学的痛点,但是经过一个周的学习还是让我受益匪浅,虽不说灵活的去运用,但是也能在写东西时将它运用到程序中。
-
结构体、联合体和枚举:
- 结构体(struct)是一种自定义的数据类型,可用于将不同类型的变量组合在一起,形成一个新的复合类型。
- 联合体(union)也是一种自定义的数据类型,不同成员共享同一块内存空间,只能存储其中一个成员的值。
- 枚举(enum)用于定义一组预定义的常量,可以提高代码的可读性和可维护性。
-
2.指针:
- 指针是一个变量,用于存储内存地址。
- 可以通过声明指针变量,使用&运算符获取变量的地址,或者直接赋值一个已知的地址给指针变量。
- 通过指针可以访问所指向的内存中的数据,使用*运算符进行取值操作。
- 指针算术包括指针的加法和减法运算,指针加1后指向下一个内存单元。
-
3.动态内存分配:
- 动态内存分配使用malloc()函数在运行时分配指定大小的内存块。
- 使用malloc()函数申请的内存在不需要时应使用free()函数进行释放,以防止内存泄漏。
- 动态内存分配常用于需要动态变化的数据结构,例如链表、树和图等。
三.数据结构
数据结构与算法是程序员必备的核心知识之一。学习数据结构与算法,我能够学习和理解不同的数据结构(如数组、链表、栈、队列、树等)及其相应的操作和算法(如插入、删除、查找、排序等)。我学会了使用递归和迭代的方式解决问题,掌握了常见的排序和搜索算法,如冒泡排序、快速排序、二分查找等。这些知识提高了我的问题解决能力和编程效率。数据结构是逻辑性最强的,也是代码量最多的,让我一个头两个大,但是仔细的分析和认真的理清思路后也没有想象中的难,反而在理解之后有一种豁然开朗的感觉。
-
数组
- 数组是一种线性数据结构,它由一系列具有相同数据类型的元素组成。
- 数组的元素在内存中是连续存储的,可以通过索引来访问。
- 数组的大小在创建时确定,无法动态改变。
- 访问数组元素的时间复杂度为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语言的基本知识和高级应用,提高了我的编程能力和问题解决能力。这些知识是我成为一个出色的程序员所必备的。虽然现在掌握的知识就如沧海一粟,但是饭要一口口吃,知识要一步步去学,一口吃不成一个大胖子,学习也不可能一蹴而就,但我始终相信学习就如逆水行舟,不进则退,只有坚持不懈,才能有水滴石穿之日,在剩下来的的学习中,我将继续深入学习和实践,不断完善自己的技术水平,同时也感谢老师们的倾囊相授。