C语言基础练习
文章平均质量分 93
C语言基础的语法和练习题
怡晗★
有在努力的小coder
展开
-
C语言基础练习——Day16
声明:本篇是C语言基础练习的最后一篇。原创 2024-03-23 17:16:12 · 651 阅读 · 0 评论 -
C语言基础练习——Day15
本题可以采用暴力求解找到峰值,但是题目规定使用O(logN)的时间复杂度,而暴力求解的时间复杂度为O(N),所以考虑采用二分查找的思想或者递归。指针同时指向同一个位置时递归结束返回当前下标,当递归结束返回后比较两个下标对应数值的大小,返回较大值的下标,具体过程如下:(当前区间为。C选项,指针占几个字节要看平台,64位环境下8个字节,32位环境下4个字节,其余选项正确。为元素类型是指针类型数组,并且第一个元素为二维数组第二行的第一个元素的地址,即。属于字符数组的数组名,相当于数组的首地址,A正确。原创 2024-03-22 11:25:35 · 801 阅读 · 0 评论 -
C语言基础练习——Day14
本题可以可以将问题拆解为两个部分,第一个部分处理猜中的部分,需要注意的是如果给的样例中有猜中的部分时,避免在后面的伪猜中的比较中再与猜测数组进行一次遍历导致增加伪猜中的次数需要将比较完的两个数组中的数值改为RYGB以外的字符,接着是第二个部分处理伪猜中的部分,本部分和上面的处理方式相同,可以考虑加。本题可以考虑使用双指针遍历数组算和的思路,第一个指针指向第一个元素,第二个指针指向后一个元素,当第二个指针遍历完数组后再更新第一个指针,直到找出和为。为指针数组名,数组的每一个元素为指针类型,所以。原创 2024-03-21 15:17:46 · 874 阅读 · 0 评论 -
C语言基础练习——Day13
B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数,C选项,赋值,没问题,D选项,判断两指针是否相同。通过对题目的分析可以发现本题和斐波那契数列的思路基本一致,所以可以直接使用斐波那契数列求解的思想。A选项的x是指针,赋值时使用a不合适,C选项在赋值时a变量还没定义,D选项中的x不是指针。5、以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是。表示改变从右向左的第一个0为1,直到变成全1的时候。3、下面有关空指针和未初始化指针,说法错误的是。的指针,其中哪一个是正确的。原创 2024-03-20 22:16:09 · 849 阅读 · 0 评论 -
C语言基础练习——Day12
接着是输出,因为当前二维数组每一行存储的是一个单词,只要是有字母的位置就不会停止读取,那么对初始化全部为0的数组来说,只需要反向输出即可,但是输出时需要注意是使用%c还是%s,如果用。的特点,在读取字符串时会跳过空白字符,而本题中题目说明了构成单词的字符只有大小写字母,所以在输入时需要限制输入的字符集合在a-z以及A-Z,即。,而因为scanf的返回值是实际成功读取到的字符的个数,故当其返回值非0时,说明此时输入了单词,输入完一个单词后换到二维数组的下一行即可。的值按1、2、0循环,可推算出。原创 2024-03-19 15:07:08 · 1037 阅读 · 0 评论 -
C语言基础练习——Day11
本题考虑遍历数组,因为数组中只会有0和1的存在,故当遇到数组值为1时,记录个数,当数组值为0时先将原来个数放入变量中,再将计数器归零,接着向后遍历数组,注意遍历结束后需要额外判断一次当前计数器中的数值是否比最后答案中的值大,如果大则需要更新最后的答案。本题可以考虑两层for循环,第一层for循环用于生成2到num的数值,第二层for循环用于生成除数,如果生成的数值除以除数为0则进行加和,最后在外层循环判断总和是否等于生成的数值,若等于则计数器加1。,即符号位为1,其他为0,即-2147483648,原创 2024-03-18 16:41:30 · 954 阅读 · 0 评论 -
C语言基础练习——Day10
这个表达式执行一次就会将x的2进制中最右边的1去掉,在x变成0之前,表达式能执行几次,就去掉几个1,所以这个代码实现了求一个有符号整数二进制补码中1的个数的功能,我们知道-1的补码是全1,而。,可以利用这个特点使用哈希直接定址的思想来进行解决,最直接的办法就是创建一个和原数组大小相同的临时数组。运算符的计算规则可以产生进位,两个数值相与后左移可以获得进位的位置,而和的值则由异或运算符。此题一个关键,有符号数右移运算高位是补符号位的,负数的符号位是1,所以。数组的下标位置的值+1,原数组遍历完成后,如果。原创 2024-03-17 22:44:16 · 1085 阅读 · 0 评论 -
C语言基础练习——Day09
遍历整数的每一位的方法是,每次将当前整数对 10取模即可得到当前整数的最后一位,然后将整数除以 10。首先本题能直接想到一个思路:将数组的所有元素相乘,再除以当前位置的数值,但是这个思路的问题就是如果除数为0则无法进行,并且题目规定不可以使用除法,所以只能另辟蹊径。是地址末三位的十六进制数,5n+5代表相差5n行5个元素,因为每个元素占1个存储单元,故地址之间的差值即为相差的元素个数),这里。逗号表达式是从前到后依次计算子表达式,而其结果是最后一项的值,此题去掉括号后的表达式,和原表达式是等价的,先计算。原创 2024-03-16 12:46:23 · 927 阅读 · 0 评论 -
C语言基础练习—Day08
因为题目圈定出现的字符都是ASCII值小于127的字符,因此只需要定义一个标记数组大小为127,然后将字符作为数组下标在数组中进行标记,若数组中没有标记过表示第一次出现,进行计数,否则表示重复字符。表达式的值是0,是正确的,其他选项行和列都可能存在越界,A是行越界,B是行和列都越界,C是列越界。本题主要考虑数组越界访问的情况,二维数组的行和列都是从0开始的,对于。数组来说,行下标最大是1,列下标最大是2,D选项中。本题考查的是二维数组的元素访问,A选项是正确的,行的数组名,数组名表示首元素的地址,原创 2024-03-14 23:08:36 · 386 阅读 · 0 评论 -
C语言基础练习——Day07
形参和实参的名字是可以相同的,在函数调用的时候,形参是实参的一份临时拷贝,分别占用不同的内存空间,所以A正确,B错误,及时形参和实参的名字相同,也是占用不同的内存空间,所以B错误;函数如果不被调用时,函数的形参是形式上存在的,但是函数在被调用的时候,形参是要分配内存空间的,所以D错误。函数f是没有返回值的,不能给int类型变量赋值,故A错误,同时需要一个整型参数,C中f(9)不能作为f的参数,也是错的,D选项没有传参,也不能接收返回值也是错误的。以下对C语言函数的有关描述中,正确的有。原创 2024-03-13 23:26:10 · 821 阅读 · 0 评论 -
C语言基础练习——Day06
将两个数组进行排序,排序之后通过双指针遍历两个数组,遇到相等的即可认为是出现交集,但是需要注意的是,题目要求输出结果中的每个元素一定是唯一的,所以需要判断当前结果数组中的上一个元素和即将插入的数值是否相等,若相等则不添加,否则添加。本题可以先将数组进行排序,此时最大的数值肯定出现在数组的最后一个元素的位置,倒数第二大的数值一定在数组的倒数第二个位置,如果最大的数值比倒数第二个数的两倍还大或者相等就返回下标,否则按要求返回其他内容。和实参数组的说明是如下形式,则对函数的调用语句中,正确的是。原创 2024-03-12 23:19:20 · 819 阅读 · 0 评论 -
C语言基础练习——Day05
本题可以考虑使用异或操作找出两个数值之间不同的位置,根据异或的特点,两个数存在相异的位置时异或结果为1,接着因为整数的比特位个数在力扣上是32位,故可以考虑右移i位与1相与,如果结果为1,那么说明是不同的位置,否则是相同的位置,记录不同的位置即可。从数组的右侧向中间寻找,当两个指针各自遇到了等于数值k时,计数器各加1,但是这个方法存在一个问题,如果数组中只有一个数据时,并且这个数据等于k,那么。的值改为了1,导致两层循环的判断条件都为假,从而跳出循环;函数调用的返回值是字符串中字符的个数,即为1。原创 2024-03-11 19:00:32 · 950 阅读 · 0 评论 -
C语言基础练习——Day04
故采用先构造一个数组和原数组进行整体异或,得到一个返回值ret即为重复数值和缺失数值的异或结果,因为异或运算的本质是找出两个操作数二进制位不同的位置,所以计算结果的二进制位为1的位置即为重复的数值和缺失的数值相异的位置,此时可以采用循环结合右移运算符找到相异的位置(二进制位数的下标,例如1和5中倒数第三位不同),但是本次将采用返回值与返回值的负数形式相与计算得出最低的不同位,即。,但是注意该语句计算的不是不同的下标位置,而是具体的值,但是该值的二进制值中为1的位置为对应的两个数不同的位置。原创 2024-03-10 17:07:10 · 964 阅读 · 0 评论 -
C语言基础练习——Day03
因为原数组是一个非降序(即非严格递增)的数组,所以旋转后的数组将被分为两个有序的数组,对于二分查找来说,只需要查找的数组是有序即可,对于本题,因为存在两个有序的部分,故需要分别进行判断,确定好边界后缩小范围再进行二分查找,故本题有三种情况。,第一个形参是数组形式的参数,第二个形参是指针类型的参数,故在调用时传递的实际参数也需要为数组和指针类型(地址),所以第一个参数传数组的数组名,即数组首元素地址,第二个参数传变量。本题处理好负数和0的个数即可,在最后求平均值的过程中需要考虑到除数为0的情况。原创 2024-03-09 09:21:23 · 776 阅读 · 0 评论 -
C语言基础练习——Day02
类型的比较,由于浮点数存在误差,不能直接判断两个数是否相等,通常采用比较两数之差的绝对值是否小于一个很小的数字(具体的可自己设定这样一个数,作为误差)来确定是否相等。本题的第一种思路是找规律,观察到中间数值总是输入的数值的平方,接下来只需要得到足有两侧相同数量的奇数即可,但是注意当输入的数值为偶数时,此时数值的平方不存在于等式中,所以需要单独处理偶数的情况。针对上面的思路,有一个优化的思路,直接找出开始的数值,然后通过奇数两两之间相差2获取到输入数值个数次的数值最后求和即可。5、对于下面的说法,正确的是。原创 2024-03-08 23:54:41 · 992 阅读 · 0 评论 -
C语言基础练习——Day01
本题的关键就是解决位权,当输入3时最大打印999,故可以知道3可以用于作为以10为底数的位权,那么此时最大数即为小于103的数值,依次生成数值存入数组中返回即可。占位符期望一个指向字符数组的指针作为参数,以便将输入的字符串存储到该数组中,程序的效果相同,也没错,但同时也必须把变量。本题需要处理好闰年和非闰年的天数,注意是否要包括某个月整月的天数,其余直接加和即可。test.c文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为。在八进制表示中,最大的数值为7,没有8的存在,故。原创 2024-03-07 22:24:40 · 1300 阅读 · 0 评论