备战秋招 | 笔试强训5

news2024/12/24 8:47:49

目录

一、选择题

二、编程题

三、选择题题解

四、编程题题解


一、选择题

1、在上下文和头文件均正常情况下,以下程序的输出结果是()

int x = 1;
do
{
    printf("%2d\n",x++);
}while(x--);

A. 1

B. 无任何输出

C. 2

D. 陷入死循环

2、定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少()

A. 10,4

B. 4,4

C. 9,9

D. 9,4

3、下列程序的打印结果是()

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A. xyabcAB

B. abcABz

C. ABabcz

D. xycdBCD

4、下面程序的输出结果是()

#include<iosteam.h>
void main()
{
    int n[][3] = {10,20,30,40,50,60};
    int (*p)[3];
    p=n;
    cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
    return 0;
}

A. 10,30,50

B. 10,20,30

C. 20,40,60

D. 10,30,60

5、以下说法中正确的是( )。

A. C++程序中的main()函数必须放在程序的开始部分

B. C++程序的入口函数是main函数

C. 在C++程序中,要调用的函数必须在main()函数中

6、有以下程序运行结果为()

#include <iostream>
using namespace std;
char fun(char x, char y) 
{
    if (x < y)
    return x;
    return y;
}
int main() 
{
    int a = '1', b = '1', c = '2';
    cout << fun(fun(a, b), fun(b, c));
    return 0;
}

A. 运行出错

B. 2

C. 3

D. 1

7、对于int* pa[5];的描述,以下哪个选项是正确的()

A. pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针;

B. pa是一个指向数组的指针,所指向的数组是5个int类型的元素;

C. pa[5]表示某个数的第5个元素的值;

D. pa是一个指向某个数组中第5个元素的指针,该元素是int类型的变量

8、下面两个结构体,在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是

struct One
{
    double d;
    char c;
    int i;
}
struct Two
{
    char c;
    double d;
    int i;
}

A. 16 24,16 24

B. 16 20,16 20

C. 16 16,16 24

D. 16 16,24 24

9、下面哪个指针表达式可以用来引用数组元素a[i][j][k][l]()

A. (((a+i)+j)+k)+l)

B. *(*(*(*(a+i)+j)+k)+l)

C. (((a+i)+j)+k+l)

D. ((a+i)+j+k+l)

10、由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义()

A. 预处理

B. 编译

C. 链接

D. 执行

二、编程题

1、统计回文  题目链接

 2、连续最大和  题目链接 

三、选择题题解

1、在上下文和头文件均正常情况下,以下程序的输出结果是()

int x = 1;
do
{
    printf("%2d\n",x++);
}while(x--);

A. 1

B. 无任何输出

C. 2

D. 陷入死循环

正确答案:D

 题解:

        本题考察循环语句的掌握,do while循环是先执行函数体,在进行判断,x初始值为为1,printf语句对x进行了后置++,因此

2、定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少()

A. 10,4

B. 4,4

C. 9,9

D. 9,4

正确答案:A

 题解:

        对于上述,首先我们用弄清sizeof(数组名)与strlen(数组名)分别代表什么意义,首先sizeof(数组名)是计算整个数组占了多少字节,我们可以看到题目是拿一个字符串给数组赋值,也就是将字符串中的每个字符放进数组中,准确来说是拷贝一份,包括字符串的结尾\0,因此为10个字节,而strlen的计算规则是遇到\0位置,计算\0前的字符个数,因此为4,答案选A;

3、下列程序的打印结果是()

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A. xyabcAB

B. abcABz

C. ABabcz

D. xycdBCD

正确答案:D

题解:

         我们需要清楚strcat与strcpy的功能,首先strcat是追加功能,返回值为第一个参数,即即使地址,我们追加后返回打印的结果应该是cdBCD,我们在将这个拷贝到str+2的位置,打印结果额就是xycdBCD;

4、下面程序的输出结果是()

#include<iosteam.h>
void main()
{
    int n[][3] = {10,20,30,40,50,60};
    int (*p)[3];
    p=n;
    cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
    return 0;
}

A. 10,30,50

B. 10,20,30

C. 20,40,60

D. 10,30,60

正确答案:B

题解:

         关于数组的访问,我们通常写成arr[i],其实也可以写成*(arr+i),对于二维数组,比如arr[i][j],我们同样也可以写成*(*(arr + i) + j);看题目,p[0][0]即数组第一行第一列,故为10,*(p[0] + 1)为数组第一行,第二列,故为20;(*p)[2]可以写成*(p+ 0)[2],为第一行第三列;故为30;

5、以下说法中正确的是( )。

A. C++程序中的main()函数必须放在程序的开始部分

B. C++程序的入口函数是main函数

C. 在C++程序中,要调用的函数必须在main()函数中

正确答案:B

题解:

         main函数不一定要放在程序的开始部分,可以放在程序的任意位置;main函数是C++程序的入口;C++程序中,函数的的调用不一定要在main函数中,也可以在main函数外;

6、有以下程序运行结果为()

#include <iostream>
using namespace std;
char fun(char x, char y) 
{
    if (x < y)
    return x;
    return y;
}
int main() 
{
    int a = '1', b = '1', c = '2';
    cout << fun(fun(a, b), fun(b, c));
    return 0;
}

A. 运行出错

B. 2

C. 3

D. 1

正确答案:D

题解:

         首先,我们需要将fun函数中的两个参数计算出来,其两个参数为fun函数的返回值,计算结果分别为1,2,然后带入得,结果为1;

7、对于int* pa[5];的描述,以下哪个选项是正确的()

A. pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针;

B. pa是一个指向数组的指针,所指向的数组是5个int类型的元素;

C. pa[5]表示某个数的第5个元素的值;

D. pa是一个指向某个数组中第5个元素的指针,该元素是int类型的变量

正确答案:A

题解:

         首先标识符pa首先跟[]结合,因此pa肯定是一个数组,该数组有五个元素,每个元素类型都为int*,故选A;

8、下面两个结构体,在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是

struct One
{
    double d;
    char c;
    int i;
}
struct Two
{
    char c;
    double d;
    int i;
}

A. 16 24,16 24

B. 16 20,16 20

C. 16 16,16 24

D. 16 16,24 24

正确答案:C

题解:

         本题主要考察结构体对齐规则,首先回忆一下结构对齐规则;如下所示;

题目中的 #pragma pack(4)和#pragma pack(8) 分别设置b中的默认对齐数,其中一个设置为4时,d占用0~7字节,c对齐到自己的大小1字节与默认对齐数4的最小值的整数倍处,即占用编号8的字节位置,i对齐到自己的大小4字节与默认对齐数4的最小值的整数倍处,即编号12~15;结构体整体的大小为最大对齐数的整数倍,#pragma pack(8) 则是将默认对齐数设置为8,同理按照规则最后计算出C选项;

9、下面哪个指针表达式可以用来引用数组元素a[i][j][k][l]()

A. (((a+i)+j)+k)+l)

B. *(*(*(*(a+i)+j)+k)+l)

C. (((a+i)+j)+k+l)

D. ((a+i)+j+k+l)

正确答案:B

题解:

         选择题第四题已有讲解;此处略

10、由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义()

A. 预处理

B. 编译

C. 链接

D. 执行

正确答案:C

题解:

        首先我们要明确每个阶段编译器做的事情,预编译阶段,编译器主要进行宏替换,去注释,条件编译,头文件的展开。编译阶段,编译器主要会将我们的代码转换成汇编代码,此时我们的函数会生成地址,并进行符号汇总等工作;接着是汇编阶段,主要将我们的汇编代码转换成二进制机器代码;最后是链接,将我们所有的目标文件结合起来,进行符号表汇总;在汇总符号时,发现函数仍然没有地址;此时便会报错,没有发现函数定义;

四、编程题题解

1、统计回文

        本题主要的思路是将字符串2尝试分别插入到字符串1的每个位置,然后判断是否为回文字符串即可;

#include <iostream>
#include <string>
using namespace std;
// 检查是否回文
bool isPalindrome(const string& str)
{
    int begin = 0;
    int end = str.size() - 1;
    while(begin < end)
    {
        if(str[begin] != str[end])
            return false;
        begin++;
        end--;
    }
    return true;
}

int main() 
{
    string str1, str2;
    cin >> str1 >> str2;
    // 统计有几种插入方法
    int count = 0;
    // 注意这里是小于等于,因为可以插入到最后的位置
    for(int i = 0; i <= str1.size(); i++)
    {
        // 拷贝str1
        string tmp = str1;
        tmp.insert(i, str2);
        if(isPalindrome(tmp))
        {
            count++;
        }
    }
    cout << count << endl;
    return 0;
}

2、连续最大和 

题解一:暴力法。循环遍历数组,找出最大连续区间和,伪代码下面已写出;不推荐;

题解二:动态规划法;我们想求出整个区间最大连续区间和,我们可以将问题转换为求以下标 i 结尾的最大连续区间和,即dp[ i ];而以 i+1 结尾的最大连续区间和为

dp[i + 1] = max(dp[ i ] + arr[i + 1], arr[i + 1]),这个公式便是我们推出的动态转移方程;

        我们将dp数组求出,然后遍历dp数组,即可求出最大的连续区间和;这里我们还可以进行优化,无需创建dp数组,直接保存当前最大的dp数组值即可;代码如下

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() 
{
    int n = 0;
    cin >> n;
    vector v(n, 0);
    // 将数组存入vector中
    for(int i = 0; i < n; i++)
    {
        cin >> v[i];
    }
    // 记录dp数组最大值
    int max_sum = v[0];
    // 记录当前下标的最大连续和
    int sum = v[0];
    for(int i = 1; i < v.size(); i++)
    {
        // 求当前下标下dp数组值
        sum = max(sum + v[i], v[i]);
        if(sum > max_sum)
        {
            // 更新dp最大值
            max_sum = sum;
        }
    }
    cout <<max_sum << endl;
    return 0;
}

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

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

相关文章

三种智能算法优化PID参数软件,MATLABAPP开发

今天的主题是&#xff1a;三种智能算法优化常见传递函数的PID参数&#xff0c;采用MATLAB APP Designer 开发。提供代码源程序&#xff0c;可以自行修改源代码&#xff08;不是封装软件&#xff09; 这个软件基本涵盖了所有的传递函数类型&#xff0c;传递函数的参数简单易改。…

【Java反射机制详解】—— 每天一点小知识

&#x1f4a7; J a v a 反射机制详解 \color{#FF1493}{Java反射机制详解} Java反射机制详解&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章…

pytest 参数化进阶

目录 前言&#xff1a; 语法 参数化误区 实践 简要回顾 前言&#xff1a; pytest是一个功能强大的Python测试框架&#xff0c;它提供了参数化功能&#xff0c;可以帮助简化测试用例的编写和管理。 语法 本文就赶紧聊一聊 pytest 的参数化是怎么玩的。 pytest.mark.par…

week27

这周是磨难的一周不知道NT装了多少次系统&#xff0c;删除了多少数据好消息是把BIOS和ubuntu安装地很熟练了&#xff0c;而且经过爱上了心仪的Ubuntu23.04&#xff0c;就是她了坏消息是一个学期做的笔记全都没了&#xff0c;以后不好回忆了&#xff0c;好消息是不用考试了&…

总结929

今日做了一篇阅读题&#xff0c;差点全军覆没&#xff0c;通过这篇阅读&#xff0c;主要说明了两大问题&#xff0c;一个是单词&#xff0c;背的还不够牢固&#xff0c;其二&#xff0c;语法功底还不够扎实。但说实话&#xff0c;在语法方面&#xff0c;还是下了一番功夫&#…

linux 内网批量快速传输大文件 nc

使用nc工具 传输内网宽带拉满先运行接收端 开始监听使用 ansible 拷贝脚本到其它接收端服务器批量运行接收端脚本查看nc是否运行运行发送端运行发送端脚本开始传输文件 传输内网宽带拉满 先运行接收端 开始监听 接收端脚本 re.sh #!/bin/bash #Revision: 1.0 #Author:…

动态规划(一) —— 从背包系列问题看DP

前言 动态规划可以算是算法初学者的噩梦哈哈&#xff0c;这段时间荔枝在持续学习Java后端的同时也没有忘记刷题嘿嘿嘿&#xff0c;总算把代码随想录上给出的有关动态规划的题目刷完了。接下来的几篇文章荔枝将会对于刷过的动态规划问题做出总结并给出相应的个人体会和理解。在本…

compose之沉浸式(侵入式)状态栏(隐藏状态栏)

沉浸式(侵入式)状态栏 效果图&#xff1a; 1、代码加入&#xff1a;WindowCompat.setDecorFitsSystemWindows(window, false) ComposeTestTheme {WindowCompat.setDecorFitsSystemWindows(window, false)Greeting("Android")} 2、沉浸式(侵入式)主题&#xff1a; …

消息推送(websocket)集群化解决方案

目录 需求分析解决方案实现步骤架构图配置websocket请求地址配置websocket连接前置和连接关闭监听配置websocket处理程序配置redis交换机配置redis订阅监听配置redis发布监听需求分析 及时信息传递:消息推送功能能够确保网站向用户发送及时的重要信息,包括新闻更新、促销活动…

消息队列——rabbitmq的不同工作模式

目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系&#xff0c;一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…

Redis进阶底层原理-主从复制

Redis的主从节点都会记录对方的信息&#xff0c;核心还包括ReplicationID 和 offset &#xff0c; ReplicationID &#xff1a; 主从节点实例的ID &#xff0c;redis内部就是通过这个id去识别主从节点。offset&#xff1a;数据同步偏移量&#xff0c;也就是从节点每次从主节点同…

3.6 Bootstrap 导航元素

文章目录 Bootstrap 导航元素表格导航或标签胶囊式的导航菜单基本的胶囊式导航菜单垂直的胶囊式导航菜单 两端对齐的导航禁用链接下拉菜单带有下拉菜单的标签带有下拉菜单的胶囊标签页与胶囊式标签页 Bootstrap 导航元素 本文将讲解 Bootstrap 提供的用于定义导航元素的一些选项…

使用thrift编写C++服务器、客户端

在上一节《Linux 下编译 thrift》中&#xff0c;我们成功编译出了thrift的库文件&#xff0c;本节我们来编写thrift的C服务器&#xff0c;客户端。 官网 https://thrift.apache.org/tutorial/cpp.html 有thrift的C例子。在我们之前下载下来的thrift 源码根目录的tutorial/cpp目…

MySQL高级管理

目录 一、指定主键的一种方式 1.1高级操作 1.2数据表高级操作,克隆表 1.2.1 克隆表名 1.2.2备份表内容 1.3复制表 1.4删除指令 方法一&#xff1a; 方法二&#xff1a; 删除速度 二、创建临时表 三、MySQL中6种常见的约束 3.1创建主表 3.2创建从表 3.3为主表test01添加…

[Docker异常篇]解决Linux[文件异常]导致开机Docker服务无法启动

文章目录 一&#xff1a;场景复现二&#xff1a;解决思路2.1&#xff1a; 对比其他节点docker配置2.2&#xff1a;试着修改为正常节点配置2.2&#xff1a;根据上面异常显示&#xff0c;不一定是配置不对&#xff0c;可能是文件系统有损坏 三&#xff1a;解决 -> 执行命令 mo…

【机器学习算法】奇异值分解(SVD)

文章目录 奇异值分解(SVD)1.理论部分1.1特征分解(ED)1.2 奇异值分解(SVD)求解U和V求解Σ 2.应用部分2.1图像压缩2.2图像数据集成分分析2.3 数据降维(PCA的一种解法) Reference 奇异值分解(SVD) 奇异值分解(Singular Value Decomposition) 是矩阵低秩分解的一种方法&#xff0c;…

太猛了!Web安全漏洞批量扫描框架

关注【Hack分享吧】公众号&#xff0c;回复关键字【230528】获取下载链接 工具介绍 一个应用于web安全领域的漏洞批量扫描框架&#xff0c;可被应用于但不限于如下场景&#xff1a; 0Day/1Day全网概念验证(在没有测试环境(各种商业、闭源软件)或懒得搭建测试环境的情况下&…

D. Binary String Sorting

Problem - 1809D - Codeforces 思路&#xff1a;最后得到的结果就是前面是一串0后面是一串1&#xff0c;那么我们可以枚举分界点&#xff0c;如果枚举到i&#xff0c;那么就将1~i变为0&#xff0c;将i1变为1,我们发现如果一个1在1~i中&#xff0c;如果他是第i-1个&#xff0c;那…

Redis进阶底层原理-Cluster集群底层

Redis实现高可用的方案有很多中&#xff0c;先了解下高可用和分区的概念&#xff1a; 高可用是指系统在面对硬件故障、网络故障、软件错误等意外问题时&#xff0c;仍能给客户端提供正常的服务&#xff0c;尽量的减少服务的阻塞、终端现象。在高可用的方案中一般会采用冗余备份…

《洛谷深浅》第五章---数组与数据批量存储

文章目录 前言一、小鱼比可爱二、小鱼的数字游戏三、冰雹猜想四、校门外的树五、旗鼓相当的对手六、旗鼓相当的对手总结 前言 本节主要学习一维数组 和 多维数组 后边的知识我觉得 可以试着了解并不要求你掌握这么难的题目 因为ACM更多都是思维题目 所以这里把重要的题目掌握就…