• 【C++笔试强训计划】第一天


    遇事不决,可问春风,春风不语,即随本心

    欢迎来到我的笔试强训计划专栏,这是计划正式开始的第一天。另外,我想说的是:博主本身水平有限,本专栏只作为学习笔记分享记录使用,对于一些题目做法肯定有更优的解,不必过于较真。


    选择题

    1.以下for循环的执行次数是()

    for(int x = 0, y = 0; (y = 123) && (x < 4); x++);
    
    • 1

    A.是无限循环

    B.循环次数不定

    C.4次

    D.3次

    for循环,y=123是赋值为真的,后面就是剩下x = 0、1、2、3 总共四次循环所以选C

    2.以下程序的运行结果是()

    include 
    
    int main(void) {
        printf("%s , %5.3s\n", "computer", "computer");
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    A.computer , puter

    B.computer , com

    C.computer , computer

    D.computer , compu.ter

    对于%s遇到\0就停止打印。

    对于%5.3s并不常见: % m.ns:
    m : 输出字符串的宽度
    n :左起截止目标字符串的n个字符,而且是右对齐,左边不够补空格。当字符串 > n > m :此时m的作用失效了,直接截取n
    当n > 字符串 :作用和%s一样,遇到\0就停止

    所以%5.3s 输出的是 com且,com前面补两个空格

    3.下列main()函数执行后的结果为()

    int func(){ 
    	int i, j, k = 0;
    	for(i = 0, j = -1;j = 0;i++, j++){
    		k++;
    	}
    	return k;
    }
    int main(){
        cout << (func());
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    A.-1

    B.0

    C.1

    D.2

    这里的条件判断部分j 赋值为0恒为假,不会进入循环所以K等于0

    4.下面程序输出是什么?

    include 
    
    int main()
    {  
       int a=1,b=2,c=3,d=0;
       if(a == 1 && b++==2)
       if(b!=2||c--!=3)
           printf("%d,%d,%d\n" ,a,b,c);
       else 
           printf("%d,%d,%d\n" ,a,b,c);
       else 
           printf("%d,%d,%d\n" ,a,b,c);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    A.1,2,3

    B.1,3,2

    C.3,2,1

    D.1,3,3

    else匹配有就近原则 : 匹配最近的if
    || 逻辑或:任意一方为真就是为真。 左边表达式为真,右边表达式就不会执行第一个if就判断为假,直接到最后一个printf 打印,答案选D

    5.若有定义语句: int a=10 ; double b=3.14 ; 则表达式 ‘A’+a+b 值的类型是()

    A.char

    B.int

    C.double

    D.float

    类型自动提升
    'A’是char类型,占一个字节,a是int 类型, 占4个字节,c是double类型,占8个字节。不同类型运算会自动提升,小范围提升为大范围 ,所以最后转换为double类型。

    6.下面,p[1] [2]的值是 的值是()

    int p[][4] = {{1}, {3, 2}, {4, 5, 6}, {0}};
    
    • 1

    A.1

    B.0

    C.6

    D.2

    本质是一个4行4列的二维数组,每个大括号是一行,都没有进行完全初始化,没初始化的默认为0

    数组坐标从0开始,选B

    7.选择表达式 11|10 的结果(本题数值均为十进制)()

    A.11

    B.10

    C.8

    D.2

    逻辑运算

    image-20221128001307879

    选A

    int fun(int a){
     a^=(1<<5)-1;
     return a;
    }
    
    • 1
    • 2
    • 3
    • 4

    fun(21)运行结果是()

    A.10

    B.5

    C.3

    D.8

    1<<5 后等于32 ,再-1 等于31, 最后是a^31 也就是21^31
    ^ 运算:相同为0,不同为1

    选A

    9.若有定义语句:int year=1009,*p=&year;以下不能使变量 year 中的值增至 1010 的语句是()

    A.*p+=1;

    B.(*p)++;

    C.++(*p)

    D.*p++

    运算符优先级的问题,*的优先级大于 +=,()的优先级比++高,而++的优先级比*要高,没有对1009进行++,而是对指针++.所以选D

    顺便回顾一下运算符的优先级:

    查看源图像

    10.下面关于"指针"的描述不正确的是()

    A.当使用free释放掉一个指针内容后,指针变量的值被置为NULL

    B.32位系统下任何类型指针的长度都是4个字节

    C.指针的数据类型声明的是指针实际指向内容的数据类型

    D.野指针是指向未分配或者已经释放的内存地址

    解析:

    free指针只是把指向的空间销毁了 ,并没有把值置为NULL,指针的值置空需要我们自己去手动置空,选A


    编程题

    组队竞赛

    组队竞赛传送门

    image-20221127222450648

    image-20221127222509644

    最直接的想法就是先进行排序,然后在找规律:

    image-20221127235601937

    #include 
    #include 
    #include 
    using namespace std;
    
    int main()
    {
        int n;
        while(cin>>n)
        {
            vector v;
            long long sum = 0;
            v.resize(3*n);
            for(size_t i = 0;i>v[i];
            }
            std::sort(v.begin(),v.end());
            for(size_t i = 0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    删除公共字符串

    删除公共字符串传送门

    image-20221127231304235

    思路1:通过哈希映射,把字符串s2放入hash中,进行标记。然后去遍历一遍字符串s1,找出没有重复的进行拼接即可解决此题

    思路2:直接去找,在字符串s1中找s2的值,find相同的就直接erase掉

    //思路1
    #include 
    #include 
    using namespace std;
    int main()
    {
        string s1,s2;
        getline(cin,s1);
        getline(cin,s2);
        int hash[256] = {0};
        for(size_t i = 0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    //思路2
    #include 
    #include 
    using namespace std;
    int main()
    {
        string s1,s2;
        getline(cin,s1);
        getline(cin,s2);
        for(size_t i = 0;i
  • 相关阅读:
    goroutine+channel实现对多个goroutine的顺序执行
    Unity实现简易太阳系
    Redis面试题总结
    Python的常用排序算法实现
    【数字通信原理】第六章 频带传输及调制原理
    实时目标检测:基于YOLOv3和OpenCV的摄像头应用
    【计算机网络】网络层——IP协议
    java-net-php-python-jspm购物商城网站演示录像2019计算机毕业设计程序
    JMeter入门教程(13) --事务
    【数据库开发】DataX开发环境的安装部署(Python、Java)
  • 原文地址:https://blog.csdn.net/weixin_60478154/article/details/128072473