![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言习题
文章平均质量分 60
学习C语言写的习题博客
流星白龙
https://gitee.com/yudukai(Gitee链接)
展开
-
【C语言习题】47.打印从1到最大的n位数
【代码】【C语言习题】47.打印从1到最大的n位数。原创 2024-07-23 01:06:41 · 248 阅读 · 1 评论 -
【C语言习题】46.交换奇偶位
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。原创 2024-07-22 00:40:42 · 277 阅读 · 0 评论 -
【C语言习题】45.offsetof宏
写一个宏,计算结构体中某变量相对于首地址的偏移,并给出说明。原创 2024-07-22 00:39:45 · 353 阅读 · 0 评论 -
【C语言习题】44.使用联合体判断大小端
使用联合体的知识,写一个函数判断当前机器是大端还是小端,如果是小端返回1,如果是大端返回0.使用联合体判断大小端。原创 2024-07-20 22:14:27 · 234 阅读 · 1 评论 -
【C语言习题】43.使用malloc函数模拟开辟一个二维数组
使用malloc函数模拟开辟一个3*5的整型二维数组,开辟好后,使用二维数组的下标访问形式,访问空间。使用malloc函数模拟开辟一个二维数组。原创 2024-07-19 02:31:23 · 309 阅读 · 1 评论 -
【C语言习题】42.数组串联
【代码】【C语言习题】42.数组串联。原创 2024-07-18 03:54:33 · 282 阅读 · 0 评论 -
【C语言习题】41.序列中删除指定数字
【代码】【C语言习题】41.序列中删除指定数字。原创 2024-07-17 01:34:16 · 248 阅读 · 1 评论 -
【C语言习题】40.变种水仙花数
【代码】【C语言习题】40.变种水仙花数。原创 2024-07-16 20:28:29 · 310 阅读 · 0 评论 -
【C语言习题】39.模拟实现atoi
自行了解库函数atoi的功能,学习使用,并模拟实现atoi函数。原创 2024-07-16 20:26:55 · 511 阅读 · 0 评论 -
【C语言习题】38.qsort模拟实现
模仿qsort的功能实现一个通用的冒泡排序。原创 2024-07-15 19:54:44 · 483 阅读 · 0 评论 -
【C语言习题】37.获得月份天数
【代码】【C语言习题】37.获得月份天数。原创 2024-07-15 19:50:48 · 272 阅读 · 0 评论 -
【C语言习题】36.找单身狗2
找出一个只出现过一次的数字的问题处理方法就是找一个数字把里面所有的数字都异或一遍,利用异或两次等于没异或的特点来处理。那么如果有两个数字都只出现了一次,那么如此得到的应该是两个数异或的结果。的某一位分的组,所以两个待查询数字一定分别在两组中。所以再找两个变量,分别异或两组数,即可找到这两个数。一个数组中只有两个数字是出现一次,其他所有数字都出现了两次。例如找最低位,那么这一位是。编写一个函数找出这两个只出现一次的数字。的一位,以这一位的值将结果分为两组。,由于是利用异或结果为。,异或完的结果应该是。原创 2024-07-14 00:29:43 · 313 阅读 · 0 评论 -
【C语言习题】35.杨辉三角
由于此题要打印整个杨辉三角的数据而非取出某一项,所以不可避免的一定是要填出每一项,没有偷懒的余地,那就老老实实的根据规律填空即可。行的杨辉三角产生联系,不会跟之前的有联系,所以没必要保存每一行的杨辉三角,填一行打一行就行了,这样能让空间复杂度从。但是在填数据的时候不能对之前的数据覆盖,所以需要从后向前填。而填杨辉三角顺序对结果是没有影响的,所以可以实现。这种方法虽然降低了空间复杂度,但只能保存最后一行的数据,不利于反复查询,两个填法各有各的适用场景。在屏幕上打印杨辉三角。行的杨辉三角时,只跟第。原创 2024-07-14 00:02:06 · 448 阅读 · 0 评论 -
【C语言题目】34.猜凶手
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。简单的说,就是3个人说真话,1个人说假话,来判断凶手是谁。这里形容的都是凶手,也就是把凶手和这些信息对比,就可以了。提取ABCD说的关键信息:不是A,是C,是D,不是D。现在请根据这些信息,写一个程序来确定到底谁是凶手。已知3个人说了真话,1个人说的是假话。原创 2024-07-05 19:23:35 · 503 阅读 · 1 评论 -
【C语言习题】33.杨氏矩阵
我们仔细分析,不难发现,对于杨氏矩阵老说,右上角和左下角的元素是有特点的。右上角的元素是一行中最大的,一列中最小的。左下角的元素是一行中最小的,是一列中最大的。比如:从右上角开始查找的时候,右上角的元素比我们要查找元素小,我们就可以去掉右上角元素所在的这一行;右上角的元素比我们要查找的元素大,我们就可以去掉右上角元素所在的这一列。然后依然找右上角的元素继续和要查找的元素与比较。有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。原创 2024-07-04 00:25:11 · 452 阅读 · 1 评论 -
【C语言习题】32.字符串旋转结果
所以做法很简单,只需要将原字符串再来一遍接在后面,然后找一找待查找的字符串是不是两倍原字符串的子集即可。写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1。给定s1=abcd和s2=ACBD,返回0.无论怎么旋,旋转后的所有结果,都包含在了。AABCD左旋一个字符得到ABCDA。AABCD左旋两个字符得到BCDAA。AABCD右旋一个字符得到DAABC。原创 2024-07-04 00:07:11 · 376 阅读 · 1 评论 -
【C语言习题】31.冒泡排序
如果有n个元素那么【冒泡操作】重复n-1次即可排序完成。原创 2024-06-18 22:29:43 · 815 阅读 · 0 评论 -
【C语言习题】30.使用指针打印数组内容
先定义一个数组,使用指针打印数组内容那就是说我们可以通过对指针解引用,来访问对应的数组元素。我们可以设置一个for循环,每次对指针进行自增或其他操作,来达到对不同元素的访问。类型(int类型4字节,char类型1字节)的第一个字节,跳过每个。数字小的时候可能看不出什么,但是数字大了就可能会打印奇怪的东西。写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。使用指针打印数组内容。注意不要越界访问哦。原创 2024-06-14 23:25:37 · 348 阅读 · 0 评论 -
【C语言习题】29.调整奇数偶数顺序
使用两个嵌套的 while 循环来移动元素。来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。定义整型变量i,定义整型变量sz来存放数组a的元素个数。进入main函数,先定义一个数组来存放元素。将数组a首元素地址和数组a的元素个数传递给了。指针向右移动,直到它指向一个。指针向左移动,直到它指向一个。输入一个整数数组,实现一个函数,指向数组的最后一个元素。所有偶数位于数组的后半部分。返回主函数,打印a数组元素。原创 2024-05-30 01:31:06 · 446 阅读 · 0 评论 -
【C语言习题】28.strlen实现
我们先把字符串元素存在数组里,然后一位一位的去访问,比较一位就统计一次,遇到。类型的值,表示字符串的长度,即从字符串开始到第一个空字符。字符之后的位置,所以需要减去 1 来得到正确的字符串长度。前面有几个字符元素,strlen原函数其实也是这个思路。进入main函数,定义字符数组arr存储字符元素。计算的是从字符串开始到末尾的字符数量。结尾的字符数组的指针,即一个字符串。,即当前指向的字符。++在后先用后加,所以循环结束后,),指向下一个字符。指针指向了字符串的末尾,即。的结果,即字符串的长度。原创 2024-05-30 00:56:59 · 483 阅读 · 0 评论 -
【C语言习题】27.字符串左旋
这个for循环干的其实就是先把数组第一个元素和(前端)最后一个元素互换位置,然后把第二个元素和(前端)最后第二个元素互换位置,依此类推。这个for循环干的其实就是先把数组(后端)第一个元素和最后一个元素互换位置,然后把(后端)第二个元素和最后第二个元素互换位置,依此类推。这个for循环干的其实就是先把数组(后端)第一个元素和最后一个元素互换位置,然后把(后端)第二个元素和最后第二个元素互换位置,依此类推。左旋几次,就执行几次。2.利用复制函数,先把后面的字符串元素存起来,再把需要左旋的前面的元素存到后面。原创 2024-05-30 00:32:03 · 1023 阅读 · 0 评论 -
【C语言习题】26.字符逆序
首先,我们需要一个接收函数用来接收字符串,这里的字符串应该用字符数组存储。将一个字符串str的内容颠倒过来,并输出。函数执行完后,返回main函数,打印arr数组的内容。函数执行完后,返回main函数,打印arr数组的内容。函数,定义左指针left,初始指向字符串的起始位置。我们可以直接通过逆序的数组下标,输出逆序字符串。也可以将数组下标元素逆序交换,输出逆序字符串。简单来说,就是把最左边和最右边的元素位置互换。函数将str数组清零,为下一次读取做准备。函数将str数组清零,为下一次读取做准备。原创 2024-05-28 23:47:35 · 423 阅读 · 1 评论 -
【C语言习题】25.求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?进入while循环,循环条件是输入不为空就继续。中最右边的1变成0,并将最右边的所有0变成1。的异或结果,并将结果存储在变量。求两个数二进制中不同位的个数。异或是相同为0,不同为1。中最右边的1变成0,因为。例如1999和2299。中有一个1被清除了。原创 2024-05-22 00:58:31 · 699 阅读 · 0 评论 -
【C语言习题】24.打印整数二进制的奇数位和偶数位
奇数位和偶数位有很多位,应该会用到循环。奇数和奇数,偶数和偶数里,相邻的差值为2,说明循环可能每次-2,然后进行位运算打印。位,然后与1进行按位与操作,结果为1表示该位是1,为0表示该位是0。然后打印出该位的值。获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。:一个从31开始递减到1的循环,步长为2,用于遍历偶数位。:一个从30开始递减到0的循环,步长为2,用于遍历奇数位。分别打印出二进制序列说明应该要用到位运算。:与之前类似,打印出奇数位的值。打印整数二进制的奇数位和偶数位。原创 2024-05-21 22:27:16 · 341 阅读 · 0 评论 -
【C语言习题】23.统计二进制中1的个数
要返回参数二进制中 1 的个数,那么我们就要和参数的二进制形式来进行。小于等于31(因为整数通常有32位,从0到31)。前两次循环就是这样的,然后依次循环,直到i=32。我们肯定是要一位一位运算的,那么就少不了循环。为0,用于记录1的个数。满不满足条件都会执行。上面那个if语句只管。写一个函数返回参数二进制中 1 的个数。在每次循环中,创建一个掩码。如果是1,则增加计数器。循环结束后,返回计数器。例如,我们如果输入10。统计二进制中1的个数。这里我们主要来看一下。原创 2024-05-21 22:11:56 · 561 阅读 · 0 评论 -
【C语言习题】22.交换两个变量(不创建临时变量)
使用异或运算符(XOR)也可以实现两个整数的交换,而且不会导致溢出问题。异或运算的特性是任何数与自身异或的结果为0,任何数与0异或的结果为其自身。这样,a和b的值就交换了,而且没有使用任何临时变量。需要注意的是,这种方法在处理非常大的整数时可能会导致整数溢出的问题。在不允许创建临时变量的情况下,可以使用加法和减法来交换两个整数的内容。这样,a和b的值就交换了,而且没有使用任何临时变量。b现在是原来的a和现在的b的异或结果,即原来的a。a现在是原来的a和b的异或结果,即原来的b。b现在是a和b的异或结果。原创 2024-05-20 22:10:51 · 483 阅读 · 0 评论 -
【C语言习题】21.单身狗1
要找出只出现一次的数字,可以使用异或运算的性质。异或运算有一个特性:任何数和0做异或运算,结果仍然是原来的数,而任何数和其自身做异或运算,结果是0。因此,可以遍历数组中的每个数字,对所有数字进行异或运算。由于成对出现的数字异或结果为0,最终剩下的结果就是那个只出现一次的数字。在一个整型数组中,只有一个数字出现一次,其他数组都是成对出现的,请找出那个只出现一次的数字。数组中有:1 2 3 4 5 1 2 3 4,只有5出现一次,其他数字都出现2次,找出5。所以,最终的结果是5,这就是只出现一次的数字。原创 2024-05-20 21:58:01 · 525 阅读 · 0 评论 -
【C语言习题】20.递归打印一个数的每一位
这里有个重要的地方,就是printf函数放哪里?以及递归到n=0的时候不能把0给打印出来。这个和之前第18题风格有点像,打印每一位我们可以把这位数n%10得到个位数。n/10就可以得到去掉个位数的其他部分,然后依次递归直到n/10=0。递归方式实现打印一个整数的每一位。原创 2024-05-19 01:37:17 · 219 阅读 · 0 评论 -
【C语言习题】19.递归求阶乘
的变量,用于存储阶乘的结果,初始值设为1。这是因为0的阶乘是1,而任何数乘以1都是它本身。首先要设置个变量存放输入的数 ,然后因为是非递归,我们就要用到循环的方法,每次让。首先要设置个变量存放输入的数 ,然后设置递归函数。递归和非递归分别实现求n的阶乘(不考虑溢出的问题)这一步是根据阶乘的定义,将当前的。减1,准备计算下一个较小的数的阶乘。是一个正整数,循环就会继续执行。减到0时,循环结束,此时。的乘积,不断循环直到。原创 2024-05-19 01:35:28 · 254 阅读 · 0 评论 -
【C语言习题】18.计算一个数的每位之和(递归实现)
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。我们需要两个变量,一个用来存放输入的数字,一个用来存放计算数字之和的值。的变量,用于存储当前处理的数字最 后一位的值,初始值为0。的变量,用于累加各位数字之和,初始值为0。这里main函数比较简单,我们就来看一下。除以10,去掉最后一位数字,得到新的。,这样就得到了余数,也就是它个位数字。,去掉最后一位数字,得到新的。为0,此时递归结束,返回。输入:1729,输出:19。除以10的余数,赋值给。递归调用会一直进行,直到。原创 2024-05-19 00:12:52 · 403 阅读 · 0 评论 -
【C语言习题】17.递归实现n的k次方
如果k小于0,函数会递归调用自身计算n的-k次幂,然后返回1除以这个结果。这是因为n的-k次幂等于1除以n的k次幂。如果k大于0,函数会递归调用自身,每次调用将k减1,并将结果乘以n。如果k等于0,根据数学规则,任何数的0次幂都是1,所以直接返回1。这个函数里面要分上面说的3个情况,具体情况我后面会具体讨论。需要实现实现n的k次方,那么我们就要输入两个数n和k。因为要递归实现,我们就需要用到一个函数,来进行递归。编写一个函数实现n的k次方,使用递归实现。例如:如果要调用3^(-3),那么。原创 2024-05-19 00:09:30 · 257 阅读 · 0 评论 -
【C语言习题】16.计算求和
求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,a+aa+aaa+aaaa+aaaaa的前5项之和,那么怎么用循环表示呢?求和,就需要一个求和函数。前五项之和,可以写一个循环,循环5次。例如:2+22+222+2222+22222。原创 2024-05-18 01:38:12 · 313 阅读 · 0 评论 -
【C语言习题】15.打印水仙花数
先写个循环,负责创建0~100000之间的数,创建好了才能从里面挑选水仙花数。最后我们要判断这个数本身和各位数字的n次方之和是否相等。因为需要用到n位数,所以需要写个函数,来输出数的位数。类型,否则可能会导致类型不匹配的编译错误。函数是C语言标准库中的一个数学函数,它定义在。我们还需要一个函数来求数字的n次方之和。从1开始,每次增加1,直到99999。类型的值,即计算结果的浮点数表示。函数用于计算一个数的幂次,即计算。为0,用于累加各位数字的幂次和。,则153是一个“水仙花数”。:开始另一个循环,条件是。原创 2024-05-18 01:21:55 · 668 阅读 · 0 评论 -
【C语言习题】13.喝汽水问题
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以喝多少汽水(编程实现)。第一次买一瓶花1元,第二次买一瓶花1元,第三次用前两个空瓶加上1元换两瓶。到最后一次时,手里已经没有钱了,即此时只有两个空瓶子换来一瓶汽水。3. 进入Buy函数后,如果只剩1元,那么就返回1。一共可以换20+10+5+2+1+1=39瓶可乐。5个空瓶可以换两瓶饮料,喝完一共还有3个空瓶。买20瓶,得到20个空瓶。还可以换一瓶可乐,喝完还有2个空瓶。第四次用前两个空瓶加上1元换两瓶。10个空瓶还可以换5个瓶子。原创 2024-05-18 00:58:31 · 839 阅读 · 0 评论 -
【C语言习题】14.打印菱形
的个数,从上往下每行先增加后减少,我们可以把这个菱形分成上面的三角形和下面的三角形。的,除了最长的那行可以不输入空格(如果你不想的话,想的话也可以前面加个空格)上半部分打印好了就打印下半部分。按照我们之前找到的规律,先打印空格,再打印。按照我们之前找到的规律,先打印空格,再打印。例如:第8行(第1行):这里面下部分总行数是6,当前行数是1。*号数=(下部分行数-当前行数)x2+1。首先这种图形题,我们就要去找规律。组成,我们可以分别打印这两个元素。,同样的,空格也可以分成两块。我们空格可以只打印到。原创 2024-05-17 02:20:43 · 420 阅读 · 0 评论 -
【C语言习题】11.使用函数实现数组操作
init函数和print函数简单,困难的是reverse函数。都说自己设计了,那么只要有上面这些函数和功能那就随便搞了。**要求:**自己设计以上函数的参数,返回值。交换好一对之后,继续交换靠里面的一对,直到。,跳出while循环,回到main函数。重要的是我们传递的实参和形参怎么写。然后进入循环,通过定义一个临时变量。,来交换左端和右端的数组元素。最后主函数返回0,程序结束。最后主函数返回0,程序结束。的每个元素初始化为0。的每个元素初始化为0。先进入main函数,的大小,赋值给sz。原创 2024-05-17 01:18:22 · 336 阅读 · 0 评论 -
【C语言习题】10.二分查找
的数组中查找指定的数字n,很容易想到的方法就是遍历数组,但是这种方法效率比较低。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?一般你都会猜中间数字,比如:150,然后看大了还是小了,这就是二分查找,也叫折半查找。,用于标记是否找到了要查找的数字,初始值为0。,表示要查找的数字,这里要查找的数字是7。:如果中间元素的值小于要查找的数字。:如果中间元素的值等于要查找的数字。标记为1,表示找到了要查找的数字。:如果没有找到要查找的数字。:如果找到了要查找的数字。:打印出找到的数字的下标。原创 2024-05-17 00:52:19 · 234 阅读 · 0 评论 -
【C语言习题】9.交换数组
先通过for循环打印arr1数组,然后打印回车,通过for循环打印arr2数组。通过for循环和中间变量tmp来交换了两个数组对应的元素。将数组A中的内容和数组B中的内容进行交换。利用最简单的三行交换代码来交换两个数组对应位置的元素。定义了两个数组,每个数组都存了3个元素。要交换数组的话首先要有两个数组。然后分别打印出来即可。【一维数组】交换数组。原创 2024-05-17 00:12:21 · 133 阅读 · 0 评论 -
【C语言习题】8.求平均值
首先我们需要一个能放十个数的数组,以及数组下标。其次,我们需要定义一个求和的未知量,来方便我们计算平均数。平均数可能有小数,所以要用float类型。定义arr数组存放10个数,i作为数组下标。sum代表这10个数的和,avg代表这10个数的平均数。编写一个程序,从用户输入中读取10个整数并存储在一个数组中。然后,计算并输出这些整数的平均值。我们通过for循环依次输入10个数并存放在数组里面,并求和。然后sum除以10,把平均数的值给avg。我们要先输入这10个数,然后加起来,接着除以10。原创 2024-05-16 21:58:29 · 301 阅读 · 0 评论 -
【C语言习题】12.扫雷游戏
那么循环继续,也就是说只要玩家排查的非雷格子数量小于需要排查的总数,游戏的主循环就会继续运行。例如我们只需要中间的3X3的数组用作扫雷游戏,那么我们可以准备一个5X5的数组,这样每个扫雷游戏的区域都可以采用一样的方法来统计周围有几个雷了。这么做有个好处,就是如果想要更改雷的数量直接更改宏定义里面的10就可以了,否则的话,我们要去定义变量的地方更改,变量多了就容易分不清。,然后跳出switch语句,进入while的判断。同样的,我们要准备两个结构一样的数组,一个用来存放雷和非雷的数据,另一个用来显示。原创 2024-05-14 11:52:17 · 1468 阅读 · 0 评论