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

【笔试强训】Day_01

目录

一、选择题

1、

2、

3、

4、

5、

6、

7、

8、

9、

10、

二、编程题

1、组队竞赛

 2、删除公共字符


一、选择题

1、

以下for循环的执行次数是()

for(int x = 0, y = 0; (y = 123) && (x < 4); x++);

A 、是无限循环
B 、循环次数不定
C、 4次
D 、3次
答案:C

解释:

先复习一下 for循环的用法:

for(初始化部分;条件判断部分;调整部分) 

{ // 循环体}

执行次数为 x = 0、1、2、3, x = 4 跳出循环,所以选择C

2、

以下程序的运行结果是()

#include <stdio.h>
int main(void) {printf("%s , %5.3s\n", "computer", "computer");return 0;
}

A 、computer , puter
B、 computer ,   com
C、 computer ,   computer
D 、computer , compu.ter

答案:B

解释:

每个字符串结尾都有一个默认的 ‘/0’,%s 打印遇到 ‘/0’ 就停止打印,所以第一 个 “computer” 会完整打印

先来解释一下通用的:%m.ns

m:输出字符串的宽度

n:左起截止目标字符串的 n个字符,并且是右对齐,左边不够补空格

  • 当 字符串长度 > n ,此时 m的作用失效了,直接截取 n个字符,并且是右对齐,左边不够补空格,格式输出宽度依旧为 m
  • 当 字符串长度 < n ,作用和 %s 一样,遇到 ‘\0’ 就停止,会完整打印整个字符串

        题目中的 %5.3s ,字符串长度8 > 3,5 的作用失效了,直接截取前 3个字符 ‘com’,格式输出宽度依旧为 5,右对齐,左边不够补空格,所以输出结果为:'  com'

所以选择B

3、

下列main()函数执行后的结果为()

int func(){
int i, j, k = 0;
for(i = 0, j = -1;j = 0;i++, j++){
k++;
}
return k;
}int main(){
cout << (func());
return 0;
}

A 、-1
B、 0
C 、1
D、 2

答案:B

解释:
进入循环的条件是 j = 0,而 j 开始的值就为 -1,不满足循环条件,所以 k 依旧为 0,所以选择B

4、

下面程序输出是什么?

#include <stdio.h>
int main()
{
int a=1,b=2,c=3,d=0;
if(a == 1 && b++==2)if(b!=2||c--!=3)printf("%d,%d,%d\n" ,a,b,c);
elseprintf("%d,%d,%d\n" ,a,b,c);
elseprintf("%d,%d,%d\n" ,a,b,c);
return 0;
}

A 、1,2,3
B 、1,3,2
C、 3,2,1
D 、1,3,3
答案:D

解释:

上面的代码很乱,而且 if 语句还省略了缩进 {},我们看代码就容易出错

else 有最近匹配原则,所以 else会与它最近的 if 进行匹配

 还有要注意一点:|| 逻辑或:任意一方为真就执行。左边表达式为真,右边的表达式就不会执行

如题 if(a == 1 && b++==2),表达式左边为真,右边的表达式就不会执行,-- 也就不会执行,所以选择D

5、

若有定义语句: int a=10 ; double b=3.14 ; 则表达式 'A'+a+b 值的类型是()
A、 char
B、 int
C 、double
D、 float

答案:C

解释:

'A’是char类型,占一个字节,范围是-128 ~ 127
a是int 类型, 占4个字节,范围是 -21亿 ~ 21亿
c是double类型,占8个字节,范围是2.310的308次方 ~ 1.710的308次方

不同类型运算会自动提升(向高位提升),即小范围 -> 大范围,最后转换为double类型,所以答案选C

6、

int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};

中,p[1][2]的值是()
A 、1
B、 0
C 、6
D 、2
答案:B

解释:

p 数组的每个大括号是一行,都没有进行完全初始化,没初始化的默认为0, p[][4] 第一个参数没给,这是可以的,有几行第一个参数就为几,数组下标从 0 开始

数组补充完如下

1 0 0 0

3 2 0 0

4 5 6 0

0 0 0 0 

所以 p[1][2] = 0,标红色的,所以选择B

7、

选择表达式 11|10 的结果(本题数值均为十进制)()
A 、11
B 、10
C、 8
D、 2
答案:A

解释:

写出两个数的补码(正数的原码、反码、补码相同)

假设用8个 bit 表示:

11: 0000 1011

10 :0000 1010

| 按位或的规则:只有有一个为 1,结果 位 就为 1,其余情况为 0

转换为十进制就是 11,所以选择A

8、

fun(21)运行结果是()

int fun(int a){
a^=(1<<5)-1;
return a;
}

A 、10
B、 5
C、 3
D 、8
答案:A

解释:

^ 运算符的规则为:相同为0,相异为1

a ^= b  ---> a = a^b;

则 a ^= (1<<5)-1  ---> a = a ^ ((1<<5)-1)

1 << 5 就是 1 向左移动 5 个bit,0000 0001  ---> 0010 0000,十进制为32

最后 a = a ^ 31  ---> a = 21 ^ 31

最后转成十进制就是10,所以答案选A 

9、

若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()
A、 *p+=1

B 、(*p)++

C、 ++(*p)

D、 *p++

答案:D

解释: 这里考察的是运算符的优先级

 由图得知 * 的优先级大与 +=,()的优先级比 ++ 高

++ 的优先级比 * 要高,没有对1009进行++,而是对指针++,所以选择D

10、

下面关于"指针"的描述不正确的是()

A、 当使用free释放掉一个指针内容后,指针变量的值被置为NULL

B 、32位系统下任何类型指针的长度都是4个字节

C 、指针的数据类型声明的是指针实际指向内容的数据类型

D、 野指针是指向未分配或者已经释放的内存地址

答案:A

解释:

free指针只是把指向的空间销毁了 ,指针的值置空是要我们手动置空 

32位指针的长度都是4个字节,64位下是8字节

再说一下造成野指针的三大原因

  1. 定义时,没有初始化
  2. free掉后,没有置空
  3. 越界访问使用指针

所以选择A 

二、编程题

1、组队竞赛

题目链接:组队竞赛

思路分析:

  1. 首先对数据进行排序
  2. 然后进行分组,前面取一个后面取两个
  3. 然后对中间下标进行观察,可以发现规律

解题关键:如何进行分组(主要思路是贪心算法)

代码如下(C++):

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;int main()
{int n = 0;cin >> n;vector<int> arr;arr.resize(n*3);for(int i = 0; i < arr.size(); ++i){cin >> arr[i];}sort(arr.begin(), arr.end());long long sum = 0;for(int i = 0; i < n; ++i){sum += arr[arr.size() - 2*(i+1)];}cout << sum;return 0;
}

 2、删除公共字符

题目链接:删除公共字符

思路分析:

  1. 使用哈希思想,定义一个数组,遍历 s2,把 s2 里面有的字符映射到数组上
  2.   再遍历 s1,比较为0就插入 ret 中,即不重复的字符

代码如下(C++):

#include <iostream>
#include <string>
using namespace std;int main() 
{string s1, s2;getline(cin, s1);getline(cin, s2);int hash[256] = {0};for(int i = 0; i < s2.size(); ++i){hash[s2[i]]++;}string ret;for(int i = 0; i < s1.size(); ++i){if(hash[s1[i]] == 0){ret += s1[i];}}cout << ret;return 0;
}

----------------我是分割线---------------

Day_01完结,下篇即将更新

http://www.lryc.cn/news/7479.html

相关文章:

  • 字节跳动青训营--前端day9
  • 如何把模糊的照片还原?
  • 29-Golang中的切片
  • 闲聊一下开源
  • 用这4招优雅的实现Spring Boot 异步线程间数据传递
  • RocketMQ源码分析之NameServer
  • 如何优化认知配比
  • WuThreat身份安全云-TVD每日漏洞情报-2023-02-15
  • Unreal Engine角色涌现行为开发教程
  • vue处理一千张图片进行分页加载
  • (三十三)Vue之消息订阅与发布
  • Http中你必须知道那点事
  • ViewBinding使用入门
  • Retrofit源码分析实践(七)【Retrofit ConvertFactory的功能实现】
  • 介电常数常用测量方法综述
  • 重生之我是赏金猎人(三)-SRC漏洞挖掘-强行多次FUZZ发现某厂商SSRF到redis密码喷洒批量反弹Shell
  • 学会分享,学会生活,分享5款简单易用的软件。
  • Redux 与 Vuex 的区别总结
  • QT(15)- QFile
  • GaiaX开源解读 | 表达式作为逻辑动态化的基础,我们是如何设计的
  • python中adb shell相关操作
  • python 之 资源使用与控制 resource模块
  • 蓝库云|8项关键让你看透企业「数字转型」,零代码是惊喜
  • (五)、编辑页面-发布长文-富文本编辑【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
  • 你是真的“C”——【经典面试知识点】数据在内存中的大小端存储方式
  • 从零开始的数模(二十六)单因素方差分析
  • C++变量类型
  • win10 安装 vs2015(社区版本)以及opencv-4.5.5
  • 867. 转置矩阵
  • Datawahle组队学习——妙趣横生大数据 Day1