文章目录
- 一、选择题
- 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")
运行结果: