自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 顺序表??

然后函数主体部分首先要有一个断言,不能传空指针,pos是指定的位置,不能是负数也不能比size大,但是可以=size,因为是指定位置前,在最后一个数据的下一位之前就是尾插操作了,所有可以=size。中间还有一些对顺序表增删查改的操作,首先进行顺序表的插入:可以分为头部插入和尾部插入,这时候就需要传结构体的地址过去,才可以找到这个数组,然后插入的数据是和原有的这些数据是一样的,所以要传这个想要插入的数据,而且这个数据的类型是要和里面的数据是一样的,就是前面的int重命名SLDateType。

2024-05-01 14:21:57 831

原创 C语言之文件操作

也就是说每一个被打开的文件都会创建一个文件信息区,里面放的各种数据与这个文件相关,而这个文件信息区就是一个FILE类型的结构体,为了可以找到这个文件信息区,又会有一个FILE*类型的指针去指向这个结构体。例如,用记事本打开后缀为.obj的文件,基本上都是乱码。文件读取结束的情况可能是结尾了或者发生某种错误而结束的,打开一个流的时候,这个流上有两个标记值,一个是是否结尾,一个是发生错误,如果有错误就会被标记出来,这个时候就需要另外一个函数ferror来检测这个标记值,而feof是用来检测结尾的标记值的。

2024-04-23 09:02:24 713

原创 C语言之动态内存管理

里面的size是需要申请的空间,单位是字节,最后返回申请出来的空间的起始地址,但是指针类型是void,原因malloc函数并不知道是开辟的空间用处是什么,是存整型还字符型,所以最后的决定权在使用者手中,其实实际使用中,使用者就已经想好申请的内存空间用于什么了,所以通常需要强制类型转换。1.引言,需要动态内存管理的原因:在之前所学的内容中,定义一个整型或者数组,都是向内存申请一片空间,但是这些申请方式一旦申请好空间,大小就无法调整,那么这时候就需要一种灵活地申请空间的功能。这种行为是不允许的。

2024-04-20 21:47:46 855

原创 C语言之枚举

在cpp中,编译器对代码的检测更加严格,例如上面的EXIT,然后enum Option o = EXIT,所以o的值是0,但是直接给o赋值一个0就会报错,因为int类型的值不能初始化Option类型的实体,这两个不一样,不能赋值。第一个值是从0开始的,然后向下递增1,而且之后还不能对里面的RED、BLUE 、GREEN进行赋值修改,因为这些是枚举常量,后续不可以修改,但是可以在一开始编译的时候赋值,就可以修改,因为还没有定下来。这样子就可以好让我们联想到这个分支是什么功能的,提高了代码的可读性。

2024-04-16 20:55:09 304

原创 C语言之联合体

char类型是一个字节,与vs的默认对齐数相比较小,int类型是4个字节,所以最大的对齐数是4,由于联合体需要给最大的成员足够的内存空间,此时这个最大成员是char c[5],所以先给5个字节,然后还要是4的整数倍,所以就是8了。由此也可以知道联合体内部成员共用一块地址,也就是说它们叠在了一起,所以同一时间只能使用一个成员,改了c的值i也会改,改了i的值c也会改。与结构体一样,联合体也是由多个成员组成,但是编译器只为最大的成员分配足够的空间,联合体的所有成员共用一块空间,所以联合体也叫共用体。

2024-04-07 16:59:51 473

原创 C语言之结构体

假设在32位平台一次读4个字节,都从偏移量为0的位置开始放,当读到i的时候,对齐的情况是一次就可以完整的读完个字节,不对齐的情况是先读了i的三个字节,还剩下一个就要再读一次。位段的位是二进制位的意思。先算S,总大小为12,然后进行对齐,c3在0的位置,然后就是S,里面的最大对齐数是4,就从偏移量为4的地址开始,大小12一直走到11,最后是d1,大小是8个字节,所有对齐数是8,就从8的倍数的偏移量开始存放,往下找,16是8的倍数,于是就从16开始往下走8个字节,一直走到23,0~23大小是24个字节。

2024-04-06 21:02:50 972 1

原创 C语言之指针(4)使用并模拟实现qsort

现在又是和上面一样的问题,不能直接比较大小,而且p1和p2接收的结构体类型的地址,所以它是个结构体类型的指针,所以要强制类型转换为结构体类型的指针,然后字符串的比较用strcmp函数来比较 ,而且这个函数的返回值也是>0、<0、=0的,所以可以直接返回。然后这个函数的指针就应该是待比较两个元素的地址。此时这个指针指向那个比较函数,那么使用这个指针相当于调用这个函数,那么就需要把需要排序的两个值传个这个函数,如果返回值是>0的,交换,以此类推,接下来就是要把两个元素的地址传给这个函数,这一步非常关键。

2024-04-04 15:57:55 909 1

原创 C语言之二分查找

然后就是二分查找的内容了。如果是用一般方法一个一个排查,效率低下,数组内容多了就不太可以了,那么可以从中间开始比较大小,一次就可以排除掉一半的内容了,依据这个思路,再排查一次,每次少掉一半,这样效率会高很多,这就是二分查找,但是前提是有序的数组。接下来就是比较,如果目标数字比中间的大的话,那么就得排除中间元素左边所有值,最左边的下标为mid+1,如果小的话,就得排除右边所有值,最右边的下标为mid-1。有了这个思路,那么就要先找到数组中间的元素,也就是最两边下标的平均值,然后再去比较。

2024-04-02 10:03:41 378 1

原创 C语言之指针(3)

首先先看一下最显眼的部分:void(*)(),这个东西长得好像有点像上面的int (*p)(int, int),把p去掉的话就是int (*)(int, int),这东西好像是一个函数指针的类型,类比一下,void(*)()也是一个函数指针类型,指向的函数没有参数,返回类型是void类型。所以总结一下就是这是一个函数的声明,函数名字叫做signal,它有两个参数,一个是int,一个是函数指针类型,然后这个函数指针可以指向一个函数,函数的参数类型是int,返回类型是void。这样的一个函数指针。

2024-03-23 20:58:51 1070 1

原创 C语言之指针(2)

还可以优化一下,一轮冒泡排序后,如果一对都没换,说明已经有序了,那就在函数内部,假设有序,定义一个flag=1,然后在比较内部,一旦有交换,就把flag=0,最后跳出内层循环,如果flag还是=1,就跳出循环,没有必要进行下去了。5.二级指针:之前学的都是一级指针,虽然一级指针里面放的是别人的地址,但是它也是一个变量,也有自己的地址,那就可以把指针变量的地址取出来,放到另外一个变量里,这个变量应该得有两颗星,就是二级指针变量,用来存放一级指针变量的地址,类型是type**。然后就可以接着去访问里面的元素。

2024-03-10 22:39:25 872 1

原创 C语言之指针(1)

硬件编址也是如此,关于地址线,电脑有分32位机器和64位机器的,在32机器中有32根电线,电线通电时,会产生0和1的信号,总共有32根,一次就有32个数字,就是一个二进制序列,这个二进制序列产生的数字作为一个编号的话,那么就对应一块空间,总共32根,一根有两种情况,那么就可以产生2的32次方个二进制序列。这样写是错误的,第一是因为这两个数组在内存中是不是连续的,中间有多大距离是不确定的,第二是因为一个是整型数组一个是字符数组,如果是求两者之间元素的个数的话,那么是求整型个数还是字符个数是不确定的。

2024-03-01 15:35:40 1010 1

原创 C语言之扫雷游戏

那么while里面的变量就可以写input,当输入的值是1,就扫雷,当输入的值是0,就可以直接退出了。如果输入的坐标是雷,就没了,显示雷的分布然后跳出循环,不是的话就继续排查,需要统计x和y的坐标中八个坐标有几个雷,这样就又需要一个函数去统计然后返回值。接下来就是初始化棋盘,需要写一个函数,把数组名和行和列还有想要初始化的为对应的*或0一起传过去(注意这里表示雷信息的0或者1是字符形式的),在头文件中完成函数的声明,在game.c文件中完成函数的设计,记得得先包含头文件包括game.h。

2024-02-24 20:20:30 1214 1

原创 C语言之函数

4.实参和形参:在函数使用过程中,把参数分为实参和形参,调用函数时,传递给函数的参数就是实参,就像上面的a和b,是实际的参数,函数定义后面括号内容就是形式参数。当我不去调用这个函数的时候,形参不会去参与空间的分配,也就是说它们是不存在的,只有在调用的时候,把实参传给形参时,形参这个时候才会创建自己的变量空间,这个过程叫形参的实例化。所以实参和形参是不同的内存空间,对于形参的修改不会影响到实参(如果学到指针会有更深入的理解),形参是实参的一份临时拷贝,形参只能在该函数中使用,出了这个函数形参的空间就回收了。

2024-02-21 12:22:30 773 1

原创 C语言之数组

如果把二维数组里面的每一行当作是一维数组,那么它每一行的数组名就是arr[i],因为比如你访问第一行的时候,第一行就都是arr[0][j],第二行就是arr[1][j],所以arr[i]就可以当作是这一行的数组名,这个理解还蛮重要的,会与后面的指针有联动,其实理解起来也不是很难。8.二维数组的使用:首先得先说一下它的下标,和一维数组一样,一开始都是从0开始的,不管是行还是列,二维数组的第一个元素就是arr[0][0],如果表示第二行第三列的元素,就是arr[1][2],有点类似于坐标。

2024-02-15 00:01:57 952 1

原创 C 语言之猜数字游戏

如果要生成1~100的随机数:rand()%100+1,如果要生成100~200的随机数:100+rand()%(200-100+1) ,所以如果要生成a~b的随机数:a+rand()%(b-a+1)。我确实是运行了两次,可是这两次结果都是一样的。rand函数是对一个叫“种子”的基准值进行运算生成的随机数,之所以前面的运算结果是一样的,是因为rand函数生成随机数的默认种子是1。电脑上的时间 时刻都在发生变化,那么可以利用时间做这个种子,只要时间在变化,种子就在变化,下一次生成的随机数就会变化。

2024-02-12 15:15:54 375 1

原创 C语言关于最大公因数的求法

它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。举个例子:比如求24和18的最大公因数,先让24/18,得到1余6,再将18作为被除数除以6,余数为0,既然余数为0了,那么6就是24和18的最大公约数,这招就叫做辗转相除法。如果a=18,b=24的话,结果也不会怎样,因为18%24=18,下一次就会交换回来,a=24,b=18。

2024-02-10 21:54:53 372 1

原创 分支循环语句(下)

第一步初始化 ,让i=1,第二步判断,判断i是否小于10,小于就为真,为真走下面的语句,执行完后走表达式3,让i++,变成2,再判断是否小于10,以此类推,直到最后i++完成之后变成11,再判断,大于10为假,就跳出循环,结束了。1.while循环:与if一样,while后面的括号也表示0或1,首先执行括号内的表达式,表达式不为0,就是真,就进行下面的语句,语句结束后表达式进行判断,如果表达式结果为真,就继续执行,如果为假,就跳出循环,直接结束。即先产生2~i-1之间的数,然后去试除i。

2024-02-10 20:15:53 964

原创 分支循环语句(上)

表达式执行的其实是先去判断a<b,结果为真,返回1,所以a<b的值就是1,然后1再去和c比较,结果也为真,所以打印hehe。a=0,a++先赋值后++,等号右边第一个的结果为0,于是后面的b也不会计算了,所以a&&b整体为0,于是后面的d也不会计算了,所以整体为0,i=0。先算a++,先赋值为0,然后++,于是b也要计算,++b结果为2,所以a++||++b整体为1,于是后面就不用计算了,d不变,整体为真,i=1。因为判断是==,如果是=,那就是赋值,赋值为0的话,是不会走这条路的。

2024-02-03 17:08:56 957 1

原创 关于scanf

如果没有读取任何项或者匹配失败则会返回0,如果读取过程中读取错误或者读到了文件的末尾,则会返回常量EOF(end of file,是一个文件结束标志,其值是-1)。输入数据时应该要有明显的可以让编译器去识别的标识,例如空格,把数字隔开方便编译器去识别,用多个空格也不影响scanf解读数据,回车也是。3.Scanf处理数据的原理:用户的数据先放入缓存当中,按下回车后按照占位符进行解读解读用户输入时,会从上一次解读遗留的第一个字符开始知道读完缓存,或者遇到第一个不符合条件的字符为止。

2024-01-25 22:26:53 329

原创 2024.1.18

关于自己动手练习,我深有体会,基本上老师上课讲的眼睛会了但是手不一定会,我很多时候是靠代码量的提升形成的”肌肉记忆“才可以提升自己的编程水平的。各位好,我是一名新人程序员,准确的来说我还走在成为程序员的路上,注册csdn也是为了向更多更加优秀的大佬们学习,希望自己以后也可以和csdn的各位一样优秀。关于编程时间的安排,每周七天我希望自己至少五天都在学习编程,并不希望自己三天打鱼,四天晒网,两台晒网就够了,编程这种事情,应该是多多益善,量变而产生质变。

2024-01-18 23:16:16 295

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除