【C++笔试强训】第二十五天

发布于:2022-11-16 ⋅ 阅读:(10) ⋅ 点赞:(0) ⋅ 评论:(0)

🎇C++笔试强训


  • 博客主页:一起去看日落吗
  • 分享博主的C++刷题日常,大家一起学习
  • 博主的能力有限,出现错误希望大家不吝赐教
  • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

在这里插入图片描述

💦🔥


选择题

💦 第一题

一进程刚获得三个主存块的使用权,若该进程访问页面的次序是
{1321215123},采用LRU算法时,缺页数是()次。

A 3
B 4
C 5
D 6

我们先来看几个概念

请添加图片描述

下面来看解题分析

请添加图片描述

这道题的答案是C


💦 第二题

以下关于多线程的叙述中错误的是()

A 线程同步的方法包括使用临界区,互斥量,信号量等

B 两个线程同时对简单类型全局变量进行写操作也需要互斥

C 实现可重入函数时,对自动变量也要用互斥量加以保护

D 可重入函数不可以调用不可重入函数

做这种题我们首先需要了解概念
请添加图片描述

C 可重入函数可认为是可以被中断的函数,自动变量定义的时候才被创建,函数返回时,系统回收空间,他用的是局部作用域变量,不需要互斥量,可重入函数对全局变量才需要互斥量保护

这道题的答案是C


💦 第三题

系统死锁的可能的原因是()

A 进程死循环
B 资源循环等待
C 程序内存访问越界
D 进程释放资源

请添加图片描述

这道题的答案是B


💦 第四题

整数0x12345678,在采用bigendian中内存的排序序列是( )

A 12 34 56 78
B 78 56 34 12
C 87 65 43 21
D 21 43 65 87

bigendian 大端 :低位存在高地址

Little Endian 小端: 低位存在低地址

请添加图片描述

这道题的答案是A


💦 第五题

使用C语言将一个1G字节的字符数组从头到尾全部设置为字’A’,在一台典型的当代PC上,需要花费的CPU时间的数量级最接近()

A 0.001秒
B 1秒
C 100秒
D 2小时

请添加图片描述

请添加图片描述

这道题的答案是B


💦 第六题

对于普通的计算机,对以下事件的平均耗时从小到大排序为____:

A.读取1KB内存数据 B.从硬盘连续读取1KB数据 C.读取一次L2缓存 D.一次磁盘寻道

A C,A,D,B

B C,D,A,B

C D,C,A,B

D D,A,C,B

做题我们必须知道计算机缓存的概念

请添加图片描述

我们还需要了解机械硬盘相关的知识

请添加图片描述

请添加图片描述

请添加图片描述

请添加图片描述

这道题的答案是A


💦 第七题

现代计算机普遍采用总线结构,包括数据总线、地址总线、控制总线,通常与数据总线位数对应相同的部件是( )

A CPU
B 存储器
C 地址总线
D 控制总线

我们需要先了解一下概念

请添加图片描述

请添加图片描述

请添加图片描述

这道题的答案是A


💦 第八题

关于子进程和父进程的说法,下面哪一个是正确的()

A 一个父进程可以创建若干个子进程,一个子进程可以从属于若干个父进程

B 父进程被撤销时,其所有子进程也被相应撤消

C 子进程被撤销时,其从属的父进程也被撤销

D 一个进程可以没有父进程或子进程

A 一个父进程可以创建若干个子进程,但一个子进程只可以从属于一个个父进程

BC 都不一定

请添加图片描述

这道题的答案是D


💦 第九题

关于线程和进程,下面说法正确的是()

A 终止一个进程比终止一个线程花费的时间少

B 进程切换比同一进程内部的线程切换花费的时间少

C 线程提高了不同执行程序间的通信效率

D 进程和线程都是资源分配和调度的基本单位

请添加图片描述

这道题的答案是C


💦 第十题

进程调度时,下列进程状态的变化过程哪一项是不可能发生的()

A 阻塞挂起->阻塞

B 就绪挂起->就绪

C 就绪挂起->阻塞挂起

D 阻塞挂起->就绪挂起

请添加图片描述

这道题的答案是C


编程题

🔥 第一题

链接:星际密码

请添加图片描述

  • 题目解析

这个题目首先需要明确矩阵是固定的,其次是矩阵相乘的方法
矩阵相乘 |a1 a2| * |c1 c2| = |a1c1 + a2d1 a1c2 + a2d2| |b1 b2| |d1 d2| |b1c1 + b2d1 b1d2 + b2d2|
矩阵是
|1 1|^2 = |1 1|*|1 1|=|2 1| |1 0| |1 0| |1 0| |1 1| n的取值:1 2 3 4 5 6 … 左上角值:1 2 3 5 8 13 … 是一个变式的斐波那契

  • 解题思路

初始化斐波那契数列,每次获取对应数据,打印最后4位即可

  • 代码演示
// write your code here cpp
#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    int f_arr[10000] = {0,1,2};
    for(int i = 3;i < 10001;i++)
    {
        f_arr[i] = f_arr[i-1] + f_arr[i-2];
        f_arr[i] %= 10000;
    }
    
    int n;
    
    while(cin >> n)
    {
        for(int i = 0;i < n;i++)
        {
            int num;
            cin >> num;
            f_arr[num];
            
            printf("%04d",f_arr[num]);
        }
        printf("\n");
    }
    return 0;
}

🔥 第二题

链接:数根

请添加图片描述

  • 解题思路
  1. 接收字符串得到各个数字,并且每位求和(为了得到的数字不大于99)
  2. 循环对大于9的数字进行对10取余和整除操作,将两个结果进行相加得到树根
  • 代码演示
// write your code here cpp
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s;
    //1. 由于数字太大,需要用string 接受
    while(cin >> s)
    {
        int num = 0;
        //2. 直接对于接收回来的字符串求和
        for(int i = 0;i < s.size();i++)
        {
            num += s[i] - '0';
        }
        int sum = 0;
        while(num)
        {
            sum += num %10;
            num = num / 10;
            if(num == 0 && sum / 10 != 0)
            {
                num = sum;
                sum = 0;
            }
        }
        cout << sum << endl;
    }
    return 0;
}