自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言 ——— 编写代码,获得月份天数

输入和输出的。

2024-07-16 20:30:38 183

原创 C语言 ——— 编写代码,判断 整型数组 是否 有序

【代码】C语言 ——— 编写代码,判断 整型数组 是否 有序。

2024-07-16 19:29:29 227

原创 C语言 ——— 浮点数类型 在 内存中 的 存储模式

任意一个表示的是的当时,,此时的就表示为当时,,此时的就表示为表示,且表示的的转换为转换为为:转换成;;

2024-07-15 23:55:15 672

原创 C语言 ——— 大/小端存储模式的介绍及判断

那么 char*类型 的 指针变量pa 解引用后只能访问到 一个字节,也就是只能访问到首地址(低地址)将 变量a的首地址(低地址) 取出来,存放在 char*类型的 指针变量pa 中。所以只需要判断 指针变量pa 解引用后的值。数据以字节为单位,从而讨论的存储顺序。值为1时:此机器就是小端存储模式。值为0时:此机器就是大端存储模式。的数据在内存中存储占。的数据在内存中存储占。此时就能更直观的看到。

2024-07-15 18:12:59 704

原创 C语言 ——— 将一句英语短句中的单词进行倒置

输入:"I like chongqing very much,"输出:"much, very chongqing like I"将一句英语短句中的单词进行倒置,标点符号不倒置。重复找空格,最后完成所有单词的逆置。指向下一个单词的首地址,利用外部。先逆置整个字符串,再逆置各个单词。封装一个逆置函数,用来逆置。找空格,找到空格后利用。

2024-07-14 21:31:32 459

原创 C语言 ——— 输入两个正整数,求出最小公倍数

当输入的两个正整数接近了整型能表示的最大范围时,那么这两个正整数的最小公倍数一定会超出整型能表示的最大范围。最小公倍数是指两个或者多个正整数(除了0以外)的最小的公共倍数。如:输入:5 7。就自增1,直到能同时取模为 0 为止。的结果同时为 0 时,那么此时的。如果取模结果不为 0 时,那么。,如果结果为 0 ,那就说明。如果结果不为 0 时,递增。

2024-07-14 19:03:44 338

原创 C语言 ——— const关键字

当修饰的后,此时的就具有长属性,就不能被赋值为其他的值将存储到中,通过改变的值但是加上修饰就是为了不能改变的值,所以要再用修饰再次加上修饰后,就不能被修改为其他的值可以修饰。

2024-07-12 22:29:37 1970

原创 C语言 ——— 模拟实现strcpy函数

学习并使用strcpy函数-CSDN博客。

2024-07-12 19:19:01 345

原创 C语言 ——— 调试的时候如何查看当前程序的变量信息

在开始调试后点开:调试 -> 窗口 -> 内存,内存的1、2、3、4都可使用。在调试后点开:调试 -> 窗口 -> 监视,监视的1、2、3、4都可使用。在内存中的地址处输入 arr1,因为 数组名arr1 就是首元素的地址。调试前的调试窗口是没有显示的,只有在调试的时候才会有相对应的调试窗口。输入后回车,然后就能查看 arr1 这个数组所占内存的布局。在开始调试后点开:调试 -> 窗口 -> 调用堆栈。最后再从上往下还给操作系统,回到main函数。函数在调用时就像堆一样从下往上堆叠。

2024-07-11 21:34:18 412

原创 C语言 ——— 实用调试技巧(Visual Studio)

断点设置为 i == 2 ,此时 F5 运行时,会直接运行到当i == 2时的逻辑,且断点前的代码已经运行完毕。,它进行了各种优化,使得程序载代码大小和运行速度上都是最优的,以便于用户很好的使用。当调试箭头指向函数调用时按下F11,会进入函数内部,能观察到函数内部的细节。当调试箭头指向函数调用时按下F10,会直接走过函数,并完成函数中的代码。时调试箭头就会直接指向断点处,且断点处以上的代码已经执行完毕。,它包含调试信息,并且不作任何优化,便于程序员调试程序。内部的条件语句或者判断语句,使用。

2024-07-11 18:42:03 516

原创 C语言 ——— 写一个函数,返回参数二进制中 1 的个数

输入一个整数n,输出该数32位二进制中为1的个数(包括最高位的符号位),其中负数用补码表示如:输入:15 (15的二进制表示:0000 1111)输出:4。

2024-07-08 18:46:02 199

原创 C语言 ——— 指针数组 & 指针数组模拟二维整型数组

printf("%s\n", *(parr + i)):每个元素解引用后就是各个一维数组的数组名,再通过%s的形式打印每个元素的内容。*parr:parr解引用,就能拿到parr这个指针数组的首元素,也就是arr1。解析:printf("%s\n", *(parr + i));整个数组的总大小除以数组一个元素的大小就等于数组元素个数。指针数组 --- 存放指针变量(存放地址)的数组。由以上的类型可以推断出……整型数组 --- 存放整型变量的数组。字符数组 --- 存放字符变量的数组。

2024-07-06 23:16:35 313

原创 C语言 ——— 一级指针 & 二级指针

把int**拆开理解:int* 是在说明 ppa 指向的是int*类型的变量,第二个 * 是在说明 ppa 是指针变量。二级指针变量解引用一次,找到的是一级指针变量pa,所以可以替换原式 *ppa 等价于 pa。由以上监视可以看出pa存放的是a的地址,取地址pa取出的是pa这个指针变量的地址。那么就需要二级指针变量来存储一级指针变量的地址。* 是在说明pa是指针变量,int是在说明 pa 指向的对象的类型是int。ppa就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址的。

2024-07-06 21:38:33 443

原创 C语言 ——— 野指针的概念 & 如果规避野指针

数组的长度为10,那么数组的下标为0~9,但用指针变量pa来操作数组时超出了数组的范围,这时的pa就是野指针,且程序会报错,直接终止运行。int类型的变量a的空间是进入test()函数创建,出test()函数时销毁(还给操作系统)但a已经被销毁了,所以再使用p访问a的空间时就会存在非法访问,此时的p就是野指针。但是在销毁前将a的地址返回给同类型的指针变量p中,p此时存放的就是a的地址。局部指针变量未初始化,默认为随机值,且程序会报错。能明确知道指针该初始化为谁的地址时,就直接初始化。

2024-07-05 22:02:34 260

原创 C语言 ——— 指针和指针类型

因为pa是int*类型的指针变量,加一表示向后跳过自身长度的一,所以向后跳了4个字节的长度,00AFF850 - 00AFF84C = 4。那既然指针变量的大小在32位/64位平台下都是4/8个字节,那为什么不同类型数据的地址要用不同类型的指针变量接收呢?因为pa是char*类型的指针变量,所以加一向后跳了1个字节,00AFF84D - 00AFF84C = 1。因为指针变量 pa 和 pc 都是存储的a的首地址,所以打印pa和pc是相同的。把int类型的a的地址取出来,存放入同类型的指针变量pa中。

2024-07-05 14:42:11 252

原创 C语言 ——— 隐式类型转换 & 算术转换

所以 char类型的a 和 short类型的b 就会发生整型提升,a和b的最高位都是1,所以整型提升后的结果就会发生改变,自然判断就不会全等。当 if (a == 0xb6) 和 if(b==0xb600) 比较判断时,就会发生算术运算,那么就必然会发生整型提升。正和负表示算术运算,只要cher类型和short类型的数据参与运算,就会发生整型提升,提升为int类型,所以。表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度。

2024-07-02 23:23:21 992

原创 C语言 ——— 下标引用操作符;函数调用操作符;结构成员访问操作符

算数操作符(除法操作符和取模操作符)-CSDN博客移位操作符-CSDN博客按位与、或、异或操作符-CSDN博客单目操作符-CSDN博客逻辑操作符-CSDN博客条件操作符(三目操作符);逗号表达式-CSDN博客。

2024-07-02 19:02:46 333

原创 C语言 ——— 条件操作符(三目操作符);逗号表达式

a大于b吗,a大于b的话a就是整个表达式的结果,a小于b的话b就是整个表达式的结果。a = b + 10:b初始值为2,2+10的结果赋值给a,a的值就被赋值为12。b = a + 1:a被赋值为12,12+1的结果赋值给b,b的值就被赋值为13。由逗号表达式逻辑得知:整个逗号表达式的结果是最后一个表达式的结果,所以c为13。如果exp1的结果为真,那么exp2就是整个表达式的结果。如果exp1的结果为假,那么exp3就是整个表达式的结果。的真假,exp1为真,exp2计算,exp3就不计算。

2024-06-30 18:44:18 246

原创 C语言 ——— 逻辑操作符

a++ && ++b:a后置++后为2,b初始值为2,前置++后为3,a++ && ++b整体的结果同样为真,在C语言中,真的固定值为1,所以&& d++也要计算。a++ || ++b:a后置++后为1,b初始值为2,前置++后为3,|| ++b为真,所以 || d++就不会计算。a++:a初始值为1,后置++,a为真,那么|| ++b || d++都不会计算,表达式结束后a为2。a++:a初始值为0,后置++,先计算后++,0为假,那么&& ++b && d++就不会计算。

2024-06-30 15:37:42 536

原创 C语言 ——— 单目操作符

所以将flag单独放在if判断语句内,是不会进入if语句中的,但是当前面加一个逻辑反操作,就会将假变为真,则会执行第二条if语句中的内容。由最后一条代码可证明sizeof不是函数,因为可以把括号去掉,同样计算出a所占空间的字节,但函数不能去掉括号。将3.14这个小数强制类型转换为int类型,并且存储到变量a中,那么a的值就为3,直接舍去小数。变量a先自增1,变为2,再赋值给变量b,所以打印出来a为2,b为2。先将a原来的值赋值给b,b就为1,赋值后a自增1,a就为2。先使用,后++(或--)

2024-06-28 22:24:49 583

原创 C语言 ——— 不能创建第三个变量,实现两个数的交换

a = a ^ b:此时的a还是为a ^ b,此时的b已经被赋值为了a,所以原代码可替换为:a = a ^ b ^ a,由以上结论就可得出a = b。b = a ^ b:此时的a为a ^ b,原代码可替换为:b = a ^ b ^ b,由以上结论就可得出b = a。b = a - b:此时的a就为变量a、b的和,a减去b得到的就是a原来的值,然后赋值给b。a = a - b:此时的b为原来a的值,那么a减去b得到的就是原来b的值,最后赋值给a。a = a ^ b:将a ^ b存放在变量a中。

2024-06-28 16:05:54 1037

原创 C语言 ——— 按位与、或、异或操作符

(a | b)的补码为负整数,负整数的补码到原码是需要计算的。(a | b)的原码存储到变量c中,c所存储的值为:-5。由此可得(a ^ b)的原码存储的变量c中的值为:-8。对应二进制位有0则为0,两个同时为1,才是1。对应的二进制位有1则1,两个同时为0,才为0。结合以上的绘图,先计算出(a | b)的补码。(a ^ b)的补码为负整数,计算出原码。对应的二进制位相同为0,相异为1。计算(a ^ b)的补码。

2024-06-26 20:02:41 374

原创 C语言 ——— 移位操作符

a向右移一个bit位后,最低位的1就要被舍去,最高位的符号位要补全,补全有两种补全方式,算术右移和逻辑右移,下方会解释。那么b的值应该为7,因为1*2^0 + 1*2^1 + 1*2^2 = 7。a >> 1:可理解为a存储在内存中的二进制补码向右移动一个bit位。原码最高位是符号位,最高位为1,表示的是负整数,且1*2^3 = 8。左边丢弃,右边直接补0(注意:操作的、丢弃的、左移的都是数据的补码)且a为正整数,所以a的原码、反码、补码是相同的。最高位将会直接补0,那么(a >> 1)后的。

2024-06-24 18:23:22 720

原创 C语言 ——— 整数的二进制表示形式:原码、反码、补码

0000000 00000000 00000000 00001111 --- (-15)存储在变量a中的原码。1111111 11111111 11111111 11110000 --- (-15)存储在变量a中的反码。1111111 11111111 11111111 11110001 --- (-15)存储在变量a中的补码。0000000 00000000 00000000 00001111 --- 15存储在变量a中的反码。且32个bit位中的最高位符号位要为0,因为15是正整数。

2024-06-23 12:07:55 438

原创 C语言 ——— 算数操作符(除法操作符和取模操作符)

17 % 8可以看作17 / 8整除后的余数,17 / 8 = 2……1,商2余1,所以17 % 8 = 1。通过%10再/10就能得到一个多位整数的每一位,再进行相关操作。注意:除数不能为0,除数为0时程序会直接报错。注意:取模的两端必须为整数,否则程序会报错。取模得到的是两个整数整除后的余数。

2024-06-22 13:28:29 438

原创 C语言 ——— 字符串逆序(递归实现)

举例说明:reverse_string("abcdef")

2024-06-20 18:12:26 196 2

原创 C语言 ——— 计算一个整数的每一位之和,递归实现

第一次进入函数:判断n后执行else中的语句,return DigitSum(174 / 10) + 174 %10,return时调用了DigitSum函数,所以要再次进入函数。第二次进入函数:判断n后执行else中的语句,return DigitSum(17 / 10) + 17 % 10,return时调用了DigitSum函数,所以要再次进入函数。第三次进入函数:判断n后执行if中的语句,return 1,直接返回1,这次返回后直接返回到第二次进入函数时。自此,递归结束,最后结果返回12。

2024-06-19 23:28:57 304

原创 C语言 ——— 编写一个函数实现n的k次方,使用递归实现

注意:输入k时输入的是 -3,所以要在k前面加个负号,负负得正,且等式两端至少要有一个浮点数,得出的结果才是小数,所以是1.0。当k小于0时:n的k次方 = 1.0 / my_pow(n, -k),例如 2 的 -3 次方 = 1 / 2的3次方。当k大于0时:n的k次方 = n * my_pow(n, k-1),因为2的3次方 = 2 * 2的2次方。当k为0时:n的k次方 = 1,因为任何数的0次方都是1。例如:n = 2,k = -2。例如:n = 2,k = 2。

2024-06-18 21:23:33 268

原创 C语言 ——— 编写代码,计算1到100的整数中有多少个数字9

99如果用 if 和 else if 判断的话只能判断一次,所以要两个 if 语句分别判断个位和十位的9。一个整数(%)取模上10后得到的就是个位的值,如果这个整数小于10,得到的还是这个整数。99这个数字,个位是9,十位也是9,所以在计算个位十位有多少个9时要分开判断。所以我们可以使用整数除法,整数除以10,得到的就是整数的十位上的数。%(取模操作符)—— 操作符两边必须是整数,取模的结果为余数。

2024-06-17 11:07:33 206

原创 C语言 ——— 计算1/1 - 1/2 + 1/3 - ... + 1/99 - 1/100的值

注意:除法分为整数除法和浮点数除法,只有当除号的两端至少有一个浮点数才能执行浮点数除法,所以可以将分子的1修改为1.0。分子1不变,分母从1递增,用for循环遍历分母。

2024-06-16 10:58:19 164

原创 C语言 ——— 编写代码,求10个整数中的最大值

创建一个整型变量max,初始值赋值为0,把max和其他10个整数相比较,只要大于max,就把max赋为那个值,最后max就是最大值。还是创建整型变量max,初始值赋值为10个整数中的第一个数,再将max和其他9个整数相比较,这样就能正确的求出10个整数中的最大值。以上逻辑错误的原因在于:如果10个整数都是负数,那么0和负数相比较,最大值还是0,也就是max,所以以上方法不可取。

2024-06-15 15:45:59 206

原创 C语言 ——— 编写代码,在屏幕上输出九九乘法口诀表

当外部for循环为2时,表示第二行,那么内部for循环只循环二次,打印2*1=2 2*2=4即可。当外部for循环为1时,表示第一行,那么内部for循环只循环一次,打印1*1=1即可。创建一个for循环,用来控制行,一共是9行,所以循环9次。for循环内部再创建一个for循环,用来输出每一行的内容。由此可以用外部for循环控制内部for循环的循环次数。

2024-06-14 17:29:13 120

原创 C语言 ——— 对于数组名的理解

创建一个数组,分别打印 数组名地址 和 数组首元素地址 即可验证注意:数组名就是地址,所以以地址的形式打印的时候直接打印代码验证。

2024-06-13 13:30:07 314

原创 C语言 ——— 冒泡排序(只适用于整型数组)

那么10个元素就要进行9趟冒泡排序,因为10个元素中的9个元素都出现在自己该停留的位置上了,那么第10个元素也在自己该停留的位置上。例如要排序的数组为:int arr[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};9 8 7 6 5 4 3 2 1 0 —— arr[0] > arr[1],则需要交换两个元素。8 9 7 6 5 4 3 2 1 0 —— arr[1] > arr[2],也需要交换。每次循环完后判断flag是否为1,为1时就停止排序,跳出循环。

2024-06-12 22:00:00 398

原创 C语言 ——— 编写代码,求第n个斐波那契数(不考虑溢出)

通过测试可以发现,计算第40个斐波那契数的时候,当n为3时,被重复多次使用,大量的重复工作,导致运行速度缓慢,所以并不建议使用递归求解第n个斐波那契数。

2024-06-11 15:18:31 235

原创 C语言 ——— 不创建临时变量,模拟实现strlen函数

此时就将所有my_strlen函数的递归完成,并且将3返回。同样拿"abc"字符串举例。

2024-06-10 16:52:28 259

原创 C语言 ——— 模拟实现strlen函数

【代码】模拟实现strlen函数。

2024-06-07 14:18:01 381

原创 C语言 ——— 写一个函数,交换两个整型变量的内容(值传递和址传递)

当代码执行完Swap函数后,发现改变的只是x和y的值,并没有改变a和b的值。由上面的代码验证后发现值传递不能交换两个整型变量的值。通过验证后发现址传递可以交换两个变量的值。

2024-06-06 18:58:55 328

原创 C语言 ——— 学习并使用memset函数

将前5个字符设置成'x'字符。将后5个字符设置成'x'字符。接收memset函数的返回值。

2024-06-05 11:58:15 310

原创 C语言 ——— 学习并使用strcpy函数

strcpy函数的返回值为char*类型的指针变量,也就是返回目的地字符串的起始地址。不接收strcpy函数的返回值的实现。接收strcpy函数的返回值的实现。

2024-05-27 20:48:47 338

空空如也

空空如也

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

TA关注的人

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