NOWCODER【选择题】——错题总结(1)

1.有以下程序,若从键盘输入abc def↙,则输出结果是()。

    char *p, *q;
    p = (char*)malloc(sizeof(char)* 20);
    q = p;
    scanf("%s %s", p, q);
    printf("%s %s\n", p, q);

选项:

A.def def
B.abc def
C.abc abc
D.def abc

答案:A.

解析:因为指针p和q都是指向动态分配的20个字节的内存单元,当使用scanf来读取输入的字符串到该内存块时,首先将abc存入到指针p所指的内存块,输入中的空格符,表示字符串输入结束,下一字符串def将存入到q所指的内存块,即原先的字符串abc将被覆盖掉。所以输出的结构就应是def def。即正确答案是A。

2.有以下程序:

    int a[5] = { 2, 4, 6, 8, 10 }, *p, **k;
    p = a;
    k = &p;
    printf("%d ", *(p++));
    printf("%d\n", **k);

程序运行后的输出结果是?

A.4 6
B.4 4
C.2 2
D.2 4

答案:D
解析:首先指针p指向了数组a的第一个元素,所以输出2; p++之后,p指向了数组的第二个元素 4, * * k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出4。所以选D。

3.下列程序段执行后,输出d的值为()

void main()
{
    int a = 1, b = 0, c = -1, d = 0;
    d = ++a || ++b&&++c;
    cout << d << endl;
    return;

}

选项:

A.1
B.2
C.3
D.0

答案:A.1
解析:C语言中,&&的优先级高于||,所以先求(++b)&&++c    ——>1&&0结果为0;然后再求++a || 0,结果为1。

4.在有 m 个进程的系统中有死锁出现时,死锁进程的个数 k 应该满足的条件是( )。

A.1≤k≤m
B.2≤k≤m
C.k=m=1
D.k和m没有关系

答案:B.
解析:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。所以最少有两个死锁进程,但是肯定不大于系统中进程个数。

5.变量p为指针变量,若p=&a,下列说法不正确的是()。

A.&*p==&a
B.*&a==a
C.(*p)++==a++
D.*(p++)==a++

答案:C.(严格说,D选项也是错的)。
解析:A:&*P == &a;//因为*p=a,同时对其取地址:&*P == &a
           B:*&a == a;//*p=a,p=&a;
           C:(*p)++ == a++;//*p=a,所以,此题变成:a++==a++的判断,先计算等号右边:a,此时,a自增,变成a+1,再计算等号左边:a+1; 等式两边不等;
           D:(p++) == a++//(p++):先访问指针p所指的存储单元,之后,指针后移一位;
所以计算结果是a,等号右边的,计算结果是a,之后,a 自增1,表面上,等号两边都是数值:a
但是,这是在假设编译器对等式两边的计算顺序是从左到右的前提下进行的;
假如,编译器针对等号,先算等号右边,后计算等号左边,等号右边的值是a,计算完自增1,接着计算等号左边,直接取p处的值:自增后的值,两边不再相等。所以,严格意义上讲,D也是不正确的。

6.下列程序运行结过为()

    void sub(int x, int y, int *z)
    {
        *z = y - x;
    }
    void main()
    {
        int a, b, c;
        sub(10, 5, &a);
        sub(7, a, &b);
        sub(a, b, &c);
        printf("%d,%d,%d\n", a, b, c);
        system("pause");
        return;
    }

选项:

A.523
B.-5,-12,-7
C.-5,-12,-7
D.5,-2,-7

答案:B.
解析:直接按程序顺序计算就没问题的。

7.在操作系统中,可以并行工作的基本单位是()

A.作业
B.程序
C.进程
D.过程

答案:C.进程
解析:这里我们只需要知道:
并行性:两个或多个事件在同一时刻发生
并发性:两个或多个事件在同一时间间隔内发生
作业只能并发操作,进程可以并行

8.哪个地址是网络123.10.0.0(掩码为255.255.0.0)的广播地址()

A.123.255.255.255
B.123.10.255.255
C.123.13.0.0
D.123.1.1.1

答案:B
解析:把网络号和掩码按位与,然后主机号改为全1

9.在 Internet 的服务功能中,( )服务将联网计算机作为远程主机的终端,可以利用远程主机的各种硬件和软件资源。

A.WWW
B.HTTP
C.Telnet
D.FTP

答案:C.telnet
解析:Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

10.有以下程序

void _ptr(int*m, int n)
{
    int i;
    for (i = 0; i < n; i++)
        m[i]++;
}
int main()
{
    int a[] = { 1, 2, 3, 4, 5 };
    _ptr(a, 5);
    for (int i = 0; i < 5; i++)
        printf("%d,",a[i]);
    system("pause");
    return 0;
}

程序运行结果为()

A.12345,
B.23456C.34567D.23451

答案:B.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值