自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【python】运算符

举个简单的例子:4 + 5 = 9例子中,和被称为,+ 称为。

2024-07-17 15:22:06 606

原创 python 基本数据类型和数据类型转换

在显式类型转换中,用户将对象的数据类型转换为所需的数据类型。以下实例中,我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失。有时候,我们需要对数据内置的类型进行转换,数据类型的转换,一般情况下你只需要将数据类型作为函数名即可。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。这些函数返回一个新的对象,表示转换的值。以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。

2024-06-12 21:07:23 885 1

原创 文件输入/输出

文件通常是在磁盘或固态硬盘上的一段已命名的存储区。C把文件看作是一系列连续的字节,每个字节都能被单独读取。C提供两种文件模式:文本模式和二进制模式。

2024-05-22 12:00:00 958

原创 C结构详解

编译器执行这行代码便创建了一个结构变量library。编译器使用book模板为该变量分配空间。在结构变量的声明中,struct book 所起的作用相当于一般声明中的 int 或 float。}library;声明结构的过程和定义结构变量的过程可以组合成一个步骤,组合后的结构声明和结构变量定义不需要使用结构标记。然而,如果打算多次使用结构模板,就要使用带标记的形式。

2024-05-22 02:55:35 1054

原创 其他标准I/O函数(fread、fwrite、feof、ferror)

当上一次输入调用检测到文件结尾时,feof()函数返回一个非零值,否则返回0.当读写出现错误时,ferror()函数返回一个非零值,否则返回0。假设要读取下一个冒号之前的所有字符,但是不包括冒号本身,可以使用getchar()或getc()函数读取字符到冒泡,然后用ungetc()函数把冒号放回输入流中。除此之外,它还包含错误和文件结尾的指示器、一个指向缓冲区开始出的指针、一个文件标识符和一个计数(统计实际拷贝进缓冲区的字节数)。当设置了与流关联的文件结束标识符时,该函数返回一个非零值,否则返回零。

2024-05-21 15:24:57 754

原创 通讯录项目(顺序表实现)

解释一下这里的con->arr[i].name,arr是一个结构体指针,更准确的来说是指向联系人数据的指针,arr[i].name是该一条联系人中的姓名信息 和 你要删除的联系人姓名用strcmp函数进行比较,两个姓名如果一样就返回0,就能得到该条联系人在通讯录中的下标。联系人的所有信息都存储在arr数组里面,如果联系人数据存在,Fund函数返回这个联系人的下标,最后将这个联系人的所有信息展示出来。通讯录的初始化实际上就是顺序表的初始化,通讯录的销毁实际上就是顺序表的销毁,因为通讯录就是顺序表。

2024-05-21 01:05:00 826

原创 编译和链接

编译是指将源代码(通常是人类可读的高级语言代码)转换成目标代码(通常是机器语言或汇编语言)的过程。编译器是完成这一转换的软件工具。预处理(预编译):在这个阶段,编译器会处理源代码中的预处理器指令,如包含头文件、宏展开等。词法分析:编译器将源代码分解成一系列的词法单元,如关键字、标识符、运算符、字面量等。语法分析:编译器检查词法单元序列是否符合编程语言的语法规则,构建抽象语法树(AST)。语义分析:编译器分析AST,确保代码的语义正确,比如变量是否已经定义、类型是否匹配等。中间代码生成。

2024-05-20 16:19:36 503

原创 动态顺序表的实现

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指 用一组地址连续的存储单元依次存储线性表中的各个元素、是的线性表中在逻辑结构上相邻的数据元素 存储在相邻的物理存储单元中,即通过数据元素物理存储的 相邻关系来反映数据元素之间 逻辑上的相邻关系,采用顺序存储结构的线性表通常被称为顺序表。由于数据在数组中的位置是以0,1,2,3,4这样存储的,因为是在指定位置之前插入数据,所以指定的位置不能大于有效数据个数,也不能小于或等于0。在插入数据之前,也要先检查空间够不够,空间不够就进行增容。

2024-05-20 13:53:23 644

原创 联合和枚举

1、先定义枚举类型,再定义枚举变量enum DAY2、定义枚举类型的同时定义枚举变量enum DAY} day;3、省略枚举名称,直接定义枚举变量enum} day;return 0;结果:3在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

2024-04-22 23:07:17 690

原创 初识linux

很多时候你会发现,怎么我输入命令之后显示的结果是乱码。Linux是支持多国语系的,屏幕的信息会以该支持的语系来输出。比如说,我们刚开始配置Linux的时候,选择的是汉语,那该语系就是中文。这个时候,我们就得将支持语系改为英文,才能够以英文显示出正确的信息。这样,我们就 进入到bc这个软件的工作环境当中 了,输入的数据要符合bc的要求。上面显示的是:星期五、四月十九日、16:54分、57秒,在2024年的CST时区,中国在CST时区中。某些命令有特殊的参数存在,若输入错误的参数,则该命令会有错误信息的提示。

2024-04-19 23:36:36 607 1

原创 结构体的内存对齐

原因在于,为了访问未对齐的内存,处理器需要做两次内存访问;如果我们能保证将所有的double类型的数据的地址都对齐成8的倍数,那么就可以用一个内存操作来读会泽写值了。4、如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中 最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。VS中默认的值为8 Linux中gcc没有默认的对齐数,对齐数就是成员自身的大小。3、结构体总大小为最大对齐数(结构体中 每个成员变量都有一个对齐数,所有对齐数种最大的)的整数倍。

2024-04-15 22:12:19 496

原创 大小端字节序、浮点数的存储

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit位,参数在C语言中除了8bit的char之外,还有16bit的short类型,32bit的long类型(还要看具体的编译器)。如果E为11位,它的取值范围为0~2047.但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,存入内存是E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。

2024-04-15 18:35:01 743 1

原创 内存函数memcpy、mommove、memset、memcmp

但是在重叠内存块这方面,memmove() 是比 memcpy() 更安全的方法。如果目标区域和源区域有重叠的话,memmove() 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,复制后源区域的内容会被更改。memset() 函数将指定的值 c 复制到 str 所指向的内存区域的前 n 个字节中,这可以用于将内存块清零或设置为特定值。在清空内存区域或者为内存区域赋值时,memset() 是一个常用的工具函数。该函数返回一个指向目标存储区 str1 的指针。用于将一段内存区域设置为指定的值。

2024-04-12 22:24:20 1152

原创 字符函数strlen、strcpy、strcat、strcmp、strstr、strtok、 strerror和perror函数

这个头文件中说明的,C语言程序启动的时候就会使用一个全面的变量 errno 来记录程序的当前错误码,只不过程序启动的时候 errno 是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在 errno 中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是有对应的错误信息的。haystack和needle分别指向字符串的首字母,如果找到相同的字符,haystack和needle向后移一位,如果没有找到相同的,haystack向后移一位。

2024-04-10 20:26:17 713

原创 C——找单身狗2

不过和单身狗1不一样的是,整个数组异或下来,会出现一个别的值,是由5^6得到的。这里我们找新得到的值的二进制位的1在哪里。注意,异或运算符是两个数的二进制位对应位相同结果为1,不同为0 ,可以用这点来将两个不同的数字分成两个不同的组,然后在分别异或每个组。如:1,2,3,4,5,1,2,3,4,6 5 和6都只出现了一次,找出5和6打印出来。在一个数组中,室友两个数字出现了一次,其他所有数字都出现了两次。3、将k位上为1的分为一组遍历异或,最后的值存储到p1或p2中。

2024-04-07 02:27:41 310

原创 C语言——找单身狗1

关键点就在于,Fund函数中遍历数组中的每一位成员,有两个相同的就会互相抵消为0,最后只会留下只有一个的数与0异或。例如:2 的二进制数为0010,3 的二进制数为0011,那么2^3 结果为 0001。任何数和0异或都为本身。在一个整形数组中,只有一个数字出现一次,其他数组都是成对出现的,找出那个只出现一次的数字。数组中:1,2,3,4,5,4,3,2,1,只有5出现一次,其他数字都出现2次。,如果两个数的二进制数相对应的位不同,结果为0,相同则为1。可以使用按位异或来解决。

2024-04-05 23:30:10 1017 1

原创 函数指针数组

首先p要和[]先结合,我们拿掉数组名后剩下的就是数组的元素类型。也就是: int (*)() 函数指针。函数指针数组,我们通常也叫作转移表。1、不适用函数指针数组的转移表。2、使用函数指针数组实现转移表。函数指针数组的用途:转移表。如何创建函数指针数组?

2024-04-05 14:08:45 317

原创 深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针、函数中指针变量

这里我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和 arr 都是首元素的地址,+1就是跳过1个元素。在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。*(*(zippo+2) + 1) 二维数组的第 3个一维数组元素的第 2个int 类型元素的值,即数组的第3行第2。*(zippo+2) + 1 二维数组的第 3个元素(即一维数组)的第 2个元素(也是一个 int 类型的值)地址。

2024-04-04 23:24:55 984

原创 深入理解指针1:指针变量、指针运算、野指针、const修饰指针

生活中我们把门牌号也叫地址,在计算机中我们把内存单元的编号也称为地址。C语⾔中给地址起了新的名字叫:指针。所以我们可以理解为:内存单元的编号==地址==指针。

2024-04-01 23:46:41 566

原创 扫雷游戏——数组和函数实现

当你输入的坐标不是雷(‘0’)就可以在这个位置上埋雷,埋上一个雷,雷的数量就减1,直到减为0,这里用一个while循环。首先是创建了两个字符二维数组mine和show,这两个数组都是11*11的,避免之后在9*9的棋盘中出现越界的情况。假设我们排查(8,6)这个坐标时,我们访问周围的⼀圈8个⻩⾊位置,统计周围雷的个数时,最下⾯的三个坐标就会越界,为了防⽌越界,我们在设计的时候,给数组扩⼤⼀圈,雷还是布置在中间的9*9的坐标上,周围⼀圈不去布置雷就⾏,这样就解决了越界的问题。打印的棋盘是9*9的。

2024-01-26 13:24:09 1085

原创 C按位操作符(~、&、|、^)

C提供按位逻辑运算符和移位运算符。

2024-01-21 14:18:20 2185

原创 ANSI C类型限定符(const、volatile)

C90 恒常性const 易变性 volatileC99 restrict 用于提高编译器优化C11 _Atomic C11提供一个可选库,由stdatomic.h管理,以支持并发程序设计,而且_Atomic是可选支持项。

2024-01-15 15:30:38 2178

原创 动态内存分配函数——malloc、calloc、relloc

从ANSI C标准开始,C使用一个新的类型:指向void的指针。该类型相当于一个“通用指针”。malloc()函数可用于返回指向数组的指针、指向结构的指针等,所以通常该函数的返回值会被强制转化为匹配的类型。然而,把指向void的指针赋给任意类型的指针完全不用考虑类型匹配的问题。如果 malloc()分配内存失败,将返回空指针。我们试着用malloc()创建一个数组。除了用malloc在陈鼓型运行时请求一块内存,还需要一个指针记录着块内存的位置。

2024-01-14 09:26:07 1126 2

原创 【C】存储类别(作用域、链接、存储期)

C提供了多种不同的模型或存储类别在内存中存储数据。从硬件方面来看,被存储的每个值都占有一定的物理内存,C语言把这样的一块内存称为对象。对象可以存储一个或多个值。一个对象可能并未存储实际的值,但是它在存储适当的值时一定具有相应的大小(面向对象编程中的对象指的是类对象,其定义包括数据和允许对数据进行的操作,C不是面向对象编程语言)。从软件方面看,程序需要一种方法访问对象。int a = 3;该声明创建了一个名为a的标识符。标识符可以用来指定对象的内容。

2024-01-13 09:15:53 1062 1

原创 牛客网BC93 公务员面试

如果要求多组输入的话,可以用scanf依次读取并判断最大值和最小值,还可以同时求和,减去最大值和最小值就行了。然后重置一下变量就又可以进行下一轮了。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。思路:可以创建一个数组然后输入数据,用冒泡对数据进行排列,根据数组下标去掉一个最大值和一个最小值,求和然后求平均值。每一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。每一行,输入7个整数(0~100),代表7个成绩,用空格分隔。

2024-01-12 08:00:00 506 1

原创 内联函数(C99)

inline 的使用是有所限制的,inline 只适合涵数体内代码简单的涵数使用,不能包含复杂的结构控制语句例如 while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。:如果在每个文件里都实现一次该内联函数的话,那么,最好保证每个定义都是一样的,否则,将会引起未定义的行为。inline 函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。

2024-01-11 15:53:05 565 1

原创 可变参数:stdarg.h

然后,该函数将使用定义在stdarg.h中的va_start()宏,把参数列表拷贝到va_list类型的变量中。接着上面的例子讨论,va_list类型的变量是ap,parmN形参是lim。在上面的例子中,第1行f1()中parmN为n,第2行f2()中parmN为k。因为va_arg()不提供返回之前参数的方法,所以有必要保存va_list类型变量的副本。查看程序中的运算可以发现,第1次调用sum()时对3个数求和,第2次调用时对6个数求和。在该列中,lim是parmN形参,它表明变参列表中参数的数量。

2024-01-03 20:40:30 681 2

原创 C库——数学库和断言库

C标准规定了一些预定义宏C99新增inline关键字时,它是唯一的函数说明符(关键字extern和static是存储类别说明符,可应用于数据对象和函数)。C11新增了第2个函数说明符——Noreturn,表明调用完成后函数不返回主调函数。exit()函数是_Noreturn函数的一个示例,一旦调用exit,它不会再返回主调函数。size_t类型被定义为sizeof运算符的返回值类型——无符号整数类型,通常是unsigned int 或unsigned long。

2024-01-02 20:38:13 987

原创 C预处理器

假设先把 T 定义为20,稍后在该文件中又把它定义为25。这个过程称为重定义常量。不同的实现采用不同的重定义方案。除非新定义与旧定义相同,否则有些实现会将其视为错误,还有些会给出警告。ANSI标准采用第1种方案,只有新定义和旧定义完全相同才允许重定义。具有相同的定义意味着替换体中的记号必须相同,顺序也相同。//定义相同//这两条定义都有相同的记号,//额外的空格不算替换体的一部分//只有一个记号,因此与前两条定义不同。

2023-12-30 14:37:55 2219 1

原创 qsort()函数

必须把每个数组中每个元素的大小明确告诉qsort(),并且再比较函数的定义中,必须把该函数的指针参数转换为对具体应用而言类型正确的指针。第1个参数是指针,指向待排序数组的首元素。ANSI C允许va指向任何数据类型的指针强制转换成指向void的指针,因此,qsort()的第一个实际参数可以引用任何类型的数组。最后,qsort()还需要一个指向函数的指针,这个被指针指向的比较函数用于确定排序的顺序。表明qsort()最后一个参数是一个指向函数的指针,该函数返回int类型的值且接受两个指向。

2023-12-29 01:11:25 746 1

原创 牛客网BC73——计算一元二次方程

要知道一元二次方程的求跟公式,以及怎样求🔺,🔺=b*b-4*a*c ,这里可以用一个pow函数来求平方。,即x1的虚部系数小于等于x2的虚部系数,实部为0时不可省略。实部= -b / (2*a),针对每组输入,输出一行,输出一元二次方程ax2 + bx +c = 0的根的情况。输出:x1=-0.50-1.50i;输出:x1=0.00-1.00i;虚部= sqrt( -🔺) / (2*a)输出:x1=-3.35;输出:x1=x2=-1.00。

2023-12-28 09:37:06 577 1

原创 for循环打印菱形

1、首先打印上半部分的菱形。需要注意的是,上半部分共有n行,第 i 行需要打印2*n+1个符号,而且这些符号需要居中对齐。为了实现居中对齐,我们可以在每一行的前面打印n-i个空格。具体来说,我们可以使用一个循环来遍历每一行,并使用另一个循环来打印空格和符号。2 * (n - i-1)-1个符号,同样需要居中对齐,并且需要在每一行的前面打印i+1个空格。2、接下来打印下半部分的菱形,。与上半部分类似,下半部分共有n-1行,第i行需要打印。题目描述:输入一个整数n,打印2*n-1行的菱形图案。

2023-12-27 23:07:27 562 1

原创 泛型选择(简略)

Generic后面的圆括号中包含多个用逗号分隔的项。第1个项是一个表达式,后面的每个项都由一个类型、一个冒号和一个值组成,如 float: 1.第1个项的类型匹配哪个标签,整个表达式的值是该标签后面的值。例如,假设上面的表达式中x是int类型的变量,x的类型匹配int:标签,那么整个表达式的值就是0. 如果没有与类型匹配的标签,表达式的值就是default:标签后面的值.C11新增了一种表达式,叫作泛型选择表达式,可根据表达式的类型(即表达式的类型是int、double还是其他类型)选择一个值。

2023-12-24 23:20:48 411 1

原创 关于atexit()函数和exit()函数的用法——知识点总结

atexit()注册函数列表中的函数,当调用exit()时就会执行这些函数。最后调用exit()函数时,exit()会执行这些函数(执行顺序与列表中的函数顺序相反,即最先调用的是最后一个被注册的函数。即使没有显式调用exit(),main()结束时会隐式调用exit()。exit()执行完atexit()指定的函数后,会完成一些清理工作:刷新所有输出流,关闭所有打开的流和关闭标准I/O函数tmpfile()创建的临时文件。要使用atexit()函数,只需把退出时要调用的函数地址传递给atexit()即可。

2023-12-24 15:14:36 435 1

原创 1~100000的自幂数

自幂数是指一个数的位数的n次方等于这个数本身。例如,153就是自幂数,因为1^3+5^3+3^3=153.可以使用pow函数求的每个数的次方数,pow函数在头文件math.h中。我们可以使用循环遍历一个1~100000并检查每个数是否为自幂数。3、判断sum与i是否相等,相等则i是自幂数。2、计算i的每一位n次方之和sum。

2023-12-23 08:10:22 673 1

原创 【C语言】——冒泡排序

冒泡排序是⼀种基础的排序算法,其基本思想是⽐较相邻的两个元素,如果它们的顺序错误就交换它们的位置,直到整个序列有序为止。1. 从序列的第⼀个元素开始,对相邻的两个元素进行比较,如果顺序错误就交换它们的位置,使较 小的元素排在前⾯,较⼤的元素排在后⾯。2. 在对序列中的所有相邻元素都进行了一次比较之后,第⼀轮排序结束,此时最后一个元素已经是 整个序列中最大的元素。• 特别地,若在某⼀轮排序中未进行交换操作,则当前序列已经是升序状态,可以结束排序。

2023-12-12 19:27:36 322

原创 最大公约数和最小公倍数

为了求出两个数的最⼩公倍数,可以采⽤枚举试除法。2. 从⼩到⼤依次判断能否同时整除这两个数,若某个数满⾜同时被两个数整除,则其为公倍数;2. 从⼤到⼩依次判断能否同时整除这两个数,若某个数满⾜同时整除两个数,则其为公约数;3. 从⼤到⼩遍历找到公约数时,此数即为最⼤公约数,此时应当结束循环。3. 从⼩到⼤遍历找到公倍数时,此数即为最⼩公倍数,此时应当结束循环;1. 具体来说,公约数⼀定⼩于两个数,从两个数中的较⼩值开始枚举;1. 具体来说,公倍数⼀定⼤于两个数,从两个数中的较⼤值开始枚举;

2023-12-11 18:54:23 361 1

原创 【C语言】——二分查找

中间数是通过下标来查找的,比如1的下标是0,10的下标是9,(0+9)/2=4,那么中间数是5。比如要在一个arr数组中查找7,arr中的元素为1,2,3,4,5,6,7,8,9,10。二分查找又称折半查找,是指在一个有序数组中,将要查找的数和中间数的对比来进行折半。通过二分查找能极大的缩短查找时间,但是前提是一个有序数组,不然架不住脚。5是中间数比7小,左下标加1。8是中间数比7大,右下标减1。那么通过代码就是这样实现的。

2023-12-09 09:11:56 403

原创 猜数字游戏——C语言实现

选择其他的就再次进行选择。我用的是do while循环,因为我首先要先有一个界面,所以调用了menu(),do while循环至少执行循环体一次,然后用你输入的选择用作while里的条件,如果你选择1,为真就会无限循环,依靠break跳出循环,选择0就不进行循环。另外,srand不能放在循环里面,否则每次执行循环时设置的种子不一样,产生的数也会变化,也就是说让你猜的那个数一直在变,你是在折磨你自己。在没有srand的情况下,默认种子为1,那么我们再将srand的种子设为1,发现生成的值没有变化。

2023-12-06 08:36:18 393 2

原创 筛选N以内的素数

打印N以内的素数

2023-12-03 11:15:22 346 1

空空如也

空空如也

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

TA关注的人

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