从0开始的C语言学习
文章平均质量分 76
学习C语言过程中记录的学习笔记,主要是为了方便自己日后查阅复习,也希望对其他C语言初学者有所帮助。
FuLLovers
这个作者很懒,什么都没留下…
展开
-
使用栈实现非递归快速排序详细记录
最后,我们将右子数组的边界和左子数组的边界压入栈中,以便在下一轮循环中处理。注意,我们首先压入右子数组的边界,然后是左子数组的边界。同上,因为栈是后进先出的数据结构,我们希望先处理左子数组,然后再处理右子数组。接下来,我们进入一个循环,只要栈不为空,我们就从栈中弹出左右边界,并对这部分数组进行划分。我们使用 MedianOfThree 函数来选择一个枢纽元素,并得到它的索引 keyi ,这个 key 元素将用于划分数组。因为我们首先压入的是左边界,按照栈的“后进先出”,所以先弹出右边界,然后是左边界。原创 2024-04-21 19:55:46 · 229 阅读 · 0 评论 -
环形链表的约瑟夫问题
这里有一个聪明的方法,我们可以。原创 2024-02-24 20:45:09 · 1561 阅读 · 1 评论 -
贪吃蛇游戏C语言实践——关键记录
本项目使用C语言实现了一个经典的贪吃蛇游戏,包含了游戏初始化、运行、结束等主要逻辑,以及键盘控制、地图绘制、蛇身移动、食物生成、碰撞检测等核心功能。使用函数获取键盘输入,并根据按键控制蛇的移动方向。在贪吃蛇游戏中,玩家通过键盘控制蛇的移动。这是通过函数实现的,它能检测特定按键是否被按下。我们利用这个功能来判断玩家是否按下了方向键(上、下、左、右)或特殊功能键(如加速、减速、暂停)。这段代码通过判断方向键是否被按下来更新蛇的移动方向,并且防止蛇向直接相反的方向移动。原创 2024-02-24 17:33:01 · 1348 阅读 · 1 评论 -
C语言中的文件和文件操作
欢迎来到C语言的文件操作教程!在这篇文章中,我们将探讨C语言中的文件操作,包括文本文件和二进制文件的处理,文件的打开和关闭,文件的顺序读写和随机读写,以及文件读取结束的判定和文件缓冲区的使用。原创 2023-12-13 19:49:12 · 49 阅读 · 1 评论 -
C语言结构体初探及内存对齐
结构体是一种用户定义的数据类型,它允许我们存储不同类型的数据项。结构体的定义使用struct关键字,后面跟着结构体的名称和包含在大括号{}中的数据项。每个数据项(也称为成员)都有一个名称和一个类型。int roll;在上述代码中,我们定义了一个名为Studentnameroll和marks。结构体是C语言中非常有用的一种数据类型,它允许我们将不同类型的数据组合在一起。理解结构体的内存对齐行为可以帮助我们更好地理解C语言如何在内存中布局数据,以及为什么某些结构体比我们预期的要大。原创 2023-12-05 11:41:38 · 50 阅读 · 1 评论 -
整数和浮点数在内存中的存储
以32位浮点数为例,将第一位的1舍去后,留给M的就有23+1=24位有效数字。在补码中,正数的补码与原码相同,负数的补码是原码取反加 1。是整数的二进制表示形式。正整数的原码就是其二进制表示形式,负整数的原码则是其二进制表示形式做数值位,首位(符号位)设为1。可以观察到,小数部分不断乘以2,将整数部分取出,直到小数部分为0或者达到所需的精度。此时,将E的计算值减去127或1023,得到真实值,再将有效数字M前加上第一位的1。此时,E的真实值等于1-127或1-1023,有效数字M前无需加上第一位的1。原创 2023-11-28 16:50:53 · 68 阅读 · 1 评论 -
库函数atoi的使用及模拟实现
在C语言中,atoi函数是一个非常实用的库函数,它可以将字符串转换为整数。这个函数接受一个字符串作为参数,然后返回这个字符串所表示的整数值。如果字符串不能转换为有效的整数,那么函数将返回0。将字符串转换为整数int解析 C 字符串 str,将其内容解释为整数,该整数作为 类型的int值返回。isspaceplusorminus该函数首先根据需要丢弃尽可能多的空格字符(如isspace),直到找到第一个非空格字符。原创 2023-11-28 15:52:25 · 59 阅读 · 1 评论 -
C语言指针入门
指针是一种保存变量地址的变量。变量的地址是指变量在内存中的存储位置。数据类型 *指针变量名;int *p;原创 2023-11-25 18:06:36 · 30 阅读 · 0 评论 -
幕间总结 003
函数的概念函数设计应该追求:高内聚表示一个模块(如函数、类、模块)内部的元素彼此关联度高,专注于执行单一任务或功能。高内聚的模块应该尽量减少不相关功能的混合,以便模块内的元素共同完成一个特定的任务或目标。这有助于使代码更加清晰和可理解,因为每个模块都有清晰的责任范围。:低耦合表示不同模块之间的依赖关系应尽量减少,模块之间的相互影响应该尽量降低。低耦合的模块更容易被独立开发、测试和维护。这有助于增加系统的灵活性,因为可以更容易地更改或替换其中的一个模块,而不会对其他模块造成严重影响。原创 2023-11-10 21:06:09 · 30 阅读 · 1 评论 -
幕间总结 002
一、关系操作符。原创 2023-10-31 21:24:02 · 134 阅读 · 1 评论 -
幕间总结 001
退格符在文本中的作用是向后移动光标一个位置,删除光标前一个字符。scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,scanf输出字符占位符的时候,不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。注意if后的条件表达式,如果表达式的==写成了赋值,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5。它可以删除光标位置上的字符或选定的文本内容,将其彻底移除。前置++:先加1,后使用,即先使用变量中内容,然后给结果加1。(1)if后的条件表达式。原创 2023-10-24 18:21:09 · 31 阅读 · 0 评论 -
盘转乾坤:白话汉诺塔游戏的数字之谜
嗯嗯,同理,我们还要继续推导f(8)、f(7)、f(6)、f(5)、f(4)、f(3)、f(2)和f(1),直到我们得到f(1)的值,也就是1。如果不是,就先调用hanoi函数,把n-1个圆盘从a柱子移到b柱子,借助c柱子作为中转,然后输出把最大的圆盘从a柱子移到c柱子的操作,例如“Move disk n from A to C”;用C语言写这个递归函数很简单,我们只需要定义一个函数,叫做hanoi,它有四个参数,分别是n、a、b和c,表示要把n个圆盘从a柱子移到c柱子,借助b柱子作为中转。原创 2023-11-04 18:39:48 · 77 阅读 · 1 评论 -
简易扫雷游戏的实现 基于控制台 初版
首先需要定义游戏盘面的大小,也就是行数和列数。//定义非地雷格子数//定义非地雷格子数//游戏内函数声明。原创 2023-10-30 21:53:47 · 35 阅读 · 0 评论 -
函数:判断是否为素数,打印100~200内的所有素数
2.之所以只需要检查到平方根,是因为一个非素数必定可以表示为两个因数的乘积,如果这两个因数都大于这个数的平方根,那么它们的乘积会大于这个数,所以我们只需要检查到平方根即可。其中的函数使用了素数的定义和性质来检查一个数是否为素数。1.我们从2开始,一直检查到小于等于这个数的平方根的所有整数,看它们是否能够整除这个数。3.如果我们找到了一个可以整除这个数的因数,那么这个数就不是素数,我们返回。4.如果我们没有找到任何可以整除这个数的因数,那么这个数就是素数,我们返回。原创 2023-10-24 15:55:25 · 1092 阅读 · 0 评论 -
C语言分支和循环语句 注意事项
通过注意本文提到的注意事项,您可以避免常见的错误,提高代码的质量和可读性。3.使用switch语句时注意case的覆盖范围:确保switch语句中的case覆盖了所有可能的值,否则未覆盖的值可能会导致未定义的行为。当您需要在满足某个条件时一直执行循环操作,并且循环次数不固定时,使用while循环更加合适。当你需要执行某些初始化操作,然后重复执行某个操作直到满足某个条件时,可以使用do-while循环。1.初始化循环变量:在使用循环结构之前,应初始化相关的循环变量,以避免未定义的行为。一、分支语句注意事项。原创 2023-10-24 16:21:32 · 329 阅读 · 0 评论 -
C语言分支和循环语句 语法简述
它会根据表达式的值,跳转到匹配的case标签处,执行其语句,遇到break则跳出switch,否则继续执行下一case的语句,默认是default标签处的语句。它的执行过程是先执行初始化表达式,然后判断条件表达式,如果为真就执行循环语句,再执行更新表达式,反复这样的过程,直到条件表达式值为假时跳出循环。它的意思是当条件表达式的值为真时,就执行循环语句,然后再次判断条件表达式,重复这个过程,直到条件表达式的值为假时跳出循环。这表示如果条件表达式的值为真,就执行if部分的语句,否则就执行else部分的语句。原创 2023-10-24 15:02:15 · 55 阅读 · 0 评论