- 博客(31)
- 收藏
- 关注
原创 C语言实战项目:贪吃蛇游戏(SnakeGame)
前面C语言的基础语法和数据结构的顺序表、链表已经学完了,我们就已经有能力去实现一个贪吃蛇项目。我们可以实现一些贪吃蛇的一些功能,例如:食物的随机生成、贪吃蛇的长度、贪吃蛇加速和减速、暂停游戏、贪吃蛇的游戏结束判定等...在编程语言的学习中,以贪吃蛇为例,从设计到代码实现提升大家的编程能力和逻辑能力。C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API。贪吃蛇是久负盛名的游戏,它也是俄罗斯方块、扫雷等游戏位列经典游戏行列。
2024-07-02 12:56:29 1250 1
原创 数据结构:链表和经典链表OJ题合集(纯享版)
图中指针变量plist保存的是第一个节点的地址,我们称plist此时 "指向" 第一个节点。链表的每一个节点都是独立申请的(即需要插入一个数据时才去申请一块节点的空间),我们需要通过指针变量来保存下一个节点的位置才能从当前节点找到下一个节点。就像图中的小火车,每节车厢都是一个节点,每个节点都存储着一个数据。与顺序表不同的是,每节 "车厢" 都是独立申请下来的,我们称之为 "节点/结点"。节点的组成主要有两部分:当前节点要保存的数据和保存的下一个节点的地址(指针变量)。、非顺序的存储结构,数据结构的。
2024-07-02 10:06:37 1029 3
原创 数据结构笔记第2篇:单向链表
图中指针变量plist保存的是第一个节点的地址,我们称plist此时 "指向" 第一个节点。链表的每一个节点都是独立申请的(即需要插入一个数据时才去申请一块节点的空间),我们需要通过指针变量来保存下一个节点的位置才能从当前节点找到下一个节点。就像图中的小火车,每节车厢都是一个节点,每个节点都存储着一个数据。与顺序表不同的是,每节 "车厢" 都是独立申请下来的,我们称之为 "节点/结点"。节点的组成主要有两部分:当前节点要保存的数据和保存的下一个节点的地址(指针变量)。、非顺序的存储结构,数据结构的。
2024-06-29 14:08:46 264
原创 leetcode每日一练:顺序表OJ题
给一个数组nums和一个值val,你需要移除所有所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用0(1)的额外空间并。元素的顺序可以改变。你不需要考虑超出新长度后面的元素。我们可以考虑使用,dst和src,遍历整个数组。1. 当src指向的元素不等于val就把这个元素赋值给dst指向的位置,dst和src各自指向向下一个位置2. 当src指向的元素等于val就让src独自指向下一个位置。
2024-06-29 12:18:09 393
原创 数据结构笔记第1篇:顺序表
数据结构是由“数据”和“结构”两词组合而来的。什么是数据呢?常见的数值1、2、3、4..... 教务系统里保存的用户信息(姓名、性别、年龄、学历等等),网页里肉眼可以看到的信息(文字、图片、视频等等)。这些都是数据什么是结构?当我们想要大量使用同一类的数据是,通过手动邓毅大量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式。数据结构是以计算机存储,组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
2024-06-26 13:31:57 1203
原创 C语言从入门到进阶(15万字总结)
关键字是C语言中一批保留的名字的符号,比如:int、if、return,这些符号被称为保留字或者关键字。关键字都有特殊的意义,是保留给C语言使用的。程序员自己创建标识符(定义变量名时和#define定义名称时)的时候是不能和关键字重复的。关键字也是不能自己创建的#define goto 200 //#define定义时使用关键字作为名称int main()//变量名是关键字return 0;//这些都是不被允许的auto以上32个关键字是使用次数较多的常用关键字。
2024-06-23 15:08:49 2653 3
原创 C语言第17篇:预处理详解
C语言设置了一些预定义符号,可以直接使用。预定义符号也是在预处理期间处理的。__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1, 否则未定义int main()printf("进行编译的源文件:%s\n", __FILE__);printf("当前文件的行号:%d\n", __LINE__);
2024-06-22 21:03:04 955 1
原创 C语言项目:通讯录的模拟实现(动态顺序表)
首先打开文件,使用pe接收文件信息区的地址,然后通过该地址访问文件将数据输入到变量p,然后将p赋值给pf所指向的联系人动态顺序表,每载入一个联系人信息pf->size需要++一次,ContactCheck是检查通讯录的意思,是自定义函数,是检查pf的容量是否足够,如果容量满了就增容。人的信息创建好了,我们是不是需要一个多个该类型的连续空间用来存放多个联系人的信息,而且还需要一个变量来表示当前通讯录容量大小,一个变量来表示已添加联系人的个数,如果直接定义分散开有点麻烦,我们干脆把这几个变量空间都集中起来。
2024-06-19 15:57:35 864
原创 C语言笔记第16篇:编译和链接
在学习C语言时我们经常会用到库函数,比如printf、scanf,这些函数肯定不是凭空出现的,像这样的库函数是被编译成一个一个的链接库,这些函数都包含在这个链接库中也就是第三方库,是C编译器厂商自己提供的库来供我们使用。在我们的C程序中会用到库函数,但是必须经过链接器目标文件和链接库一起链接才能调用该库函数。
2024-06-18 09:57:43 1112
原创 C语言笔记第15篇:文件操作
磁盘(硬盘)上的文件就是文件。但是程序设计中,我们一般谈两个文件,分别是程序文件、数据文件(从文件的角度来分类的)。2.1函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件fputc的使用fputc函数:参数1:character是需要输出的字符。
2024-06-14 14:24:34 1095
原创 C语言笔记第14篇:动态内存管理
使用malloc 或 realloc 函数开辟的空间不会被初始化为全0,只有使用calloc函数开辟的空间会被初始化为全0。
2024-06-11 18:58:14 2274
原创 C语言笔记第11篇:数据在内存中的存储
大端字节序和小端字节序是什么呢?首先根据字节序得知就是字节的顺序,大端的字节顺序和小端的字节顺序有所差异。那字节顺序指的是内存中数据存储的字节顺序。int main()//将16进制放进变量a中,就是该16进制表示的10进制的数return 0;变量a是int类型的,有4个字节,我们可以调试一下看内存中变量a的每个字节所存储的顺序:可以看到数据是倒着存放的,44是数据的最低位,如果仔细观察可以发现内存中数据的地位放在相对较低的地址,高位11放在相对较高的地址,这就是小端字节序。
2024-06-01 12:45:04 938 1
原创 C语言:汉诺塔递归
但是如果a柱上有三个圆盘就需要先将第一个圆盘移到c柱,将第二个圆盘移到b柱,将第一个圆盘从c柱移到b柱,然后再将第三个圆盘移到c柱,将第一个圆盘从b柱移到a柱,将第二个圆盘从b柱移到c柱,最后再将第一个圆盘移到c柱。当a柱上有n个圆盘时,就需要移动2^n-1次才可以全部移动到c柱上,所以64个圆盘需要移动2^64-1次也就是18446744073709551616次,这个数非常庞大,就算一秒移动一次光盘也需要移动5000亿年。当a柱的圆盘数是偶数个时,第一次移动必定先移动到b柱。创造世界的时候做了三根。
2024-05-30 13:21:25 607
原创 C语言笔记第10篇:内存函数
上一篇的字符串函数只是针对字符串的函数,而内存函数是针对内存块的,不在乎内存中存储的数据!这就是字符串函数和内存函数的区别。准备好爆米花,正片开始1、memcpy。
2024-05-29 15:37:07 955
原创 C语言笔记第9篇:字符函数和字符串函数
在编程的过程中,我们经常要处理字符和字符串,为了方便操作字符和字符串,C语言标准库中提供了一系列库函数,接下来我们就学习一下这些函数。一、
2024-05-28 14:35:23 998
原创 C语言qsort函数详解(模拟实现)
qsort函数的功能是数组排序,给定任意类型的数组,再给定数组元素的信息便可以排序。不管是char数组int数组还是自定义结构体数组都是可以排序的。所以qsort函数就是数组排序的函数。2、qsort的函数声明和头文件包含qsort函数是包含在stdlib.h头文件中的,如果我们想调用qsort函数就需要包含对应头文件void qsort(void* base,数组的首元素地址int size, 数组的元素个数int width, 数组中每个元素的大小。
2024-05-27 11:29:56 1098
原创 C语言笔记第7篇:操作符详解
8进制数字的每一位是0-7的数字,各自写成2进制,有3个二进制位表示就足够了,因为8进制最高位数7只需要2^0,2^1,2^2(1+2+4)表示,需要三个2进制位,所以我们只需将8进制的每一位都转换成1-3个2进制位就可以了。),每一位写成2进制,最多需要4为2进制位表示。(因为负数的补码是正补数的原码,其原、反、补码的运算就是为了求出补码也就是正补数的原码,正补数不存在符号位,所以符号位就算是1也是表示数值的)2进制和10进制是类似的,只不过2进制的每一位的权重,从右向左是:2^0,2^1,2^2...
2024-05-03 09:36:48 836
原创 C语言笔记特别篇:函数栈帧的创建与销毁(逐步拆解分析)
调用自定义函数时需要在内存中申请一块栈区空间来存放该自定义函数的局部变量,这就是。在内存中有三种不同的内存空间,分别是。而我们今天的主角需要开辟一块栈区空间,废话不多说,那么就开始今天的主题吧!本篇笔记可以帮助大家解决以下6个问题。注:在不同的编译器下,函数调用过程中栈帧的创建时略有差异的,具体细节取决于编译器的实现,但是整体逻辑是一致的,只不过实现上有一些大同小异。
2024-05-01 16:39:11 1049
原创 C语言笔记第6篇:函数递归
把一个大型复杂问题层层转化为一个与原问题相似,但规模较小的子问题来求解;直到子问题不能再被拆解,递归就结束了。所以递归的思考方式就是。上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式,不是为了解决问题,代码最终也会陷入死循环,导致栈溢出。递归其实是一种解决问题的方法,在C语言中,递归就是函数自己调用自己。递归是学习C语言函数绕不开的一个话题,那什么是递归呢?在下面的例子中,我们逐步体会这2个限制条件。
2024-04-29 12:42:01 623
原创 C语言笔记第3篇:分支和循环
上面代码就是先创建一个变量num,然后使用scanf函数给num输入一个值,下面就继续执行if语句,先判断if语句括号内的表达式,num%2==1意思是如果num这个值:7%2余1,然后判断1==1,判断结果正确返回1,1为真,为真就执行if里面的语句。,因为第一条if语句里的if语句是另一条判断,而且并没有括号括起来来隔绝与外界的联系,所以第二个if和else锁定了,第一个if语句为假,根本就不可能进行下面的判断,所以什么都不打印。是奇数就走if语句,不是奇数就只有偶数这一种可能了,就走else。
2024-04-19 18:18:47 1048
原创 C语言笔记第2篇:数据类型和变量
在日常生活当中有非常多的数据,比如一个人的名字或体重、一本书的版号、一件商品的价格这些在计算机上都可以称为数据,而C语言的类型是用来表示生活中的各种数据。使用整形类型来表示整数,使用字符类型来表示字符,使用浮点类型来表示小数,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。3 , 47 , 100为整数,也被称为整型数据'a' , 'c' , ' l ' 为字符,也被称为字符类型数据3.14,25.6为小数,也被称为浮点型数据为什么小数被称为浮点型?
2024-04-17 17:34:17 915
原创 C语言笔记第1篇:初识C语言
VS项目:打开VS时需要新建项目,新建项目选择空项目,然后可以给项目取一个名称,再选择一个文件路径来保存这个项目,以后要找这个项目时可以点开保存项目的文件使用项目源文件和头文件:创建好VS项目后就可以在此项目里新建源文件或头文件,源文件是用来编写代码和实现函数定义的,头文件是用来定义函数声明。
2024-04-13 18:13:15 308
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人