C语言笔试题(指针、数组、整数在内存中的存储、结构体......)

文章目录

  • 1.选择题
  • 2.代码题
    • 2.1 模拟实现strncat
    • 2.2 模拟实现strncpy
    • 2.3 编写判断大小端程序
    • 2.4 模拟实现atoi
    • 2.5 BC38 变种水仙花数
    • 2.6 BC98 序列中删除指定数字

今天我们一起来看一些题目

1.选择题

在这里插入图片描述

解析如下:
在这里插入图片描述
正确选项:B
A.参数错误;D.返回值类型错误。


在这里插入图片描述
解析如下:
在这里插入图片描述
正确选项:A
B.返回值为int,不是函数指针;
C.返回的函数指针没有设置参数;
D.返回的函数指针没有返回值。


在这里插入图片描述

解析如下:
正确选项:C
A,第一个括号定义一个数组,成员是int*,因此后面括号里的int*就很奇怪,四不像;
BD.如果是数组,p只能在[ ]右边;
C.如下图所示。

在这里插入图片描述


在这里插入图片描述
解析如下:
根据回调函数的定义,可以判别D项错误,正确的描述为回调函数是调用函数指针指向的函数。
回调函数是一种在编程中常见的概念,它是指将一个函数作为参数传递给另一个函数,并在特定的条件或事件发生时被调用执行的函数。
具体来说,回调函数是作为参数传递给其他函数的函数指针或函数对象。当满足特定条件或事件发生时,调用该函数指针或函数对象,以执行预定义的操作或逻辑。


在这里插入图片描述
正确选项:C
C项,字符串中没有\0,strlen会继续往后读取直到遇见\0,可能计算出随机值。


在这里插入图片描述
正确选项:C
二维数组传参可以省略行,但不能省略列,A项错误;
数组名传参,数组名是数组首元素的地址,如下图,二维数组每一个元素可以看作一维数组,arr[0]地址的类型是int(*arr)[5],C项正确。
在这里插入图片描述


在这里插入图片描述
正确选项:B.D
数组传参,第一种可以传数组,D选项正确。
第二种是数组首元素的地址,数组首元素类型是char*,一级指针char *的地址是二级指针char **,因此B项正确。
也可以是void test(char * arr[ ]);


在这里插入图片描述

正确选项:B
如下图所示,ptr被强转为int*,-1后解引用访问一个字节,即1;a+1解引用得到4.

在这里插入图片描述


在这里插入图片描述
正确选项:A
如下图.
在这里插入图片描述


在这里插入图片描述
正确选项:C
如下图所示.
在这里插入图片描述


在这里插入图片描述
正确选项:B
解析如下图所示.
在这里插入图片描述


在这里插入图片描述
正确选项:A
解析如下图所示.
在这里插入图片描述


在这里插入图片描述

正确选项:C
解析如下图所示.
在这里插入图片描述


在这里插入图片描述
正确选项:C
unsigned char取值范围-128~127,a+b=300,以%d打印,结果就是300,因为int是存得下300的;如下图所示,c存不下300,127+1变成-128,127+128+45=300,因此结果是44.
在这里插入图片描述


在这里插入图片描述
正确选项:C
a的成员为-1,-2,…,-127,128,…,1,0(如上题图)
strlen遇’\0’停止计算,-1,-2,…,-127,128,…,1共255个数。


在这里插入图片描述
正确选项:D
是变量名,不是类型名。


在这里插入图片描述
正确选项:C
结构体students的内存分布如下所示.
在这里插入图片描述


在这里插入图片描述
正确选项:D
sizeof是计算大小的.


在这里插入图片描述
正确选项:B
.的优先级高于*,因此,B项对p.a解引用,p.a是结构体成员,不能解引用。


在这里插入图片描述
正确选项:C
如下图所示,所有成员最大对齐数是4,大小是4的倍数,因此是12.
在这里插入图片描述


在这里插入图片描述
正确答案:C
如下图所示,A,B的大小分别是16,12.
在这里插入图片描述


  1. 下面代码的结果是:( )
#pragma pack(4)/*编译选项,表示4字节对齐 平台:VS2013。语言:C语言*/
//假设long 是4个字节
int main(int argc, char* argv[])
{struct tagTest1{short a;char d; long b;   long c;   };struct tagTest2{long b;   short c;char d;long a;   };struct tagTest3{short c;long b;char d;   long a;   };struct tagTest1 stT1;struct tagTest2 stT2;struct tagTest3 stT3;printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));return 0;
}
#pragma pack()

A.12 12 16
B.11 11 11
C.12 11 16
D.11 11 16

正确选项:A

如下图所示.
在这里插入图片描述


  1. 有如下宏定义和结构定义
#define MAX_SIZE A+B
struct _Record_Struct
{unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;
}*Env_Alarm_Record;
struct _Record_Struct *pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);

当A=2, B=3时,pointer分配( )个字节的空间。
A.20
B.15
C.11
D.9

正确选项:D
首先分析位段_Record_Struct的大小,如下图所示,共三个字节,3*2+3=9.
在这里插入图片描述

2.代码题

2.1 模拟实现strncat

char* my_strncat(char* dest, const char* src, int n)
{char* p = dest;while (*p)p++;int i = 0;for (; *src != '\0' && i < n; i++)p[i] = src[i];p[i] = '\0';return dest;
}

2.2 模拟实现strncpy

char* my_strncpy(char* dest, const char* src, int n)
{int i = 0;for (; *src != '\0' && i < n; i++)dest[i] = src[i];dest[i] = '\0';return dest;
}

2.3 编写判断大小端程序

写一个函数判断当前机器是大端还是小端,如果是小端返回1,如果是大端返回0.

int check_sys()
{int i = 1;return (*(char *)&i);
}

2.4 模拟实现atoi

自行了解库函数atoi的功能,学习使用,并模拟实现atoi函数。
文档链接:atoi - C++ Reference (cplusplus.com)

#include <stdio.h>
#include <ctype.h>
#include <assert.h>
int state = 0;
int my_atoi(const char* str)
{assert(str!=NULL);if (*str == '\0')return 0;int flag = 1;while (isspace(*str))str++;if (*str == '-'){flag = -1;str++;}else if (*str == '+')str++;else;long long ret = 0;while (*str!='\0'){if (isdigit(*str)){ret = flag * (*str - '0') + ret * 10;if (ret > INT_MAX)return INT_MAX;else if (ret < INT_MIN)return INT_MIN;else;}elsereturn (int)ret;str++;}//正常结束if (*str == '\0')state = 1;return (int)ret;
}
int main()
{printf("%d\n", my_atoi("123"));return 0;
}

2.5 BC38 变种水仙花数

BC38 变种水仙花数

#include <stdio.h>
int main() 
{for (int i = 10000; i <=99999; i++){int sum = 0;for(int j=10;j<=10000;j*=10)sum+=(i%j)*(i/j);if (sum == i)printf("%d ", i);}return 0;
}

2.6 BC98 序列中删除指定数字

BC98 序列中删除指定数字

#include <stdio.h>
int main() {int arr[50]={0};int n,del,j=0;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&arr[i]);scanf("%d",&del);for(int i=0;i<n;i++){if(arr[i]!=del){arr[j]=arr[i];j++;}}for(int i=0;i<j;i++)printf("%d ",arr[i]);return 0;
}

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

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

相关文章

Prettier+Vscode setting提高前端开发效率

文章目录 前言Prettier第一步&#xff1a;下载依赖&#xff08;团队合作&#xff09;或下载插件&#xff08;独立开发&#xff09;第二步&#xff1a;添加.prettierrc.json文件**以下是我使用的****配置规则** 第三步&#xff1a;添加.prettierignore文件**以下是我常用的****配…

LabVIEW多显示器环境下主显示器识别与管理

该程序使用 LabVIEW 图形化编程语言&#xff0c;涉及多显示器环境中主显示器的识别与信息提取。图像显示了两个不同的方法来获取主显示器的信息。 第一部分&#xff1a;方法一——基于显示器位置的主显示器识别 1. 当前监视器识别&#xff1a; 使用“FP.Monitor”属性节点获取…

plsql表格怎么显示中文 plsql如何导入表格数据

在Oracle数据库开发中&#xff0c;PL/SQL Developer是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了丰富的功能来帮助开发人员高效地进行数据库开发和管理。在使用PL/SQL Developer时&#xff0c;许多用户会遇到表格显示中文的问题&#xff0c;以…

ansible:

ansible&#xff1a; 远程自动化运维 ansible是基于python开发的配置管理和应用部署工具。 也是自动化运维的重要工具。 可以批量配置&#xff0c;部署&#xff0c;管理上千台主机。 只需要在一台主机配置ansible就可以完成其他主机的操作。 操纵模式&#xff1a; 1、模…

EmguCV学习笔记 VB.Net 6.4 霍夫变换

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示&#xff0c;有2个矢量图斑&#xff0c;一个是耕地地块&#xff0c;另一个是范围图斑&#xff0c;如果我们需要把此工程的所有数据以及引用地图一起分享给别人&#xff0c;就可以使用【打包工程】这个工具。 如上所示&#xff0c;在【地理处理】下输入【打包工程】&am…

【C语言】常见文件操作

文件的常见操作 #include<stdio.h>// 由于devc代码编码为ANCI&#xff0c;故读取的文件中若有中文&#xff0c;请设置文件编码为ANCI&#xff0c;否则会乱码 // 读文件 void test1() {char ch;FILE *fp; // 创建文件指针fp fopen("./file.txt", "r"…

数据结构系列-归并排序

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 归并排序 递归版本 首先&#xff0c;我们来看一下归并的示意图&#xff1a; 这是归并排序当中分解的过程。 然后便是两个两个进行排序&#xff0c;组合的过程。 归并完美的诠释…

系统编程-管道

管道 目录 管道 1、管道的特点 2、无名管道的使用步骤 &#xff08;1&#xff09;在进程中使用 pipe 函数来获取管道的文件描述符 &#xff08;2&#xff09;使用 fork 函数来创建子进程 &#xff08;3&#xff09;通过获取到的文件描述符来进行数据的传输 &#xff08…

[论文阅读] mobile aloha实验部分

DP:[1] CHI C, FENG S, DU Y, et al. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion[J]. 2023. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion精读笔记&#xff08;一&#xff09;-CSDN博客 哥伦比亚大学突破性的方法- Diffusio…

【SpringBoot】11 多数据源(MyBatis:dynamic-datasource)

介绍 多数据源&#xff1a;指的是一个单一应用程序中涉及了两个及以上的数据库&#xff0c;这种配置允许应用程序根据业务需求灵活地管理和操作不同的数据库。 需求 一个应用服务中&#xff0c;连接多个数据库&#xff0c;有本地的也有远程的&#xff0c;有MysQL、Oracle、P…

PDPS软件 那智机器人 (丰田版)离线程序导出处理

在PDPS仿真软件中导出的那智机器人离线程序&#xff0c;一般是无法直接给TFD控制装置-那智机器人&#xff08;丰田式样版&#xff09;导入及识别使用。因此要对导出的程序进行转换编译处理&#xff0c;才能给TFD那智机器人&#xff08;丰田式样版&#xff09;导入离线程序。以下…

react antd TreeSelect实现自定义标签

<ProFormTreeSelectlabel"接收对象"name"receiverObjects"colProps{{ span: 16 }}labelCol{{span: 6,}}wrapperCol{{span: 18,}}rules{[{ required: true }]}fieldProps{{showSearch: true,multiple: true,// autoClearSearchValue: true,filterTreeNod…

NASA:北极辐射-冰桥海冰实验(ARISE)2014年原地云数据产品

ARISE_Cloud_AircraftInSitu_C130_Data 简介 ARISE_Cloud_AircraftInSitu_C130_Data_1是北极辐射-冰桥海冰实验&#xff08;ARISE&#xff09;2014年原地云数据产品。该产品是位于华盛顿的美国宇航局科学任务局地球科学部辐射科学、冰冻层科学和机载科学计划共同努力的成果。…

基于单片机的一氧化碳报警系统的设计与实现

摘 要&#xff1a; 一氧化碳对人体有害&#xff0c;尤其超标时会影响人们的健康 。 因此文章设计了一款基于单片机的一氧化氮报警器设计。 论文通过传感器检测一氧化碳浓度&#xff0c;经过 AD 转换&#xff0c;再把检测信号传递给单片机&#xff0c;经过分析处理&#xff0c…

论文辅助笔记:Large Language Models are Zero-Shot Next LocationPredictors

论文理论部分&#xff1a;论文笔记&#xff1a;lunLarge Language Models are Zero-Shot Next LocationPredictors-CSDN博客 2 Data 2.1 Dataset类 2.2 下载文件 2.3 get_dataset 2.4 get_trajectories trajectory_split暂时略去 # save the test dictionary and the true l…

redis核心数据结构源码分析

dictEntry和redisObject 在 Redis 的实现中&#xff0c;当一个键值对被创建并存储时&#xff0c;键通常是一个字符串&#xff0c;而值则是一个 redisObject。因此&#xff0c;在 dictEntry 结构中&#xff0c;key 成员指向的是一个字符串&#xff0c;而 v.val 成员则指向一个 …

45.5【C语言】typedef

目录&#xff1a; *全称 *格式 一般指针 数组指针 函数指针 *细节 *全称 type define 类型&#xff08;重新&#xff09;定义&#xff08;或命名&#xff09;&#xff0c;可简化输入 *格式 1.非指针类型: typedef 类型 简化名称 typedef signed long long k; signed long …

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息&#xff0c;没有行业大类信息&#xff0c;导致后续解析三大报表和量化选股的时候无法进行&#xff1a; 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股&#xff1a; 因此需要将深交所股票的所属…

WIFI驱动开发

Linux 4.9 内核驱动移植 Linux 4.9 BSP 内核驱动 下载驱动后获得驱动的 tar.gz 压缩包 解压后找到如下驱动与文件夹 进入内核&#xff0c;找到 linux-4.9/drivers/net/wireless 文件夹中&#xff0c;新建文件夹aic8800 并且把上面的驱动与文件夹放入刚刚创建好的 aic8800 中。…