C语言经典面试题目(十四)

1、C语言中的异常处理机制有哪些?如何使用try-catch块进行异常处理?

在C语言中并没有内置的try-catch块来处理异常。异常处理通常是通过函数返回值或者全局变量来实现的。以下是一些常见的异常处理方式:

  1. 返回错误码:函数返回一个特定的错误码,表示函数执行过程中发生了异常。
  2. 设置全局变量:在函数执行过程中,将异常信息保存在全局变量中,调用者可以通过检查全局变量来判断是否发生了异常。
  3. 使用setjmp和longjmp函数:通过setjmp设置一个跳转点,当发生异常时使用longjmp跳转到该跳转点。

下面是一个简单的示例,演示了如何使用setjmp和longjmp实现简单的异常处理:

#include <stdio.h>
#include <setjmp.h>jmp_buf buf;void someFunction() {if (1) { // 模拟发生异常的情况printf("Exception occurred\n");longjmp(buf, 1); // 跳转到异常处理点}
}int main() {if (setjmp(buf) == 0) {someFunction();} else {printf("Exception handled\n");}return 0;
}

2、什么是C语言中的枚举类型的底层表示?

在C语言中,枚举类型的底层表示通常是整数类型(int)。编译器会为枚举类型的每个枚举常量分配一个整数值,默认情况下第一个枚举常量的值为0,后续枚举常量的值依次递增。

3、如何在C语言中实现排序算法(如插入排序、选择排序等)的通用函数?

可以通过函数指针或者宏定义来实现通用的排序算法函数。以下是一个使用函数指针实现的通用排序函数示例:

#include <stdio.h>typedef int (*compareFunction)(int, int);void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}void bubbleSort(int arr[], int n, compareFunction compare) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (compare(arr[j], arr[j + 1]) > 0) {swap(&arr[j], &arr[j + 1]);}}}
}int ascending(int a, int b) {return a - b;
}int descending(int a, int b) {return b - a;
}int main() {int arr[] = {3, 1, 4, 1, 5, 9, 2, 6};int n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n, ascending);printf("Ascending order: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");bubbleSort(arr, n, descending);printf("Descending order: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

4、C语言中的字符串比较函数有哪些?请列举几个常用的字符串比较函数。

C语言中常用的字符串比较函数包括:

  1. strcmp:比较两个字符串的大小,返回值为整数,若str1<str2返回负数,若str1==str2返回0,若str1>str2返回正数。
  2. strncmp:比较两个字符串的前n个字符的大小。
  3. strcasecmp:忽略大小写比较两个字符串的大小。
  4. strncasecmp:忽略大小写比较两个字符串的前n个字符的大小。

5、C语言中的位操作函数(如取反、移位等)有哪些?请列举几个常用的位操作函数。

C语言中常用的位操作函数包括:

  1. ~:按位取反。
  2. <<:左移操作。
  3. >>:右移操作。
  4. &:按位与操作。
  5. |:按位或操作。
  6. ^:按位异或操作。

以下是一个简单的示例:

#include <stdio.h>int main() {unsigned char x = 0b10101010;unsigned char y = 0b11001100;printf("~x = %d\n", ~x); // 按位取反printf("x << 2 = %d\n", x << 2); // 左移2位printf("y >> 1 = %d\n", y >> 1); // 右移1位printf("x & y = %d\n", x & y); // 按位与操作printf("x | y = %d\n", x | y); // 按位或操作printf("x ^ y = %d\n", x ^ y); // 按位异或操作return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老卫带你学---vscode使用remote-ssh时出现Could not establish connection to XXX: XHR failed

vscode使用remote-ssh时出现Could not establish connection to XXX: XHR failed 这种情况大部分都是本地升级/降级vscode版本&#xff0c;并且各种卸载安装&#xff0c;导致远端服务器的配置出了问题 直接ssh登录到远端服务器上 然后直接删除之前的remote ssh的相关commit …

BUUCTF-----[CISCN 2019 初赛]Love Math

<?php error_reporting(0); //听说你很喜欢数学&#xff0c;不知道你是否爱它胜过爱flag if(!isset($_GET[c])){show_source(__FILE__); }else{//例子 c20-1$content $_GET[c];if (strlen($content) > 80) {die("太长了不会算");}$blacklist [ , \t, \r, \n…

由于找不到kvpvbsext64.dll,无法继续执行代码。解决办法,

kvpvbsext64.dll 是一个动态链接库文件&#xff0c;通常作为某个软件的一部分存在。具体来说&#xff0c;它可能为某个程序的特定功能提供支持&#xff0c;在软件运行时被调用和使用。因此&#xff0c;当出现与该文件相关的错误时&#xff0c;可能会影响到相应软件的正常运行。…

c++复数计算器

定制魏:QTWZPW,获取更多源码等 目录 题目 目的 要求 涉及的知识 类声明 构造函数 核心算法实现代码 总体设计 运行效果 总结 完整代码 题目 为复数定义一个类。复数的形式 a+bi 其中,a和b是double类型的数字,而i表示虚数单位√-1。将复数表示成double类型的两…

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中&#xff0c;服务包含filebeat、logstash、elasticsearch、kibana&#xff0c;其中elasticsearch使用集群的方式部署&#xff0c;所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…

【ZooKeeper】1、基本介绍

本文基于 Apache ZooKeeper Release 3.7.0 版本书写 作于 2022年3月6日 14:22:11 转载请声明 1、Zookeeper是什么&#xff1f; 由ZooKeeper的官网介绍可知&#xff1a; ZooKeeper 是Apache原子基金会下一个开源的、用于提供可靠的分布式协同的服务器。 ZooKeeper 可以用来 配置…

此站点的连接不安全,怎么解决?

有部分的网站用户在打开的时候会被提示“此站点的连接不安全”这种现象为什么会出现&#xff0c;大概率是因为没有安装SSL证书或者SSL证书出现了错误&#xff0c;小编在这里面将展开讲解为大家分析其中的原因以及解决方法。 一&#xff1a;遇到该情况的时候该怎么办&#xff1…

使用 C 或 C++ 扩展 Python

如果你会用 C&#xff0c;添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事&#xff0c;可以通过 extension modules 来实现&#xff1a;实现新的内置对象类型&#xff1b;调用 C 的库函数和系统调用。 为了支持扩展&#xff0c;Python API&#xff08;应…

7-LINUX--库文件的生成与使用

一.什么是库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在&#xff1a;/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种&#xff0c;一种是静态库&#x…

计算机网络——物理层(物理传输介质和物理层的设备)

计算机网络——物理层&#xff08;物理传输介质和物理层的设备 物理传输介质导向性传输介质双绞线同轴电缆光纤 非导向性传输介质无线电波多径效应 微波地面微波通信ISM 频段 卫星通信 物理层设备中继器集线器中继器和集线器的区别 我们今天进入物理层的物理传输介质和物理层的…

AI将如何影响我们的生活?

1. AI 会如何影响你的生活 通用聊天场景&#xff1a;也即 ChatGPT 本身&#xff0c;或者用 gpt-3.5 的 api 实现的各类网站或小程序。他们没有明确的问题场景&#xff0c;但反而可以解决非常多的问题&#xff0c;比如搜索一些常见问题的答案、编个笑话等&#xff0c;可以当个搜…

PHP7 用 Exception catch不到error,Throwable 才可以

Throwable work on PHP 7.x. Exception work on PHP 5.x. 参考链接&#xff1a; https://www.php.net/manual/en/language.errors.php7.php ​<?phptry {// Code that may throw an Exception or Error.} catch (Throwable $t) {// Executed only in PHP 7, will not m…

linux常用命令指南

什么是Linux命令&#xff1f; Linux命令是在Linux操作系统中用于执行特定任务的命令行工具。它们被用于管理文件和目录、执行程序、配置系统设置等。Linux命令通常由一个命令名称和一些选项或参数组成&#xff0c;并且可以通过命令行界面&#xff08;CLI&#xff09;或脚本文件…

【Pandas】(1)安装与Series

Pandas是一个开源的Python数据分析库,提供了高性能、易于使用的数据结构和数据分析工具。它是基于NumPy库构建的,使得数据预处理、清洗、分析变得更加快速和简单。Pandas主要有两种类型的数据结构:Series(一维数组)和DataFrame(二维表格)。 注意:和Numpy相比,Pands的计…

图片上传语法

图片上传 步骤 <!-- 文件选择元素 --><input type"file" class"upload"><br><!-- 上传的图片出于安全不能使用url使用&#xff0c;智能做背景使用 --><img src"" alt""><script src"https://c…

图论02-并查集的实现(Java)

2.并查集理论基础 并查集的作用 将两个元素添加到一个集合中。 判断两个元素在不在同一个集合并查集的实现 1.DSU 类定义&#xff1a;DSU 类中包含一个整型数组 s 用来存储元素的父节点信息。2.DSU 构造函数&#xff1a; 构造函数 DSU(int size) 接受一个参数 size&#xff0…

【前端】国际化实现过程

过程 安装依赖&#xff0c;配置&#xff0c;当点击中英文切换按钮时候&#xff0c;全局变换&#xff0c;element-plus组件也需要中英文切换。 确定初始化的语言在setting中&#xff0c;页面加载会读取里面的语言走一次语言的初始化配置&#xff0c;后面就是按钮切换 代码 仅…

欧拉角与横滚-俯仰-偏航角(RPY)

围绕欧拉角和横滚-俯仰-偏航角这两个术语存在很多混淆。这源于教科书和论文中截然不同的、看似权威的定义。 欧拉旋转定理&#xff08;1775 年&#xff09;指出&#xff0c;一个 3D 坐标系相对于另一个坐标系的方向可以用“围绕三个轴的连续旋转来描述&#xff0c;因此没有两个…

泰迪智能科技携手华北电力大学理学院共建“校外实践基地”

3月15日&#xff0c;华北电力大学数理学院教学副主任史会峰、科研副主任王涛、概率教研室副主任解西阳莅临泰迪智能科技产教融合实训基地开展“华北电力大学校外实践教学基地”签约揭牌仪式。泰迪智能科技董事长张良均、支持中心负责人王宏刚、外联部吴桂锋进行接待。 活动伊始…

395. 至少有 K 个重复字符的最长子串

Problem: 395. 至少有 K 个重复字符的最长子串 文章目录 思路解题方法复杂度Code 思路 这是一道关于字符串处理的问题&#xff0c;我们需要找到至少有 K 个重复字符的最长子串。我们可以使用滑动窗口的方法来解决这个问题。我们可以设置一个窗口&#xff0c;然后不断地移动这个…