自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C语言】深入理解指针

他的四个参数分别是要进行排序的数组base的首地址,base数组的元素个数,每个元素的大小,以及一个函数指针,这个函数指针指向了一个函数,这个函数的参数是两个void*类型的指针,返回类型是int,要求这个函数能够比较参数(这个函数的参数是两个指针)指向的两个元素的大小,规定如果elem1指向的元素比elem2指向的元素大,那这个函数就返回一个大于零的数,反之就返回一个小于零的数,如果elem1和elem2指向的元素一样大,就返回0。指向的元素是int [10]类型的,存放的内容是arr的地址。

2024-02-08 15:11:54 4729 3

原创 【Python】异常、模块与包

在导入模块的过程中有时候某些模块或者模块中某些功能的名字很长,每次调用就很不方便,我们就可以使用关键字as把这种名字定义成一个别的简单的名字,比如import time as t:这样就把time这个模块的名字用t代替掉了,在下面调用time模块里面的功能的时候就可以写成t.sleep等比如from time import sleep as s:这句代码表示把time中名为sleep的功能名字改成s,这样我们在下面调用sleep函数的时候就可以写成s(5)等,表示暂停五秒。

2024-04-25 19:36:56 633

原创 【Python】文件操作

对文件的操作主要就是打开,关闭,读,写等等。

2024-04-21 18:56:56 704

原创 【Python】函数进阶(纯干货版)

在Python中允许一个函数带回多个返回值,写法是一个return 返回值1,返回值2在接收的时候同样使用多个变量接收,中间用逗号隔开。如图运行结果为1 2,也就是说x和y成功接收了test函数带回的两个返回值。同时返回值的类型也是不受限制的,比如运行结果为1 hello。

2024-04-21 10:25:28 513 1

原创 【Python】函数基础(纯干货版)

函数是组织好的,可重复使用的,用于实现特定功能的代码段,将功能封装在函数内,可供随时随地重复利用,提高代码的复用性,减少重复代码,提高开发效率。函数定义的一般格式为通过def这个关键字来作为定义函数的标识,return是需要缩进的。注:① 参数如不需要,可以省略② 返回值如不需要,可以省略③ 函数必须先定义后使用比如我们要自定义一个用来计算字符串长度的函数,代码如下运行结果为字符串hello的长度为5。

2024-04-19 20:15:11 383

原创 【Python】数据容器及其常用操作

修改列表中的元素,语法为列表[下标]=值。可以发现除了删除列表中的del 列表[]和列表.pop()中使用的是下标,其余的方法()中用的都是内容也就是元素或者容器,在记忆的时候可以把删除的操作记作列表.remove,这样对列表的所有操作的方法中的()均是内容了。数据容器是一种可以容纳多份数据的类型,容纳的每一份数据成为此数据容器的一个元素,根据数据容器是否支持重复元素,是否可以修改,是否有序等等特点可以把数据容器分成五类,分别为列表list,元组tuple,字符串str,集合set,字典dict。

2024-04-19 19:49:22 841 1

原创 【Python】判断语句,循环语句

运行结果为在屏幕上打印三个haha,while循环的组成为while 循环的条件 :然后内部是每次循环要执行的语句,while循环里的语句一般要带有改变循环条件的语句,比如这里的i+=1。if和要执行的语句在不同的行中,以四个空格缩进,表示要执行的语句隶属于上面的if语句,一个if可以掌管任意多条语句,但是都要以四个空格缩进。判断语句嵌套的关键在于空格的缩进,外边的if和else都没有缩进,表示其他们是同级的,if a9的判断语句。还可以把判断条件和输入都集成到if语句的判断条件中去,比如。

2024-04-17 23:40:38 867 1

原创 【Python】基本语法速通

使用占位符这种方式来进行字符串连接的时候,可以理解为要打印的东西就是引号里面的东西,只不过引号中的占位符要被后面变量的内容替换掉,同C语言中的printf函数不同,因为C语言中占位符和后面的变量连接使用的是逗号,python中使用的是%,比如。拼接字符串借助的操作符是+,注意+只能拼接字符串,如果变量中存的是数字等其他类型就无法使用+进行拼接了。注:在Python中,变量无类型,数据有类型,我们平常所说的字符串变量,意思是变量中存储的数据类型是字符串,平常所说的整数变量,意思是变量中存储的数据类型是整数。

2024-04-17 23:37:57 785

原创 R语言数据可视化:ggplot2绘图系统

如果想要每个月份都用不同颜色的点来表示,就可以这样写geom_point(aes(col=factor(Month)),alpha=0.4,size=5),运行结果如图,注意颜色参数的设置,首先是把Month这个数值型向量转换成因子类型,这样他就具有了分类变量的属性,然后col=factor(Month),但是这样还不够,必须在aes内部进行,aes是ggplot2中的一个非常重要的函数,它用于设置图形的美学映射(aesthetic mapping),即数据变量与图形属性之间的映射关系。

2024-04-09 14:59:17 999

原创 R语言数据可视化:Lattice绘图系统

运行代码xyplot(y~x|f,layout=c(2,1)),表示自变量是x,因变量是y,分类变量是因子f,布局是一行两列的形式(虽然写的时候看起来参数的意思是两行一列,这个运行结果就是这样,不用深究,记住这么传参数就行了,他这个参数就是有点别扭),运行结果如图。首先设置一个种子数,设置种子数的目的是让每次产生的随机数相同,这种操作的意义是如果我们在测试某段代码的时候发现代码有问题,想要让别人帮忙检查,如果不设置种子数,就无法产生一样的随机数,那别人就不能重复跟我们一样的步骤了。

2024-04-08 15:35:51 691

原创 R语言数据可视化:基本绘图系统

因此legend("topright", pch=1, col=c("red","blue","black"), legend=c("Sep","May","other")) 这段代码将在图形的右上角添加一个图例,其中包含三种不同颜色的圆圈,分别对应于 "Sep"、"May" 和 "other" 这三个类别。col就是color的缩写,用来指定颜色。同理我们还可以使用下面的代码来绘制这样的图,把五月份的wind与temp的散点图用蓝色表示,6,7,8月份的wind与temp的散点图用黑色来表示。

2024-04-08 00:10:57 813

原创 R语言数据操纵:常用函数

我们说三维数组在展示的时候都是站在第三个维度的视角来展示的,创建数组的时候第三个维度的数值是几,就展示几个矩阵,这里在创建数组x的时候第三个维度的数字是4,那就展示四个矩阵,而apply求得也是这四个矩阵的平均值。我们发现此时lapply函数的对象是x,对x中每个元素要进行的操作由后面的函数决定,function(m)代表这是一个自定义函数,m类似于C语言中的形参,后面的m[1,]就是这个函数的功能,也就是C语言中的函数体,m[1,]表示提取m的第一行。举个例子,创建一个名为x的列表。

2024-04-05 19:25:58 535

原创 R语言数据操纵:如何构建子集

构建子集的基本方法:1.使用[]提取一个或多个类型相同的元素2.使用[[]]从列表或者数据框中提取元素3.使用$按名字从列表或数据框中提取元素。

2024-04-05 14:38:23 1217

原创 R语言中的常用数据结构

R的对象类型有五种,分别是字符型,数值型,整数型,复数型,逻辑型常用的数据结构有向量,矩阵,数组,列表,因子,数据框。其中后面几种数据结构都是基于向量的,比如向量+两个维度就构成了矩阵,加两个以上的维度就构成了数组,不同类型的向量可以构成列表,如果这些含有不同元素类型的向量的长度均相同,就构成了数据框,整数型向量加标签就是因子。创建各种数据结构使用的函数:创建向量:1.vector函数 2.使用冒号 3.使用c函数创建矩阵:matrix函数创建列表:list函数创建因子:factor函数。

2024-04-03 22:12:59 888

原创 生物信息学文章中常见的图应该怎么看?

这篇文章只介绍这些图应该怎么解读,具体怎么绘制,需要什么参数,怎么处理数据,会在下一篇文章里面给出。

2024-03-23 23:22:58 772

原创 谭浩强第五版C语言课后习题(编程题)+答案

辗转相除法的原理是用a除b,如果有余数,就把b赋给a,再把余数赋给b,当a除b余数为零的时候,此时的b就是二者的最大公约数,对于第一次除的时候谁做被除数是无所谓的,因为如果第一次a小于b,那么a除b的余数就是a,然后执行循环内部的操作把b赋给a,把余数赋给b,就变成了被除数大。升序数组中插入一个数的思想:如果在中间插入,就把最后的元素往后挪一位,然后在原来最后一个数的位置上插入我们想要插入的数。15. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

2024-03-22 17:35:20 884

原创 R语言中的常用基础绘图函数 直方图,箱线图,条形图,散点图

这段代码表示绘图的数据来自mpg,颜色用绿色,分了五个区间,用条纹填充,条纹的密度是20,角度是30,柱形的边界用红色,主标题改成示例,横坐标标题改成MPG,纵坐标标题改成Freq,cex.main是主标题大小改成正常字体的两倍,cex.lab指的是所有副标题的大小改成正常字体大小的1.5倍,cex.axis表示把横轴和纵轴的刻度标签大小(就是这些0 2 4 6 8啥的)改成正常大小的0.8倍。这就让我们在使用R中的函数的时候可以不用像C语言那样记住每个参数的位置,而是只需要记住哪个参数是干啥的就行。

2024-03-16 15:50:19 1094

原创 R语言程序设计(零基础速通R语言语法与了解常见函数的使用)

在第一个例子中两个不等长的向量进行相加,一个向量是1 2,一个向量是1 2 3 4,向量再进行加减的时候是对应位置的元素相加减,此时的第一个向量会被补齐到四个元素,补齐遵循循环法则,也就是第一个向量会被补齐为1212,然后与第二个向量1234对应的位置相加,最终得到的向量是2446,实际上Rstudio非常智能,他在显示的时候自动在两个相邻数之间加了一个空格,使我们能够更清晰的看到向量的元素是2 4 4 6。根据数据结构中元素的种类可以把模式分为数值型,字符型,复数型,逻辑型,函数,表达式等。

2024-03-15 23:57:31 1103 3

原创 【数据结构】顺序表+链表

想要删除尾部节点首先应该找到尾部的节点,当tail指向尾部节点的时候free(tail),就可以把尾部节点这个空间释放掉,在使用free函数之后,通常要把tail置为空指针,实际上tail作为一个局部变量,置空与否都可以,因为出了这个函数tail变量就被销毁了,并不会产生访问他的情况,实际上我们应该把原来倒数第二个节点的next置为NULL,要改变节点,也就是结构体的一部分,我们应该使用结构体指针,于是我们使用了一个指针prev来找到倒数第二个节点并将这个节点的next置空。因此完整的尾删功能代码如下。

2024-03-05 21:43:03 1001

原创 【C语言】编程题专项练习+答案

这种方法应该注意的是当我们拿到一个大于等于10的数时候,我们应该转化成A~F,在上面的代码中我们是要把数字字符转化成字符A~F,因此应该判断当前数字字符是否大于字符10,但是判断条件不能写>='10'而应该写成>'9',这是因为在C语言中'10'会被认为是一个多字符常量,他的ASCII码值并不是‘9’的ASCII码值+1,我们可以通过写一个代码打印他们两个的ASCII码来观察。这个函数定义在头文件 中。检查字符串str2是否为str1的子串,如果是,返回子串在str1中的位置,如果不是,返回NULL。

2024-03-05 21:36:42 980

原创 【C语言】文件操作

在我们打开一个文件的时候会自动填充这些信息。换句话说每打开一个文件,系统就会自动在内存中开辟一个结构体变量,这个结构体类型是FILE类型,这种类型是系统自带的,不是我们人为创建的,存放这种结构体类型的指针是FILE*类型的,通过这种指针可以维护这个结构体。我们所说的读,写,输入,输出,其实都是针对当前程序来说的,如果是从键盘上打字,就是输入,或者叫读,如果是数据在屏幕上显示出来,就是输出,或者叫写,可以把当前程序类比成我们本人,我们读一本书,对于我们来说就是输入,我们写一篇博客,对于我们来说就是输出。

2024-03-01 14:27:25 1597 1

原创 【C语言】通讯录(静态版本+动态版本+文件版本)层层深入讲解,附有完整源代码

把fread的返回值也就是成功读取的数据的个数作为while循环的判断条件,如果当前文件中的数据已经读完了,就不用再继续读了,并且我们把读到的内容放到一个临时变量tmp中去,读到的东西是people类型的数据,因此tmp也应该是people类型的,data是一个数组,里面的元素都是people类型的,每次把tmp赋给p->data[p->sz],出循环的时候就读完了文件中的所有信息并且相应修改了sz。然后是增加联系人的函数,在增加之前我们先要判断一下通讯录是不是已经满了,我们使用下面的函数来实现这个功能。

2024-03-01 13:14:21 1048

原创 【数据结构】时间复杂度与空间复杂度

算法的时间复杂度并不是指一个代码运行时间的快慢,因为在不同机器上运行的时间肯定不同,因此算法的时间复杂度指的是基本操作的执行次数,他是一个数学意义上的函数。这个函数并不是C语言中那种函数,而是一个数学函数,比如显然是执行了N方+2N+10次,这个N方假设我们说他是F(N),也就是一个数学函数,那么这个F(N)就是上面这个算法的时间复杂度。但是实际上我们并不一定要计算精确的执行次数,而只需要大概执行次数,因为当N足够大的时候,F(N)的大小主要是由N方决定了,因此我们就可以用N方来近似这个表达式的值。

2024-02-21 16:29:51 1183

原创 【C语言】通讯录(静态版本+动态版本)思路解析+完整源代码

像这样静态版本的通讯录问题还是比较大的,首先就是我们不管存多少个联系人的信息,上来都创建了一个100个元素的数组,这样对内存的开销就比较大,如果我们存的信息少,就浪费了内存,如果存的太多,又要去修改最大容量,在我们学习了动态内存开辟之后,我们可以对通讯录进行如下修改:通讯录刚上来可以存放三个联系人的信息,当通讯录满了之后,自动扩充两个人的名额。我们希望通讯录具有增加联系人,删除联系人,显示联系人,找查联系人,修改联系人,排序的功能,联系人的信息具有名字,年龄,性别,电话,地址的信息。

2024-02-18 15:00:17 1152

原创 【C语言】动态内存管理四大常用函数--malloc,calloc,realloc,free以及动态内存管理的常见问题

动态内存管理的主要函数有malloc,calloc,realloc,free等,这些函数操作的数据都是在堆区上的,我们的内存分为了栈区,堆区,静态区,栈区主要用来存放局部变量和形式参数,堆区主要是用于动态内存开辟,静态区主要存放的是全局变量和static修饰的变量也即静态变量。

2024-02-18 14:56:41 1051

原创 【C语言】自定义类型详解 ----结构体,位段,枚举,联合

可以先创建类型再初始化,也可以在创建类型的同时初始化如图是在创建类型的同时初始化初始化的时候可以直接像sn1一样按顺序写,这样编译器认为是按照结构体成员出现的顺序初始化的,也可以使用点操作符,这样就可以按照自己的顺序来初始化。位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int或char。2.位段的成员名后边有一个冒号和一个数字。冒号后面的数字代表这个成员变量占的比特位。注意是比特位,不是字节。但是位段与结构体是两个不同的概念,比如。

2024-02-16 12:52:58 1882

原创 【C语言】面试常考----- 内存函数memcpy和memmove的功能区别与模拟实现

当然可以,举个例子,12345678这串数字,现在我要把345处的内容拷贝成123,也就是最终让数字变成12123678,此时des在src的后面,如果我先把1拷贝到3的位置,那么后面在想把3拷贝到6处时就很尴尬,因为此时的3已经变成了1,但是如果我倒着拷贝,先把3拷贝到6的地方,再把2拷贝到5的地方,再把1拷贝到3的地方,不就行了吗?于是出现了上图所示的情况。再举一个例子,如果我要把345拷贝到123的位置,此时des在src的前面,我们直接把3拷贝到1的位置,4拷贝到2的位置,5拷贝到3的位置即可。

2024-02-15 15:33:26 783 2

原创 C语言库函数strstr的功能介绍与模拟实现

找的过程显然是一个循环,只要cp没有指向\0我们就让他继续找,找的过程中是*s1与*s2比较,如果二者相等就一直比较,直到一方出现了\0,如果*s1已经是\0但是*s2不是\0,说明str1中已经不可能找到str2,我们直接返回NULL,如果发现*s2是\0,那不管此时*s1是不是\0,都已经找到了str2,此时返回cp。如果cp都已经指向了\0,说明肯定找不到了,返回NULL(实际上只要cp指向的字符串比str2短就不可能找到了)注:这种写法有点像暴力枚举法,效率还是比较低的。模拟实现strstr()

2024-02-14 13:40:34 380

原创 【C语言】常见字符串函数的功能与模拟实现

找的过程显然是一个循环,只要cp没有指向\0我们就让他继续找,找的过程中是*s1与*s2比较,如果二者相等就一直比较,直到一方出现了\0,如果*s1已经是\0但是*s2不是\0,说明str1中已经不可能找到str2,我们直接返回NULL,如果发现*s2是\0,那不管此时*s1是不是\0,都已经找到了str2,此时返回cp。功能:比较两个字符串的大小,如果前者比后者大,返回一个大于零的值,反之返回一个小于零的值,如果二者相等就返回0。当然这种场景是因为我们知道了字符串是什么,有几个分割符。

2024-02-14 13:39:23 1415

原创 【C语言】一道相当有难度的指针题目(某大厂笔试真题)超详解

第二次打印*--*++cpp+3,通过查阅操作符优先级表格可知++操作符,--操作符和*操作符的优先级要比+高,因此+3是最后再算的,经过第一次打印,cpp现在已经指向了cp[1],再++,cpp现在指向了cp[2],解引用,找到了c[1],再--,就拿到了c[0],c[0]也是一个指针,指向字符串ENTER的首元素,类型是char*,再+3就跳过3个char类型指向了E,因此以%s的形式打印结果是ER。学会这道笔试题,相信你对指针的理解,对数组,字符串的理解都会上一个档次。在内存中的存储关系图如图所示。

2024-02-10 12:38:19 400

原创 【C语言】指针专项练习 都是一些大厂的笔试真题 附有详细解析,带你深入理解指针

第四次打印,sizeof内部放的是a[0]+1,其中a[0]是第一行那个一维数组的数组名,这次没有单独放在sizeof内部,因此他代表第一行那个一位数组首元素的地址,也就是a[0][0]的地址,这个地址是int*类型的,+1跳过一个int类型的,因此sizeof内部放的其实是arr[0][1]的地址,他是int*类型的,打印结果是4或8。a[0]是第一行那个一维数组的数组名,代表这个一维数组首元素的地址也就是a[0][0]的地址,打印p[0]也就是*(p+0)就是打印a[0][0],因此打印结果是1。

2024-02-10 12:35:24 1610

原创 【C语言】模拟实现库函数qsort

他的四个参数分别是要进行排序的数组base的首地址,base数组的元素个数,每个元素的大小,以及一个函数指针,这个函数指针指向了一个函数,这个函数的参数是两个void*类型的指针,返回类型是int,要求这个函数能够比较参数(这个函数的参数是两个指针)指向的两个元素的大小,规定如果elem1指向的元素比elem2指向的元素大,那这个函数就返回一个大于零的数,反之就返回一个小于零的数,如果elem1和elem2指向的元素一样大,就返回0。这样我们就拿到了要比较的两个元素,但是这两个元素如何比较?

2024-02-08 15:16:12 1258

原创 什么是大小端字节序存储?如何用代码判断当前的机器是大端字存储还是小端存储?

1.字节序:以字节为单位,讨论存储顺序2.大端字节序存储:高位在低地址处小端字节序存储:高位在低地址处什么是高位?比如1234中1就是高位,4就是低位。3.只有字节数超过一个字节的类型才讨论存储顺序,char类型的变量一共就一个字节,当然就不存在存储顺序的问题。

2024-02-06 14:47:32 354

原创 【C语言】深度剖析数据在内存中的存储

先来介绍一个错误的想法:首先把9放到了n申请的这块内存空间里面,第一次打印肯定是9,没问题,第二次打印是通过*pFloat,他仍然是访问这块空间,拿到的是9,但是打印的时候以%f形式打印,默认是小数点后六位,因此结果是9.000000,然后代码中把n指向的这块空间的内容改成了9.0,再次以%d形式打印,还是9,然后又以%f形式打印这块空间里的内容,应该是9.000000。虽然这里a要存的是128,但是发生截断之后实际存在a里面的补码和上面的-128是一样的,因此打印结果也是一样的,是一个非常大的数字。

2024-02-06 14:39:56 966

原创 【C语言】结构体基础 纯干货 一篇文章带你了解结构体类型的创建,成员类型,初始化,结构体成员的访问,结构体类型传参

然而接下来我们想要用我们自己定义的print_stu函数打印这个已经被初始化的结构体变量s的时候,发现结果居然是0,这是因为我们在初始化s的时候用的是传值调用,在把s传给set_stu函数的时候,这个函数就会在内存空间上创建s的临时拷贝t,然后为t申请一块空间,在这块空间上面进行一系列初始化,此时s并未被初始化,当然打印结果是0。结构体成员访问是通过点操作符或者箭头操作符来实现的,点操作符针对的是结构体类型变量,箭头操作符针对的是结构体类型变量的地址。结构体成员可以是标量,数组,指针,甚至是其他结构体。

2024-02-04 12:50:26 372

原创 C语言中的隐式转换-------整型提升与算术转换

然后要把这个值存到c3里面,会发生截断,最终c3里面存的是01000100,然而在打印的时候我们的打印格式是以10进制整数打印有符号的整数,首先c3发生整型提升,符号位是1,补1至32位,得到补码,负数,计算出原码之后发现是-124。打印结果是1,4,4,这是因为第一次打印c没有参与运算,也就无需发生整型提升,但是后面两次打印c都参与了运算,又c是char类型,因此c要发生整型提升,在运算的时候变成int类型,因此打印结果是4。转换为其他类型,包括两种,一种是整型提升,一种是算数提升。

2024-02-03 13:56:51 505

原创 【C语言】指针基础 纯干货,一篇文章带你了解指针运算,指针数组,二级指针,野指针

要知道指针的大小,首先应该知道地址编号是如何产生的,对于32位的机器来说,有32根地址线,每根地址线可以是高电平也可以是低电平,对应的就是二进制的1和0,这样就可以产生2的32次方个数,这些数就可以用来作为地址编号,而要表示这32位二进制数,需要4个字节大小的空间,因此在32位机器上,指针的大小就是4个字节,同理在64位机器上就能产生2的64次方个数,也就是从64个0到64个1的数字,因此在64位机器上指针大小就是8个字节。也就说平常口头所说的指针是指针变量,而真正的指针是指针变量里面存放的内容。

2024-02-03 13:14:18 361

原创 【C语言】数组的应用:扫雷游戏(包含扩展和标记功能)附完整源代码

这个函数我们是使用递归的方式来写的,这个win就是我们胜利的标准,每走一个格子且不是雷他就+1,他最高加到row*col-雷的个数,这时候我们就赢了。我们传递的是win的地址,也就是进行了传址调用,这是为了能够在函数内部改变外部的变量(关于传值调用和传址调用的问题可以去看我函数的那篇文章),扩展的条件有三个,第一条是我们选择的格子本身不是雷,这个非常好办,,第二条是选择的格子周围没有雷,这个可以通过前面的统计周围雷的个数的函数来判断,第三就是我们所选的格子不能被重复遍历,不然就会陷入死递归。

2024-01-30 11:45:48 1162

原创 【C语言】数组的应用:三子棋游戏

为了方便,我们就让电脑随机下棋即可,电脑下棋我们通过模上row和模上col就能产生0~row-1,与0~col-1,有了这样的限制,电脑就不会产生非法坐标了,生成随机数的方式就是rand函数,在调用rand函数之前要调用srand函数,这是rand函数的语法,srand函数用于设置时间戳,且只需要在主函数中调用一次即可,这里有一个设置时间戳的固定方法就是srand((unsigned)time(NULL)),希望读着能够记住这个写法。假设玩家赢返回*,电脑赢返回#,没有结束返回C,平局返回Q。

2024-01-27 13:16:22 603

原创 【C语言】一维数组,二维数组的创建,初始化,存储,以及数组传参的常见问题,冒泡排序及其错误写法以及优化

假如这是一个四行五列的二维数组,他在内存中的存储形式如图,要想访问第一行的元素,其实就是通过下标arr[0][1]......arr[0][4],前面都是arr[0],也就是说要访问第一行的元素,通过arr[][i]即可,对比一维数组访问的时候比如一个有五个元素的一维数组arr,要想访问他的每个元素只需要通过arr[i]即可,而这个一维数组的数组名是arr,因此我们可以把二维数组的第一行看做一个数组名为arr[0]的一维数组。数值上其实和数组首元素地址是一样的,但是代表的意义不一样。int arr[n];

2024-01-26 11:37:44 405

空空如也

空空如也

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

TA关注的人

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