C++笔试强训1

admin2024-07-04  17

文章目录

  • 一、单项选择题
  • 二、编程题
    • 1. 组队竞赛
    • 1. 删除公共字符

一、单项选择题

C++笔试强训1,在这里插入图片描述,第1张
解析:
for(初始化部分;条件判断部分;调整部分)
{
//循环部分
}
本题中条件判断部分是(y = 123) && (x < 4),中间用&&相连,左右都为真时才为真,左边是y=123,非0为真,所以只需要看右边是否满足即可,右边x<4,x初始值为0,当x=0,1,2,3时满足条件,所以执行四次,答案选C。


C++笔试强训1,在这里插入图片描述,第2张
解析:

打印俩一个是%s一个是%5.3s。%s打印computer没有问题,%5.3s中的5表示打印字符宽度为五个,3表示取字符串前3个字符。然后右对齐,左补两个空格,达到5个字符宽度,所以答案为空格空格com,选B。


C++笔试强训1,在这里插入图片描述,第3张
解析:
同第一题,条件判断为j=0,0为假,所以一次也不会执行,所以k为0,因此主函数输出为0,答案选B。


C++笔试强训1,在这里插入图片描述,第4张
解析:
本题考察的是else的就近匹配原则和短路原则和前后置++的知识点。
我们先给它弄一下缩进,这样看起来好看一点。
C++笔试强训1,在这里插入图片描述,第5张
首先第一个if中a==1为真,b++==2为真,在执行完该if语句后b的值变成了3,然后进入第二个if,b!=2为真,因为这里用的是||连接,只要有一个为真就是真,因此当左边b!=2为真后就不会再去判断c–!=3,所以会执行满足第二个if语句的print语句,此时a,b,c的值分别为1,3,3,答案为D。


C++笔试强训1,在这里插入图片描述,第6张
解析:
隐式类型转换,比较简单不赘述。


C++笔试强训1,在这里插入图片描述,第7张
解析:
二维数组只写列数,不写行数,会根据初始化的形式自动推断有几行,并且把没有赋初始值的初始化为0。题目中就是一个4*4的矩阵
1 0 0 0
3 2 0 0
4 5 6 0
0 0 0 0
p[1][2]就是0,答案选B。


C++笔试强训1,在这里插入图片描述,第8张
解析:
11二进制为1011
10二进制为1010
按位或之后为1011为11选A。

位运算符含义说明
&按位与有0为0,双1为1: 1&1=1,1&0=0,0&1=0,0&0=0只有两者对应位都为1,结果对应位才为 1,否则为 0
|按位或有1为1,双0为0: 1I1=1,1I0=1,0I1=1,0I0=0只要两者对应位有一个为1,则结果对应位就为 1,否则为 0
~按位取反1变0,0变1: ~1=0, ~0=1如果该位为 1,则结果对应位为 0如果该位为 0, 则结果对应位为 1
^按位异或不同为1,相同为0: 1^1=0, 1^0=1, 0^1=1, 0^0=0 只有两者对应位不一样,则结果对应位才为 1, 否则为 0
<<左移左移n位就是乘以2的n次方所有位依次向左移动,高位丢弃,低位补0
>>右移右移n位就是除以2的n次方无符号数据:所有位依次向右移动,高位补0,低位丢弃有符号数据:所有位依次向右移动,符号位不变,低位丢弃

C++笔试强训1,在这里插入图片描述,第9张
解析:
根据七题给的总结,1<<5为二进制的100000,十进制的32,1<<5-1=31,31化成二进制为11111,21转换为二进制为10101
10101
^
11111

=
01010化为十进制为8+2=10,答案为A


C++笔试强训1,在这里插入图片描述,第10张
解析:
D选项实际上包含两个操作:首先,它解引用指针 p(即访问 year 的值),但随后立即对指针 p 执行了自增操作(p++)。然而,由于解引用和自增操作是在同一个表达式中但以错误的顺序执行(从右到左的求值顺序),这里的关键是解引用操作 *p 实际上只获取了 year 的当前值(即 1009),但这个值并没有被用于任何操作(比如增加),紧接着指针 p 就被自增了。因此,这个语句既没有改变 year 的值,也没有将修改后的值存回 year,只是让 p 指向了一个不确定的位置


C++笔试强训1,在这里插入图片描述,第11张
解析:
当使用free函数(在C中)或相应的内存释放机制(如在C++中的智能指针或delete/delete[]操作符)来释放一个指针所指向的内存时,free或相应的机制仅仅是将该内存块标记为可重新使用,并不会自动将指针变量的值置为NULL。

指针变量本身只是一个存储了内存地址的变量。当释放了它指向的内存后,指针变量仍然存储着那个已经被释放的内存地址。这意味着指针变量变成了所谓的“悬垂指针”(dangling pointer),即它指向的内存已经不再有效或可用,但指针本身的值(即内存地址)并未改变,故A错误。


二、编程题

1. 组队竞赛

题目链接:组队竞赛
题目描述:
C++笔试强训1,在这里插入图片描述,第12张
运行结果:
C++笔试强训1,在这里插入图片描述,第13张

提交代码:

#include <iostream>
#include<algorithm>
#include<vector>
using namespace std;

int main() {
    long long sum=0;
    int n;
    cin>>n;
    vector<int> arr(3*n,0);
    for(int i=0;i<3*n;i++)
        cin>>arr[i];
    sort(arr.begin(),arr.end());
    for(int i=1;i<=n;i++)
    {
        sum+=arr[3*n-2*i];
    }
    cout<<sum;
}
// 64 位输出请用 printf(\"%lld\")

1. 删除公共字符

题目链接:删除公共字符
题目描述:
C++笔试强训1,在这里插入图片描述,第14张
运行结果:
C++笔试强训1,在这里插入图片描述,第15张

提交代码:

#include <iostream>
#include<string>
#include<vector>
using namespace std;

int main() {
    string str1,str2;
    getline(cin,str1);
    getline(cin,str2);
    vector<int> arr(256,0);
    for(char i : str2)
    {
        arr[i]++;
    }
    string str3;
    for(char i : str1)
    {
        if(arr[i]==0)
        {
            str3+=i;
        }
    }
    cout<<str3;

}
// 64 位输出请用 printf("%lld")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!