C++笔试强训5


一、选择题

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")

运行结果:

在这里插入图片描述


相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 23:26:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 23:26:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 23:26:01       57 阅读
  4. Python语言-面向对象

    2024-07-14 23:26:01       68 阅读

热门阅读

  1. GitHub每周最火火火项目(7.8-7.14)

    2024-07-14 23:26:01       20 阅读
  2. Mybatis一对一,一对多关联查询

    2024-07-14 23:26:01       24 阅读
  3. R语言简单介绍及零基础学习路径

    2024-07-14 23:26:01       18 阅读
  4. 在unity中的球形插值方法中第三个参数t是什么

    2024-07-14 23:26:01       17 阅读
  5. linux安装pure-ftpd-1.0.51

    2024-07-14 23:26:01       17 阅读