【笔试强训】Day_01

简介: 目录一、选择题1、2、3、4、5、6、7、8、9、10、二、编程题1、组队竞赛 2、删除公共字符

目录

一、选择题

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>intmain(void) {
printf("%s , %5.3s\n", "computer", "computer");
return0;
}

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()函数执行后的结果为()

intfunc(){
inti, j, k=0;
for(i=0, j=-1;j=0;i++, j++){
k++;
}
returnk;
}
intmain(){
cout<< (func());
return0;
}

A 、-1

B、 0

C 、1

D、 2

答案:B

解释:

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

4、

下面程序输出是什么?

#include <stdio.h>intmain()
{
inta=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);
return0;
}

A 、1,2,3

B 、1,3,2

C、 3,2,1

D 、1,3,3

答案:D

解释:

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

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

image.png

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

如题 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,其余情况为

image.png

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

8、

fun(21)运行结果是()

1. int fun(int a){
2. a^=(1<<5)-1;
3. return a;
4. }

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

image.png

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

9、

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

A、 *p+=1

B 、(*p)++

C、 ++(*p)

D、 *p++

答案:D

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

image.png

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

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

10、

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

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

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

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

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

答案:A

解释:

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

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

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

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

所以选择A

二、编程题

1、组队竞赛

题目链接:组队竞赛

image.png

image.png

思路分析:

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

image.png

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

代码如下(C++):

#include <iostream>#include <algorithm>#include <vector>usingnamespacestd;
intmain()
{
intn=0;
cin>>n;
vector<int>arr;
arr.resize(n*3);
for(inti=0; i<arr.size(); ++i)
    {
cin>>arr[i];
    }
sort(arr.begin(), arr.end());
longlongsum=0;
for(inti=0; i<n; ++i)
    {
sum+=arr[arr.size() -2*(i+1)];
    }
cout<<sum;
return0;
}

2、删除公共字符

题目链接:删除公共字符

image.png

思路分析:

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


代码如下(C++):

#include <iostream>#include <string>usingnamespacestd;
intmain() 
{
strings1, s2;
getline(cin, s1);
getline(cin, s2);
inthash[256] = {0};
for(inti=0; i<s2.size(); ++i)
    {
hash[s2[i]]++;
    }
stringret;
for(inti=0; i<s1.size(); ++i)
    {
if(hash[s1[i]] ==0)
        {
ret+=s1[i];
        }
    }
cout<<ret;
return0;
}

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

Day_01完结,下篇即将更新

相关文章
|
算法 C++
48天C++笔试强训 001(下)
48天C++笔试强训 001(下)
46 1
|
6月前
【笔试强训】day12
【笔试强训】day12
|
6月前
【笔试强训】day9
【笔试强训】day9
|
6月前
|
人工智能
【笔试强训】day10
【笔试强训】day10
|
6月前
【笔试强训】day8
【笔试强训】day8
|
存储 C语言 C++
48天C++笔试强训 001(上)
48天C++笔试强训 001
60 0
|
人工智能 安全 测试技术
【笔试强训】Day_02
目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、排序子序列 2、倒置字符串
127 0
【笔试强训】Day_02
|
算法 编译器 C语言
笔试强训错题总结(一)(下)
笔试强训错题总结(一)
|
存储 编译器 C++
笔试强训错题总结(一)(上)
笔试强训错题总结(一)
124 0
|
安全 编译器 C++
笔试强训错题总结(二)(上)
笔试强训错题总结(二)