C语言习题
文章平均质量分 69
流星白龙
这个作者很懒,什么都没留下…
展开
-
【C语言习题】30.使用指针打印数组内容
先定义一个数组,使用指针打印数组内容那就是说我们可以通过对指针解引用,来访问对应的数组元素。我们可以设置一个for循环,每次对指针进行自增或其他操作,来达到对不同元素的访问。类型(int类型4字节,char类型1字节)的第一个字节,跳过每个。数字小的时候可能看不出什么,但是数字大了就可能会打印奇怪的东西。写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。使用指针打印数组内容。注意不要越界访问哦。原创 2024-06-14 23:25:37 · 308 阅读 · 0 评论 -
【C语言习题】29.调整奇数偶数顺序
使用两个嵌套的 while 循环来移动元素。来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,这一步就相当于把第一个奇数和偶数换位置,奇数放前面,偶数放后面。定义整型变量i,定义整型变量sz来存放数组a的元素个数。进入main函数,先定义一个数组来存放元素。将数组a首元素地址和数组a的元素个数传递给了。指针向右移动,直到它指向一个。指针向左移动,直到它指向一个。输入一个整数数组,实现一个函数,指向数组的最后一个元素。所有偶数位于数组的后半部分。返回主函数,打印a数组元素。原创 2024-05-30 01:31:06 · 412 阅读 · 0 评论 -
【C语言习题】28.strlen实现
我们先把字符串元素存在数组里,然后一位一位的去访问,比较一位就统计一次,遇到。类型的值,表示字符串的长度,即从字符串开始到第一个空字符。字符之后的位置,所以需要减去 1 来得到正确的字符串长度。前面有几个字符元素,strlen原函数其实也是这个思路。进入main函数,定义字符数组arr存储字符元素。计算的是从字符串开始到末尾的字符数量。结尾的字符数组的指针,即一个字符串。,即当前指向的字符。++在后先用后加,所以循环结束后,),指向下一个字符。指针指向了字符串的末尾,即。的结果,即字符串的长度。原创 2024-05-30 00:56:59 · 452 阅读 · 0 评论 -
【C语言习题】27.字符串左旋
这个for循环干的其实就是先把数组第一个元素和(前端)最后一个元素互换位置,然后把第二个元素和(前端)最后第二个元素互换位置,依此类推。这个for循环干的其实就是先把数组(后端)第一个元素和最后一个元素互换位置,然后把(后端)第二个元素和最后第二个元素互换位置,依此类推。这个for循环干的其实就是先把数组(后端)第一个元素和最后一个元素互换位置,然后把(后端)第二个元素和最后第二个元素互换位置,依此类推。左旋几次,就执行几次。2.利用复制函数,先把后面的字符串元素存起来,再把需要左旋的前面的元素存到后面。原创 2024-05-30 00:32:03 · 989 阅读 · 0 评论 -
【C语言习题】26.字符逆序
首先,我们需要一个接收函数用来接收字符串,这里的字符串应该用字符数组存储。将一个字符串str的内容颠倒过来,并输出。函数执行完后,返回main函数,打印arr数组的内容。函数执行完后,返回main函数,打印arr数组的内容。函数,定义左指针left,初始指向字符串的起始位置。我们可以直接通过逆序的数组下标,输出逆序字符串。也可以将数组下标元素逆序交换,输出逆序字符串。简单来说,就是把最左边和最右边的元素位置互换。函数将str数组清零,为下一次读取做准备。函数将str数组清零,为下一次读取做准备。原创 2024-05-28 23:47:35 · 387 阅读 · 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 · 680 阅读 · 0 评论 -
【C语言习题】24.打印整数二进制的奇数位和偶数位
奇数位和偶数位有很多位,应该会用到循环。奇数和奇数,偶数和偶数里,相邻的差值为2,说明循环可能每次-2,然后进行位运算打印。位,然后与1进行按位与操作,结果为1表示该位是1,为0表示该位是0。然后打印出该位的值。获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列。:一个从31开始递减到1的循环,步长为2,用于遍历偶数位。:一个从30开始递减到0的循环,步长为2,用于遍历奇数位。分别打印出二进制序列说明应该要用到位运算。:与之前类似,打印出奇数位的值。打印整数二进制的奇数位和偶数位。原创 2024-05-21 22:27:16 · 325 阅读 · 0 评论 -
【C语言习题】23.统计二进制中1的个数
要返回参数二进制中 1 的个数,那么我们就要和参数的二进制形式来进行。小于等于31(因为整数通常有32位,从0到31)。前两次循环就是这样的,然后依次循环,直到i=32。我们肯定是要一位一位运算的,那么就少不了循环。为0,用于记录1的个数。满不满足条件都会执行。上面那个if语句只管。写一个函数返回参数二进制中 1 的个数。在每次循环中,创建一个掩码。如果是1,则增加计数器。循环结束后,返回计数器。例如,我们如果输入10。统计二进制中1的个数。这里我们主要来看一下。原创 2024-05-21 22:11:56 · 541 阅读 · 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 · 463 阅读 · 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 · 501 阅读 · 0 评论 -
【C语言习题】20.递归打印一个数的每一位
这里有个重要的地方,就是printf函数放哪里?以及递归到n=0的时候不能把0给打印出来。这个和之前第18题风格有点像,打印每一位我们可以把这位数n%10得到个位数。n/10就可以得到去掉个位数的其他部分,然后依次递归直到n/10=0。递归方式实现打印一个整数的每一位。原创 2024-05-19 01:37:17 · 209 阅读 · 0 评论 -
【C语言习题】19.递归求阶乘
的变量,用于存储阶乘的结果,初始值设为1。这是因为0的阶乘是1,而任何数乘以1都是它本身。首先要设置个变量存放输入的数 ,然后因为是非递归,我们就要用到循环的方法,每次让。首先要设置个变量存放输入的数 ,然后设置递归函数。递归和非递归分别实现求n的阶乘(不考虑溢出的问题)这一步是根据阶乘的定义,将当前的。减1,准备计算下一个较小的数的阶乘。是一个正整数,循环就会继续执行。减到0时,循环结束,此时。的乘积,不断循环直到。原创 2024-05-19 01:35:28 · 234 阅读 · 0 评论 -
【C语言习题】18.计算一个数的每位之和(递归实现)
例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19。我们需要两个变量,一个用来存放输入的数字,一个用来存放计算数字之和的值。的变量,用于存储当前处理的数字最 后一位的值,初始值为0。的变量,用于累加各位数字之和,初始值为0。这里main函数比较简单,我们就来看一下。除以10,去掉最后一位数字,得到新的。,这样就得到了余数,也就是它个位数字。,去掉最后一位数字,得到新的。为0,此时递归结束,返回。输入:1729,输出:19。除以10的余数,赋值给。递归调用会一直进行,直到。原创 2024-05-19 00:12:52 · 382 阅读 · 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 · 234 阅读 · 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 · 300 阅读 · 0 评论 -
【C语言习题】15.打印水仙花数
先写个循环,负责创建0~100000之间的数,创建好了才能从里面挑选水仙花数。最后我们要判断这个数本身和各位数字的n次方之和是否相等。因为需要用到n位数,所以需要写个函数,来输出数的位数。类型,否则可能会导致类型不匹配的编译错误。函数是C语言标准库中的一个数学函数,它定义在。我们还需要一个函数来求数字的n次方之和。从1开始,每次增加1,直到99999。类型的值,即计算结果的浮点数表示。函数用于计算一个数的幂次,即计算。为0,用于累加各位数字的幂次和。,则153是一个“水仙花数”。:开始另一个循环,条件是。原创 2024-05-18 01:21:55 · 641 阅读 · 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 · 821 阅读 · 0 评论 -
【C语言习题】14.打印菱形
的个数,从上往下每行先增加后减少,我们可以把这个菱形分成上面的三角形和下面的三角形。的,除了最长的那行可以不输入空格(如果你不想的话,想的话也可以前面加个空格)上半部分打印好了就打印下半部分。按照我们之前找到的规律,先打印空格,再打印。按照我们之前找到的规律,先打印空格,再打印。例如:第8行(第1行):这里面下部分总行数是6,当前行数是1。*号数=(下部分行数-当前行数)x2+1。首先这种图形题,我们就要去找规律。组成,我们可以分别打印这两个元素。,同样的,空格也可以分成两块。我们空格可以只打印到。原创 2024-05-17 02:20:43 · 405 阅读 · 0 评论 -
【C语言习题】11.使用函数实现数组操作
init函数和print函数简单,困难的是reverse函数。都说自己设计了,那么只要有上面这些函数和功能那就随便搞了。**要求:**自己设计以上函数的参数,返回值。交换好一对之后,继续交换靠里面的一对,直到。,跳出while循环,回到main函数。重要的是我们传递的实参和形参怎么写。然后进入循环,通过定义一个临时变量。,来交换左端和右端的数组元素。最后主函数返回0,程序结束。最后主函数返回0,程序结束。的每个元素初始化为0。的每个元素初始化为0。先进入main函数,的大小,赋值给sz。原创 2024-05-17 01:18:22 · 318 阅读 · 0 评论 -
【C语言习题】10.二分查找
的数组中查找指定的数字n,很容易想到的方法就是遍历数组,但是这种方法效率比较低。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?一般你都会猜中间数字,比如:150,然后看大了还是小了,这就是二分查找,也叫折半查找。,用于标记是否找到了要查找的数字,初始值为0。,表示要查找的数字,这里要查找的数字是7。:如果中间元素的值小于要查找的数字。:如果中间元素的值等于要查找的数字。标记为1,表示找到了要查找的数字。:如果没有找到要查找的数字。:如果找到了要查找的数字。:打印出找到的数字的下标。原创 2024-05-17 00:52:19 · 218 阅读 · 0 评论 -
【C语言习题】9.交换数组
先通过for循环打印arr1数组,然后打印回车,通过for循环打印arr2数组。通过for循环和中间变量tmp来交换了两个数组对应的元素。将数组A中的内容和数组B中的内容进行交换。利用最简单的三行交换代码来交换两个数组对应位置的元素。定义了两个数组,每个数组都存了3个元素。要交换数组的话首先要有两个数组。然后分别打印出来即可。【一维数组】交换数组。原创 2024-05-17 00:12:21 · 123 阅读 · 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 · 255 阅读 · 0 评论 -
【C语言习题】12.扫雷游戏
那么循环继续,也就是说只要玩家排查的非雷格子数量小于需要排查的总数,游戏的主循环就会继续运行。例如我们只需要中间的3X3的数组用作扫雷游戏,那么我们可以准备一个5X5的数组,这样每个扫雷游戏的区域都可以采用一样的方法来统计周围有几个雷了。这么做有个好处,就是如果想要更改雷的数量直接更改宏定义里面的10就可以了,否则的话,我们要去定义变量的地方更改,变量多了就容易分不清。,然后跳出switch语句,进入while的判断。同样的,我们要准备两个结构一样的数组,一个用来存放雷和非雷的数据,另一个用来显示。原创 2024-05-14 11:52:17 · 1398 阅读 · 0 评论 -
【C语言习题】7.有序序列合并
n表示第二行第一个升序序列中数字的个数,m表示第三行第二个升序序列中数字的个数。,即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。的大小,输入较小的那个数组元素,同时将最小元素所在数组的下标加1。输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。也就是说前一个元素比后一个元素大,那么就交换两个数组的元素。先定义我们输入的第一行的两个数n和m,然后输入这两个数。先定义我们输入的第一行的两个数n和m,然后输入这两个数。,先打印横坐标i,然后进入内嵌的for循环。原创 2024-05-14 11:50:47 · 753 阅读 · 0 评论 -
【C语言习题】6.逆序输出
输入10个整数,要求按输入时的逆序把这10个数打印出来。逆序输出,就是按照输入相反的顺序打印这10个数。这个很简单,直接用数组存起来第一次输入的数,然后第二次反向输出。一行,输入10个整数(范围-231~231-1),用空格分隔。一行,逆序输出输入的10个整数,用空格分隔。原创 2024-05-13 23:55:21 · 451 阅读 · 1 评论 -
【C语言习题】5.矩阵转置
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。(1≤n≤10,1≤m≤10)这个转置也很简单,直接把数组下标的行号和列号反过来就可以了。输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。一谈到这种矩阵,我们就可以用数组来尝试。个数,我们可以用n,m代表行号和列号。原创 2024-05-13 23:41:26 · 534 阅读 · 0 评论 -
【C语言习题】4.空心正方形图案
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“*”的数量。我们可以先通过数组的方式来理解一下这个图。分别是第一行,最后一行。发现规律后,我们就可以开始写代码了。”组成的“空心”正方形,每个“针对每行输入,输出用“原创 2024-05-12 22:48:05 · 422 阅读 · 0 评论 -
【C语言习题】3.X型图案
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和正斜线的长度。我们发现,这组对角线的下标之和是4。这个4就是数组元素容量减去1。我们可以先通过数组的方式来理解一下这个图。发现规律后,我们就可以开始写代码了。号的地方,其他地方打印空格。针对每行输入,输出用“6. 一行结束后打印。原创 2024-05-12 22:28:31 · 514 阅读 · 0 评论 -
【C语言习题】2.比较两个数的大小(多组输入)
从这个多组数据我们可以考虑从循环入手,因为每次结束后我们都要重新输入,所以这个输入的scanf函数我们可以放在循环的判断条件里面。如果在成功读取任何数据之前,发生了读取错误或者遇到读取到文件结尾,则返回常量 EOF (-1)。换言之,我们结束输入的时候,循环应该执行一次,执行完后会继续来到输入的位置。这也就是为什么输入一次后,他给出结果 ,然后还会给出下一次输入的闪烁的光标。但是问题又来了,我们怎么根据判断输入的数字来确定判断条件的真假呢?scanf() 的返回值是一个整数,表示成功读取的变量个数。原创 2024-05-10 11:34:49 · 459 阅读 · 0 评论 -
【C语言习题】1.猜数字游戏
我们现在解决了随机数的生成,可是随机数的范围太大了,不方便我们猜数字,而且如果规定了在100以内猜呢?函数返回的单位是秒(实际上返回的是1970年1月1日0时0分0秒到现在程序运行时间之间的差值)。参数是 NULL ,那么函数不会将时间戳存储在任何地方,只会返回当前时间的时间戳。里面之所以是NULL,是因为我们不需要存储时间戳,只要返回当前的时间戳就好了。的大小是依赖编译器上实现的,但是大部分编译器上是32767。通过修改完的,返回的参数 ,来生成一个随机的种子。的参数不变,生成的随机数种子就不变。原创 2024-05-09 23:23:56 · 871 阅读 · 0 评论