C/C++ 笔试(一)

  1. 以下程序的运行结果是()

    cpp 复制代码
    int main(void) 
    {
        printf("%s , %5.3s\n", "computer", "computer"); 
        return 0; 
    }

    A computer , puter

    B computer , com

    C computer , computer

    D computer , compu.ter

    B

    %m.ns 输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

  2. 若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()

    A * p+=1;

    B (* p)++;

    C ++(* p) ;

    D *p++;

    D

    A 其效果等同于 *p = *p + 1

    B 解引用,后置++

    C 解引用,前置++

    D 首先执行解引用操作(即读取指针当前指向的值),然后执行指针自增操作(即移动指针到下一个位置)。但是,这个读取的值并不会被存储在一个临时变量中,它仅仅是为了执行解引用这个动作。之后,指针会立即移动到下一个位置。

  3. 下面代码会输出()

    cpp 复制代码
    int main()
    { 
        int a[4]={1,2,3,4}; 
        int *ptr=(int*)(&a+1); 
        printf("%d",*(ptr-1)); 
        return 0;
    }

    A 4

    B 1

    C 2

    D 3

    A

    数组名是一个常量指针,指向的是首元素地址,但是有这两个例外:

    1. sizeof(arr) 此时的数组名代表整个数组,即单独放在sizeof中的数组名代表整个数组

    2. &arr 这是的数组名也代表整个数组,取出的是整个数组的地址

    这里&a是把整个数组拿出来了,+1指针后移一个int的距离,后面ptr-1往前移动一个int的距离就是 4 了

  4. 请找出下面程序中有哪些错误()

    cpp 复制代码
    int main()
    {
        int i = 10;
        int j = 1;
        const int *p1;//(1)
        int const *p2 = &i; //(2)
        p2 = &j;//(3)
        int *const p3 = &i;//(4)
        *p3 = 20;//(5)
        *p2 = 30;//(6)
        p3 = &j;//(7)
        return 0;
    }

    A 1,2,3,4,5,6,7

    B 1,3,5,6

    C 6,7

    D 3,5

    C

    常量指针:指针所指空间的值不能被修改,但是指针的指向可以改变

    指针常量:指针就是一个常量,指向不能被修改,但是所指空间的指可以改变

    区分:const * 的相对位置:const在 * 的左边:常量指针;const在 * 的右边:指针常量

    1是一个常量指针,2也是常量指针,指向的值就不能被修改, 6修改了p2指向空间的值, 6错误, 3 p2的指向发生了改变,4是一个指针常量,5 p3所指空间的值被修改,7 指针的指向发生了改变,7错误

  5. 在32位cpu上选择缺省对齐的情况下,有如下结构体定义:

    cpp 复制代码
    struct A{
        unsigned a : 19;
        unsigned b : 11;
        unsigned c : 4;
        unsigned d : 29;
        char index;
    };

    则sizeof(struct A)的值为()

    A 9

    B 12

    C 16

    D 20

    C

    32位cpu选择缺省对齐是以4字节一个单位

    4字节:19 + 11

    4字节:4

    4字节:29

    4字节:8

  6. 设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是

    A n=0;while(ch=getchar()!='\n') n++;

    B n=0;while(getchar()!='\n')n++;

    C for(n=0;getchar()!='\n';n++);

    D n=0;for(ch=getchar();ch!='\n';n++);

    D

    for循环的初始化部分只会执行一次

  7. 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

    cpp 复制代码
    int main()
    {
        long long a = 1, b = 2, c = 3;
        printf("%d %d %d\n", b, c, a);
        return 0;
    }

    A 1,2,3

    B 2,0,3

    C 1,3,2

    D 3,2,1

    B

    大端:低位存高地址

    小端:低位存低地址

    cpp 复制代码
    int a = 1;
    大端: 00 00 00 01
    小端: 01 00 00 00
    低地址      高地址

    三个数是从右向左入栈的,程序栈帧是由高地址向低地址开辟的

    a、b、c在程序栈中的存储:

    02 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00

    低地址 高地址

    栈是后进先出的,b先打印4字节是02 00 00 00 ,出栈,c再打印4字节是00 00 00 00,出栈,a先打印4字节是03 00 00 00, 所以最后打印是 2 0 3

    注:三个数的入栈顺序是由使用时决定的。

cpp 复制代码
int main()
{
    int m=0123, n=123;
    printf("%o %o\n", m, n);
    return 0;
}

程序运行后的输出结果是()

A 0123 0173

B 0123 173

C 123 173

D 173 173

C

二进制:10101b

八进制:0123

十进制:123

十六进制:0x123 或 123h

%d:十进制方式输出

%o:十进制方式输出

%x:十六进制方式输出

  1. 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X 4 4的存储地址为0xf8b82140,X 9 9的存储地址为0xf8b8221c,则X 7 7的存储地址为()。

A 0xf8b821c4

B 0xf8b821a6

C 0xf8b82198

D 0xf8b821c0

A

解法一:

设:数组的起始地址为start,总共m行,n列

&x 4 4 = start + 4*n + 4 = 0xf8b82140

&x 9 9 = start + 9*n + 9 = 0xf8b8221c

start = n =

&x 7 7 = start + 7*n + 7

解法二:

&x 4 4 = 0xf8b82140

&x 4 9 = 0xf8b82145

&x 9 9 = 0xf8b8221c

4 4 和 9 9 隔了5行

21c - 145 = 0xb7 = 215

一行有43列

&x 7 7 = &x 7 9 - 2

= &x 4 9 + 3*43 -2

= 0xf8b82145 + 127

= 0xf8b82145 + 0x75

= 0xf8b821c4

  1. 求函数返回值,输入x=9999

    cpp 复制代码
    int func(int x)
    {
        int count=0;
        while (x)
        {
            count++;
            x=x&(x-1);//与运算
        }
        return count;
    }

    A 8

    B 9

    C 10

    D 12

    A

    x=x&(x-1) 算法就是把x二进制中的一位1消去,所以就要计算x二进制中1的个数

    9的二进制:1001

    9999的二进制 :1001 1001 1001 1001

相关推荐
小许同学记录成长10 分钟前
几何体编辑与布尔运算
算法·无人机
社交怪人24 分钟前
【范围判断】信息学奥赛一本通C语言解法(题号2052)
c语言
fanged24 分钟前
简单看看3A算法2(TODO)
算法
智者知已应修善业30 分钟前
【51单片机4位静态数码管显示1234】2023-11-14
c++·经验分享·笔记·算法·51单片机
抓虾爪33 分钟前
ST意法代理商粤科源兴丨LSM6DS3全系列现货库存,LSM6DS3TR-C当天可发
c++
♡すぎ♡39 分钟前
镜面 IBL 预过滤贴图的计算
算法·计算机图形学·贴图·pbr
妙为39 分钟前
unreal engine5.7.4,创建ThirdPerson第三人称模版,类型是c++崩溃
c++·ue5·虚幻·unreal engine5
郝学胜_神的一滴43 分钟前
Qt 高级开发 021:零基础吃透 QVBoxLayout 垂直布局
c++·qt
Lsk_Smion1 小时前
力扣实训 _ [200].岛屿数量
算法·leetcode·深度优先
Boom_Shu1 小时前
长方形的关系
数据结构·c++·算法