【计算机本科补全计划】C++牛客网试题习题解析

时间:2022-05-12
本文章向大家介绍【计算机本科补全计划】C++牛客网试题习题解析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

正文之前

一大早醒来,外面淅淅沥沥的雨绵绵的下着,床铺真的舒服,但是我也不能就在床上刷微博看小说吧,所以想起了昨晚下载的牛客网的APP,赶紧掏出我的大宝贝---升级到iOS11的肾(各位,真的建议升级到11,不是我说,速度快了很多,虽然还有不少的bug待修复,但是真的快了好多,而且感觉内部的功耗设定都改了,比较耐用了点了。虽然最大的悲剧是变丑了很多 PS:变丑观点来自我的审美比较好的妹子),然后刷了一套C++的面试题,这些基础知识好久没看过了,最近沉迷于算法和数据结构,所以基本大脑大部分地区已经被指针占领了,C++做的好勉强,后面自己查查补补,总算写出一份攻略,欢迎品鉴,也请帮我纠正,毕竟我现在是个半吊子。

正文

第一题解析:

alp是一个指针数组,含有三个指针,分别指向三个字符串的内存区,那么 alp[1]很自然的就是指向“DEF”这个内存区,然后 puts虽然不知道是啥,但是琢磨着应该是把整个连续内存区的都整出来的吧!那么没问题,就是D

第二题解析:

这个代码其实写的不是很适合阅读,应该要有比较好的代码编写规范,先后,嵌套顺序明显才是优秀的!本题的代码嵌套关系如下图所示,在 if(a>b)与后面的 printf("%dn",d);不存在主从关系,也就是说不管你 if(a>b)是否能深入运行,都会有 printf("%dn",d);的执行,所以这时候就只要考虑 if(a>b)能否改变d的值?并且自身有没有输出?然后看了下 a>b 这很明显是不可能的,所以if直接就跳出了,到了后面的 printf("%dn",d);

第三题解析:

这个我不知道啊!!所以只好借用讨论区的回答咯。错了不怪我~~大文件表空间只能包含一个文件,但是文件可以达到 4G 个数据块大小。(只能包含一个文件,但是一个文件里可以包含多个数据文件??不知道是不是这样理解)

第四题解析:

首先,第一行第二行是字符数组的复制,类似于是一个字符串,然后再第三行进行了一个字符串的操作函数,— strcpy意思就是把字符串整个的复制给 ccString1,那么这个时候 ccString1=”No“,并未保留后续的 PageFault?? 第四句是比较两个字符串,相等输出0,不相等输出1,那么很显然的, strcmp输出的是1,不等于0,那么在if内部的bool型变量就是0,那么就不会执行 cout<<ccString2;,而是直接进行

else
   cout<<ccString1;

第五题解析(错题):

在 C/C++ 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。在32位机上,所有指针类型变量占用内存字节数都为4因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.如果在64位机上,指针占用内存大小就是:8个字节.

那么接下来其实就是判断括号内的变量的类型,然后根据查表得出的结果找出各自的长度。对照表如下图,对照之后就有

A:8  
B:17  
C:1     
D:8

第六题解析:

这个没多少好说的,我全凭感觉做的,第一个的话,宏我并不记得有这么大的安全隐患,第三个,宏就是为了程序的可读性,可修改性做出的贡献,第四个,宏定义对于提高运行效率其实没啥影响吧,只是方便观看以及方便修改吧!我不太清楚,还没有精学,后面慢慢应该还会讲到吧!

第七题解析【错题】:

我记岔了,以为公有继承的派生类的话不会把父类的私有量继承过来,实际上会的,但是只是不能访问,所以说最终B里面就是三个指针,不管能不能访问, sizeof(B)是不会错的!8*3=24咯 ~

第八题解析【错题】:

这个相对来说算是比较复杂了。我当时是理清楚了的,但是后面好像是判断错误,然后多读了一个数的样子,下面详细解释下,

int fun1(char s[], char a, int n)
{
    int j;
    j = n;
    while (a < s[j] && j > 0) j--;
    return j;
}

这个函数是要返回从s中的第七个开始往下数,第多少个能够满足不大于a的条件,就是说s是一个递增的字符数组,a处于这个递增数列的中间,从高处开始找到第一个小于或等于a的字符的码值返回, 这就是 fun1的作用, fun2的作用类似,从低处开始找,找到第一个大于等于a的字符的码值返回,从主函数里面知道,s的码值从1-7对应着 D F H J L N P 那么很显然的 fun1返回的是5, fun2的返回值为6,我是傻逼吗?当时数的时候 fun1数出来6!!!

第九题解析:

这个题目我真的是靠感觉来的。首选,首先f1要传进去的实参必须是一个指针,所以C没毛病,然后关于D的话,我当时想的是,如果带不带括号有区别的话,那么当然是要尊重初始定义的时候的带括号的方法了。所以毫不犹豫的选了D 现在想想,如果带括号没用,带这个括号干嘛,闲的鸡儿疼吗??至于别的,同理,A需要带括号,B里面传入指针,不要 *就好了!

第十题解析【错题】:

老实说这种题目我见所未见,也就今天第一波牛客见到了。以后慢慢来吧! 本题是16位机器, char型占1个字节,int型占2个字节。结构体中字节对齐有两条规则:

  • 数据成员自对齐,即数据成员起始地址为数据类型长度的整数倍,如该题 int型b只能从0,2,4...等地址处开始放;
  • 结构体总长度是结构体中有效对齐值的整数倍,有效对齐值,如该题没明确指出,则为最长数据成员 (intb)长度的整数倍;

根据上面两条规则,画出内存示意图。根据规则1, intb从2处开始放,此时结构体总长度为(1 + 1 + 2 + 1 = 5);再根据规则2,结构体总长度应为2的整数倍,故应为6.描红的两个字节表示被浪费的。