【C/C++】刷题笔记day4

271 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情 mmexport7eab7fc3f7ceda3071803ddc874b543f_1669275.jpeg

平安喜乐,万事顺意!

# 一、选择题

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

A、CPU

B、存储器

C、地址总线

D、控制总线

答案:A。分析:数据总线是双向三态形式的总线,即它既可以把CPU的数据传送到存储器或输入输出接口等其他部件、将其他部件的数据传送到CPU。

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

A、程序内存访问越界

B、进程释放资源

C、资源循环等待

D、进程死循环

答案:C。分析:系统死锁的可能的原因: 1、系统资源不足 2、进程推进顺序非法 必要条件: 1、 互斥条件 2、 不剥夺条件(非抢占) 3、 占有并等待(部分分配)4、资源循环等待。

3、在系统内存中设置磁盘缓冲区的主要目的是()

A、减少磁盘 I/0 次数

B、减少平均寻道时

C、实现设备儿关性

D、提高磁盘数据可靠性

答案:A。分析: 在系统内存中设置磁盘缓冲区的主要目的是就是 减少磁盘 I/0 次数。

4、在一个文件被用户进程首次打开的过程中,操作系统需做的是()

A、将文件内容读到内存中

B、将文件控制块读到内存中

C、将文件的数据缓冲区片指针返回给用户进程

D、修改文件控制块中的读权限

答案:B。分析: 在一个文件被用户进程首次打开的过程中,操作系统需做的是 将文件控制块读到内存中。这是必须的。

5、进程间通讯的方式中哪种的访问速度最快()

A、管道

B、消息队列

C、套接字

D、 共享内存

答案:D。分析: 共享内存是 进程间通讯的方式中访问速度最快的。

6、系统中内存不足程序所需大小,程序就无法执行。

A、错

B、对

答案: A。 分析:操作系统存在虚拟内存,可以把优先级较低的程序报保存在系统硬盘中。

7、有一个程序中有A,B,C三个线程同时对一个文件进行读写操作,其中的A,B是写进程只负责往里面写数据,C是读线程,同时把读取的数据从文件中删除,A线程单独写满文件需要10个小时,B单独写程序需要6小时,C线程需要15小时才能读取完整个文件,不考虑三个线程之间的相互影响的情况下现在小时才能写满文件

A.5

B.6

C.5.5

D.4.5

E.4.8

F.5.3

答案:A。分析不考虑三个线程之间的相互影响。总任务是单位1,A的写工作效率是1/10,B的写工作效率是1/6,C的读工作效率是1/15,那么总工作效率是1/10+1/6-1/15结果是1/5。于是,写满的总时间是:用单位1除以总工作效率五分之一,就是5小时。

**
**

8、计算机操作系统的主要功能是()

A、把高级程序设计语言和汇编语言编写的程序翻译到计算机硬件可以直接执行的目标程序,为用户提供良好的软件开发环境

B、管理计算机系统的软硬件资源,以充分发挥计算机资源的效率,并为其它软件提供良好的运行环境

C、为用户提供方便地操作和使用计算机

D、对各类计算机文件进行有效的管理,并提交计算机硬件高效处理

答案:B。

9、若系统中只有用户级线程,则处理机调度单位是()。

A.线程

B.进程

C.程序

D.作业

答案:B。分析:如果系统只有用户态线程,则线程对操作系统是不可见的,操作系统只能调度进程;

如果系统中有内核态线程,则操作系统可以按线程进行调度;

10、设两个进程共用一个临界资源的互斥信号量mutex=1,当mutex=-1时表示()

A、没有一个进程进入临界区

B、一个进程进入了临界区,另一个进程等待

C、两个进程都在等待

D、两个进程都进入临界区

答案:A。分析:互斥信号量,初始值为1,取值范围为(-1, 0,1)。

当信号量为1时,表示两个进程皆未进入需要互斥的临界区;

当信号量为0时,表示有一个进程进入临界区运行,另一个必须等待;

当信号量为-1时,表示有一个进程正在临界区运行,另一个进程因等待而阻塞在信号量队列中,需要当前已在临界区运行的进程退出时唤醒。

二、编程题

1、最难的问题

image.png

注意多组输入,而且有空格

代码示例:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    string s;
    while (getline(cin, s))
    {
        for (int i = 0; i < s.size(); i++)
        {
            if (s[i] >= 'A' && s[i] <= 'Z')
            {
                s[i] = s[i] - 5;
                if (s[i] < 'A')
                {
                    s[i] = 'Z' + s[i] + 1 - 'A';
                }
            }
        }
        cout << s << endl;
    }


    return 0;
}

2、因子个数

image.png

输出n的因子个数

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
    int n, k, i;
    while (cin >> n) {
        k = 0;
        for (i = 2; i <= sqrt(n); i++) {
            if (n % i == 0) {
                while (n % i == 0) {
                    n = n / i;
                }
                ++k;
            }
        }
        if (n != 1) {
            ++k;
        }
        cout << k << endl;
    }
    return 0;
}

总结

 本文总共讲了10题牛客高频的选择题,以及两道牛客编程题,希望大家读后能够有所收获!