自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 问答 (1)
  • 收藏
  • 关注

原创 继承和派生

继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类基础上进行扩展,增加功能,产生新类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知的过程。以前接触的复用都是函数复用,比如重载,而继承是类设计层次的复用。继承的类与被继承的类也被叫做子类与父类或者派生类与基类,继承这一概念用子类与父类来通俗一点来讲的话就是儿子继承父亲的财产,儿子可以用父亲的东西比如公司,但是儿子在继承之前也许创业开了新公司,这个新公司与父亲没有什么关系。

2024-07-20 16:41:02 952 1

原创 string类模拟实现

str是一个指向存放字符串空间的指针,new出来的空间是用来存传过来字符串的,new的空间+1是为了存\0,库里面capacity()和size()是不计算\0大小的,虽然它不计算,但是还是要开空间存它的。起始迭代器begin和末尾迭代器end就直接用函数来表示,起始迭代器指向字符串的第一个字符位置,末尾迭代器指向最后一个字符的后一个位置(也可以看做指向\0),_size构造函数构造的时候是没有把\0给算进去的,实际上是有效字符个数,但是最后一个有效字符数组里面下标其实是_size-1。

2024-05-24 23:23:12 891

原创 stl容器 string类的基本操作

string类在使用的时候要包括头文件#include

2024-05-05 23:02:42 637 8

原创 函数模板与类模板初阶

如果要写一个交换函数,不同类型的话调用不同的交换函数,如果使用重载的话只能解决函数名相同但是会根据参数类型调用不同的函数。即使这样也依旧要写很多不同类型的swap交换函数函数重载的交换函数仔细观察会发现除了类型不同其他的函数结构什么的都一样,都是定义中间变量,然后用它作为过渡交换其他的两个变量。因此可以用C++模版的知识,告诉编译器一个模子,让编译器根据不同类型 利用该模子来生成代码。其实本质上还是写了三个函数,只是模版是让编译器帮你写而已。

2024-04-26 20:05:04 776 12

原创 C++内存分布 new和delete介绍

C++的内存分布,大体上分为栈区 堆区 静态区 常量区。

2024-04-26 11:53:15 779 6

原创 C++类和对象(下)

的。

2024-04-24 23:32:32 970 7

原创 C++类和对象(上)

C++是面向对象的语言,对象其实可理解成客观事物,C++是面向过程的语言,他注重的是一步步过程。比如把一头大象塞进冰箱,C语言执行过程有三步,打开冰箱门,把大象塞进去,然后关上冰箱门。C++只关注对象,把大象塞进冰箱,有三个对象,人和大象以及冰箱,整个过程是人,大象,冰箱三个对象之间交互完成的,人不需要关注大象是怎么塞进冰箱的,冰箱是怎么关门的。在面向过程的编程中,程序员需要关注每一个步骤和细节,手动控制整个过程的执行。

2024-04-21 19:46:21 1023 8

原创 C++入门

命名空间需要namespace关键字,然后后面加上命名空间名,接上一对括号,括号里面可以定义各种变量甚至函数如下定义命名空间。

2024-04-17 19:18:19 949 6

原创 排序:冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序,二路归并排序

前面的指针因为要保持数组的前半部分都小于基准值,所以遇到小于等于基准值的就直接跳过,往后走,直到找到大于基准值的元素。快速排序最好的情况是每一次划分都将n个元素划分为两个长度差不多相同的子区间,均匀二分也就是说每次划分所取的基准都是中值元素,划分的结果是基准的左,右两个无序子区间的长度大致相等,这样递归树高度为logn,而每一层划分的时间为O(n),因为需要遍历n个元素来进行比较和交换,虽然代码中是两重循环,但是l与r运行加起来最多也才整个数组的长度n,所以此时时间复杂度为O(nlogn)

2024-04-09 16:02:28 1047 5

原创 c语言贪食蛇游戏

贪食蛇游戏设计,分为游戏开始前和游戏运行以及游戏结束三个阶段,我这个是利用win32 API直接在命令框设计的游戏,游戏运行阶段主要是解决游戏界面,提示信息等方面。游戏运行阶段会去解决初始化蛇身和食物,以及根据按键情况去移动蛇的方面。游戏结束阶段会告知游戏结束的原因和释放链表节点(蛇身以及食物都是通过链表来表示,其实也可以通过动态顺序表来做),游戏结束一般来说会是撞墙结束,咬到自己结束,以及正常退出三种情况。

2024-02-06 22:30:30 6312 13

原创 c语言编译链接

本文将了解到c语言是怎么编译怎么链接的,c语言文件是怎么变成能够被计算机识别的文件底层处理。同时还将详细介绍预处理宏的相关知识。以及了解头文件的相关知识,比如#include与#include"stdio.h"的区别一.c语言的编译链接我们都知道计算机是无法直接识别人类语言的,它只能识别机器语言。如果不会外语而要与外国人交谈,通过翻译就可以把我的语言转变成他所能理解的语言。

2024-01-23 18:44:34 958 5

原创 c语言文件操作

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作C语言中的流是一个抽象概念,它代表了数据的流动,可以是输入流或输出流。流的概念并不直接涉及到空间的划分,而是将数据的流动抽象为一个逻辑上的概念。

2024-01-17 17:13:36 955 1

原创 图的操作实验

有下图所示的带权有向图及其对应的邻接矩阵,编写一个程序,实现图的各种基本运算和下面main函数中的每一步功能。(6)采用迪杰斯特拉算法求顶点0出发到达其他各顶点的最短路径及最短路径长度。依据所给的邻接矩阵,创建上图的邻接表存储,并输出邻接表结构;(3)加深图的深度优先遍历算法和广度优先遍历算法的理解。(4)领会最小生成树和最短路径问题的求解及相关算法设计。(4)采用克鲁斯卡尔算法求顶点0出发的一棵最小生成树。(1)掌握图的邻接矩阵和邻接表存储结构。(2)熟练图的邻接表的基本运算。

2023-12-28 18:17:17 599 6

原创 数据结构:线性表顺序存储结构———顺序表

int length;}SqList;是指把结构体类型名struct重命名为SqList,SqList是等价于struct的,SqList是类型名;如果没有typedef,直接struct {.......}SqList,那么SqList是结构体变量,不是类型名。开头定义了typedef char ElemType;,其实就是把char用ElemType表示了,ElemType其实就是char。而#define MaxSize 100等价于,MaxSize=100;

2023-12-23 19:38:24 2317 6

原创 动态内存管理,malloc和calloc以及realloc函数用法

malloc其实就是动态开辟空间,其实就是让程序员自己去决定开辟多大空间int a=5,在栈空间上开辟4个字节去存变量a,char b=1在栈空间上开辟1个字节去存变量b,包括数组char arr[10]以上空间都是固定的,这种开辟空间是编译器自动完成分配的,在程序运行之前就已经分配好了,编译器负责将源代码翻译成机器语言,并确定变量在内存中的存储方式和位置。操作系统负责管理内存并为程序分配空间,但编译器决定了变量在内存中的布局和大小。但是对于空间的需求,不仅仅是上述的情况。

2023-12-15 20:31:10 1231 6

原创 结构体相关知识

结构体说直白点就是自定义类型,c语言有很多内置的类型比如char,int,double等,而结构体就是我们自己命名的一种类型。区别在于内置类型大多都是单一描述的类型,比如 char studentname='wangwu',只能描述一种类型。学生的属性有很多,比如char 类型的名字,int 类型的学号,double类型的分数。当然你也可以挨个去定义,比如 char name[]="wangwu",int sno=2425678,double scole=85.6;

2023-12-09 19:54:49 1594 6

原创 整数以及浮点数在内存中的存储

大小端字序存储其实就是字节在内存中存储时的存储顺序。如果数据的低位字节内容保存在内存的高地址处,而高字节内容保存在内存的低地址处,那么就是大端存储模式如果数据的高位字节内容保存在内存的高地址处,而低字节内容保存在低地址处,那么就是小端存储模式比如15,它的十六进制补码为00 00 00 0f而在vs这个编译器中存储的情况是这样的编译器里默认左边是低地址,右边是高地址,而存储为00 00 00 00 0f,其实是按照低字节存低地址的规则来进行的,所以是小端存储。代码判断大小端存储。

2023-12-08 16:47:31 1039 6

原创 树和二叉树的操作实验

有下图所示的二叉树,编写一个程序exp6-1.c,实现二叉树的各种基本运算和下面main函数中的每一步功能。

2023-12-03 15:58:19 686 7

原创 介绍一些字符串相关的库函数

strcpy函数功能其实就是把一个字符串复制到另一个字符串上,前提是目标空间足够大,以确保能放下整个复制过来的字符串。其次,目标空间必须是可修改的,而被复制的字符串没有修改的必要,所以会被const修饰被复制的字符串必须以\0结束,同时会把这个\0复制到目标空间当中去str++;stc++;num--;*str= '\0';return p;int main()与strcpy的代码实现大致相同,只是用num去控制循环赋值的次数。

2023-12-02 22:15:31 888 4

原创 指针数组,数组指针,字符指针,函数指针,二级指针介绍

一级指针解引用是*pa,得到a的值10,而二级指针解引用*ppa,得到的是一级指针变量pa保存的内容(也就是a的地址),再解引用一次**ppa,得到的依旧也是a的值10。同样数组指针也可以也可以加个的字来理解,即数组的指针,数组的指针本质上就是个指针,那么数组指针变量存放的其实就是数组的地址,是能够指向数组的指针变量。二维数组同样用上述打印的函数,传递的也是首元素地址,只不过不是单个元素了,而是一整个第一行数组的地址,这时候就得用数组的指针去接收这一整个数组的地址了。去掉指针变量的名字就是它的类型了。

2023-11-24 18:34:20 939 5

原创 指针的介绍

那么指针变量int *pa类型是什么呢,它的类型是int*,*号是在说明a是一个指针变量,而前面的int是在说明pa指向的是整型类型的对象。上面示例中指针加整数解引用和普通数组打印方法的结果是相同的,p一开始指向的是首元素地址,循环加i,它的地址也会随之往后偏移,此时i其实就是数组的下标。将地址保存起来是要使用的,那怎么使用的呢,我们只要拿到了地址(指针)就可以通过指针找到地址(指针)指向的对象,相当于我们使用地址要找到一个房间,在房间里可以拿走或者存放物品。这两没什么大的区别,就是同一个东西。

2023-11-23 12:51:17 121 2

原创 算法二 冒泡排序

冒泡排序指的是相邻两项两两相比,前一项如果比后一项大得话,就交换位置,然后依次与后面的数相比,直到遇到后一项比自己小。//如果后面的数字还没循环完就已经有序了就不用接下去执行没完成的循环了,简化了操作。for (i = 0;i++)//此次循环次数不会大于总个数,i从0开始所以要减1。for (j = 0;j++)//此次循环是两两相比要几次。//每交换一次就将find置为零。//设定如果有序就为1。

2023-11-13 22:54:22 46 3

原创 算法一 二分查找法

如果中间下标对应的数比我现在要查找的数大,那么就把中间下标的下一个作为的左值下标,重新折半取中间下标,重新比较中间值和要查找到的值的大小。如果中间的数比我现在要查找的数小,那么就把中间下标上一个作为右值下标,而左值下标保持不动,继续折半取中间值,重新比较中间值和要查找到的值,循环上面操作。//sizeof(arr)/sizeof(arr[0])用数组总字节长度除以单个字节长度就得到元素总个数了,而减一得到数组末尾元素下标,因为数组下标从0开始,所以减一才是末尾元素下标。//设定左下标为数组的首元素的下标。

2023-11-13 18:50:28 143 1

原创 c语言版简易扫雷

单独设置一个get()函数来计算雷的个数 ,另外八个坐标为arr1[x-1][y] arr1[x-1][y-1] arr1[x][y- 1] arr1[x+1][y-1] arr1[x+1][y] arr1[x+1][y+1] arr1[x][y+1] arr1[x-1][y+1] ,用这八个坐标值相加就知道有多少个雷,再分别减‘0’就可以显示几个雷了。2.建立一个数组arr2用来存放雷的信息,用字符‘1’来表示雷,有雷就存放1,没有雷就存放0。而字符型个数=数字+字符0。

2023-11-05 16:57:38 80 3

原创 c语言分支循环浅介绍(下)

for循环里面break与while差不多,但是continue有区别,因为for循环调整部分和判断部分集中在一块,所以continue的跳过后面的语句并不会影响for循环的调整,而仅仅只会跳过a=5,所以结果是0,1,2,3,4,6,7,8,9,10。continue在英文里是继续的意思,在c语言中它是跳过本次循环以及continue的语句,因为a++在continue后面,所以被跳过了会一直拿a=5去做判断,最后陷入死循环,而break是直接就结束了。同样的例子,打印0到10的数字。

2023-10-28 17:51:44 44 1

原创 c语言分支循环浅介绍(上)

而break可以看作是这条河流经途中的闸门,有了break闸门就可以截断河流,不让它继续往下流了(即不执行下面剩下的语句了)。举个简单的例子,假设分数大于445分是二本线,而在大于445分基础上518分是一本线,一本线以上又可以分为(小于600分)的普通一本和(大于600分)的985,211学校。值得注意的是else并不是和哪个if对齐就是和哪个是一队,如果写代码很混乱分不清的时候,else是和自己最近的if相匹配的,不能乱点鸳鸯谱啊。比如下面的例子,我的本意是只打印1月的天数就行,可是它却全打印出来了。

2023-10-28 16:41:52 38 1

原创 c语言猜数字游戏

*/n的余数范围是0到n - 1,得到随机数范围是0到100 如果是a到b的随机数范围是a + rand(b - a + 1);/*srand函数是用来初始化随机数的生成器,原型srand(unsigned int seed)*/srand((unsigned int)time(NULL));printf("猜数字游戏,请输入\n");printf("游戏结束\n");printf("猜大了\n");printf("猜小了\n");printf("猜对了\n");printf("出错了\n");

2023-10-23 22:47:17 79 3

原创 实现顺序栈的各种基本运算的算法

printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("依次进栈元素a,b,c,c,d,e\n");printf("顺序栈的基本运算\n");printf("初始化栈\n");printf("释放栈\n");

2023-10-21 17:16:25 518 2

原创 链栈实验,实现链栈的各种基本运算

printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("判断栈s是否非空: %s\n", (StackEmpty(s)?"空" : "非空"));printf("依次进栈元素a,b,c,d,e\n");printf("链栈的各种基本运算\n");printf("初始化栈\n");printf("释放栈\n");

2023-10-21 16:04:31 218 1

原创 顺序表实验

printf("(4)顺序表位%s\n", (ListEmpty(L)?printf("(6)元素b的位置=%d\n", LocateElem(L, 'b'));printf("(5)顺序表L的第3个元素=%c\n", elemType);printf("(3)L长度=%d\n", ListLength(L));printf("(2) 依次插入a,b,c,d,e元素\n");printf("(8)删除L的第3个元素\n");}//判断表是否为空。

2023-10-21 12:06:22 127 1

原创 给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数

EOF) { // 注意 while 处理多个 case。// 64 位输出请用 printf("%lld") to。一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

2023-10-21 11:53:38 157 1

原创 题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!

2023-10-21 11:50:10 128 1

原创 在屏幕上输出9*9乘法口诀表

内部循环控制每行打印多少个表达式以及表达式内容,//打印每一行内容,每行有i个表达式。外层循环控制打印多少行。比较简单,具体参考代码。

2023-10-21 11:46:49 43 1

原创 求10 个整数中最大值

2. 使用max标记数组中的最大值,采用循环的方式依次获取数组中的每个元素,与max进行比较,如果arr[i]大于 max,更新max标记的最大值,数组遍历结束后,max中保存的即为数组中的最大值。1. 采用循环的方式输入一个数组。

2023-10-21 11:42:07 30 1

原创 分数求和!

2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0。计算1/1-1/2+1/3-1/4+1/5 ……+ 1/99 - 1/100 的值,打印出结果。然后使用flag标记控制奇偶项,奇数项为正,偶数项为负。a. 该表达式主要由100项,基数项为正,偶数项为负。然后将所有的项相加即可。1. 从上述表达式可以分析出。

2023-10-21 11:37:03 56 1

原创 打印1000年到2000年之间的闰年

0 || Y % 400 == 0)//能被4整除或者不能被100整除并且能被400整除。要求1000年到2000年之间的闰年,只需要知道求解闰年的方法即可。闰年的条件:如果N能够被4整除,并且不能被100整除,则是闰年。或者:N能被400整除,也是闰年。即:4年一润并且百年不润,每400年再润一次。

2023-10-21 11:34:25 375

原创 数9的个数

if (i / 90 == 1 || i % 10 == 9)//整除90可以得到90到99的结果,而除10取余可以得到9,19,29,39,49,59,69,79,89,99的结果。其中99两个表达式都满足,所以数了两次9。作业内容 编写程序数一下 1到 100 的所有整数中出现多少个数字9。printf("\n%d个", c);

2023-10-21 11:27:18 36 1

原创 尝试用键盘读入一个字符,然后在屏幕上显示一个用这个字符填充的对角线长5个字符,倾斜放置的菱形

EOF) { // 注意 while 处理多个 case。// 64 位输出请用 printf("%lld") to。

2023-10-21 11:03:59 63

原创 鼠鼠的C语言搬砖之路的开始,C语言,启动

鼠鼠是海南某双非二本的一个学生,扔到人群中最不起眼的那一个。从17年入伍以来,我再次进入学校,已经有五六个年头没碰过书本了,其实中间也有过放弃复学,比同级的同学们年纪要大得多了,学习也更困难。我学编程目标其实说大也大,说小也小,我只是想玩上一款自己单独开发的游戏😂。目前在学校有三门语言,C语言,C++,phthon,没想到我反而是C语言学会并且理解的更多😂。我不喜欢死背代码,老实说我真记不住,我还是喜欢一边敲一遍记😂。如果可以的话,未来我想进米哈游公司,也没什么其他的原因,就为了原神,启动!

2023-10-12 16:24:29 81

空空如也

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

TA关注的人

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