【C++笔试强训】第四天 红太狼 2024-04-20 06:08 80阅读 0赞 > **?C++笔试强训** > > -------------------- > > * **博客主页:**[一起去看日落吗][Link 1] > * **分享博主的C++刷题日常,大家一起学习** > * **`博主的能力有限,出现错误希望大家不吝赐教`** > * **分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光** ?。 > > -------------------- > > ![在这里插入图片描述][047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center] ?? -------------------- ## 选择题 ## ### ?第一题 ### 有以下程序 #include<iostream> #include<cstdio> using namespace std; 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 这道题主要是对进制位的考验 ![请添加图片描述][a08308d9a3a84852bbeec84d1eca5dfc.png] m原本就是八进制,所以%o打印还是123,0是不需要打印的,n是十进制,转换八进制即123不断除8,直到商为0; ![请添加图片描述][79c8d8b7bd14483884d74b086c03b02f.png] > **`所以这道题的答案选C`** -------------------- ### ?第二题 ### 以下哪个选项一定可以将flag的第二个bit置0() A flag&=~2 B flag|=2 C flag^=2 D flag>>=2 这道题主要是考验按位运算,并且是在比特位上计算的 ![请添加图片描述][d9bdb4f93ef24d3cbb03d9d165d939e1.png] 我们假设给falg一个值,看看如何可以将第二个比特位置0,且题目的意识是只变第二个比特位,其他位不变 ![请添加图片描述][c0482c92e15b4c6eae4f1098ce3bddb7.png] > **`这道题的答案是A`** -------------------- ### ?第三题 ### 请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。 A const int const *x = &y; B int * const x = &y; C const int *x = &y; D int const *x = &y; E const int * const x = &y; 这里有const,我们来了解两个概念: * 常量指针:指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。 * 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。 区分:const \*的相对位置 * const 在 \* 的左边,常量指针 * const 在 \* 的右边,指针常量 ![请添加图片描述][d488df79186d4a6d93d722ab609b1ead.png] > **`这道题的答案是B`** -------------------- ### ?第四题 ### 以下C语言指令: int a[5] = { 1,3,5,7,9}; int *p = (int *)(&a+1); printf(“%d,%d”,*(a+1),*(p-1)); 运行结果是什么? A 2,1 B 3,1 C 3,9 D 运行时崩溃 这道题主要是对指针以及数组的考验,在前两天的笔试强训中也有类似的题目 ![请添加图片描述][d12b943542e34c51b46830dd24458be1.png] > **`这道题的答案选C`** -------------------- ### ?第五题 ### 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X\[4\]\[4\]的存储地址为Oxf8b82140,X\[9\]\[9\]的存储地址为Oxf8b8221c,则X\[7\]\[7\]的存储地址为()。 A Oxf8b821c4 B Oxf8b821a6 C Oxf8b82198 D Oxf8b821c0 这道题有两种解法 * 第一种: 不知道有多少行多少列的情况下,用二元一次方程组解决 ![请添加图片描述][bbaa9598c6124579953c8481859e4731.png] * 第二种 注意观察,指针指向数组列相同的情况下,相减就是中间元素的个数 ![请添加图片描述][8d7ed9761813485ab656ecda60c7411f.png] > **`这道题的答案选A`** -------------------- ### ?第六题 ### 根据下面递归函数:调用函数Fun(2),返回值是多少() int Fun(int n) { if(n==5) return 2; else return 2*Fun(n+1); } A 2 B 4 C 8 D 16 这道题是对于函数递归的理解的考验,这道题需要我们一次一次递归进行算 ![请添加图片描述][0d91e141c7814d6cbe3442824016cd05.png] > **`这道题最终的答案是16,选D`** -------------------- ### ?第七题 ### 以下程序的输出结果是: #include <iostream> using namespace std; void func(char **m){ ++m; cout<<*m<<endl; } int main(){ static char *a[]={ "morning", "afternoon", "evening"}; char **p; p=a; func(p); return 0; } A afternoon B 字符o的起始地址 C 字符o D 字符a的起始地址 这道题主要是对二级指针和指针数组的考验,仔细分析 ![请添加图片描述][89437ac34d664391aaa73f02f153a6fc.png] > **`这道题的答案是A`** -------------------- ### ?第八题 ### 求函数返回值,输入x=9999 int func(int x){ int count=0; while (x) { count++; x=x&(x-1);//与运算 } return count; } 8 B 9 C 10 D 12 这道题主要是看循环的次数,我们可以先假设一个输入值 ![请添加图片描述][10fc261e0de746748c81fc0d95bdf279.png] 所以只需要看9999的二进制中有多少个1即可 > **`所以这道题的答案选A`** -------------------- ### ?第九题 ### #include <stdio.h> int cnt = 0; int fib(int n) { cnt++; if (n == 0) return 1; else if (n == 1) return 2; else return fib(n - 1) + fib(n - 2); } void main() { fib(8); printf("%d", cnt); } 这道题第一眼看着就是个斐波那契数列,也是对于递归理解的考验,我们只需要依次进行推导那就可以得出最终结果了 ![请添加图片描述][65585993db8c4555a76aea6791ec4ba2.png] -------------------- ### ?第十题 ### 在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是() struct A { int a; short b; int c; char d; }; struct B { int a; short b; char c; int d; }; A 16,16 B 13,12 C 16,12 D 11,16 这道题主要是考验结构体的内存对齐,我们到时可以去了解三个问题 * 结构体为什么要对齐 * 结构体是如何进行对齐的 * 如果想要让结构体任意字节对齐该如何处理 ![请添加图片描述][7617787b5bbf4df0b0441791a8bd6cbf.png] 这样我们可以进行计算第一个结构体的值为16 ![请添加图片描述][2e1e8a4795824869a1a8d31c798d4162.png] 第二个结构体的值12 ![请添加图片描述][97aceb57d3ed4c11a0cfb6b9b74e18ff.png] > **`所以这道题的答案是C`** -------------------- ## 编程题 ## ### ?第一题 ### 链接:[计算糖果][Link 2] ![请添加图片描述][885e04ef6c5f41f9959a5fafc134ec85.png] * 解题思路: 这是这四天来最简单的一道题,就是直接把条件给出来了。 1、A - B = a 2、B - C = b 3、A + B = c 4、B + C = d 这道题目的实质是:判断三元一次方程组是否有解及求解, 这里是小学生都会的问题了^^ 1+3可以得到A=(a+c)/2;4-2可以得到C=(d-b)/2; 2+4可以得到B2=(b+d)/2,3-1可以得到B1=(c-a)/2; 如果B1不等B2则表达式无解 * 代码演示: #include<iostream> using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >> d; int A = (a + c) / 2; int C = (d - b) / 2; int B1 = (c - a) / 2; int B2 = (b + d) / 2; if (B1 != B2) cout << "No"; else cout << A << " " << B1 << " " << C; return 0; } -------------------- ### ?第二题 ### 链接:[进制转换][Link 3] ![请添加图片描述][8957f7cc070c46cab0dbf1ec3b9a865a.png] * 解题思路: 本题思路很简单,首先想清楚原理:N进制数,每个进制位的值分别是X0*N0,X1\*N1, X2*N^2…,X0,X1,X2就是这些进制位的值,就是就是进行取模余数就是当前低进制的位的值是多少,通过除掉进制数,进入下一个进制位的计算。 * 代码演示: #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s, table = "0123456789ABCDEF"; int m,n; cin >> m >>n; if( m == 0) { cout << 0; return 0; } bool flag = false; if(m < 0) { m = -m; flag = true; } while(m != 0) { s = s+ table[m%n]; m /= n; } if(flag == true) { s += "-"; } reverse(s.begin(),s.end()); cout << s << endl; } -------------------- [Link 1]: https://blog.csdn.net/m0_60338933?type=blog [047d8ad26e314dc7bc7aa19a6ce9ccb0.jpeg_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/1f5445bdcc474adcb36451ea04480e64.jpeg [a08308d9a3a84852bbeec84d1eca5dfc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/558baa0cbd73446698a097d82a0ed114.png [79c8d8b7bd14483884d74b086c03b02f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/130c335e25d747d3a2ca96e7529f100d.png [d9bdb4f93ef24d3cbb03d9d165d939e1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/863b7b62b06e46479060ab85337bf7ac.png [c0482c92e15b4c6eae4f1098ce3bddb7.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/a3157e656fcf4cad8e3622a47236a0bd.png [d488df79186d4a6d93d722ab609b1ead.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/172fc25dd8d7445a9dd9aa59c9519186.png [d12b943542e34c51b46830dd24458be1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/6403b398b76e48848db630ccc69f9840.png [bbaa9598c6124579953c8481859e4731.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/eaf4164ce215415f818eadc0b4893308.png [8d7ed9761813485ab656ecda60c7411f.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/b07e09e4fb6d4fea862f1d242466c0a0.png [0d91e141c7814d6cbe3442824016cd05.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/bea1f50c9e4f462c9a228e3cf0adfa45.png [89437ac34d664391aaa73f02f153a6fc.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/8f3159d641d04312bd0d711a670c8f3d.png [10fc261e0de746748c81fc0d95bdf279.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/e7ba6ca5ea1d4d4e91b948761d628180.png [65585993db8c4555a76aea6791ec4ba2.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/e4ab659a7064470587ccc9983e747baf.png [7617787b5bbf4df0b0441791a8bd6cbf.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/77b37e3229554bdcad0e9fbcb80cbeea.png [2e1e8a4795824869a1a8d31c798d4162.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/bf7152de704d47bfbb6a3697b1243f6f.png [97aceb57d3ed4c11a0cfb6b9b74e18ff.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/7c6a5df56d2e4e629b7446ca728a42e1.png [Link 2]: https://www.nowcoder.com/practice/02d8d42b197646a5bbd0a98785bb3a34?tpId=85&&tqId=29857&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking [885e04ef6c5f41f9959a5fafc134ec85.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/9d39887c0f704a589da3f48aadb02106.png [Link 3]: https://www.nowcoder.com/practice/ac61207721a34b74b06597fe6eb67c52?tpId=85&&tqId=29862&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking [8957f7cc070c46cab0dbf1ec3b9a865a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/20/6c99e471108743ae82c2c0c2ed2dbe5f.png
还没有评论,来说两句吧...