自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 模拟qsort函数实现冒泡排序的泛式编程

对于两个const,因为我们的比较函数是根据两个参数的大小进行比较,所以在过程中,我们是不可以改变参数的值,所以使用const进行修饰,使参数的值不允许发生改变。第三个参数为每个元素的大小,qsort为多类型排序,就会牵扯到不同类型的内存大小不同,这样函数就不知道每一个元素需要开多大的内存,所以需要传入数组元素的大小。第二个参数为数组中的元素数,对于排序,我们不仅仅要传进首元素的地址,函数还需要知道我们需要多少个同样大小的内存,所以需要传入数组的元素数量。根据官网的介绍,我们发现qsort是有4个参数的。

2024-10-30 15:49:02 609

原创 c语言指针详解3

根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀维数组的地址。第⼀⾏的⼀维数组的类型就是 int [5] ,所以第⼀⾏的地址的类型就是数组指针类型 int(*)[5]。那就意味着⼆维数组传参本质上也是传递了地址,传递的是第⼀⾏这个⼀维数组的地址,那么形参也是可以写成指针形式的。解释:p先和*结合,说明p是⼀个指针变量,然后指针指向的是⼀个⼤⼩为10个整型的数组。确实打印出来了地址,所以函数是有地址的,函数名就是函数的地址,当然也可以通过 &函数名 的⽅式获得函数的地址。

2024-10-25 23:35:43 279

原创 c语言指针详解2

同理arr[i]应该等价于*(arr+i),数组元素的访问在编译器处理的时候,也是转换成⾸元素的地址+偏移量求出元素的地址,然后解引⽤来访问的。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。• &数组名,这⾥的数组名表⽰整个数组,取出的是整个数组的地址(整个数组的地址和数组⾸元素。在数组传参的时候,传递的是数组名,也就是说本质上数组传参传递的是数组⾸元素的地址。同时因为arr和p是等价的,我们使用p[i]也是可以的。

2024-10-24 18:26:42 293

原创 stl(1)pair

pair包含两个数值,与容器一样,pair也是一种模板类型。在c++中,pair为一个模板类,用于表示一对值的组合,即为将两个数据组合成一组数据。pair类模板有两个成员变量,first和second,分别表示第一个值和第二个值。pair可以进行嵌套,也就是说可以将一个pair对象作为另一个pair对象的成员。pair的成员函数和特性,如默认构造函数,带参数的构造函数。pair类模板有两个模板参数,T1和T2,用以表示值的类型。必须提供两个类型名,两个对应的类型名的类型不必相同。在创建pair对象时,

2024-10-23 20:22:25 213

原创 c语言指针详解1

前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是在内存中读取的,处理后的数据也会放回内存中,那我们买电脑的时候,电脑上内存是8GB/16GB/32GB等,那这些内存空间如何⾼效的管理呢?变量是可以修改的,如果把变量的地址交给⼀个指针变量,通过指针变量的也可以修改这个变量。

2024-10-20 16:09:11 905

原创 c语言操作符详解

C语⾔已经提供了内置类型,如:char、short、int、long、float、double等,但是只有这些内置类型还是不够的,假设我想描述学⽣,描述⼀本书,这时单⼀的内置类型是不⾏的。即使有了操作符的优先级和结合性,我们写出的表达式依然有可能不能通过操作符的属性确定唯⼀的计算路径,那这个表达式就是存在潜在⻛险的,建议不要写出特别复杂的表达式。表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。

2024-10-16 14:08:41 525

原创 c语言青蛙跳台阶(函数递归与迭代练习1)

像我们之前写的递归,返回了类似n*fib(n-1)之类的操作,这样就会让我们的函数进行多次的运行导致栈溢出。而使用尾递归便可以规避掉极多次的返回与运行,而优化程序结构,使程序更加效率。一只青蛙,一次可以跳一级台阶,也可以跳两级台阶,问:当要跳上 n 级台阶时,有多少种跳法。不难发现,上面的跳法符合斐波那契数列,这时候我们就可以轻易的想到用函数递归或者迭代来解决问题。我在这里也简单概括下尾递归的含义:即为直接返回递归调用结果,而不进行其他操作的递归。当跳一级台阶时,有一种跳法。当跳二级台阶时,有两种跳法。

2024-10-13 20:23:02 321

原创 函数的递归

函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。但是当我们实际运行时,就会发现一旦n的数字较大时,所运行的时长将会被拉的十分长,这个计算所花费的时间,是我们很难接受的,这也说明递归的写法是⾮常低效的。事实上,我们看到的许多问题是以递归的形式进⾏解释的,这只是因为它⽐⾮递归的形式更加清晰,但是这些问题的迭代实现往往⽐递归实现效率更⾼。递归中的递就是递推的意思,归就是回归的意思。

2024-10-12 21:11:20 479

原创 vs调试技巧

当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给⽤⼾使⽤的标准,这个时候就会设置为 release ,编译产⽣的就是 release 版本的可执⾏程序,这个版本是⽤⼾使⽤的,⽆需包含调试信息等。总所周知,一个合格的程序是不允许有任何的bug,但没有人可以随便写出完美的代码,总要经历各种各样的报错,这时候调试就是一个很重要的功能,而vs作为目前大众广泛使用的集成编译环境,学习基础的调试技巧必不可少。程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是。

2024-10-11 19:20:53 804

原创 C语言函数与数组的练习

但同时我们选择后还需要输出周围存在雷的个数,当周围只有一个雷的时候,所表示的也是’1’这样就会出现重复,所以我们不妨创建第二个二维数组来表示周围雷的个数(只需要返回周围8个数的总和即可)事实上,当我们选择边边角角的位置时,其实并没有8个数的和,在算法上实现不同位置的差别计算较为麻烦,不妨将存放数据的数组扩大成11*11。//用于查找雷的信息的数组。

2024-10-10 16:40:32 601

原创 C语言函数

实际上,如果只是定义了 Add 函数,⽽不去调⽤的话, Add 函数的参数 x和 y 只是形式上存在的,不会向内存申请空间,不会真实存在的,所以叫形式参数。嵌套调⽤就是函数之间的互相调⽤,每个函数就像⼀个乐⾼零件,正是因为多个乐⾼的零件互相⽆缝的配合才能搭建出精美的乐⾼玩具,也正是因为函数之间有效的互相调⽤,最后写出来了相对⼤型的程序。代码2中,我们从输出结果来看,i的值有累加的效果,其实test函数中的i创建好后,出函数的时候是不会销毁的,重新进⼊函数也就不会重新创建变量,直接上次累积的数值继续计算。

2024-10-09 20:08:09 1260

原创 c语言数组

有⼀个⽐较迷惑的点,变⻓数组的意思是数组的⼤⼩是可以使⽤变量来指定的,在程序运⾏的时候,根据变量的⼤⼩来指定数组的元素个数,⽽不是说数组的⼤⼩是可变的。存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。• [] 中的常量值是⽤来指定数组的⼤⼩的,这个数组的⼤⼩是根据实际的需求指定就⾏。

2024-10-08 12:49:59 685

原创 猜数字游戏

如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。程序中在调⽤rand函数之前先调⽤srand函数,通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次⽣成的随机数序列也就变化起来了。and函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。

2024-10-05 14:07:18 895

原创 洛谷 P1046 陶陶摘苹果(c语言)

由题可知,陶陶能够摘到苹果的最大高度为“陶陶最大高度+30cm”,所以我们只需要依次判断“x+30>=每个苹果高度”是否成立,如果成立,则该苹果进行计数,所以要创建一个计数器n将满足条件的苹果进行累加计数,所有的苹果高度比较完毕后,输出最后的num即为答案。(2)还需存储陶陶的高度x,范围为100<=x<=120,所以需要再向计算机申请一个int类型的变量m,进行读入。(1)苹果的高度为整数,范围为100<=h<=200,使用for循环进行数组的读取。(1)10个苹果到地面的高度,单位为cm,整数。

2024-10-04 16:26:26 235

原创 分支与循环

上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成⽴,嵌套 if 和 else 就没机会执⾏了,最终啥都不打印。⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束;

2024-10-04 15:42:43 505

原创 每日一题,打印100至200的素数

【代码】每日一题,打印100至200的素数。

2024-09-27 16:09:22 96

原创 c语言数据类型和变量(下)

前⾯介绍的操作符都是双⽬操作符,有2个操作数的。如果要强制跳过字符前的空⽩字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表⽰跳过零个或多个空⽩字符。上⾯⽰例中, %*c 就是在占位符的百分号后⾯,加⼊了赋值忽略符 * ,表⽰这个占位符没有对应的变量,解读后不必返回。占位符的第⼀个字符⼀律为百分号 % ,第⼆个字符表⽰占位符的类型, %d 表⽰这⾥代⼊的值必须是⼀个整数。++是⼀种⾃增的操作符,⼜分为前置++和后置++,--是⼀种⾃减的操作符,也分为前置--和后置--.

2024-09-27 15:40:31 746

原创 每日一题,打印9*9乘法表(关于for循环嵌套的使用)

1. 在外部循环中,我们⽤ i 迭代⾏号,从 1 到 9 ,表⽰乘法表中的第 i ⾏;2. 在内部循环中,我们⽤ j 迭代列号,从 1 到 i ,表⽰第 i ⾏中的第 j 列;3. 然后使⽤ printf 函数打印出每⼀项,包括被两个因数和乘积,它们⽤空格隔开,并且使⽤。“*”是乘号,乘号前⾯和后⾯的数叫做因数,“=”是等于号,等于号后⾯的数叫做积。4. 在打印完每⼀⾏后,需要继续打印⼀个*\n*,表⽰当前⾏遍历结束,开始下⼀⾏的打印;5. 在 main 函数中返回 0 ,表⽰程序已成功执⾏。

2024-09-26 11:27:15 153

原创 c语言数据类型和变量(上)

sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,类型的常⽤,⽽表达式的执⾏却要在程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类。每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof的操作符数的类型⻓度的,单位是字节。

2024-09-26 11:18:48 973

原创 c语言常见概念

• \n :换⾏符。语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \0 字符,这个 \0 字符是字符串的结束标志。C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。C语⾔把 .c 为后缀的⽂件称为源⽂件,把 .h 为后缀的⽂件称为头⽂件。• \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。• \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。• \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。

2024-09-26 09:48:23 505

原创 c语言打印1到100奇数的两种常见方法

1.利用for'循环判断1到100的数字是否为奇数。2.利用for循环直接打印所有奇数。

2024-09-25 15:22:44 86

原创 大学生活初展望

前面已经说了我心仪的专业是计算机,那计算机的学习必然是不可少的,早在暑假的时候我便已经开始了对计算机语言的学习(c语言),当然因为种种原因荒废了一段时间,现在重新开始学习,当然对于计算机来说,学习一门语言是不够的,之后我准备继续学习算法和数据结构,争取4月份可以参加蓝桥杯,后面会准备多学习一门c++,初步计划是每天都会去上网课,刷题,搭建自己的码云,也会闲暇时间更新博客(分享一下我对计算机的学习)高考是我人生中的一步,但没有谁的人生可以被一步断定,所以无论我身处何方,我需要的只是继续向前。

2024-09-25 14:44:11 500

空空如也

空空如也

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

TA关注的人

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