欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > C语言习题~day35

C语言习题~day35

2025/9/25 22:37:27 来源:https://blog.csdn.net/2301_78029441/article/details/142414648  浏览:    关键词:C语言习题~day35

 1. 

 int f(int x){ return ((x>2) ? x*f(x-1) : 3); 
} 
int i; 
i=f(f(2))

执行如上函数后. i的值为()

A.30

B.无限递归

C.9

D.2160

先计算内层的f(2),因为 2 不大于 2,所以返回 3,即f(2)=3。

然后计算f(f(2))=f(3),对于f(3),因为 3 大于 2,所以返回3*f(2),即3*3=9,所以最终i=9。

2.

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}}

 p[1][2]的值是()

A.1

B. 0

C.6

D.2

数组 p 中第二行实际存储的是 {3, 2, 0, 0} (因为每行都要填满 4 个元素,不足的用 0 补齐),所以 p[1][2] 的值是 0。

3.

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k
  • /*方法1解题思路:1. 从前往后遍历nums,找到val第一次出现的位置2. 将val之后的所有元素整体往前搬移,即删除该val3. nums中有效元素个数减少一个循环进行上述操作,直到nums中所有值为val的元素全部删除完时间复杂度:O(N^2)  空间复杂度:O(1)
    */
    #if 0
    int removeElement(int* nums, int numsSize, int val){// while(1){// 1. 在nums中找val出现的位置int pos = 0;for(; pos < numsSize; ++pos){if(nums[pos] == val){break;}}// 2. 检测是否找到if(pos == numsSize)break;// 3. 找到值为value的元素--将其删除for(int j = pos+1; j < numsSize; ++j){nums[j-1] = nums[j];}numsSize--;}return numsSize;
    }
    #endif#if 0
    /*方法2:解题思路: 1. 创建一个长度与nums相同的数组temp2. 遍历nums,将nums中所有与val不同的元素搬移到temp中3. 将temp中所有元素拷贝回nums中时间复杂度: O(N)  空间复杂度: O(N)
    */
    int removeElement(int* nums, int numsSize, int val){// 1. 申请numSize个元素的新空间int* temp = (int*)malloc(sizeof(int)*numsSize);if(NULL == temp){return 0;}// 2. 将nums中非value的元素搬移到temp中---尾插到temp中int count = 0;for(int i = 0; i < numsSize; ++i){if(nums[i] != val){temp[count] = nums[i];++count;}}// 3. 将temp中删除val之后的所有元素拷贝到nums中memcpy(nums, temp, sizeof(int)*count);free(temp);return count;
    }
    #endif

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com