【笔试强训】Day 4

简介: 【笔试强训】Day 4

🌈选择题


有以下程序


#include<iostream>
#include<cstdio>
using namespace std;
int main(){
  int m=0123, n=123;
  printf("%o %o\n", m, n);
  return 0;
}


程序运行后的输出结果是(做错了)

A 0123 0173

B 0123 173

C 123 173

D 173 173


首先要区分各种进制的表达格式

%o 是八进制方式输出的

最后是如何进行进制间的转化:先%再/,直到等于0


0a2653c851af460fa595bd959398a8f1.png


答案选C


以下哪个选项一定可以将flag的第二个bit置0()

A flag&=~2

B flag|=2

C flag^=2

D flag>>=2


先来复习一下:按位或(有真为真)、按位与(都真为真)、按位异或 (相同为0,相异为1)


0a2653c851af460fa595bd959398a8f1.png


答案选A


请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变(知道原理还做错了)


A const int const *x = &y;

B int * const x = &y;

C const int *x = &y;

D int const *x = &y;

E const int * const x = &y;


还是const的使用,谁在const的后面就是不能改变

要求所指向的内存地址不能改变,内存中的值可以被改变:即x不能变,*x解引用的值可以改变

答案选B


以下C语言指令:运行结果是什么?


int a[5] = {1,3,5,7,9};

int *p = (int *)(&a+1);

printf(“%d,%d”,*(a+1),*(p-1));


A 2,1

B 3,1

C 3,9

D 运行时崩溃


只有在& 和 sizeof之后,才表示数组本身,其余都表示首元素的地址

&a是一个地址,该地址类型为: int(*)[5]

所以&a + 1 ,跨越了一个数组大小,p被强转为(int*),p-1指向9


0a2653c851af460fa595bd959398a8f1.png


答案选C


二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为(没看懂)


A Oxf8b821c4

B Oxf8b821a6

C Oxf8b82198

D Oxf8b821c0


复杂点的解方程计算


0a2653c851af460fa595bd959398a8f1.png


答案选A


根据下面递归函数:调用函数Fun(2),返回值是多少()


int Fun(int n)
{
  if(n==5)
  return 2;
  else
  return 2*Fun(n+1);
}


A 2

B 4

C 8

D 16


这个自己套一下就出来结果了,就不说了


答案是D


以下程序的输出结果是:


#include <iostream>
using namespace std;
void func(char **m)
{
  ++m;
  cout<<*m<<endl;
}
int main()
{
  static char *a[]={"morning", "afternoon", "evening"};
  char **p;
  p=a;
  func(p);
  return 0;
}


A afternoon

B 字符o的起始地址

C 字符o

D 字符a的起始地址


数组名表示数组首元素的地址,只有在&和sizeof之后才表示数组本身,所以这里的*a指的是首元素的地址也就是morning的地址

“morning” —> char* ,所以p必须给成二级指针

++m也就是偏移一个元素的大小,也就是指向了afternoon


0a2653c851af460fa595bd959398a8f1.png


答案选A


求函数返回值,输入x=9999


int func(int x){
int count=0;
while (x)
{
  count++;
  x=x&(x-1);//与运算
}
return count;
}


A 8

B 9

C 10

D 12


首先我们来看看这个算法是什么来头

接下来就算9999的二进制中有多少个1?算呗


0a2653c851af460fa595bd959398a8f1.png


答案是A


#include <stdio.h>
int cnt = 0;
int fib(int n) 
{
  cnt++;
  if (n == 0)
  return 1;
  else if (n == 1)
  return 2;
  else
  return fib(n - 1) + fib(n - 2);
}
void main() {
  fib(8);
  printf("%d", cnt);
}


下列程序执行后,输出的结果为()

A 41

B 67

C 109

D 177


cnt实际统计的是:斐波那契递归的总次数


0a2653c851af460fa595bd959398a8f1.png


答案选B


在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是()


struct A
{
  int a;
  short b;
  int c;
  char d;
};
struct B
{
  int a;
  short b;
  char c;
  int d;
};


A 16,16

B 13,12

C 16,12

D 11,16


又是结构体对齐,老生常谈了


0a2653c851af460fa595bd959398a8f1.png


答案选C


🌈编程题


1️⃣计算糖果

题目地址:传送


0a2653c851af460fa595bd959398a8f1.png


解题思路:


枚举法: 算出A、B1、B2、C的表达式,若B1==B2即可知道abc的值为真

2d65d23f6d4748949b924e4057485923.png

不多说上代码:

#include <iostream>
using namespace std;
int main() {
    int a,b,c,d;//输入的4个整数
    cin>>a>>b>>c>>d;
    //每个人手里的糖果
    int A = (a+c)/2;
    int B1 = (b+d)/2;
    int B2 = (c-a)/2;
    int C = (d-b)/2;
    if(B1 != B2)
    {
        cout<<"No"<<endl;
    }
    else
    {
        cout<<A<<" "<<B1<<" "<<C<<endl;
    }
}


2️⃣进制转换

题目地址:传送


0a2653c851af460fa595bd959398a8f1.png


解题思路:


首先建立两个字符串s和table分别来存放最后的输出结果、进制的对应各个数字

求得M中的每个数位上的数字(通过%和/来实现)

M求出的结果放进字符串s中,最后倒置字符串

如果M为负数,注意设flag进行区分处理

2d65d23f6d4748949b924e4057485923.png


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {
    string s = "",table = "0123456789ABCDEF";
    int m, n;
    cin>>m>>n;
    //注意当m<0的时候
    bool flag = false;
    if(m < 0)
    {
        m = -m;
        flag = true;
    }
    //注意当m=0的时候
    if(m == 0)
    {
        s = "0";
    }
    while(m)
    {
        s += table[m%n];
        m /= n;
    }
    if(flag == true)
    {
        s += '-';
    }
    //逆置字符串 :3 2 1 -
    reverse(s.begin(), s.end());
    cout<<s<<endl;
}
相关文章
|
7月前
|
算法 C++
48天C++笔试强训 001(下)
48天C++笔试强训 001(下)
30 1
|
6天前
|
SQL 关系型数据库 MySQL
几道常见面试问题总结(二)
几道常见面试问题总结(二)
|
6天前
|
算法 前端开发 JavaScript
面试必会的几道算法
面试必会的几道算法
|
7月前
|
存储 C语言 C++
48天C++笔试强训 001(上)
48天C++笔试强训 001
37 0
|
11月前
|
算法 编译器 C语言
笔试强训错题总结(一)(下)
笔试强训错题总结(一)
|
11月前
|
存储 编译器 C++
笔试强训错题总结(一)(上)
笔试强训错题总结(一)
104 0
|
11月前
|
算法 数据库
笔试强训错题总结(二)(下)
笔试强训错题总结(二)
|
11月前
|
安全 编译器 C++
笔试强训错题总结(二)(上)
笔试强训错题总结(二)
|
算法 C++
【笔试强训】Day_01
目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、组队竞赛 2、删除公共字符
76 0
【笔试强训】Day_01
|
人工智能 安全 测试技术
【笔试强训】Day_02
目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、排序子序列 2、倒置字符串
112 0
【笔试强训】Day_02