• 【笔试强训】Day 4


    🌈欢迎来到笔试强训专栏


    • (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort
    • 目前状态:大三非科班啃C++中
    • 🌍博客主页:张小姐的猫~江湖背景
    • 快上车🚘,握好方向盘跟我有一起打天下嘞!
    • 送给自己的一句鸡汤🤔:
    • 🔥真正的大师永远怀着一颗学徒的心
    • 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏
    • 🎉🎉欢迎持续关注!
      在这里插入图片描述

    请添加图片描述

    请添加图片描述

    🌈选择题

    有以下程序

    #include
    #include
    using namespace std;
    int main(){
    	int m=0123, n=123;
    	printf("%o %o\n", m, n);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    程序运行后的输出结果是(做错了
    A 0123 0173
    B 0123 173
    C 123 173
    D 173 173

    • 首先要区分各种进制的表达格式
    • %o 是八进制方式输出的
    • 最后是如何进行进制间的转化:先%/,直到等于0

    在这里插入图片描述

    答案选C

    以下哪个选项一定可以将flag的第二个bit置0()
    A flag&=~2
    B flag|=2
    C flag^=2
    D flag>>=2

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

    在这里插入图片描述

    答案选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));
    
    • 1
    • 2
    • 3

    A 2,1
    B 3,1
    C 3,9
    D 运行时崩溃

    • 只有在&sizeof之后,才表示数组本身,其余都表示首元素的地址
    • &a是一个地址,该地址类型为: int(*)[5]
    • 所以&a + 1 ,跨越了一个数组大小,p被强转为(int*),p-1指向9

    在这里插入图片描述

    答案选C

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

    A Oxf8b821c4
    B Oxf8b821a6
    C Oxf8b82198
    D Oxf8b821c0

    • 复杂点的解方程计算

    在这里插入图片描述

    答案选A

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

    int Fun(int n)
    {
    	if(n==5)
    		return 2;
    	else
    		return 2*Fun(n+1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    A 2
    B 4
    C 8
    D 16

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

    答案是D

    以下程序的输出结果是:

    #include 
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    A afternoon
    B 字符o的起始地址
    C 字符o
    D 字符a的起始地址

    • 数组名表示数组首元素的地址,只有在&和sizeof之后才表示数组本身,所以这里的*a指的是首元素的地址也就是morning的地址
    • “morning” —> char* ,所以p必须给成二级指针
    • ++m也就是偏移一个元素的大小,也就是指向了afternoon

    在这里插入图片描述

    答案选A

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

    int func(int x){
    int count=0;
    while (x)
    {
    	count++;
    	x=x&(x-1);//与运算
    }
    return count;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    A 8
    B 9
    C 10
    D 12

    • 首先我们来看看这个算法是什么来头
    • 接下来就算9999的二进制中有多少个1?算呗

    在这里插入图片描述

    答案是A

    #include 
    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    下列程序执行后,输出的结果为()
    A 41
    B 67
    C 109
    D 177

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

    在这里插入图片描述

    答案选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;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    A 16,16
    B 13,12
    C 16,12
    D 11,16

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

    在这里插入图片描述

    答案选C

    🌈编程题

    1️⃣计算糖果

    题目地址:传送

    在这里插入图片描述

    解题思路:

    • 枚举法: 算出A、B1、B2、C的表达式,若B1==B2即可知道abc的值为真
    • 在这里插入图片描述
      不多说上代码:
    #include 
    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;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2️⃣进制转换

    题目地址:传送

    在这里插入图片描述
    解题思路:

    • 首先建立两个字符串s和table分别来存放最后的输出结果、进制的对应各个数字
    • 求得M中的每个数位上的数字(通过%/来实现)
    • M求出的结果放进字符串s中,最后倒置字符串
    • 如果M为负数,注意设flag进行区分处理

    在这里插入图片描述

    #include 
    #include 
    #include 
    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    📢写在最后

    在这里插入图片描述

  • 相关阅读:
    51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频)
    精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)
    通过openssl非对称加密解密
    介绍一个数据血缘的项目 OpenLineage
    Ubuntu 安装 Android Studio
    数据库简介
    python中flask_caching库用法详解(缓存)
    浅学一下二叉树的顺序存储结构——堆
    RIP路由配置
    数据库事务相关问题
  • 原文地址:https://blog.csdn.net/qq_42996461/article/details/128073867