🎇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;
}
🔥 第二题
链接:数根
- 解题思路
- 接收字符串得到各个数字,并且每位求和(为了得到的数字不大于99)
- 循环对大于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;
}