当前位置: 首页 > news >正文

拒绝摆烂!C语言练习打卡第一天

 

🔥博客主页:小王又困了

📚系列专栏:每日一练

🌟人之为学,不日近则日退 

❤️感谢大家点赞👍收藏⭐评论✍️


🗒️前言:

在前面我们学习完C语言的所以知识,当然练习巩固也不能落下。俗话说:“无财之谓贫,学而不能行之谓病。”可见实践对我们学习的重要。接下来就让小王带着大家进行练习,巩固我们C语言的学习。

 一、选择题

📝1.第一题

在上下文及头文件均正常的情况下,下列代码的输出是()

print(char* s)
{if (*s){print(++s);printf("%c", *s);}
}int main()
{char str[] = "Geneius";print(str);return 0;
}

💡解题思路:

这道题用到的是函数递归的思想,所以我们就要考虑递归什么时候结束。本题传递的字符串,字符串结尾有 ‘/0’ ,可以作为结束的标志。

字符串传递的是首元素的地址,所以 *s 存储的是 G 的地址,进入 if 条件判断为真,继续调用 print 函数。但这里要注意“++s” 前置 ++,要先++再使用,所以传递过去的就是 ‘e’ 的地址,经过一次次的调用,直到 ‘/0’ 不符合条件,跳出循环,开始打印,由与 “++s” 走到洗下一个字符,所以 *s 打印的也是这个字符,,无法打印第一个字符。


 

📝2.第二题

以下程序的输出结果为( )

#include <stdio.h>
//全局变量
int i;void prt()
{for (i = 5; i < 8; i++){printf("%c", '*');}printf("\t");
}int main()
{for (i = 5; i <= 8; i++){prt();}return 0;
}

💡解题思路:

想要正确的解决这道题,我们就要理解全局变量。

  • 全局变量:在函数外部定义的变量就是全局变量,全局变量为该源文件所有函数共有,它的作用域是从该文件定义的位置到源文件结束。

在 main 函数中,将 i 赋值为5,进入循环调用 ptr 函数,每次循环打印一个 ‘*’ ,当 i=8,不符合条件跳出循环,回到 main 函数中 “i++” 变为9,再次进入 main 函数的 for 循环条件不成立,无法在调用 prt 函数,结果是打印 “***”。

📝3.第三题

有如下代码,则 *(p[0]+1) 所代表的数组元素是( )

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

💡解题思路:

  • p 先与 [] 结合,所以p是数组,它的类型是 int*[] ,所以p是存放指针的指针数组
  • a[1]表示的是第二行首元素的地址,第二行的元素是3,4,所以存放的是3的地址。
  • p[0]中存放的就是3的地址,p[0]+1表示指针向后挪动一位,指向4,然后再解引用就可以得到4。

 

二、编程题

📝1.第一题

 💡解题思路:

通过题意我们得知,中心下标左侧的数据之和与右侧的数据之和相等。我们可以的到左侧数据之和加右侧数据之和加中心元素就是整个数组的和。所以当左侧数据这和乘2加下一个数据之和等于数组之和,那么这个数据就是中心元素。满足num*2+nums[i]==sum返回下标,没有符合条件的返回-1。

int pivotIndex(int* nums, int numsSize)
{int sum=0;int leftsum=0;int i=0;//计算数组之和for(i=0;i<numsSize;i++){sum+=nums[i];}for(i=0;i<numsSize;i++){if(leftsum*2+nums[i]==sum){return i;}leftsum+=nums[i];}return -1;
}

📝2.第二题

  💡解题思路:

  • 排序+双指针

我们先将两个数组进行排序,在这里使用快速排序。然后使用两个指针遍历两个数组,如果两个数据相等,就拷贝到新的数组中;如果两个数不相等,就将较小数据的指针向后挪一位,直到一个指针超出数组范围,遍历结束。

注意:再插入时,我们要考虑插入的唯一性,所以我们要找一个 tmp 来判断插入的值是否重复,如果插入的值不等于 tmp ,将该数字插入,并且要更新 tmp 的值。

 

int cmp_int(const void* p1, const void* p2)
{return *((int*)p1) - *((int*)p2);
}int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{qsort(nums1, nums1Size, sizeof(int), cmp_int);qsort(nums2, nums2Size, sizeof(int), cmp_int);*returnSize = 0;//开辟存放相同元素的空间int* destnum = malloc(sizeof(int) * (nums1Size + nums2Size));if (destnum == NULL){perror("malloc");exit(-1);}int n = 0;int m = 0;while (n < nums1Size && m < nums2Size){if (nums1[n] == nums2[m]){//保证唯一性   //当新的数组中插入第一个元素或要插入的元素与之前插入的元素不同if (!(*returnSize) || nums1[n] != destnum[(*returnSize) - 1]){destnum[(*returnSize)++] = nums1[n];}n++;m++;}else if (nums1[n] < nums2[m]){n++;}else{m++;}}return destnum;
}

本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。你们的支持就是博主最大的动力。

http://www.lryc.cn/news/123166.html

相关文章:

  • Spring 使用注解开发、代理模式、AOP
  • 考公-判断推理-逻辑判断-翻译推理
  • 关于MPU6050的VLOGIC引脚作用
  • 对约瑟夫问题的进一步思考
  • 程序员如何优雅的提升软件开发效率?
  • 宽屏企业网站介绍
  • OPENCV C++(八)HOG的实现
  • 干货分享:制作婚礼请柬的技巧,从零基础起步
  • c语言每日一练(6)
  • 2023年国赛数学建模思路 - 复盘:校园消费行为分析
  • WebAPIs 第四天
  • SQL 语句解析过程详解
  • 单源最短路径【学习算法】
  • 汽车上的电源模式详解
  • 【碎碎念随笔】1、回顾我的电脑和编程经历
  • 背上花里胡哨的书包准备面试之webpack篇(+一些常问的面试题)
  • 你知道什么是Curriculum Training模型吗
  • vue 大文件视频切片上传处理方法
  • 痞子衡嵌入式:AppCodeHub - 一站网罗恩智浦MCU应用程序
  • 打造数字化营销闭环,破解精准获客难题
  • 《雷达像智能识别对抗研究进展》阅读记录
  • 【AHB】初识 AHB 总线
  • Linux服务使用宝塔面板搭建网站,通过内网穿透实现公网访问
  • C++ 判断
  • “解引用“空指针一定会导致段错误吗?
  • 釉面陶瓷器皿SOR/2016-175标准上架亚马逊加拿大站
  • Redux - Redux在React函数式组件中的基本使用
  • rust学习-同时执行多Future
  • 问道管理:旅游酒店板块逆市拉升,桂林旅游、华天酒店涨停
  • 算法通关村第三关——数组白银