js做网站,qq网页版登录入口手机版,建设摩托车官方旗舰店,网站开发 待遇怎么样#x1f525;博客主页#xff1a;小王又困了
#x1f4da;系列专栏#xff1a;每日一练
#x1f31f;人之为学#xff0c;不日近则日退
❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 目录
一、选择题
#x1f4dd;1.第一题
#x1f4dd;2.第二题
#x1f4d…
博客主页小王又困了
系列专栏每日一练
人之为学不日近则日退
❤️感谢大家点赞收藏⭐评论✍️ 目录
一、选择题
1.第一题
2.第二题
3.第三题
二、编程题
1.第一题
2.第二题 ️前言 在前面我们学习完C语言的所以知识当然练习巩固也不能落下。俗话说“无财之谓贫学而不能行之谓病。”可见实践对我们学习的重要。接下来就让小王带着大家进行练习巩固我们C语言的学习。 一、选择题
1.第一题
请指出以下程序哪步有错误【多选】
void GetMemory(char** p, int num)
{if (NULL p num 0)//1{return;}*p (char*)malloc(num);return;
} int main()
{char* str NULL;GetMemory(str, 80); //2if (NULL ! str){strcpy(str, hello); //3printf(str); //4} return 0;
}
解题思路 代码1错误通过观察代码我们可以知道这个函数的功能是要动态开辟空间num 是开辟空间的大小不能为0p 是二级指针不能为空指针这两个条件有一个不满足程序就会出错所以应该使用 || 。代码2正确在代码2中传入 str 的地址在语句 char*strNULL;中str初始化为空指针但是 str 指针变量也有地址所以 p 保存的是指针变量 str 的地址所以调用GetMemory函数之后动态开辟的空间的地址存放在了str中。代码3错误这里是要进行字符串的拷贝要传递的是字符串的地址而这里使用了符号传递的是地址的地址所以是错误的。 2.第二题
已知 ij 都是整型变量下列表达式中与下标引用 X[i][j] 不等效的是【多选】
A、*(X[i]j) B、*(Xi)[j] C、*(Xij) D、*(*(Xi)j)
解题思路
X [ i ][ j ]表示取二维数组的第 i 行第 j 列 A选项在二维数组中X[ i ]表示的是第 i 行首元素的地址再加 j表示找到第 i 行的第 j 个元素的地址在解引用就可以找到这个元素啦。B选项我们知道数组名是首元素的地址所以 X 是二维数组第一行的地址加 i 找到第 i 行这里要注意 ()、[] 的优先级比 * 的优先级高所以 * 最后执行。由 arr[i]*(arri)可得 *(*( (Xi)j) )这样是错误的。C选项X是二维数组的数组名数组名相当于第一行的地址Xij跳过了ij行就越界了也是错误的。D选项*(Xi) 等价于 X[ i ], *(X[ i ]j) 就等价于 X[ i ][ j ]。 3.第三题
下面这个程序执行后会有什么错误或者效果【多选】
#define MAX 255
int main()
{unsigned char A[MAX], i;for (i 0; i MAX; i){A[i] i;}return 0;
} 解题思路 我们通过观察代码可以看到数组的大小为255所以它的下标是 0-254iMAX 条件都满足i255进入循环 A[255]i 会出现越界访问。A是无符号字符型它的取值范围是 0-255255在加1时就会变成0重新循环所以程序会陷入死循环 二、编程题
1.第一题 解题思路 我们要统计连续1的个数使用一个计数器当遇到连续的1时就遇到0时将计数器清0重新记录连续1的个数。每次连续的个数记录起来与上一次的比较如果当前的个数大于之前的个数就替换如果不大于就不替换最终就可以得到最大连续1的个数。 int findMaxConsecutiveOnes(int* nums, int numsSize)
{int count 0;int max 0;for (int i 0; i numsSize; i){if (nums[i] 1){count;}else{count 0;}if (count max){max count;}}return max;
} 2.第二题 解题思路 我们遍历数组中的每个元素数组元素的绝对值为几就把数组第几个元素置为负数也就是n-1下标的元素。因为数组的元素是1~n,下标的元素是0~n-1。 abs函数是对整数进行取绝对值。因为对一个位置加两个负号就会变成正数所以要取绝对值。 int* findDisappearedNumbers(int* nums, int numsSize, int* returnSize)
{*returnSize 0;int* new (int*)malloc(sizeof(int) * numsSize);for (int i 0; i numsSize; i){//把元素-1作为下标int index abs(nums[i]) - 1;//将下标对应的值置为负数//这里取绝对值是防止对重复的位置置为负数nums[index] -abs(nums[index]);}for (int i 0; i numsSize; i){if (nums[i] 0){new[*returnSize] i 1;(*returnSize);}}return new;
} 本次的内容到这里就结束啦。希望大家阅读完可以有所收获同时也感谢各位读者三连支持。文章有问题可以在评论区留言博主一定认真认真修改以后写出更好的文章。你们的支持就是博主最大的动力。