- 博客(37)
- 收藏
- 关注
原创 数据结构从入门到实战——顺序表
顺序表通常以数组作为其底层数据结构,但它提供了更丰富和高级的操作接口,使得顺序表在实际应用中比原始数组更加方便、高效。
2024-04-15 17:12:45
2226
26
原创 C语言从入门到实战——预处理详解
预处理是C语言编译过程中的一个阶段,它在整个编译过程的最开始进行,主要目的是对源代码进行一系列的处理,以生成更适合编译器处理的代码。
2024-04-13 19:44:28
1474
17
原创 C语言从入门到实战————文件操作
在C语言中,文件操作是指对文件进行读写和管理的一系列活动。这些操作是通过C标准库中的文件处理函数来实现的,使得程序员能够创建、打开、关闭、读取和写入文件。
2024-04-08 20:45:44
1250
3
原创 C语言中入门到实战————动态内存管理
动态内存管理是C语言中用于在程序运行时分配和释放内存的一种机制它允许程序根据需要动态地请求和释放内存空间,而不是在编译时就固定下来。这种灵活性使得程序能够更好地适应不同的运行条件和需求。内存分配:C语言提供了几种动态内存分配函数,如malloc()calloc()realloc()等。这些函数可以在堆区为程序分配所需的内存空间。例如,malloc()函数接受一个参数,即需要分配的内存大小(以字节为单位),并返回一个指向分配内存的指针。内存释放:当不再需要已分配的内存时,应使用free()
2024-04-01 19:46:02
1448
14
原创 C语言从入门到实战——自定义类型:结构体,联合体和枚举
结构体(struct):结构体是一种自定义的数据类型,它可以将不同类型的数据组合在一起。结构体的作用是提高代码的可读性和模块化,使得代码更加清晰和易于维护。使用场景包括:存储多个相关联的数据,如学生信息、员工信息等。联合体(union):联合体与结构体类似,但它的所有成员共享同一块内存空间。联合体的作用是在相同的内存空间中存储不同类型的数据,节省内存空间。使用场景包括:需要在不同类型之间进行切换的场景,如操作系统中的进程控制块(PCB)。枚举(enum)
2024-03-30 14:47:16
1441
15
原创 C语言从入门到实战----数据在内存中的存储
其实超过⼀个字节的数据在内存中存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分 为⼤端字节序存储和⼩端字节序存储,下⾯是具体的概念:⼤端(存储)模式:是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。⼩端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
2024-03-27 16:44:05
2561
6
原创 C语言从入门到实战----C语言中内存函数的使用和模拟实现
在编程领域,内存管理是至关重要的一环,它确保了程序能够高效、稳定地运行。C语言作为一门底层的编程语言,提供了一系列的内存管理函数供开发者使用,以实现动态内存的分配、释放和访问。包括了一系列用于操作内存内容的函数:1.内存复制函数:memcpy(): 将源内存区域的内容复制到目标内存区域,不保证源和目标区域有重叠;memmove(): 类似于memcpy(),但在源和目标区域有重叠时也能正确工作。memset(): 将指定的内存区域设置为某个特定的值,常用于初始化内存memcmp()
2024-03-24 10:12:51
599
6
原创 C语言从入门到实践——常用字符函数和字符串函数的使用和模拟实现
字符函数主要用于对单个字符进行分类、转换和比较等操作。而字符串函数则用于处理由多个字符组成的字符串,如复制、拼接、比较和查找等。常用的字符函数如下:isalpha:检查字符是否为字母(a~z, A~Z);iscntrl:检查字符是否为控制字符(八进制000~037以及177的字符);isdigit:检查字符是否为十进制数字(0~9);isgraph:检查字符是否为图形表示,依赖于使用语言的环境;tolower:将大写字母转换为小写字母;toupper:将小写字母转换为大写字母。strlen。
2024-03-23 11:10:13
1024
7
原创 C语言从入门到实战————数组和指针的深入理解
统计的是从 strlen 函数的参数 str 中这个地址开始向后, \0 之前字符串中字符的个数。strlen 函数会⼀直向后找 \0 字符,直到找到为⽌,所以可能存在越界查找。sizeof是C语言中的单目操作符,用于返回对象或类型所占的内存字节数。如果操作数是类型的化,则计算该变量类型的内存大小。
2024-03-14 13:59:06
660
2
原创 使用冒泡排序的思想来模拟实现qsort的功能
/1.交换函数i < width;*p2 = tmp;p1++;p2++;//2.模拟实现排序的冒泡排序框架i++)j++)if ( ((char*)base+j*width - (char*)base + (j+1) * width) > 0)//如果二者相减大于0,则二者进行交换//进行交换//3.打印函数i < len;i++)//4.两个数的比较函数//5,主函数int main()return 0;
2024-03-11 14:06:23
616
2
原创 指针数组的理解
指针数组的概念:即用于存放指针变量的数组代码如下:使用指针数组来模拟二维数组int main(){ //创建三个整型数组 int arr1[] = { 1,2,3,4,5 }; int arr2[] = { 2,3,4,5,6 }; int arr3[] = { 3,4,5,6,7 }; int* p_arr[3] = { arr1,arr2,arr3 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 5
2024-03-05 16:07:45
407
原创 野指针的成因及如何避免野指针
1.野指针1.1 野指针的概念:指针指向的位置是不可知的(随机的,不正确,没有明确限制的)1.2野指针的成因:(1)指针未初始化int main(){ int* p;//局部指针没有初始化,指向的位置为随机值 *p = 20; return 0;}如何避免:初始化指针,如果不知道指针的地址,就给它一个空指针(NULL)(2)指针越界访问int main(){ int arr[10] = { 0 }; int* p = arr; for (int i =
2024-03-03 09:47:21
580
原创 不能创建临时变量(第三个变量),实现两个整数的交换。
1.首先(a = a ^ b)(1),然后(b = a ^ b)(2)此时我们可以将上面的 (1)式代入到(2)式中,得到(a^b^b),根据异或计算的特殊性(上面有总结),可以得到结果a。2.(a = a ^ b),b的值此时为a,而a的值此时为(a ^ b),所以将二者带入可以得到(a = a ^ b ^ a),而异或是支持交换律的,所以可以得出结果(a = b)
2024-02-28 11:19:28
377
原创 递归和非递归分别实现求第n个斐波那契数
2.进入循环,每次c都等于a和b的和,然后把b的值赋给a,c的值赋给b,目的是为下一次循环做准备,而循环的条件必须是要查找的数大于等于3。1.如果不使用递归,那么就会想到去使用迭代,通常思路就是一个一个往后加(而递归是一个一个往前找),所以我设置三个参数a,b,c。
2024-02-27 11:07:53
360
1
原创 求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字
int Calculate(int x, int y){ int sum = 0; int num = 0; for (int i = 0; i < y; i++) { num = num * 10 + x; sum = sum + num; } return sum;}int main(){ int n = 0; int m = 0; scanf("%d %d", &n, &m); int j = Calculate(n, m); printf
2024-02-26 16:05:32
365
1
原创 求出0~100000之间的所有“水仙花数”并输出。
概念: “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
2024-02-26 15:53:36
360
1
原创 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,如果给20元,可以喝多少汽水。
int Calculate(int x){ int all = x; int empty = x; while (empty > 1) { all = all + empty / 2; empty = empty / 2 + empty % 2; } return all;}int main(){ int bottle = 0; scanf("%d", &bottle); int toltal = Calculate(bottle); printf("%d
2024-02-26 12:49:47
394
1
原创 逆序打印数组中的元素
2.根据上图首先创建 i=0 j=len-1,用于显示数组的下标,然后使用while循环进行逆序操作,先创建一个tmp用于保存arr[0]的数据,即int tmp = arr[i],接着将arr[4]的数据变为arr[0]位置的数据,即arr[i] = arr[j],最后将tmp变为arr[4]位置的数据 ,即arr[j] = tmp。实现Reverse() 函数完成数组元素的逆置。实现函数Append() 初始化数组为全0。实现Print() 打印数组的每个元素。
2024-02-25 16:28:30
372
1
原创 输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。
第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。第二行包含n个整数,用空格分隔。第三行包含m个整数,用空格分隔。
2024-02-25 15:01:26
479
1
原创 自己对未来的憧憬
大家好,我是一名大二人工智能专业的学生,大一接触过python,所以并不算是一个对计算机编程语言的小白,对于计算机也有着浓烈的兴趣,未来也是想在这一专业上有所成就。
2024-01-18 18:04:24
401
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人