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

C语言笔试题(三)

       本专栏通过整理各专业方向的面试资料并咨询业界相关人士,整合不同方向的面试资料,希望能为您的面试道路点亮一盏灯!   

1 简单题  

  • 如何声明一个二维数组?

    • 答案: int arr[3][4];
    • 解析: 二维数组可以看作数组的数组。
  • unionstruct的区别是什么?

    • 答案: union的所有成员共享同一内存位置,而struct的每个成员有独立的内存位置。
    • 解析: union在同一时间只能存储一个成员的值。
  • 如何使用#include指令?

    • 答案: #include <stdio.h>
    • 解析: #include用于引入头文件。
  • 如何声明一个全局变量?

    • 答案: 在所有函数外部声明,如int globalVar;
    • 解析: 全局变量在整个程序的生命周期内存在。
  • 什么是局部变量?

    • 答案: 在函数或代码块内部声明的变量。
    • 解析: 局部变量的作用域仅限于声明它的函数或代码块。
  • static关键字在局部变量和全局变量中有什么作用?

    • 答案: 对于局部变量,static使变量在函数调用之间保持其值;对于全局变量,static限制变量的作用域为当前文件。
    • 解析: static用于控制变量的生命周期和可见性。
  • volatile关键字的作用是什么?

    • 答案: 告诉编译器变量的值可能在任何时候被外部因素修改。
    • 解析: volatile防止编译器优化,确保每次读取变量时获取最新值。
  • 如何获取当前时间?

    • 答案: 使用time()函数。
    • 解析: time()函数返回自纪元(1970年1月1日)起的秒数。
  • exit()函数的作用是什么?

    • 答案: 终止程序执行。
    • 解析: exit()可以用于正常或异常终止程序。
  • 什么是文件指针?

    • 答案: FILE类型的指针,用于处理文件。
    • 解析: 文件指针用于文件操作,如读写文件。
  • 如何打开一个文件?

    • 答案: 使用fopen()函数。
    • 解析: fopen()用于打开文件并返回文件指针。
  • 如何关闭一个文件?

    • 答案: 使用fclose()函数。
    • 解析: fclose()关闭文件并释放资源。
  • 如何读取文件中的一行?

    • 答案: 使用fgets()函数。
    • 解析: fgets()读取文件的一行到字符串中。
  • 如何写入数据到文件?

    • 答案: 使用fprintf()函数。
    • 解析: fprintf()用于格式化输出到文件。
  • 如何读取文件中的一个字符?

    • 答案: 使用fgetc()函数。
    • 解析: fgetc()从文件中读取一个字符。
  • 如何写入一个字符到文件?

    • 答案: 使用fputc()函数。
    • 解析: fputc()将一个字符写入文件。
  • 什么是宏?

    • 答案: 预处理器指令,用于定义常量或代码块。
    • 解析: #define用于定义宏,宏在编译前被替换。
  • 如何防止头文件被多次包含?

    • 答案: 使用头文件保护(include guard)。
    • 解析: 使用#ifndef#define#endif来防止重复包含。
  • fseek()函数的作用是什么?

    • 答案: 设置文件指针的位置。
    • 解析: fseek()可以在文件中移动文件指针。
  • 如何获取文件指针的当前位置?

    • 答案: 使用ftell()函数。
    • 解析: ftell()返回文件指针的当前位置。

2 进阶题

  • 如何合并两个有序数组?

    • 答案:
      void merge(int arr1[], int arr2[], int n1, int n2, int arr3[]) {int i = 0, j = 0, k = 0;while (i < n1 && j < n2) {if (arr1[i] < arr2[j])arr3[k++] = arr1[i++];elsearr3[k++] = arr2[j++];}while (i < n1)arr3[k++] = arr1[i++];while (j < n2)arr3[k++] = arr2[j++];
      }
      
    • 解析: 使用双指针遍历两个数组并将较小的元素加入到新数组中。
  • 如何实现字符串的旋转操作?

    • 答案: 使用三步反转法。
    • 解析: 先反转前半部分,再反转后半部分,最后反转整个字符串。
  • 如何检测数组中是否存在一个和为特定值的子数组?

    • 答案: 使用前缀和和哈希表。
    • 解析: 前缀和可以快速计算子数组的和,哈希表用于存储前缀和。
  • 如何实现快速排序?

    • 答案:
      void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
      }int partition(int arr[], int low, int high) {int pivot = arr[high];int i = (low - 1);for (int j = low; j <= high - 1; j++) {if (arr[j] < pivot) {i++;swap(&arr[i], &arr[j]);}}swap(&arr[i + 1], &arr[high]);return (i + 1);
      }
      
    • 解析: 快速排序是一种分治算法,通过选择一个枢轴将数组分为两部分。
  • 如何查找数组中的最大和最小值?

    • 答案: 遍历数组,同时更新最大值和最小值。
    • 解析: 在一次遍历中找到最大值和最小值。
  • 如何实现一个双向链表?

    • 答案:
      struct Node {int data;struct Node* next;struct Node* prev;
      };
      
    • 解析: 双向链表的每个节点有两个指针,分别指向下一个和上一个节点。
  • 如何查找字符串中的第一个不重复字符?

    • 答案: 使用哈希表记录字符出现的次数。
    • 解析: 遍历字符串并记录每个字符的出现次数,找到第一个次数为1的字符。
  • 如何实现一个栈的两个队列?

    • 答案: 使用两个队列,其中一个队列用于存储元素,另一个用于辅助操作。
    • 解析: 栈的pushpop操作可以使用两个队列实现。
  • 如何实现二叉树的前序遍历?

    • 答案:
      void preorder(struct Node* node) {if (node == NULL)return;printf("%d ", node->data);preorder(node->left);preorder(node->right);
      }
      
    • 解析: 前序遍历是访问根节点,然后访问左子树,最后访问右子树。
  • 如何实现二叉树的层次遍历?

    • 答案:
      void levelOrder(struct Node* root) {if (root == NULL)return;struct Queue* q = createQueue();enqueue(q, root);while (!isEmpty(q)) {struct Node* temp = dequeue(q);printf("%d ", temp->data);if (temp->left)enqueue(q, temp->left);if (temp->right)enqueue(q, temp->right);}
      }
      
    • 解析: 使用队列进行层次遍历,先访问当前层,再访问下一层。

3 高级题

  • 如何实现字符串的最大回文子串?

    • 答案: 使用动态规划或中心扩展法。
    • 解析: 最大回文子串是字符串中的最长回文。
  • 如何实现二叉树的最近公共祖先问题?

    • 答案: 使用递归或迭代方法查找两个节点的最近公共祖先。
    • 解析: 最近公共祖先是指在二叉树中两个节点的最低公共祖先。
  • 如何实现数据流中的中位数?

    • 答案: 使用两个堆,一个最大堆和一个最小堆。
    • 解析: 最大堆存储较小的一半数据,最小堆存储较大的一半数据,中位数是两个堆顶的平均值或最大堆顶。
  • 如何实现图的强连通分量?

    • 答案: 使用Kosaraju算法或Tarjan算法。
    • 解析: 强连通分量是指在有向图中,每个顶点都能到达其他所有顶点的最大子图。
  • 如何实现最大子数组和问题?

    • 答案: 使用Kadane算法。
    • 解析: Kadane算法是一种动态规划算法,用于找到最大子数组和。
  • 如何实现一个线程池?

    • 答案: 使用线程和任务队列。
    • 解析: 线程池是一种管理线程的工具,用于执行并发任务。
  • 如何实现信号量?

    • 答案: 使用信号量来控制对共享资源的访问。
    • 解析: 信号量是一种同步原语,用于限制对资源的访问数量。
  • 如何实现读写锁?

    • 答案: 使用读写锁来允许多个读者或一个写者。
    • 解析: 读写锁是一种同步机制,用于区分读和写操作。
  • 如何实现生产者消费者问题?

    • 答案: 使用互斥锁和条件变量。
    • 解析: 生产者消费者问题是经典的并发问题,涉及多个生产者和消费者共享一个缓冲区。
  • 如何实现死锁检测和避免?

    • 答案: 使用资源分配图和银行家算法。
    • 解析: 死锁是指多个进程互相等待彼此持有的资源,导致无法继续执行。

4 进阶题

  • 如何实现一个数据压缩算法?

    • 答案: 使用霍夫曼编码、字典压缩或熵编码。
    • 解析: 数据压缩算法用于减少数据存储或传输的空间。
  • 如何实现一个自适应的缓存替换策略?

    • 答案: 使用LRU、LFU或自适应替换策略。
    • 解析: 自适应缓存替换策略根据访问模式动态调整缓存内容。
  • 如何实现一个并发的垃圾回收器?

    • 答案: 使用标记-清除、标记-整理或并发标记-清除。
    • 解析: 并发垃圾回收器在程序运行时回收内存。
  • 如何实现一个事务内存系统?

    • 答案: 使用乐观并发控制和回滚机制。
    • 解析: 事务内存系统支持原子性和并发的数据访问。
  • 如何实现一个高性能的网络协议栈?

    • 答案: 使用零拷贝、异步I/O和多核并行化。
    • 解析: 高性能网络协议栈优化数据传输的延迟和吞吐量。
  • 如何实现一个高效的分布式文件系统?

    • 答案: 使用副本、分片和一致性协议。
    • 解析: 高效的分布式文件系统支持大规模数据存储和访问。

相关文章:

C语言笔试题(三)

本专栏通过整理各专业方向的面试资料并咨询业界相关人士&#xff0c;整合不同方向的面试资料&#xff0c;希望能为您的面试道路点亮一盏灯&#xff01; 1 简单题 如何声明一个二维数组&#xff1f; 答案: int arr[3][4];解析: 二维数组可以看作数组的数组。 union和struct…...

minio笔记之windows下安装使用

minio安装使用 去官网下载安装包启动访问管理平台创建桶创建用户、资源授权访问访问策略创建创建用户创建accessKey&#xff0c;用于应用程序开发 去官网下载安装包 直接安装即可 启动 设置密码 set MINIO_ROOT_USERadmin set MINIO_ROOT_PASSWORD12345678 cd到安装目录 mi…...

代码随想录算法训练营day31 | 56. 合并区间、738.单调递增的数字

碎碎念&#xff1a;加油 参考&#xff1a;代码随想录 56. 合并区间 题目链接 56. 合并区间 思想 这道题的核心还是判断重叠区间&#xff0c;本题和之前做过的452. 用最少数量的箭引爆气球、435. 无重叠区间的区别在于判断出重叠区间之后的操作&#xff0c;本题需要做的是合…...

利用 Python 制作图片轮播应用

在这篇博客中&#xff0c;我将向大家展示如何使用 xPython 创建一个图片轮播应用。这个应用能够从指定文件夹中加载图片&#xff0c;定时轮播&#xff0c;并提供按钮来保存当前图片到收藏夹或仅轮播收藏夹中的图片。我们还将实现退出按钮和全屏显示的功能。 C:\pythoncode\new\…...

报表系统之Cube.js

Cube.js 是一个开源的分析框架&#xff0c;专为构建数据应用和分析工具而设计。它的主要目的是简化和加速构建复杂的分析和数据可视化应用。以下是对 Cube.js 的详细介绍&#xff1a; 核心功能和特点 1. 多数据源支持 Cube.js 支持从多个数据源中提取数据&#xff0c;包括 SQ…...

代码随想录算法训练营第45天

115.不同的子序列 但相对于刚讲过 392.判断子序列&#xff0c;本题 就有难度了 &#xff0c;感受一下本题和 392.判断子序列 的区别。 代码随想录 class Solution {public int numDistinct(String s, String t) {int lenS s.length();int lenT t.length();int[][] dp new …...

solidity合约创建

合约可以通过使用new关键字来创建其他合约的实例。 这个过程会执行被创建合约的构造函数&#xff08;如果存在的话&#xff09;&#xff0c;并返回一个指向新创建合约的地址的引用。 这种方式允许智能合约动态地在区块链上部署新合约&#xff0c;并与它们交互。 通过 new 创…...

队列---循环队列实现

循环队列详解 概述 循环队列是一种基于数组实现的队列数据结构&#xff0c;其中队列的队首和队尾是通过模运算连接起来形成一个逻辑上的环形结构。这样可以有效地利用数组的空间&#xff0c;避免出现“假溢出”的情况。 结构体定义 循环队列的结构体定义如下&#xff1a; …...

【视频讲解】后端增删改查接口有什么用?

B站视频地址 B站视频地址 前言 “后端增删改查接口有什么用”&#xff0c;其实这句话可以拆解为下面3个问题。 接口是什么意思&#xff1f;后端接口是什么意思&#xff1f;后端接口中的增删改查接口有什么用&#xff1f; 1、接口 概念&#xff1a;接口的概念在不同的领域中…...

双指针hard题

[LeetCode]4. Median of Two Sorted Arrays 中文 - YouTube 依赖merge sort和priorityqueue的废物 正式变身山景城一姐小迷妹✪ω✪ 寻找正序数组中位数 class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int len1 nums1.length;int len2 …...

前端实现【 批量任务调度管理器 】demo优化

一、前提介绍 我在前文实现过一个【批量任务调度管理器】的 demo&#xff0c;能实现简单的任务批量并发分组&#xff0c;过滤等操作。但是还有很多优化空间&#xff0c;所以查找一些优化的库&#xff0c; 主要想优化两个方面&#xff0c; 上篇提到的&#xff1a; 针对 3&…...

【数据结构】包装类和泛型

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐在更专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ &#x1f451;目录 包装类&#x1f319; ⭐基本类型对应的包…...

浅学爬虫-数据存储

在数据爬取完成后&#xff0c;我们需要将数据存储起来&#xff0c;以便于后续的分析和处理。常见的数据存储方式包括存储到CSV文件和存储到数据库。下面我们详细介绍如何实现这些存储方式。 存储到CSV CSV&#xff08;Comma-Separated Values&#xff09;文件是一种常用的文本…...

十六、maven git-快速上手(智慧云教育平台)

&#x1f33b;&#x1f33b; 目录 一、概述及项目管理工具介绍1.1 项目介绍1.2 maven 介绍及其配置1.2.1 maven 介绍1.2.2 maven 下载与配置 1.3 pom 中常见标签的使用1.4 后端项目环境的搭建1.5 Git 简介1.6 Git 的基本使用1.6.1 码云的注册与仓库创建1.6.2 上传代码到码云仓库…...

chrome/edge浏览器插件开发入门与加载使用

同学们可以私信我加入学习群&#xff01; 正文开始 前言一、插件与普通前端项目二、开发插件——manifest.json三、插件使用edge浏览器中使用/加载插件chrome浏览器中使用/加载插件 总结 前言 chrome插件的出现&#xff0c;初衷可能是为了方便用户更好地控制浏览器&#xff0c…...

【完美解决】 TypeError: ‘str’ object does not support item assignment

【完美解决】 TypeError: ‘str’ object does not support item assignment 在Python编程中&#xff0c;遇到TypeError: str object does not support item assignment这样的错误通常意味着你试图修改字符串中的某个字符&#xff0c;但字符串是不可变类型&#xff0c;不支持这…...

Android SurfaceFlinger——渲染开始帧(四十三)

通过前面的文章我们介绍了 SurfaceFlinger 图层合成的整体流程,已经对应步骤的前五步,这里我们开始介绍帧渲染流程的第一步——开始帧。 1.更新输出设备的色彩配置文件2.更新与合成相关的状态3.计划合成帧图层4.写入合成状态5.设置颜色矩阵6.开始帧7.准备帧数据以进行显示(异…...

fastadmin搜索栏实现某字段动态下拉搜索

记录&#xff1a;fastadmin搜索栏实现某字段动态下拉搜索 方式一&#xff1a;使用selectpicker组件&#xff0c;可多选 { field: travel_agency, title:__(Travel_agency),addClass:"selectpicker", operate:"IN",data:"multiple", searchList:…...

.NET未来路在何方?

简述 在软件开发的漫长旅程中&#xff0c;将代码打包成可执行的EXE文件是一项必不可少的技能。它不仅能够保护源代码&#xff0c;还能为用户提供便捷的安装体验。但手动打包过程繁琐且容易出错&#xff0c;自动化打包成为了开发者的福音。 在软件开发的浩瀚星空中&#xff0c;.…...

Vue开发环境搭建

文章目录 引言I 安装NVM1.1 Windows系统安装NVM,实现Node.js多版本管理1.2 配置下载镜像1.3 NVM常用操作命令II VUE项目的基础配置2.1 制定不同的环境配置2.2 正式环境隐藏日志2.3 vscode常用插件引言 开发工具: node.js 、npm 开发编辑器:vscode 开发框架:VUE I 安装NVM…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...