当前位置: 首页> 汽车> 车展 > C++笔试强训5

C++笔试强训5

时间:2025/7/9 11:02:38来源:https://blog.csdn.net/m0_74189279/article/details/140408159 浏览次数: 0次

文章目录

  • 一、选择题
    • 1-5题
    • 6-10题
  • 二、编程题
    • 题目一
    • 题目二


一、选择题

1-5题

在这里插入图片描述
x=1,先x++,再x–,while判断永远为真,故死循环
选D。


在这里插入图片描述
sizeof会计算\0,strlen不包括\0,并且strlen只计算\0之前的。
所以sizeof是10,strken是4

故选A。


在这里插入图片描述
p1+2指向c,p2+1指向B,把BCD拼接到cd后面,就是cdBCD,然后str+2是z,把cdBCD拷贝至以z开头的后面,就是xycdBCD。

故选D。


在这里插入图片描述
p是一个数组指针,指向一个存3个int类型元素的数组。
把数组名赋值给p,
数组省略了行只有三列,那就会根据初始化的数据自动推断有几列,如下
10 20 30
40 50 60
p[0][0]就是10,*(p[0]+1)相当于p[0][1]是20,(*p)[2]相当于p[0][2],就是30。
故选B。


在这里插入图片描述
一眼选B,没啥解释的。


6-10题

在这里插入图片描述
fun函数就是比较字符大小,返回ASCII码较小的那个,fun(fun(1 , 1) , fun(1 , 2))相当于fun(1,1)所以会输出字符1
故选D。


在这里插入图片描述
int* pa[5],pa是一个指针数组,该数组有五个元素都是int类型的指针。

故选A。


在这里插入图片描述
结构题内存对齐的题写过好多了,不细细说明了,可以看一下笔试强训前面的题,或者去学一学该处考的知识点。

C。


在这里插入图片描述

基础,a[i]相当于*(a+i),a[i][j]相当于*(*(a+i)+j),a[i][j][k]相当于*(*(*(a+i)+j)+k).
故a[i][j][k][l]相当于*(*(*(*(a+i)+j)+k)+l)
故选B。


在这里插入图片描述
在C程序的编译和链接过程中,可以发现被调用的函数未定义的阶段是链接阶段

编辑阶段主要是程序员编写和修改代码的过程,不涉及任何编译或链接操作,因此无法在这个阶段发现函数未定义的问题。

预处理阶段主要处理宏定义、条件编译指令、文件包含等预处理指令,它会对源代码进行文本替换等操作,但同样不会检查函数是否已定义。

编译阶段会将预处理后的源代码转换成汇编语言,然后再转换成目标代码(通常是机器码)。在编译阶段,编译器会检查每个文件中的语法错误和语义错误(比如变量声明类型错误等),但它只关注当前文件内的定义和引用。如果某个函数在当前文件中被调用但没有定义(且没有提供函数声明,除非使用了隐式声明,但现代C语言编程通常不推荐),编译器可能会报错或发出警告,但通常这些警告/错误只涉及当前文件,并不会检查该函数是否在项目的其他部分被定义。

链接阶段是将多个编译后生成的目标文件(.o或.obj文件)以及所需的库文件合并成一个可执行文件的过程。在这个阶段,链接器会检查所有被调用的函数和变量是否都已经有了定义。如果链接器发现某个函数被调用了但没有在任何地方定义(即没有在任何目标文件或库中找到该函数的实现),它会报错,指出存在未解决的外部引用。因此,链接阶段是发现被调用的函数未定义的阶段。


二、编程题

题目一

题目链接:

统计回文

在这里插入图片描述

提交代码:

#include <algorithm>
#include <iostream>
#include<string>
using namespace std;bool isSymmetry(string& str) {string str1=str;reverse(str.begin(),str.end());return str1==str? true:false;
}
int main() {int count=0;string str1,str2;getline(cin,str1);getline(cin,str2);for(int i=0;i<=str1.size();i++){string str=str1;str.insert(i,str2);if(isSymmetry(str)) ++count;}cout<<count;}
// 64 位输出请用 printf("%lld")

运行结果:
在这里插入图片描述


题目二

题目链接:
连续最大和
在这里插入图片描述

提交代码:

#include <iostream>
#include<vector>
using namespace std;int GetMax(int a, int b) { //得到两个数的最大值return (a) > (b) ? (a) : (b);
}
int main() {int size;cin >> size;vector<int> nums(size);for (size_t i = 0; i < size; ++i)cin >> nums[i];int Sum = nums[0]; //临时最大值int MAX = nums[0]; //比较之后的最大值for (int i = 1; i < size; i++) {Sum = GetMax(Sum + nums[i], nums[i]); //状态方程if (Sum >= MAX)MAX = Sum;}cout << MAX << endl;return 0;
}
// 64 位输出请用 printf("%lld")

运行结果:

在这里插入图片描述


关键字:C++笔试强训5

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: