C++笔试强训1


一、单项选择题

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


在这里插入图片描述
解析:

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

  1. %s:就是字符串的转换说明符
  2. %ms:输出字符串宽度为m,如果字符串本身实际宽度大于m,那么就用字符串的实际宽度。如果字符串的实际宽度小于m,则左补空格。可以理解成m前面有个省略了的+号,所以字符串右对齐;
  3. %-ms:规则基本上面一样,不一样的是字符串左对齐,右补空格;
  4. %m.ns;输出宽度占m,但是只取字符串中左端的n个字符。这n个字符排列在m宽度的右侧,如果n小于m则左补空格,如果n大于m,那么m失效,字符的输出宽度就是n。
  5. %-m.ns;规则和上面基本一样,不一样的地方在于,如果n小于m那么需要左对齐,右补空格。

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


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


在这里插入图片描述
解析:
隐式类型转换,比较简单不赘述。


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


在这里插入图片描述
解析:
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,低位丢弃有符号数据:所有位依次向右移动,符号位不变,低位丢弃

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

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


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


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

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


二、编程题

1. 组队竞赛

题目链接:组队竞赛
题目描述:
在这里插入图片描述
运行结果:
在这里插入图片描述

提交代码:

#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. 删除公共字符

题目链接:删除公共字符
题目描述:
在这里插入图片描述
运行结果:
在这里插入图片描述

提交代码:

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

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

争不过朝夕,又念着往昔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值