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

news/2025/2/16 6:18:26/

🔥博客主页:小王又困了

📚系列专栏:每日一练

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

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


目录

 一、选择题

📝1.第一题

📝2.第二题

📝3.第三题

二、编程题

📝1.第一题

📒方法一:

📒方法二:

📝2.第二题


🗒️前言:

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

 一、选择题

📝1.第一题

以下哪个选项一定可以将flag的第二个bit置0()

A. flag&=~2

B. flag|=2

C. flag^=2

D. flag>>=2

💡解题思路:

我们要将某一位置为0,只需要在这一位按位与一个0,其他位都为1即可。

  • &  --  对应的二进制位有0则为0,都为1才为1

假设 flag 有8个比特位,那么只要按位与11111101,就可以将第二个比特位置为0。想得到11111101只需将00000010按位取反即可,也就是A选项。

📝2.第二题

执行下面程序,正确的输出是( )

int x = 5, y = 7;
void swap()
{int z;z = x;x = y;y = z;
}
int main()
{int x = 3, y = 8;swap();printf("%d,%d\n",x, y);return 0;
}

💡解题思路:

通过观察代码我们看到在程序中定义了变量名相同的全局变量和局部变量,当同名时,局部变量优先使用。在 main 函数中有一个交换函数,但没有传递参数,所以它无法交换局部变量 x,y。全局变量的作用域是整个程序的生命周期,所以这里交换的是全局变量 x,y的值。在打印时,局部变量要优先使用,所以打印出的结果是3,8。

📝3.第三题

下面函数的输出结果是()

void func()
{int k = 1^(1 << 31 >> 31);printf("%d\n", k);
}

💡解题思路:

通过观察代码,第一步是将1向左移动31位,然后将结果向右移动31位,最后将得到的结果 ^ 1就得到k。移位操作符的规则:

  •  <<  --  左移

        左边丢弃,右边补0

  • >>  --  右移

        1.算术右移:右边丢弃,左边补原来的符号位

        2.逻辑右移:右边丢弃,左边直接补0

本题的右移是算数右移。

二、编程题

📝1.第一题

📒方法一:

💡解题思路:

我们可以将数字按照字符串的形式接收scanf("%s",str) ,然后将数据倒着打印出来。

  • 倒着打印的方法:计算出字符串的长度,从最后一个下标开始,依次向前打印
#include <stdio.h>
#include <string.h>
int main()
{char str[32] = { 0 };while (scanf("%s", str) != EOF){int len = strlen(str);int i = 0;for (i = len-1; i >= 0; i--){printf("%c", str[i]);}printf("\n");}return 0;
}

📒方法二:

💡解题思路:

我们就按照数字输入,每次通过 ‘%10’ 得到最后一位,由于题目要求要按照字符的形式打印,所以在打印时要加 ‘0’ 然后输出。这里要考虑输入的值为0时,直接打印‘0’。

int main()
{int n = 0;while (scanf("%d", &n) != EOF){if (n == 0){printf("%c", '0');}while (n){printf("%c", n % 10 + '0');n /= 10;}printf("\n");}return 0;
}

📝2.第二题

💡解题思路:

因为题目将数组边界看成最小值,而我们只需要找到其中一个波峰,因此只要不断地往高处走,一定会有波峰。那我们可以每次找到中间元素,将数组分成两个区间,每次就较高的一边走。同时题目还要求时间复杂度为log(N)可以使用二分产找确定中间元素。

  • 先通过二分查找,找到中间元素
  • 如果中间元素大于右侧元素,说明右边是向下走,不一定会遇到波峰,所以我们在左侧继续寻找中间值
  • 如果中间元素小于右侧元素,说明右边是向上走,一定会遇到波峰,所以我们在又侧继续寻找中间值
  • 当首尾相遇时,这个点就是波峰

注意:由于只需要找一个波峰,所以我们找一侧对比就可以,这里是和右侧数据对比。

int findPeakElement(int* nums, int numsLen) 
{int left = 0;int right = numsLen - 1;while (left < right) {int mid = (left + right) / 2;if (nums[mid] < nums[mid + 1]) {left = mid + 1;}else {right = mid;}}return right;
}

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


http://www.ppmy.cn/news/1036136.html

相关文章

使用Vue和jsmind如何实现思维导图的历史版本控制和撤销/重做功能?

思维导图是一种流行的知识图谱工具&#xff0c;可以帮助我们更好地组织和理解复杂的思维关系。在开发基于Vue的思维导图应用时&#xff0c;实现历史版本控制和撤销/重做功能是非常有用的。以下为您介绍如何使用Vue和jsmind插件来实现这些功能。 安装依赖 首先&#xff0c;我们…

深入理解Vue 3.0x中的Suspense和异步组件

深入理解Vue 3.0x中的Suspense和异步组件 Vue 3.0x作为Vue.js框架的最新版本&#xff0c;引入了许多创新特性&#xff0c;其中Suspense和异步组件是重要的改进之一。在本文中&#xff0c;我们将深入探讨这两个特性&#xff0c;了解它们如何为现代Web应用带来更好的性能和用户体…

系统运维日常巡检都做什么

系统运维日常巡检都做什么 系统运维日常巡检是确保服务器和系统正常运行的关键活动。它涉及对硬件、软件和网络进行定期检查&#xff0c;以发现潜在问题并采取相应的措施。以下是系统运维日常巡检的一些常见任务&#xff1a; 1.硬件检查&#xff1a; 检查服务器硬件的健康状…

C#__使用委托升级冒泡排序

// 员工类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Delegate委托 {class Employee // 员工类{public string Name { get; set; }public double Salary { get; set; }public Employee…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心&#xff0c;主要用于海量日志数据的异地扩展备份管理&#xff0c;多条件组合的高效查询&#xff0c;统计和趋势报表生成&#xff0c;设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

从零开始学习 Java:简单易懂的入门指南之MAth、System(十二)

常见API&#xff0c;MAth、System 1 Math类1.1 概述1.2 常见方法1.3 算法小题(质数)1.4 算法小题(自幂数) 2 System类2.1 概述2.2 常见方法 1 Math类 1.1 概述 tips&#xff1a;了解内容 查看API文档&#xff0c;我们可以看到API文档中关于Math类的定义如下&#xff1a; Math类…

MySQL 数据库文件的导入导出

目录 数据库的导出 导出整个数据库 导出数据库中的数据表 导出数据库结构 导出数据库中表的表结构 导出多个数据库 导出所有数据库 数据库的导入 数据库的导出 mysqldump -h IP地址 -P 端口 -u 用户名 -p 数据库名 > 导出的文件名 用管理员权限打开cmd进入MySQL的bi…

贴吧照片和酷狗音乐简单爬取

爬取的基本步骤 很简单&#xff0c;主要是两大步 向url发起请求 这里注意找准对应资源的url&#xff0c;如果对应资源不让程序代码访问&#xff0c;这里可以伪装成浏览器发起请求。 解析上一步返回的源代码&#xff0c;从中提取想要的资源 这里解析看具体情况&#xff0c;一…