C语言—每日选择题—Day42

第一题

  1. 下面程序输出的结果是()
cpp 复制代码
#include <stdio.h>
int main () 
{
    int x;
    x = printf("I See, Sea in C");
    printf("x=%d" , x); 
}

A:2

B:随机值

C:都不是

D:15

答案及解析 D

printf函数的返回值是int类型,返回的是打印出的字符的个数,并且printf遇到\0结束打印,所以题中共有15个字符,x就为15;

详情可以看这里:printf返回值的定义与举例-CSDN博客

第二题

  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 - 1)可以消除最右侧的1,使其变为0;所以这个while循环的作用就是看x有多少个1的;

9999的二进制位:10011100001111

一共有8个1,所以返回的就是8

第三题

  1. 下面程序的1,2,3处表达式的值为()
cpp 复制代码
int main()
{
    int n = 1;
    ++n;
    n++; // 1
    --n; // 2
    ++n; // 3
    return 0;
}

A:2 2 3

B:2 2 2

C:2 3 2

D:2 1 1

答案及解析 A

本题考查的是前置++和后置++ 的区别;

前置++,返回的是++之后的值,后置++返回的是++之前的值;--也是;

别忘了1处上面有个++n;

所以1处:表达式的值为2,但是n = 3;

2处:表达式的值为2,n = 2;

3处:表达式的值为3,n = 3;
在C++中的运算符重载就很好地可以看出,前置++和后置++的区别;前置++返回的就是++之后的值,而后置++,是将这个数拷贝了一份返回去,但是这个数自身已经增加1了;

cpp 复制代码
    A& operator++()
    {
        *this += 1;
        return *this;
    }
    A operator++(int)
    {
        A copy = *this;
        *this += 1;
        return copy;
    }

第四题

  1. 有如下代码段:
cpp 复制代码
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};

则正确的叙述为()
A:数组 x 和数组 y 等价

B:strlen(x) > strlen(y)

C:strlen(y) >= strlen(x)

D:sizeof(y) > sizeof(x)

答案及解析 C

A:错误,x是一个字符串,而y是一个字符数组,字符串和字符数组的区别就是末尾有没有隐藏的\0,字符串末尾一定是有一个隐藏的\0,但是字符数组的\0的具体位置是随机的;
B错C对:因为strlen函数是求字符串长度的,其中只有遇到\0才会停止计算,然后返回\0之前的字符个数,上面也说了,y这个字符数组的\0的位置是不确定的,所以可能在末尾,也可能在更之后,所以strlen(y) >= strlen(x)的;
D:错误,x的大,这个是计算占用多少内存的,x有个隐藏的\0也是申请空间了的;

第五题

  1. 有以下定义和语句,则 *( p0 + 1) 所代表的数组元素是()
cpp 复制代码
int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
p[0] = a[1];

A:a 0 1

B:a 1 0

C:a 1 1

D:a 1 2

答案及解析 C

首先,int *p 3 是一个指针数组,因为 的优先级高,所以会先形成数组,然后每个元素的类型是int*;其次p 0 存的是a 1 的地址,a 1 代表的是这个二维数组第二行的首元素地址;因为a 1 2 相当于的就是第二行这个一维数组,a 1 就是这个一维数组的数组名,数组名代表首元素地址,也就是a 1 0 的地址;

p 0 <==> a 1 <==> &a 1 0

p 0 + 1 <==> &a 1 0 + 1 <==> &a 1 1

*(p 0 + 1) <== > a 1 1

相关推荐
计算机安禾12 分钟前
【算法分析与设计】第36篇:计算几何基础:凸包问题的分治与扫描线解法
大数据·人工智能·算法·机器学习·剪枝
叶子野格17 分钟前
《C语言学习:文件操作》16
c语言·开发语言·c++·学习·visual studio
货拉拉技术17 分钟前
飞速发展的计算机视觉
人工智能·算法
AI科技星17 分钟前
万有引力G与真空介电常数ε0全维度完整关系式汇编(基于v=c螺旋时空理论)
c语言·开发语言·前端·javascript·网络·汇编·electron
如竟没有火炬30 分钟前
寻找峰值——二分
java·开发语言·数据结构·python·算法·散列表
C^h31 分钟前
6轴达妙机械臂
c语言
noipp42 分钟前
推荐题目:洛谷 P1115 最大子段和
算法
Lumbrologist42 分钟前
【C++】零基础入门 · 第 17 节:多线程编程基础
java·c++·算法
JAVA社区1 小时前
Java高级全套教程(十三)—— 分布式锁超详细实战详解(原理+三种方案企业级落地)
java·开发语言·分布式·spring cloud·面试·java-zookeeper
超梦dasgg1 小时前
Java 生产环境 Maven 实战指南
java·开发语言·maven