
C语言
圣马丁鸟
这个作者很懒,什么都没留下…
展开
-
汉诺塔问题(C语言)
然后到了第二轮,将B上边的(n-2)个放到A上去,要func2(n-2)次,再将最下边的那一个放到C中去,要一次,现在就将目标投向了求将A上边的(n-2)个放到C中去,要func2(n-2)次,,共要2*func2(n-2)+1次。首先,第一轮,将A上边的(n - 1)个移动到B上,要func2(n - 1)次,然后,将剩下的那一个放到C处去,要一次,再讲B上的(n-1)个放到C上去,要(n-1)次.那么就将原问题变化为了求2*func2(n-1)+1.建立函数func2为求得n个盘子所需要的步数。原创 2023-12-12 22:45:14 · 431 阅读 · 0 评论 -
青蛙跳台阶(C语言)
2.问题:青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法?那么每一次跳台阶都可以分成跳一次和跳二次,在调完一或二次之后,又可以分为跳一次或跳二次,以此类推。但要注意,在最后两个台阶的时候,青蛙有两种跳法,在最后一个台阶的时候,青蛙有一种跳法。假设让青蛙跳上一个台阶,那么还有(n - 1)个台阶要跳。假设让青蛙跳上二个台阶,那么还有(n - 2)个台阶要跳。4.该问题实质是一个斐波那契数数列。原创 2023-12-12 21:29:32 · 619 阅读 · 1 评论 -
C语言第十九集(文件操作)
8.往文件里边写入数据样例及顺序读写函数介绍搜。7.perror函数可以查看函数报错信息。6.文件的打开与关闭(和模版)搜。打开路径默认是当前文件所处的位置。10.fscanf的注意事项搜。2.程序文件和数据文件具体搜。1.C中程序内存区域划分搜。3.用二进制形式写文件搜。4.流和标准流具体搜。原创 2023-12-11 20:59:12 · 429 阅读 · 0 评论 -
C语言作业6
注意好偏移量和实际是第几个的区别。3. 字节序 才有大小端。1.联合体也会完全浪费空间。那个对齐数是和偏移量有关的。(就用我之前的那个就行了)原创 2023-12-10 20:06:07 · 339 阅读 · 0 评论 -
C语言第十八集(动态内存管理)
在调用完函数后,像上述的函数在调用完后,由于p没了,所以malloc函数所申请的那部分空间就没办法释放了,所以就发生了内存泄漏。10.realloc(NULL,40)与malloc函数一样,因为没得调整空间,那就只能开辟空间。11.malloc,calloc,realloc函数申请的空间,出了作用域是不会主动销毁的。8.realloc函数开辟空间的操作都是在malloc等函数实现开辟好的空间里边运行的。除了使用free函数和程序结束,他们申请的空间都不会主动释放。18.传值调用和传址调用的一个特殊例子搜。原创 2023-12-10 12:31:10 · 431 阅读 · 0 评论 -
C语言作业5
4.字符的 -128 - 1 后变为了 127。而int (*fun)(int x,int y);5.在字符里,整数 0 就是\0。2.函数名可以默认是函数的地址。6.小端的话,低位存在低地址那。3.运用好题目给的规律。原创 2023-12-10 10:33:34 · 345 阅读 · 0 评论 -
C语言第十七集(待修)
15.联合体和结构体大致一样,也是由一个或者多个成员组成,这些成员可以是不同的类型。当最大成员的大小不是最大对齐数的大小的时候,就要对齐到最大对齐数的整数倍。4.总之,我们在创建结构体时,要将占用空间小的成员集中在一起。19.对联合体的一个成员进行更换的时候,其它成员也会跟着更换。,但是在联合体中编译器只为最大的成员分配足够的内存空间。(有关于内存分配的,还有关于 : 后边的数字含义的)21.联合体的大小至少是最大成员的大小,中,它的char是1,所以他的对齐数是1。原创 2023-12-08 22:16:00 · 557 阅读 · 1 评论 -
C语言第十六集(后续)(结构体)
2.结构体自己给自己里面包含一个结构体变量((此结构体就是当前所处的这个结构体))指针是没有问题的,但是。结构体自己给自己里面包含一个结构体变量(此结构体就是当前所处的这个结构体)是有问题的.两个匿名结构体尽管内容完全相同,但编译器仍然认为二位是不相同的类型。1.匿名结构体(即不写结构体名)只能用一次,而且匿名结构体写法特别危险。4.对于结构体的重命名搜。3.匿名结构体自引用搜。可以为1,不行为2搜。原创 2023-12-08 16:00:46 · 355 阅读 · 0 评论 -
C语言第十六集(前)
但科学计数法中的E是可以为负数的,所以IEEE 754规定存入内存时E的真实值必须再加上一个中间数,对于8位的E这个中间数是 127;比如说保存1.01的时候,只保存后边的01,等到读取的时候,再把第一位的1加上去。9.在小端环境下,int 的 1 计入内存中是 (十六进制表示) (低地址) 01 00 00 00 (高地址) , (低地址) 02是02 00 00 00 (高地址)10.1E12表示的是1乘以10的12次方(已测过)原创 2023-12-07 21:25:52 · 515 阅读 · 0 评论 -
C语言第十五集
1.char*(arr)中的char* 只能起到一个临时的作用。3.VS内存示意图搜(在小端存储模式里应该都是这样吧)4.负数的反码是原码中除了符号位不变,其它位按位取反。2.十进制的3就是十六进制的00 00 00 03。(char*)a得到的是44(应该吧)5.无符号整数的原码和反码和补码相同。7.大小端存储样例搜。8.强制类型转换例如。原创 2023-11-25 23:10:31 · 366 阅读 · 0 评论 -
常见的库函数2
将dest指向的包括它在内的count个内容修改为c(count以字节为单位)比较后边的count也是以字节为单位。1.memset函数。原创 2023-11-25 21:42:30 · 331 阅读 · 0 评论 -
C语言第十四集
2.无符号整形减去一个无符号整形得到的还是一个无符号整形。9.对 *src++ (其中src是个字符指针)7.assert后边的()里边的条件若为真,则无事发生。文档中的 null/NUL 本质上都是\0。\0是\ddd形式的转义字符,本质也是0。即 先会操作*src再操作src++++优先级高于*,但是由于它是后置++5.初始化字符数组的时候,0就是\0。3.无符号整形的-3是个很大的正数。4.空字符串的第一个字符就是\0。8.NULL的本质也是0。'0'是字符0,是48。原创 2023-11-25 12:53:28 · 422 阅读 · 0 评论 -
常用的库函数1
4.strcmp('\0'也会参与比较)(字符相加减得到的是对应的ASCILL码值相加减得到的数值)(%zd和%u和%zu都是打印无符号数的)(size_t也是无符号整形)(前边字符串大于后边字符串则返回大于0的值,前边字符串小于后边字符串则返回小于0的值,二者相等则返回0)8.strstr函数:在括号前边的字符串中找到后边的一个字符串第一次出现的位置(返回值的话,如果找不到则返回一个NULL)(返回值是被找的字符串的第一个字符的起始地址)5.创建函数时注意用好const来修饰。原创 2023-11-25 12:53:05 · 350 阅读 · 0 评论 -
C语言作业4
而-1转换为无符号数字后是一个很大的数,二进制表示是11111111 11111111 11111111 11111111。此时的a地址中先存放44,再33,再22,再11(在小端机器中是这样)(即小端存储)(在VS是小端存储)8.gets()可以读入一个字符串,如果没有读到则返回NULL,读取成功后返回类型是char*11.在32位系统中,操作系统可以使用的最大内存空间是2的32次方。在64位系统中,操作系统可以使用的最大内存空间是2的64次方。而大端存储是a地址中先存放11,再22,再33,再44。原创 2023-11-22 21:17:25 · 44 阅读 · 0 评论 -
C语言第十三集
1.可以用int ch = getchar();接收字符,得到的应该是ASCILL值。3.字符0的ASCILL值不是0,'/0'的ASCILL值是0。2.往后默认C语言群。原创 2023-11-23 17:49:08 · 40 阅读 · 0 评论 -
C语言指针7
所得到的是二维数组第一行的总内存字节大小(因为这里边可以看做是sizeof里边单独存放了一个一维数组的数组名)arr[1]==*(arr+1);(绝对)(这里的arr[1]就是第二行首元素的地址)(更绝对)9.而二维数组首元素的地址就是第一行的地址,加1就是第二行的地址。而没有特殊情况的话,a[0]默认就是a[0][0];2.二维数组也是数组,之前对数组名的理解也是适合的。7.地址减地址得到地址与地址间的元素个数。8.&二维数组得到的是整个二维数组的地址。而小地址减大地址得到的是负数。原创 2023-11-23 17:33:37 · 40 阅读 · 0 评论 -
C语言指针6
上边的代码中,传给strlen的是 'a' 的ASCILL值,也就是97,然后strlen就会把97当做你传给它的地址,然后运行,程序崩溃()3.(int*)类型的p ,p加1是 跳过一个整形(就是跳过4个字节)4.数组地址的大小就是4个或8个字节。1.可以这样构造结构体并打印。2.sizeof后边不挑类型。原创 2023-11-22 09:33:00 · 45 阅读 · 0 评论 -
C语言指针5
9.strcmp其实是按照ASCII值表来比较大小的,它那后边的括号里可以放地址,也可以放内容。4.函数指针数组的创造个例搜,通过数组调用函数例子搜。8.关于qsort函数及使用它来比较结构体数据例子搜。6.关于qsort函数及使用它来比较整形数据例子搜。1.类型被放在括号里边可以作为强制类型转换。10.qsort确实可以排序任意类型的数据。7.在不知道优先级的情况下,记得加括号。5.回调函数是通过函数指针调用的函数。2.上节课中的一个有趣的题搜。3.给函数指针重命名搜。原创 2023-11-17 19:53:10 · 53 阅读 · 0 评论 -
在VS编译器中默认加上头文件方法
4.进入文档后输入想要包含的头文件(例)(#define _CRT_SECURE_NO_WARNINGS 1)7.也可以在桌面创立一个文档,名称叫做newc++file.cpp,而后替换,进入,添加,保存,替换。1.在everything工具中搜索newc++file.cpp(注意要找的路径是有VS的)5.保存,确定替换(若是无管理权限则把那个文档拷贝到桌面上再打开添加头文件)3.打开newc++file.cpp文档(推荐用记事本打开)具体内容在10-12-112期。2.右击鼠标,打开路径。原创 2023-10-18 18:33:20 · 1074 阅读 · 1 评论 -
C语言指针4
其实二维数组就是一维数组的数组,所以形参中如果要用指针接收二维数组的话,那么就要用到数组指针,例如:int (*arr)[5](后边那个5指的是二维数组的列)类似可得3中的第二个*告诉了我pp是个指针,前边的int*告诉我pp指向的数据类型是int*类型。因为左边的变量类型是int (*)[10],所以右边的数据类型也是int (*)[10]上述的2中的*告诉了我p是个指针,前边的int告诉我p指向的数据类型是int类型。当常量字符串出现在表达式中的时候,它的值是第一个字符的地址。原创 2023-11-14 21:17:31 · 47 阅读 · 0 评论 -
C语言指针3
11.在主函数中创建了一个一维数组而后将它传输到函数中,而函数又用的是类似于int arr[ ]这样的式子来接收,那么接收到的也只是一个数组首元素的地址而已,而且此时在函数形参那里其实没有创建数组,这里的int arr[ ] 本质上还是个指针。不过形参那里可以写成指针的形式(int *p),也可以写成数组的形式(int arr[ ])。&数组名 取出的是整个数组的地址,(这里的数组名表示整个数组的地址)除了那两种情况外,其他的数组名都指的是数组首元素的地址。6.const能固定值。原创 2023-11-12 12:18:10 · 78 阅读 · 1 评论 -
C语言指针2
(p里边放的就是a的地址)7.指针-指针得到的是(整数)且它的绝对值是两个指针之间的元素个数(小的指针-大的指针得到的是负值)在原来的a的地址的值被破坏之前,*p是10,但是一旦地址的值受到了外界的干扰,则*p就不一定是10了。对于上边的p,它是char*类型的解引用时只能修改一个字节,int *的解引用时只能修改4个字节。9.野指针概念:野指针就是指针指向的位置是不可知的(随机的,不正确的)4.void*类型指针的可以容纳任何类型的变量的地址,3.用*p改变数组的值(微信搜*p改变数组的值)原创 2023-11-10 21:40:20 · 64 阅读 · 1 评论 -
C语言指针1
注意指针变量的大小和类型是无关的,只要是指针类型的变量,在相同的平台下,大小都是相同的。64位平台下地址是64个bit位,指针变量大小是8个字节。8. int 类型的变量占4个字节(不管它是多少进制)指针变量的大小详细在微信搜(指针变量的大小及测试方法)2位平台下地址是32个bit位,指针变量大小是4个字节。指针变量的大小取决于一个地址的存放要多大的空间。int说明了pa指向的对象是int类型的。*p前边的类型需要与后边i 的类型一致。p是指针变量,用来存放指针(地址)指针变量是专门用来存放地址的。原创 2023-11-10 09:01:51 · 81 阅读 · 1 评论 -
C语言第十二集后续
1.根据优先级来确定操作符的运行先后顺序是相邻操作符。我们不知道前面的c是减后的c还是减前的c。运行顺序可能14253或13254。如a*b + b*c + a*c。类似的还有在微信中,搜问题代码。先--后+没问题,但是。所以它是有问题的代码。2.另外c+--c;原创 2023-11-10 08:21:26 · 76 阅读 · 1 评论 -
C语言第十二集(后续)(算术转换)
1.如果某个操作符的各个操作数属于不同的整形,那么其中一个操作数必然要转化成另外一个操作数的类型。3.算术转换指的是将整数类型的转换为不同类型的,而整形提升是整形家族内部转换。(是将float转化为double)(是将int 转化为float)2.由下边转化为上边。原创 2023-11-09 19:04:57 · 41 阅读 · 1 评论 -
C语言第十二集后续(整型提升)
111.大多数编译器中char都是默认为有符号的char,但是int默认都是有符号的。所以整形提升后为11111111111111111111111110000111。这时如果用%d打印的话(因为%d是打印有符号的整数的)有符号整形提升是按照变量的数据类型的符号位来提升的。如果再将上边所加得的值存入一个char类型的变量里边。1.int 类型的数据存入char类型的变量。将它存入char类型的变量当中则会发生截断。(上边的两个char都是有符号的)所以二者经过整形提升后变为了。int 类型的125为。原创 2023-11-09 18:58:05 · 46 阅读 · 1 评论 -
C语言第十二集
13.优先级:相邻操作符,优先级高的先执行,优先级低的后执行。10.一般只有short 和 char 类型的才要整型提升。14. C语言中整形算术运算总是以int类型的精度来运行的。9 i2为全局变量,但它没有初始化。15.char类型的由-128~127。int [5]和char [6]也是。2.对自定义的长函数名,可以取缩写。1.移位操作符的操作数只能是整数。7和8 一起为结构体。7.结构体里边也可以包含结构体。8.单目操作符是从右往左结合的。对于这种的要这样初始化。用指针找到结构体内元素。原创 2023-11-09 17:22:09 · 53 阅读 · 0 评论 -
C语言第十、十一集
1.栈区空间,默认是显示用高地址再使用低地址(X86环境下是这个),具体看实现(即有可能先用低地址再用高地址(X64环境下是这个))(release版本可能会做优化,即在X86环境下也是先低后高,所以具体看实现)14.对负数而言:原码转为反码(除了符号位不变,其他位按位取反),反码转为补码(二进制加一)12.整形存储和计算都是用补码进行操作,(计算时也用补码)应该是普适的。8.移位操作符只能对整形进行操作,,移动的是二进制位。补码转为原码:除了符号位不变,其他位按位取反,再加一。原创 2023-11-06 23:02:18 · 52 阅读 · 0 评论 -
C语言第九集
6.当你想要在监视当中查看接收到的二维数组的内容时,可以在监视当中输入“数组名,(多少)行”,接着就能看(多少)行的内容了。2.在VS中内存显示的是16进制数字,但是它还是以二进制进行存储。3.二进制转化为16进制数字,每4位数字转化为1位16进制的数字。7.调试过程中,要做到心中有数,就是我首先要明白要程序怎么运行。而内存当中显示的16进制是倒着放的,即64 00 00 00。4.当你追求效率的时候,可以试着将程序中是重复的步骤简化掉。即16进制00 00 00 64(有些数字没有完全显示)原创 2023-11-06 13:07:49 · 46 阅读 · 0 评论 -
C语言作业2
4.对涉及数学的问题,要用数学思维,并且将之转化为计算机语言(如辗转相除法求最大公约数)8.做题时,可以先试着分析规律(尽可能化繁为简)(可以试着追求巧)9.做题时,做项目时,先在纸上打好草稿,有了思路后再去写代码。2.在牛客网和一些编程考试中,语言和逻辑很严谨的,该抄就抄。11.争取用简单的方法解决问题(因为更少bug)10.做牛客网时要少出错,毕竟没有调试,要认真。3.对于一些细节的点,要慢慢地去调试解决。大厂的笔试,(基本上) 没有选择题。7.选择题 就是抠字眼,很多歧义。6.变长数组不能初始化。原创 2023-11-05 22:04:44 · 46 阅读 · 0 评论 -
C语言第八集
7.全局变量具有外界连接属性(但它被外部使用时必须要声明),但它被static修饰后外部链接属性变为了内部链接属性(static修饰函数也和修饰全局变量差不多)6.extern是用来声明外部符号(如全局变量或函数)的(例如从test.c文件中要用到add.c里边的变量)8.数字转化为对应的字符只需要加上字符0(字符4与4之间只差了字符0)5.用static修饰后的变量虽然生命周期变长了,但作用域不变。对这个for循环,a是被创建10次又被摧毁了10次。4.栈区和堆区和静态区在微信上,搜关键字即可搜到。原创 2023-11-02 22:40:27 · 44 阅读 · 0 评论 -
C语言第七集
11.形参写的也是数组的形式,并且在形参书写的时候可以省略数组的个数(数组名可以不同)(指的是一维数组)(二维数组的话行可以省略但是列不行)(这个后期再说)(目前已知的是这样传的话类似于传址)2.return后边如果是表达式的话,则先执行表达式,再返回表达式的结果(printf好像也是)return 返回的值和函数返回类型不一致,系统会自动将返回值隐式转化为函数的返回类型。5.函数返回类型可以是自定义类型(数组就是一种自定义类型)14.声明包含自己写的库的时候,用的是双引号。15.头文件名字可以是中文。原创 2023-11-02 16:58:17 · 61 阅读 · 0 评论 -
C语言第六集
第一个箭头若指的是数组中的第一个整形字符存放地址结束位置,那么第二个箭头指的是同一个数组中的第二个整形字符存放地址起始位置(上述数字单位:字节)12.你可以一口气把他的scanf函数要输入的值全输入完,按下回车之后,计算机 会依次读取。9.把一维数组作为元素的数组称为二维数组,把二维数组作为元素的数组称为三维数组。然后给每个内存单元都编上号(编号就是地址),在C语言中,地址也叫指针。13.变长数组不能初始化,另外数组的大小一旦确定就不能再变化了。3.数组算是一种自定义类型,去掉数组名剩下的就是数组的类型。原创 2023-10-27 19:14:32 · 44 阅读 · 1 评论 -
C语言第五集
7.对于此间第3条而言,do while有一个特殊的点,就是在do{}大括号内的switch(){}那个大括号当中的break是跳出当前的switch{}那的大括号里面后边的内容,重新回到下边的while的判断表达式当中,为真继续执行一次循环。10.用srand函数时,把它放在主函数里较前面的位置,因为在给rand函数传一个种子的时候,只需要返回一个时间戳即可,如果每次用rand之间都用一次srand函数返回一个时间戳,那么rand产生的数值就会离得很近甚至会出现相同的情况。和循环内的int j = 0;原创 2023-10-25 17:09:48 · 54 阅读 · 1 评论 -
C语言第4集
输出过程:若表达式1为真,则执行表达式2,不执行表达式3,此时表达式2的结果即整个表达式的结果;若表达式1为假,则执行表达式3,不执行表达式2,此时表达式3的结果即整个表达式的结果。12.switch后的expression必须是整形表达式,但是字符也行,因为字符存储进去的是ASCII值(字符属于整形家族),如果没有break;对于||操作符,左边操作数的结果为非0时,右边的操作数将不再执行。对&&操作符,左边操作数的结果是0时,右边的操作数将不再执行。6.关系表达式返回结果通常返回1或0,表示真假。原创 2023-10-19 22:25:33 · 52 阅读 · 0 评论 -
C语言第二集
12.内存char(1) _Bool(1) short(2) int(4) long(4) long long(8) float(4) double(8) long double(8)11.sizeof后边可以放类型或表达式或a,他用%zd或%zu打印,他计算的结果返回类型是size_t(它是一种无符号整数)9.long是长整型,long long是更长的整形,整形家族默认的都是有符号的。原创 2023-10-16 23:27:20 · 49 阅读 · 0 评论 -
第一篇C博客(第一集)
1.用VScode创立新项目时,项目名称最好有意义,最好不要用后中文,不要用特殊字符。11.在这些字符中ASCII码值从0~31这32个字符是不可打印字符,无法在屏幕上观察。4.return 0中,我们约定正常一般返回0,异常才返回非0。3.在C语言中,XXX.c是源文件,XXX.h是头文件。9.数字字符0~9的ASCII码值是48~57。7.字符a~z的ASCII码值是97~122。6.字符A~Z的ASCII码值是65~90。10.换行\n的ASCII码值是10。8.a和A的ASCII码值差是32。原创 2023-10-15 22:30:22 · 475 阅读 · 0 评论