- 博客(183)
- 收藏
- 关注
原创 计算机系统基础---数值转换
概念定义核心在十进制 (R=10) 中的例子在二进制 (R=2) 中的例子 (1101.1)₂数制表示数值的规则系统“进位”规则十进制二进制基数每个数位可使用符号的个数“逢几进一”的“几”102数码表示数值的基本符号符号集{0,1}数位数码在数中所处的位置位置(序号)百位、十位、个位…第3位、第2位、第1位、第0位、第-1位…位权数位代表的固定值Rⁿ百位权重 10²=100第2位权重 2²=4基数:2数字符号:0、1。
2026-02-05 23:27:01
795
原创 C语言---排序算法6---递归归并排序法
归并排序(Merge Sort)是经典的分治算法,采用递归+合并的思路实现高效排序。其核心思想是将数组不断二分至最小单元(单个元素),然后逐步合并有序子序列,最终得到全局有序数组。
2026-02-04 23:21:46
293
原创 C语言---排序算法5---迭代归并排序法
归并排序(Merge Sort)是一种基于分治思想的排序算法,其迭代实现(自底向上)通过逐步合并有序子数组来完成排序,避免了递归调用的开销。
2026-02-04 23:04:34
413
1
原创 C语言---排序算法4---希尔排序法
希尔排序(Shell Sort)是插入排序的一种高效改进版本,也称为缩小增量排序。它通过将原始数组分成多个子序列进行插入排序,逐步缩小子序列的间隔(增量),最终对整个数组进行一次插入排序,从而显著提高排序效率。
2026-01-28 21:39:26
687
原创 C语言---排序算法3---插入排序法
插入排序是一种简单但高效的排序算法,尤其适合小规模或基本有序的数据。其核心思想通过“逐个插入”维护有序序列,具有稳定性和低空间复杂度的优势。在实际应用中,可结合二分查找或分组策略(如希尔排序)进一步优化性能。
2026-01-27 22:44:45
148
原创 C语言---排序算法2---选择排序法
不稳定排序:相同元素的相对位置可能改变(如 [5, 5, 2] 中第一个 5 会被交换到后面)。时间复杂度:始终为 O(n²)(无论输入是否有序)。1、每次从未排序部分选择最小(或最大)元素。1、小规模数据排序(如 n < 1000)。原地排序:仅需常数级额外空间(O(1))。3、教学示例(理解排序算法的基本思想)。3、重复上述过程,直到所有元素有序。2、内存受限环境(如嵌入式系统)。2、将其放到已排序部分的末尾。
2026-01-27 22:40:35
450
原创 C语言---排序算法1---冒泡排序法
冒泡排序(Bubble Sort)是一种基础的交换排序算法。其核心思想是重复比较相邻元素,若顺序错误则交换,通过多轮遍历将最大值逐步“冒泡”到数组末端。算法结束条件为某轮遍历未发生任何交换,表明数组已有序。3、教学示例(算法原理直观)
2026-01-27 22:31:14
881
1
原创 C语言---安全函数
在C语言中,安全函数是针对传统标准库函数在内存和字符串操作中缺乏边界检查而设计的增强版本,旨在减少缓冲区溢出、未初始化变量访问等常见安全漏洞。C11 标准引入了一些安全函数,也称为 Annex K 标准库函数。这些安全函数主要是标准字符串和内存操作函数的增强版本,通过增加参数(如缓冲区大小)来提供更好的错误检测和处理。安全函数在 Visual Studio 等编译器中得到较好的支持,但在一些较老版本的编译器中可能不可用,需要注意兼容性。
2026-01-26 21:49:00
467
原创 win11系统查看设备配置
点击WIN按键,搜索"系统",选择下方的"系统信息"。点击"系统",可以看到很多配置相关的内容。点击"此电脑" -> “属性”按下按键"win + R"存在大量系统相关配置。输入"winver"
2026-01-26 20:59:33
179
原创 win11系统分盘2
更改驱动号和路径:可以修改磁盘的名称。但是无法修改C盘名称。每个电脑起码有一个C盘。右键点击windows按键如下,选择磁盘管理。压缩卷即将磁盘缩小,对于空间可分配至其他卷。下图选项中,输入压缩空间量即想要缩小的空间。删除卷:删除当前磁盘,C盘无法删除。当出现未分配空间时,可设置新建卷。右键点击你需要修改的磁盘。扩张卷:增加磁盘内存容量。压缩卷:缩小磁盘内存容量。
2026-01-26 20:33:51
61
原创 Vs Code创建---代码统计工具
VS Code Counter 是 Visual Studio Code 的一款扩展工具,主要用于统计源代码的物理行数、空白行数和注释行数,支持多种编程语言,并提供了灵活的统计方式和可视化报告功能。
2026-01-21 22:12:33
611
原创 C语言---命令行参数
在C语言中,命令行参数是通过main函数的两个特殊参数传递的:int argc和char *argv[]。这两个参数允许程序在启动时接收来自命令行的输入。
2026-01-20 22:53:48
408
原创 C语言---未定义行为
1、标准定义:C标准(如C11)明确列出“未定义行为”清单(如访问无效指针、修改字符串常量)。标准仅规定“此类行为无要求”,不约束编译器实现。2、编译器自由:不同编译器(GCC、Clang、MSVC)对UB的处理可能截然不同。例如:悬空指针访问:可能崩溃、返回垃圾值,或“巧合”正确。整数溢出:有符号整数溢出是UB(如int x=INT_MAX;x++;),编译器可能直接删除此类代码(因“结果无意义”)。
2026-01-19 22:15:07
787
原创 C语言---可变参数
C语言中的可变参数(Variadic Functions)允许函数接受不定数量的参数,这一特性在需要处理动态数量参数的场景中非常实用,例如格式化输出函数(如printf)、日志记录、数学计算等。C语言通过<stdarg.h>头文件提供了一套宏来支持可变参数的处理。
2026-01-18 15:00:29
549
原创 C语言---递归
递归是C语言中处理自相似问题的强大工具,但需谨慎设计基例和递归步骤,避免栈溢出和性能问题。在深度可控或问题天然递归(如二叉树遍历)时优先使用;若深度过大或性能敏感,可考虑迭代或动态规划优化。
2026-01-14 22:27:49
417
原创 C语言---错误处理
使用枚举或宏定义错误码,避免硬编码(如-1、1等)。方法适用场景优点缺点返回值检查简单函数调用明确、直接需手动检查每个调用errno +错误码标准库函数错误与系统集成好 多线程不安全断言调试阶段逻辑错误快速定位问题发布版本需禁用信号处理严重运行时错误(如段错误)捕获致命错误复杂,可能掩盖问题深层嵌套错误恢复跨函数跳转易导致资源泄漏,代码难维护。
2026-01-13 22:54:48
874
原创 C语言---强制类型转换
在C语言中,强制类型转换(Type Casting) 是显式将一种数据类型转换为另一种数据类型的操作,通过在表达式前添加目标类型的括号实现。它是C语言类型系统的核心特性,但需谨慎使用以避免未定义行为或数据丢失。
2026-01-13 21:05:52
831
原创 C语言---头文件
/ main.c#include "myheader.h" // 引入自定义头文件");return 0;头文件中定义全局变量可能导致重复定义错误。// 声明// 定义标准库头文件用尖括号 < > 包含(如 #include <stdio.h>),编译器从系统路径查找。自定义头文件用双引号 " " 包含(如 #include “myheader.h”),编译器先从当前目录查找。
2026-01-13 08:03:48
662
原创 C语言---预处理器
这是预处理器最强大的功能,用于定义常量和宏函数。#define PI 3.14159 #define MAX_BUFFER 1024 // 注意:预处理器不会检查类型,只是简单的字符串替换⚠️ 重要陷阱:必须给参数和整体加括号!错误写法:#define SQUARE(x) x * x如果调用 SQUARE(2+3),展开后变成 2+3*2+3 = 11(而不是25)。正确写法:((x) * (x)) 能保证运算优先级正确。用于取消已定义的宏。
2026-01-12 23:30:39
782
原创 C语言---缓冲区
可以在 fopen 之后、进行任何读写之前,修改缓冲模式。// 自己分配一块内存作为缓冲区// 设置为行缓冲,使用我自己的数组作为缓冲区// 或者完全禁用缓冲fclose(fp);return 0;1、打开 (fopen):系统分配一块内存(通常4KB/8KB)。2、写入 (fprintf/fwrite):数据先拷贝到这块内存,不触及磁盘。3、刷新 (fflush/\n/满/fclose):系统调用 write() 将内存数据拷贝到内核,内核再写入磁盘。
2026-01-12 22:45:21
669
原创 C语言---文件读写
C语言的文件读写(File I/O)是C标准库(stdio.h)提供的一套强大功能,用于在程序和外部文件(如txt、dat、csv等)之间传输数据。以下是C语言文件操作的核心知识体系,包含基本概念、常用函数、操作模式和完整示例。
2026-01-11 23:26:20
996
原创 C语言---printf函数使用详细说明
printf 函数的格式控制字符串是 C 语言中最强大也最复杂的工具之一。其完整语法格式为:%[标志][最小宽度][.精度][长度修饰符]类型符。
2026-01-11 18:53:25
706
原创 C语言---typedef
为了提高代码的可移植性,常用 typedef 定义固定长度的整型。这样在不同位数的 CPU 上,只需修改 typedef 的定义,而不需要改动逻辑代码。函数指针的原始语法非常晦涩,使用 typedef 可以极大提高可读性。// 定义一个名为 Handler 的别名,它是一个函数指针// 该函数接收两个 int 参数,返回一个 int// 使用别名定义函数指针变量return 0;
2026-01-11 18:14:17
295
原创 C语言---无名位域
在 C 语言中,**无名位域(Unnamed Bit-fields)**是指在结构体中定义位域时,不给该成员命名。它主要有两种用途:填充(Padding)和强制对齐(Alignment)。
2026-01-11 17:54:59
426
原创 C语言---位域
位域(Bit-fields)是 C 语言中一种特殊的数据结构,允许在结构体中以“位”为单位来指定成员所占用的内存空间。这在处理底层硬件寄存器、协议解析或需要极度节省内存的场景中非常有用。
2026-01-11 17:16:48
342
原创 C语言---共用体
/ 先定义模板,再声明变量int i;float f;// 定义模板的同时声明变量int i;float f;// 使用 typedef 起别名int i;float f;} Value;Value v1;// 直接使用别名声明。
2026-01-07 23:02:01
411
原创 C语言---字符串
在C语言中,有两种主要方式来定义字符串:这是最常见的定义方式。编译器会自动在末尾加上 \0。1.2、字符串常量(指针方式)使用指针指向一个存放在只读数据区的字符串。注意:通过这种方式定义的字符串通常是只读的,修改它的内容可能会导致程序崩溃。作用:C语言不记录字符串的长度,只靠 \0 来判断字符串在哪里结束。内存占用:字符串 “Hi” 包含 2 个可见字符,但实际在内存中占用 3 个字节的空间(‘H’, ‘i’, ‘\0’)。C语言在标准库 <string.h> 中提供了一系列处理字符串的函数:(1)
2026-01-03 20:37:35
389
原创 C语言---函数指针和回调函数
在C语言中,函数名本身就代表了该函数在内存中的起始地址。函数指针就是一个变量,它存储了这个地址。返回值类型 (*指针变量名)(参数类型列表);注意:(*指针变量名) 必须加括号,否则会变成一个返回指针的函数声明。示例代码// 1. 定义一个函数指针 p,指向返回值为int,有两个int参数的函数// 2. 将 add 函数的地址赋给 pp = add;// 3. 通过指针调用函数(两种写法均可)// 常用写法// 显式解引用写法return 0;
2026-01-03 17:00:31
378
原创 C语言---指针
定义指针时,使用 * 符号表示该变量是一个指针。int a = 10;// 普通整型变量int *p;// 定义一个指向整型数据的指针变量 pp = &a;// 将变量 a de 地址赋值给 p(& 是取地址符)效率:传递指针比传递大型结构体或数组快得多(只需复制 4 或 8 字节的地址)。动态性:支持在运行时分配内存。底层操作:可以直接访问硬件地址或处理复杂的链表、树等数据结构。
2026-01-03 13:59:28
429
原创 C语言---枚举变量
枚举通过关键字 enum 定义,其成员默认从 0 开始递增。先定义枚举类型,再定义枚举变量enum DAY {定义枚举类型的同时定义枚举变量enum DAY {省略枚举名称,直接定义枚举变量enum {你可以手动指定枚举成员的值。如果某个成员未指定,它将比前一个成员大 1。SLEEP = 1,STOP, // 自动变为 6ERROR = -1。
2026-01-03 13:40:05
475
原创 C语言---数组
定义数组时需要指定元素类型和元素个数。// 1. 定义但不初始化(值是随机的)// 2. 定义并完全初始化// 3. 部分初始化(剩余元素自动补 0)// 结果为 {1, 2, 0, 0, 0}// 4. 自动推断长度// 编译器自动设长度为 3。
2026-01-03 12:38:16
332
原创 C语言---局部变量、全局变量、静态局部变量、静态全局变量
在C语言中,这四种变量的主要区别在于作用域(Scope)、生命周期(Lifetime)以及存储位置。
2026-01-03 12:11:24
404
原创 python---pip路径问题
博主发生改错误的原因是,python从3.7版本升级到3.11版本,python的系统环境路径不会自动发生变化,即使将原来的路径进行修改。删除python,删除系统环境变量,重启电脑。再次重新下载所有环境。从报错学习可以看出,pip工具在寻找可执行文件时发生错误。
2026-01-01 18:24:32
153
原创 python---进程
Python中的多线程无法利用多核优势(参考文章python—线程),如果想要充分地使用多核CPU的资源,需要使用多进程。进程是操作系统进行资源分配和调度的基本单位。每个进程都有自己独立的内存空间、代码段、数据段和堆栈段。进程的启动和销毁的代价是比较大。进程间的任务切换也是开销最大的。
2025-12-30 23:15:21
1013
tesseract-ocr-w64-setup-v5.1.0.20220510
2025-10-15
mingw64 win64环境下的C语言编译器
2025-07-16
微生物学-引物设计-Primer Premier 5.0
2025-05-11
微生物学-引物设计-DnaMan
2025-05-11
Gradio运行时出现ERROR
2025-10-25
LORA芯片的低功耗设计
2024-12-27
FLASH手册描述问题
2024-12-26
BLE被动扫描的用处是什么?
2024-12-13
strcpy和memcpy的区别
2024-05-16
单片机测量500KHZ方波
2023-11-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅