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

127 阅读4分钟

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

mmexport1669275024909.jpg

天空好像下雨,我好想住你隔壁。

一、选择题

1、下列进程调度算法中,()可能会出现进程长期得不到调度的情况。

A.非强占式静态优先权法

B.强占式静态优先权法

C.时间片轮转调度算法

D.非强占式动态优先权法

答案:B。

image.png

2、如果信号量的当前值为-4,则表示系统中在该信号量上有()个进程等待。

A、3

B、4

C、0

D、5

答案:B。分析:信号量为-m,就说明有m个进程在等待,一共m + 1个进程,还有一个在临界区。

3、第一份对于Linux说法,下列说法正确的是( )

A.线性访问内存非法时,当前线程会进入信号处理函数

B.用mv命令移动文件时,文件的修改时间会发生变化

C.ulimit-c设置的是函数调用栈的大小

D.malloc函数是应用程序向操作系统申请内存的接口

答案:A。分析:image.png

4、某台微机安装的是 64 位操作系统,64 位指的是()

A、CPU的运算速度,即Cpu每秒钟能计算64位二进制数据

B、CPU的型号

C、CPU的时钟主频

D、CPU的字长,即CPU每次能处理64位二进制数据

答案:D。

5、由源代码生成可执行文件需要经过预编译,编译,汇编,链接等阶段,错误:unresolved external symbol Beginscene属于()阶段错误。

A、预编译

B、链接

C、汇编

D、编译

答案: B。分析:无法解析的外部符号,说明单个文件已经编译过了。在链接时,查找不到外部符号。 6、下述哪种情况会提出中断请求

A.在键盘输入过程中,每按一次键

B.两数相加结果为零

C.计算结果溢出

D.一条系统汇编指令执行完成

答案:A。分析:每按键一次,或者是点击鼠标一次,就会产生一个中断,称为按键中断。

7、以下哪些不是内核对象()

A.进程

B.线程

C.互斥器

D.临界区

答案:D。分析:临界区是资源对象。

8、单任务系统中两个程序A和B,其中

A程序:CPU:10s->设备1:5s->CPU:5s->设备2:10s->CPU:10s;B程序:设备1:10s->CPU:10s->设备2:5s->CPU:5s->设备2:10s;执行顺序为A->B,那么CPU的利用率是()

A.30%

B.40%

C.50%

D.60%

答案:C。分析:A程序,CPU时间为10+5+10=25s,总时间为10+5+5+10+10=40s;B程序,CPU时间为10+5=15s,总时间为10+10+5+5+10=40s;CPU总时间为40s,两个进程的总时间为80s,

CPU的利用为40/80=0.5

9、进程调度是从()选择一个进程投入运行。

A、等待队列

B、提交队列

C、作业后备对列

D、就绪队列

答案:D。分析: 就绪队列是等待CPU时间的队列。

10、某系统中有11台打印机,N个进程共享打印机资源,每个进程要求3台,当N的取值不超过()时系统不会

发生死锁。

A.4

B.5

C.6

D.7

答案:B。分析:不发生死锁的条件是至少能保证一个进程能获得三台打印机资源。

最坏的情况是1个进程获取三台打印机资源,另外N-1个进程获取到两台打印机,等待获取第三台。

*3+(N-1)2=11

11、什么是内存抖动(Thrashing)()

A.非常频繁的换页活动

B.非常高的CPU执行活动

C.一个极长的执行进程

D.一个极大的虚拟内存

答案:A。页面的频繁更换,导致整个系统效率急剧下降,这个现象称为内存抖动。

抖动一般是内存分配算法不好,内存太小引或者程序的算法不佳引起的页面频繁从内存调入调出。


二、编程题

1、淘宝网店

image.png

中等难度的日期类问题,需要考虑是不是闰年和是不是质数。

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

int a[13] = { 0, 62, 90, 121, 181, 212, 272, 303, 365, 425, 487, 517,579 };
bool isleapyeaar(int year)
{
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        return true;
    else
        return false;
}
bool isPrime(int n) {
    if (n <= 3) {
        return n > 1;
    }
    for (int i = 2; i < n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}
//非闰年一年的利润是579,闰年的利润是580
int main()
{
    int y1, y2, m1, m2, d1, d2;
    int h = 579;
    while (cin >> y1 >> m1 >> d1 >> y2 >> m2 >> d2)
    {
        int s1 = 0, s2 = 0;
        if (isPrime(m1))
        {
            s1 = a[m1 - 1] + d1;
        }
        else
        {
            s1 = a[m1 - 1] + 2 * d1;
        }
        if (isPrime(m2))
        {
            s2 = a[m2 - 1] + d2;
        }
        else
        {
            s2 = a[m2 - 1] + d2 * 2;
        }
        if (isleapyeaar(y1) && a[m1 - 1] > 2) s1 += 1;
        if (isleapyeaar(y2) && a[m2 - 1] > 2) s2 += 1;

        if (y1 == y2)
        {
            if (isPrime(m1))
                cout << s2 - s1 + 1 << endl;
            else
                cout << s2 - s1 + 2 << endl;
        }
        else
        {
            while (y1 < y2)
            {
                if (isleapyeaar(y1))
                {
                    s2 += 580;
                }
                else s2 += 579;
                y1++;
            }
            if (isPrime(m1))
                cout << s2 - s1 + 1 << endl;
            else
                cout << s2 - s1 + 2 << endl;
        }
    }


    return 0;
}

2、斐波那契凤尾

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 100010;
int a[N] = { 0 };
void fbnx()
{
    a[0] = 1, a[1] = 1;
    for (int i = 2; i < 100001; i++)
    {
        a[i] = (a[i - 1] + a[i - 2]) % 1000000;
    }
}
int main()
{
    int n;
    fbnx();
    while (cin >> n)
    {
        if (n < 29)
            //斐波那契数列小于6位
        {
            printf("%d\n", a[n]);
        }
        else
        {
            printf("%06d\n", a[n]);
        }

    }

    return 0;
}

总结

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