自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 sizeof跟strlen的用法及差异

而strlen是跟内容有关的,它是计算字符串长度的(字符数组也是可以的),其核心是统计字符串中'/0'前有多少字符,一定要找'/0',所以它要关注内容,sizeof是计算所占内存空间的,不管你内容是什么,只要知道占多少内存,第七个&arr[0]是首元素地址,首元素地址加一也是地址,就是4/8。第二个arr代表的是首元素地址,+0代表首元素地址的大小,即4/8。第六个&arr+1是跳过整个数组后的地址,也是地址,即4/8。第五个&arr代表的是整个数组的地址,也是地址,即4/8。下面我们通过几道题来讲解,

2024-07-08 23:13:25 224

原创 qsort函数

这里我们先来想一下,如果改写一开始写的冒泡排序来让它实现字符串的排序、浮点型数 组的排序、甚至是排序结构体数组,我们应该改写哪一部分,首先,循环的趟数不需要改 变,每趟需要比较的次数也是不变的,那么需要改的就是每次比较,如何比较,对于数字可 以用大于小于号,但是字符串呢,结构体呢,甚至说内部的交换也不能简单的使用赋值号来 进行,我们所需要改的即下面显示的部分,size-base指向的数组中一个元素的大小,单位为字节,

2024-06-08 20:44:27 372

原创 十大排序-冒泡排序

我们会发现,这一轮下来,最大的数会被放在最后,那么下一次再进行排序时,就不需要再去让最后一个数参与比较,这样可以有效减少代码运行时间,提高代码效率,两个数比较,第一个数小于其后面相邻数,所以位置不用改变,第二个数及其后面相邻数比较,也不用改变,然后第三个数及其后面相邻数比较,第三个数大于其后面相邻数,那么我们让两个数交换位置,这里给出这一组数,我们从第一个开始,比较相邻的元素,以此类推直到倒数第二个数及其后面相邻数进行比较,然后继续比较第四个及其后面相邻数,改变位置,那么我们下面来用代码实现一下,

2024-06-05 14:26:44 332

原创 操作符:->

因为p1指向存放s1地址的那一块空间,我们对p1解应用,得到的就是s1的地址,所以(*p1)与s1是等价的,但是箭头(->)只能搭配指针使用,箭头左边为指针变量,右边指向所要引用的结构体成员名。在一个指针变量指向一个结构体时常常会用->操作符来使用结构体内部的成员,下面我们看看如何使用这个p1指针变量来调用结构体成员,来达到相同的结果,这里要注意,我们使用了箭头就不需要再使用成员访问运算符(.)了,下面我们设计一个指针,让这个指针变量存储结构体的地址,下面是我们没有使用指针时,如何调用结构体内的成员,

2024-06-05 14:12:27 166

原创 位操作符运用(^)-题目

在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5。同理,1^2^3^4^5^1^2^3^4=5,这里我们回顾一下按位异或^中的两个应用,那么可以知道1^2^3^1^2=3,

2024-05-13 10:03:31 221

原创 结构体语法

那么c语言就引入了结构体这样一个自定义的数据类型(是自定义类型),这里要注意,我们现在是自定义了一个类型,相当于c语言中的int,c语言提供了一些基本的内置数据类型(c语言本身的类型),但是如果你想描述一个学生的基本信息时,这些就无法解决了,结构是一些值的集合,这些值被称为成员变量,那么我们想要使用这个类型,还需要有变量,数组初始化用大括号,结构体也要用大括号,注意是s1的赋值方法在赋值时是有顺序的,结构的每个成员可以是不同类型的变量,这里四个成员,可以是不同的结构类型,全局变量的声明有两种形式,

2024-04-22 09:46:32 168

原创 逗号表达式

这里要注意,不能因为逗号表达式的值等于最后一个就认为前面的表达式无需计算,逗号表达式中前面的表达式是会影响最后一个表达式的值的,所以需要进行计算。第二个表达式让a=b+10,那么这个时候a变成了12,b不变还是为2,第一个表达式为a>b,这个为假,但只是判断,不会改变a和b的值,从左向右依次计算,整个表达式的最终结果为最后一个表达式的结果,第四个表达式为b=a+1,此时a为12,那么b就是13,第四个表达式为最后一个表达式,所以所得值13为c的值,这里问c的值,后面是逗号表达式,那么从左向右来看,

2024-04-21 14:26:17 305

原创 位操作符 — &、|、^、~

这里,就可以通过1的二进制数判断出a的最后一位是0还是1,如果是1,按位与后的二进制数最后一位为1,反之为0,我们不难发现,这个所需数和上面第一部分的所需数在每一位上都是相反的,那么我们就可以利用操作符~(按位取反),由于只要第五位改为1,而其它位不变,那么我们可以想象一下,这个a或上一个上面数字可以完成这个改变呢,编写一个代码,实现输入一个整数,输出其存在内存中的二进制1的个数,(即补码中1的个数)那么如何将第五位改回去呢,同样让它和一个数按位与,让所需数的第五位为0,其余位为1,

2024-04-20 09:15:14 387

原创 操作符:左移(<<)右移(>>)

这个取决于编译器,常见的编译器使用的是算数右移,那么我们下面就围绕算术右移来展开讲解,变成00000000000000000000000000010100,即b=20,(这里可以发现一个规律,右移会将整数的绝对值*2,后面也可以使用这个特征)反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。注:移位操作符的操作数是能是整数,且移动位数不要写负数,下面一行是向右移一个单位,前面用原该值的符号位填充,<< 左移操作符,移位规则:左边抛弃,右边补0。算数右移,左边用原该值的符号位填充,右边丢弃,

2024-04-01 19:01:40 483

原创 小游戏-扫雷

如果用户接下来选择红色格子怎么办,灰色格子是我们更改后的雷的数量,并不代表这里有雷,这里就出现歧义了,那么我们现在应该怎么办呢?设置数组大小的时候我们要注意一个点,当用户点到边缘的格子时,周围就不是八个格子了,这时我们去访问就会有越界的情况出现,假如用户点击这个格子,如果没有雷,我们显示周围八个格子中的雷的数量,有雷的话,我们结束游戏,并展示我们埋的雷的情况,雷布置完了,现在需要用户进行扫雷,但是扫之前,我们得让用户有选项来选择吧,我们把show棋盘打印给用户,

2024-03-24 23:44:50 754

原创 在面对一个大型的代码,需要分文件编写的时候,应该怎么办呢;以及在编写出一个功能时,有人想要买这个功能,怎么在不给出源代码的情况下让买家可以使用这个代码功能呢?

那怎么能把代码隐藏起来的同时把这些东西给到买家呢,那这里头文件就有着巨大的作用,如上述例子,我把add.h暴露,里面写上用法,名称,参数,返回值等,把aad.c隐藏起来,那这样就必须要写多个文件了,不能把add函数的声明放在add.c里,从而省略aad.h了。这里我们可以类比一下库函数,库函数是开发人员写好功能后,用户只需要用include调用就可以了,那么想要在main函数里使用我们自定义的add函数的话,只需要在开头加上,#include"add.h",那么我们就相当于调用了自定义函数add,

2024-03-22 18:12:22 594 1

原创 函数的链式访问

继续上面的题目,第一个printf输出43,这是输出了两个字符,那么返回值为2,第二个printf输出就为2,以此类推,第二个printf输出2,这是输出了一个字符,那么第三个printf输出就为1.综上所述,这个代码的输出为4321。第一个printf输出43,屏幕上现在打印了一个43,然后我们要看printf函数返回值是怎么规定的,3打印的是什么呢,是2的返回值,2打印的是1的返回值,那么从这里我们可以知道,返回值是输出的字符总数,下面来看一个代码,它的输出是什么样的呢,打开之后就是这样的,

2024-03-20 09:04:08 517 1

原创 c#的第一个代码的实现

上面自带的内容我们目前不需要更改,只需要在static void Main(string[] args)的语块中填写,与c语言的语法类似,但要注意c#的输入输出语句和c有很大差别,在下面,我会一一为大家介绍。然后我们对每个控件进行代码编写,想要编写哪个控件的代码,双击即可进入,那么,如何将上面的内容用窗体进行设计并表示出来呢,我们来看Main()中如何编写,以及其使用方法。我们输入两个整数,计算它的加减乘除的结果。首先,我们在控制台上进行编写,工具箱中我们将用到这三个控件,首先,我们要创建一个窗体,

2024-03-17 21:19:16 360 1

原创 vs中scanf()使用时,下方为什么出现error以及如何解决

然后重复刚才的操作,我们会发现,没有提示了,然后我们将桌面上改好的拷贝回去,注意要拷贝到刚刚的位置,但注意,scanf_s是vs2022提供的,不是c语言提供的,在其他编译器上可能会无法识别,首先我们在电脑上找到一个名为newc++file.cpp文件,在文件里加上这句话即可,但是每次打开vs都要去输入这么一段话,太麻烦了怎么办,有没有一劳永逸的办法呢?所以我们尽量不要去使用scanf_s,那么怎么在vs上使用scanf呢,然后右击,打开记事本,将刚刚的那句话输入进去,我们发现下方有error,vs报错,

2024-03-15 13:34:23 686 1

原创 数组练习-小习题

这里介绍一个关键字:strlen(),用来测量字符串的长度,注意字符串如果带有"\0",strlen是不计算\0的,只计算\0之前的字符数。例如:打印Hello,word!第一个打印出来H(左一),然后打印!(右一),接着e(右二),下面是d(左二)....... 依次打印,多个字符从两端开始移动,向中间汇聚输出,system(“cls”):清理屏幕。代码最终呈现上图所示。

2024-03-14 20:59:22 455 1

原创 小游戏-猜数字

上面是运行两次的结果,我们对比发现,两次运行的结果是相同的,并不是完全随机的,它是通过某种算法生成的随机数,rand函数是对一个叫“种子”的基准值进行运算生成的随机数,之所以每次运行程序产生的随机数序列是一样的,那是因为rand函数生成随机数的默认种子是1.如果想要生成不同的随机数,那么就要让种子是变化的,这里改变种子的值,伪随机值就不同了,那么想要实现真正的随机值,我们需要让种子变化,注意这个地方不是说要是一个随机的值,只需要是变化的即可,每次开始时都是不一样的,下次的和这次的不一样就可以,

2024-03-05 09:24:22 850 1

原创 小游戏-关机程序

goto是c语言提供的一种非常特别的用法,goto语句可以实现跳转到设置好的表好处,如上述代码中,在想要到达的地方前加上again(名字无所谓),然后goto again就可以了,但是goto要少用,多个goto同时在一个代码中出现容易打乱程序的执行流程,建议尽量不要使用,但goto在多个循环嵌套时,对于想要直接跳出最外层循环时,是十分好用的(不用再在每层循环都用一个break来跳出循环了)点开,找到“生产解决方案”,点击后再回去,找到x64点开,发现多了一个。这里右击鼠标,点击“打开所在文件夹”,

2024-03-03 22:15:00 1125

原创 for循环

结合for循环的执行流程图,for循环先执行表达式1,对变量进行初始化,然后执行表达式2,判断是否进行本次循环,若符合条件则执行语句(反之,结束for循环),最后执行表达式3。上面两个代码所达到的效果相同,第一个是用while循环,第二个用的for循环,表达式3用来调整(改变变量数值,完成循环),在屏幕上依次输出1-10,中间用空格隔开,注意for循环的表达式中间是分号(;for循环是3种循环中使用最多的,下面给出一个示例来更好的理解,表达式1用来初始化变量,for循环的语法表达,表达式2为判断部分,

2024-03-02 11:45:00 412

原创 while循环

然后判断条件语句是否符合要求,若符合要求,则循环一次,直至不符合要求,或强制退出(break)while的括号中条件满足,一直执行到不满足条件,或强行退出循环(用break)。若将count的初始值改为12,明显大于10,不符合while的条件语句,这个结构不管while的条件语句是否符合要求,都先执行一次,即,先执行一遍do,这时不考虑while的条件语句,示例,在屏幕上打出1-10,中间用空格分开,还有一个do-while结构,但这个不常用,if的括号中条件满足,执行所控制语句一次,

2024-03-01 12:45:00 321 1

原创 条件语句-switch

上面代码中,根据表达式expression不同的值,执行相应的case分支,如果找不到对应的值,则执行default分支。switch语句是特殊形式的if-else语句,面对多个判断条件时,用switch语句会更简洁方便,输入1-7中的一个数,分别代表星期几,若为周一到周五,则输出“工作日”,周六周日输出“休息日”,当case1-4后无break时,向下进行,直到遇到break。switch后的expression必须是整型表达式,case后的值,必须是整型常量表达式,两个代码所代表的意思是一致的,

2024-02-29 08:45:00 727

原创 操作符(关系操作符 条件操作符 逻辑操作符)

同理,赋值运算符优先级低,先进行右边表达式的运算,a为0,a++这个表达式为假,语句变为,i=0||++b||d++,判断表达式0||++b,++b的值为3,即0||3,这个式子相当于,假或真,则式子为真,即为1,语句变为i=1||d++,然后判断表达式1||d++,d++先使用d然后再加,即1||4,相当于真或真,则式子为真,即为1,语句变为i=1.(其中有短路求值)如果表达式1为假,则计算表达式3,并且所得值为整个式子的值。a为1,a++这个表达式为真,即式子的值为1,那么整个表达式为真,(短路求值)

2024-02-28 09:00:04 534 1

原创 条件语句-if

if语句括号中的条件语句是判断是否执行if下方控制的语句,如果条件语句为真,则执行,反之,不执行。if后的花括号内可放多条语句,若不带花括号,则if&&else只能控制紧挨着的一条语句;输入一个年份,判断是否是闰年:(闰年能被4整除,但不能被100整除,或能被400整除)结果是什么都不打印,就算else和第一个if并排,但else是和最近的if匹配,条件语句的值为0时,即为假(false),不执行其控制的语句;条件语句的值为非0时,即为真(ture),执行其控制的语句;执行上述代码,打印出什么呢,

2024-02-27 12:47:19 345

原创 scanf()函数

scanf()将字符串读入字符数组时,不会检测字符串是否超过了数组长度,所以,使用%s占位符时,应该指定读入字符串的最长长度,即写成%[m]s,其中的[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。scanf()处理用户输入的原理是,用户的输入先放入缓存,等到按下回车键后,按照占位符对缓存进行解读。回车键将输入分成几行也不影响。scanf()函数是用来读取用户在键盘上的输入,程序运行到这一步时,会停下来等待用户的输入,用户输入数据并摁下回车键,scanf()函数就会处理输入值,存入变量。

2024-02-26 22:32:06 893 1

原创 占位符 限定宽度

12.3f中,小数点前表示最小宽度为12,这其中包括整数部分和小数部分,小数位数为3, 则整数部分为12-3位,即9位,于是先输出9-3(这里的3是整数部分有三位数)个空格,即6个空格,然后输出整数及小数部分,最后小数部分要求小数位数为3,那么在末尾补一个零。如果希望改成左对齐,在输出内容后面添加空格,可以在占位符的%的后面插入一个-号。注意:如果约定的小数位数小于其数值的小数位数,则进行舍弃(不同的编译器可能会进行四舍五入);对于一串字符,若想只输出其中一部分,通过占位符也是可以实现的,下面进行举例,

2024-02-18 12:09:34 373 1

原创 常见占位符

f :⼩数(包含 float 类型和 double 类型,但大多用%lf表示double类型,%f表示float类型)。%G :等同于 %g ,唯⼀的区别是指数部分的 E 为⼤写。%e :使⽤科学计数法的浮点数,指数部分的 e 为⼩写。%E :使⽤科学计数法的浮点数,指数部分的 E 为⼤写。%llx :⼗六进制 long long int 类型。%lld :⼗进制 long long int 类型。%llo :⼋进制 long long int 类型。%lx :⼗六进制 long int 类型。

2024-02-01 13:16:31 568 1

原创 操作符用法-自增自减(区别a++和++a)

第六行代码c=++a相当于a先自增等于5(第四行自增一次变为4,本行再自增一次变为5),然后c=a,此时a=5,所有c=5。分析:第五行代码b=a++相当于b=a此时a=3,还没有进行自增,所以b=3。自增(++)和自减(--)运算符的作用是使变量的值加1或减1.++a是先执行a=a+1,然后使用a的值。不同之处主要在于对其他变量或结构的影响。在自增中又分为两种形式:a++和++a。两者都相当于a=a+1。

2024-01-31 15:02:53 299

原创 十大排序-插入排序

例如,打扑克牌起牌时,新起的牌要插入到手中有序的牌中,我们将新起到的牌与手中的牌从右到左进行比较,插入到正确的位置,手上的牌总是排好的。这里j<i&&j>i-1,将j所在位对应的数字放在i所在位,i所在位到j前所在数字向后移一位,且j和i向后移。这里j<i-3,将j所在位对应的数字放在i-3所在位,i-3所在位到j前所在数字向后移一位,且j和i向后移。这里j<i,将j所在位对应的数字放在i所在位,i所在位到j前所在的数字向后移一位,且j和i向后移。这里不需要调整,j和i向后移。

2024-01-28 14:36:21 318 1

原创 数据的表现形式

标识符是对变量、符号常量名、函数、数组、类型等命名的有效字符序列。如"china","123","good","A"等,用双撇号把若干字符括起来。用单撇号括起来的一个字符,如:'a','3','#'。\o、\oo或\ooo[o代表一个八进制数字] 输出该八进制码对应的字符。派生类型分为指针类型、数组类型、结构体类型、共用体类型和函数类型。转义字符是一种特殊形式的字符常量,是以“\”开头的字符序列。定义时要指定变量的名字和类型。数据类型分为基本类型、枚举类型、空类型和派生类型。

2024-01-27 20:45:30 361

原创 <C语言>

对于c语言的学习 我认为更重要的是动手去写去试 在学习课本知识之外进行大量的练习 对于课本上的例子 理解过后独立思考 然后写出来 写的过程中会发现很多小问题 把这些小问题一个一个的解决掉 自己对c语言的理解会越来越深 也会把它运用的越来越顺。在这里 我会不定时去对所学知识进行总结梳理 欢迎大家对我进行监督 对我的知识总结的错误进行提出 我们一起学习巩固探讨c语言。大家好 我是一枚学过c语言的学生 学校大致教了一些c语言的东西 现在想继续巩固学习 查漏补缺 并对已学知识进行总结疏导。

2024-01-24 18:23:25 360

空空如也

空空如也

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

TA关注的人

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