![](https://i-blog.csdnimg.cn/direct/d52f152f250a4fbfba8503cb8fd19432.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
文章平均质量分 60
C语言取经之路
UrSpecial
这个作者很懒,什么都没留下…
展开
-
3种方法求一个整数的二进制中1的个数
十进制 n ,要判断 n 的个位(最后一位)是否等于m(m原创 2023-11-07 23:09:52 · 61 阅读 · 0 评论 -
三种方法解决轮转数组问题
题目描述给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。原创 2023-12-11 16:29:17 · 357 阅读 · 0 评论 -
C语言中的指针
指针是C语言中最基础、最重要的概念之一,它使得C语言成为一门强大的、高效的、灵活的编程语言。指针的存在使得C语言可以进行复杂的内存操作,能够更好地控制程序的行为,同时也能够实现高效的数据结构和算法。简而言之,存储地址的变量就是指针变量,我们平常所说的指针其实就指的是指针变量。概念很简单易懂,但还是可以深挖的。先说明一下,地址的大小只与机器本身有关,与指针的类型无关。也就是说,指针无高低贵贱之分,char 类型的指针和 int 类型的指针在同一机器下一样大,在32位机器下是4个字节,64位机器下是8个字节。原创 2023-12-23 12:53:35 · 67 阅读 · 0 评论 -
如何判断大小端字节序
字节序指多字节数据中各个字节在内存中的存储顺序,分为大端字节序和小端字节序两种。原创 2023-12-10 01:16:41 · 64 阅读 · 0 评论 -
利用循环与递归解决喝汽水问题
下面我们再继续输入几组数据 ,看看规律如何。5块钱--------9瓶7块钱--------13瓶20块钱------39瓶……推出:喝的汽水总数= 2 * monny - 1基于这个规律,我们可用更简单的代码来解决这个问题。int main()printf("请输入你有多少钱:");return 0;原创 2023-11-16 23:05:28 · 122 阅读 · 0 评论 -
C语言中的结构体你知多少?
位段是通过结构体来实现的一种以位(bit位)为单位的数据存储结构,它可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。> 位段的成员必须是int、unsigned int、char等整形家族成员。> 位段的成员一般都是同一数据类型,例如都是int或char类型。> 位段的出现就是为了节省空间的。原创 2023-12-24 16:17:37 · 76 阅读 · 1 评论 -
详解杨辉三角
我们只需要在上述代码里头加上一个for循环即可。下面 我们来分析如何打印空格。进行到这,就差把空格补上了。下面将谈谈如何把空格补上。//定义两个宏,方便修改。原创 2023-11-21 22:49:07 · 71 阅读 · 0 评论 -
C语言如何实现strcpy函数
char*strcpy(charconstcharstrSource以上摘自MSDN。在文档中我们可以了解到:> strcpy是一个字符串拷贝函数> 函数有两个参数,参数的类型为char*,第一个参数为目标空间的首地址,第二个参数为源字符串 的首地址> 函数的返回类型为 char*> 函数返回值为目标空间首地址(Each of these functions returns the destination string)> 源字符串必须以‘ \0 ’结束。原创 2023-11-08 17:17:53 · 146 阅读 · 0 评论 -
C语言求最小公倍数的3种方法
两个数的最小公倍数一定大于或等于这两个数中的较大值,根据这一规律,我们可以直接从这两个数中的较大数开始,依次加1,加1得到的结果拿来试除这两个数,直到能同时被这两个数整除。例如,求 2 和 3 的最小公倍数。3较大,引入一个变量num,num>=3,从num = 3开始,num % 2!= 0,所以num++,变为4, 4 % 3!= 0,继续执行num++,变为5, 5 % 2!= 0,num++,变为6, 6 % 2 = 0,6 % 3 = 0。所以2 和 3 的最小公倍数为6。原创 2023-11-02 20:25:28 · 10369 阅读 · 2 评论 -
常规方法和曼哈顿距离法打印菱形
对于打印菱形,我们可以把菱形一分为二找规律,也就是说,分别对上半部分和下半部分分析,找到它们各自的规律。设行号为 i ,上半部分行数为line_up, 则星号*的数量 = 2 * i + 1,空格数 = line_up - 1 - i。距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。4 - 1 - 0即line_down - 1 - i, 式子最后+1,1是指红色分割线上的星号。4 - 1 - 1为 line_down - 1 - i, i 此时为1。原创 2023-11-20 16:34:29 · 82 阅读 · 0 评论 -
应用递归拆解整数并将各个位数相加
我们的目的是让这3次调用中的sum相加,也就是说这3次函数调用中sum会互相影响以达到累加的效果,但该程序的执行结果并不符合我们的预期。原因是在3次递归调用中,函数创建的局部变量都是相互独立的,它们占用不同的空间,因此,互不影响,从而没有累加的效果。所谓全局变量,它是储存在静态区的,而且在工程内部任意地方都可以使用,因为在整个程序执行的过程中只创建一次sum,只开辟一次空间,所以就不存在上述案例中创建了多个地址不同的sum导致sum之间不能进行累加的问题。很明显,输出结构时错误的,正确的结果应该是6。原创 2023-11-05 11:12:27 · 150 阅读 · 1 评论 -
C语言求第n个斐波那契数(递归与迭代)
斐波那契数列:1 1 2 3 5 8 13 21 34 55 89......通过观察,我们不难发现,其规律为:从第三个数开始,前两个数的和等于后一个数。基于此规律,下面将给出用递归来求斐波那契数和非递归求斐波那契数的方法,并比较这两种方法的优缺点。首先讲讲递归的方法。原创 2023-11-03 23:49:07 · 320 阅读 · 0 评论 -
C语言中的动态内存管理
调用free(p)函数会释放p指向的内存块,但是不会改变p本身,因为传给free函数的p只是一个变量,并不是传地址,形参与实参分别占用不同的空间,对形参的改变是不会影响实参p的。当然,总存在这样的可能性:找不到满足我们需要的足够大的内存块。> 数组p是在栈上开辟的,没有用到内存开辟函数malloc和calloc,不会涉及到堆区,在函数GetMemory调用结束后,数组p会被销毁,即使已经返回了数组的起始地址给str,但是str所指向的空间不再属于这个程序,使用str指向的空间就会导致非法访问,打印乱码。原创 2023-12-09 18:46:55 · 54 阅读 · 1 评论 -
求n的阶乘(递归与非递归)
double类型比int类型的范围大,能更大程度上避免溢出。原创 2023-10-21 19:55:32 · 95 阅读 · 1 评论 -
【经典烫问题】
在输出arr1时出现不该出现的结果的原因如下:>printf函数在读取arr1的元素时,只有在遇到【\0】时才会停止输出。>但是数组arr1的元素不是字符串,而是单个字符,不会像字符那样在结尾隐藏着【\0】>因此printf会继续往后读取,这就导致了越界访问,直到遇到【\0】才会停止输出,导致>输出不理想的结果原创 2023-10-10 10:57:41 · 31 阅读 · 1 评论 -
求两个整数的最大公约数
分别让变量m和n存储两个数的值,如果n为0,那么停止操作,m中的值是最大公约数(GCD);否则计算m除以n的余数,把n保存到m中,并把余数保存到n中。(remainder表示余数,把余数保存到n中)欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。1997 ÷ 615 = 3 (余 152)反复做除法运算,当余数为 0 时,取当前。615 ÷ 152 = 4(余7)152 ÷ 7 = 21(余5)7 ÷ 5 = 1 (余2)5 ÷ 2 = 2 (余1)2 ÷ 1 = 2 (余0)原创 2023-10-22 11:45:15 · 348 阅读 · 1 评论 -
猜数字小游戏
在rand函数使用前需要调用srand函数设置随机数生成的基准值,可以用time函数的返回值做基准值。>在一次程序运行中,只需要设置一次基准值,后面可以生成多个随机数。>生成a~b之间的随机数的方法:a + rand%(b-a+1)>rand函数生成随机数范围在0~32767之间。调用rand函数、srand函数和time函数。注意此处的强制类型转换,NULL为空指针。原创 2023-10-28 17:28:50 · 37 阅读 · 1 评论 -
巧解月份的天数
输入年份和月份,输出该月的天数。不难发现,只有在闰年的二月份才会特殊情况,因此我们需要单独处理这一特殊情况。下面我们利用【数组】来解决。原创 2023-10-28 18:00:31 · 49 阅读 · 1 评论 -
C语言实现扫雷(附源码)
首先简单的讲讲扫雷的规则:每次点开一个格子,如果是雷,将会被炸死,游戏结束;如果不是雷,那么将统计该格子周围的雷的个数。原创 2023-11-02 18:24:24 · 83 阅读 · 0 评论 -
【二分查找详解】
左边的所有元素,将范围调整为6到10之间。定义 left= 0,right = 9(均为下标),mid 为元素5的下标,在与5比对之后right 不变,left 应改为 mid + 1,接着继续查找。假设第一次是与5比对,目标元素为7,那么此时,目标元素大于被比对元素,可以排除5。原创 2023-10-16 17:41:20 · 42 阅读 · 1 评论 -
【汉诺塔问题解析】
并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。将a柱上的64片圆盘规定移动到c柱上,一共需要移动约1800亿亿步(18,446,744,073,709,551,615),才能最终完成整个过程。1.将c柱作为辅助,把a柱上的n-1片圆盘移到b柱上。3.将a柱作为辅助,将b上的n-1个圆盘移动到c柱上。1.将c柱作为辅助,把a柱的上面2个圆盘移到b柱上。3.将a柱作为辅助,将b上的2个圆盘移动到c柱上。2.将a柱最下方的第n个圆盘移到c柱上。2片圆盘需要3步完成。原创 2023-08-25 17:55:34 · 415 阅读 · 1 评论 -
合并两个有序数列
题目描述:输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。数据范围: 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000。输入描述:输入包含三行,第一行包含两个正整数n, m,用空格分隔。n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。第二行包含n个整数,用空格分隔。第三行包含m个整数,用空格分隔。输出描述:输出为一行,输出长度为n+m的升序序列,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。原创 2023-11-01 23:39:13 · 169 阅读 · 1 评论 -
求解素数的n重境界(筛选法,试除法)
在上述代码中,我们不难发现6既是2的倍数,又是3的倍数,因此6被重复筛选,为了提高效率,我们可以从素数的平方开始往后筛选,减少了被重复筛选的数字,尤其是在大范围筛选中得到体现,极大提高了程序的效率。1既不是质数,也不是合数,因此首先就要把1划去,2是最小的素数,所以2不能筛去,但是区间内2的倍数要全部筛去,接着3是素数,3也不能筛去,同理3的倍数要全部筛去,然后留下5,7,筛去其全部倍数。而筛选法不是如此,筛选法是将不是素数的数全部去除,然后得到余下的数为素数 ,实现素数的查找。【运用到的数学定理】原创 2023-10-24 22:34:18 · 107 阅读 · 0 评论 -
对递归函数的基本理解
答案是,回归到上一步调用函数的位置(如果对这句话不是很理解,莫慌,博主将在代码演示模块画图帮助您进一步理解)。1.使用递归函数时应加上限制条件,可以理解为递归函数的执行要有准入条件,当不满足准入条件时停止递归,防止出现栈溢出。递归递归,先递后归。递归函数中的“递”,可以理解为“递推”,“归”可以理解为“回归”。即先调用函数直到不满足调用的条件为止,之后开始回归,回归的顺序则是从后往前。2.递归函数的执行流程是怎样的?所谓递归函数,在函数的命名中就已经交代了该函数的执行顺序。接下来谈谈递归函数的限制条件。原创 2023-08-20 20:47:03 · 106 阅读 · 0 评论 -
【求1加到n的阶乘】
【代码】【求1加到n的阶乘】原创 2023-10-21 17:51:15 · 56 阅读 · 1 评论 -
矩阵转置问题
输入描述:第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。输出描述:输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。示例1输入:2 31 2 34 5 6复制输出:1 42 53 6问题分析。原创 2023-11-02 00:29:20 · 59 阅读 · 0 评论 -
模拟实现qsort函数
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。原创 2023-10-21 13:11:24 · 42 阅读 · 1 评论 -
【冒泡排序】
显然,此时的数列已经按照要求排列好了,再去对该数列排序就是多此一举。然而,未经优化的代码就是多此一举,从外层for循环进入到内层for循环,所有数字均为交换位置,这意味着这组数字已经排好序了。冒泡排序就是从序列中的第一个元素开始,依次对相邻的两个元素进行比较,如果前一个元素大于后一个元素则交换它们的位置;才会跳出for循环,在此期间进行了好多次无意义大循环,效率很低,这就是未优化代码的缺点。依然可以通过1==flag进入后一个if语句跳出循环,停止往后不必要的循环。当数列按照顺序排列好之后,即使。原创 2023-08-23 22:22:26 · 36 阅读 · 0 评论 -
【逆序输出详解】
>利用算数分割逆序输出数字的方法>利用scanf函数,在输入时对整数进行切分,从而避免了算数分割以上两种方法对于正整数来说是完全可行的,但是当用户输入负数时,可能无法得到想要的答案。因此,我将在篇末介绍对于正负整数都适用的第三种方法。>逆序输出正负整数的通法原创 2023-10-10 13:08:57 · 1307 阅读 · 1 评论