当前位置: 首页 > news >正文

【C++笔试强训】第三天

🎇C++笔试强训


  • 博客主页:一起去看日落吗
  • 分享博主的C++刷题日常,大家一起学习
  • 博主的能力有限,出现错误希望大家不吝赐教
  • 分享给大家一句我很喜欢的话:夜色难免微凉,前方必有曙光 🌞。

在这里插入图片描述

💦🔥


目录

  • 选择题
    • 💦第一题
    • 💦第二题
    • 💦第三题
    • 💦第四题
    • 💦第五题
    • 💦第六题
    • 💦第七题
    • 💦第八题
    • 💦第九题
    • 💦第十题
  • 编程题
    • 🔥第一题
    • 🔥第二题

选择题

💦第一题

以下程序的输出结果是()

#include <stdio.h>
main() {
	char a[10] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}, *p;
	int i;
	i = 8;
	p = a + i;
	printf("%s\n", p - 3);
}

A 6
B 6789
C ‘6’
D 789

这道题的话先定义了一个长度为10的数组a和一个指针p,然后初始化i的值为8

p = a + i 即从数组首元素偏移8个字节,指针变量p是指向字符9,p-3是从6开始打印,%s打印是遇到\0才会停止,所以会打印6789

所以这道题的答案是B


💦第二题

以下程序的输出结果是()

#include <iostream.h>
int main()
{
	int x=3,y=3;
	switch(x%2)
	{
		case 1:
			switch (y)
			{
				case 0:
					cout<<"first";
				case 1:
					cout<<"second";
					break;
				default:
					cout<<"hello";
			}
		case 2:
			cout<<"third";
	}
		return 0;
}

A second third
B hello
C first second
D hellothird

这道题主要是对分支语句的考验,定义x,y的值为3,x%2的值为1,所以是进入case1,之后进入switch(y),因为y为3,所以会进入default语句,然后会打印hello,因为case1没有break,所以不会跳出去,会继续执行下去

所以这道题会继续打印case2的third 所以答案是hellothird 选D


💦第三题

以下能对二维数组a进行正确初始化的语句是()

A int ta[2][]={{0,1,2},{3,4,5}};
B int ta[][3]={{0,1,2},{3,4,5}};
C int ta[2][4]={{0,1,2},{3,4},{5}};
D int ta[][3]={{0,,2},{},{3,4,5}};

A选项在对二维数组初始化的时候,行可以省略但是列不可以省略,所以A错误

B省略行,没有问题

C选项声明数组是两行四列,但是初始化了三行,所以C错误

D选项初始化的时候必须连续初始化,中间不能有间隔,所以D错误

这道题的答案选B


💦第四题

能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是()

A return这二个数
B 形参用数组
C 形参用二个指针
D 用二个全局变量

A选项 return每次只能一个数据类型,只能放在一个数组或者容器里面返回出来,所以A错误

B选项 形参在使用数组的时候会传递数组的地址,然后将函数处理的结果放在数组当中,当函数调用完以后可以访问数组获取处理结果,B正确

C选项 形参用两个指针,然后两个指针在调用的时候需要传递两个地址变量,将对应的处理的结果放在对应的地址空间,然后可以根据指针访问处理结果,C正确

D选项 全局变量的作用域在整个文件中都是有效的,所以在处理完以后主调函数可以在全局域中访问到处理结果,所以D正确

·所以这道题的答案是A`


💦第五题

int *p[4] 与选择项中的() 等价

A int p[4]
B int *p
C int *(p[4])
D int (*p)[4]

这道题 []的优先级是高于*号的 ,所以int *p[4] 代表 int类型的指针数组,数组大小为4

A是个整型数组,大小为4

B是个int类型的指针

C选项int类型的指针数组

D是个数组指针,数组大小为4,存放int数据类型

这道题的答案是C


💦第六题

设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是

A n=0;while(ch=getchar()!='\n')n++;
B n=0;while(getchar()!='\n')n++;
C for(n=0;getchar()!='\n';n++);
D n=0;for(ch=getchar();ch!='\n';n++);

这道题的意思是输入asdasda一串字符然后按下回车\n ,统计你一共输入了多少个字符

A选项 用ch每次接受一个字符,和\n比较,不是就++,A可以统计

B选项 和A的区别是没用ch接受,直接比较,也是可以的

C选项 用的是for循环,一样是用getchar获取字符和\n进行比较,然后进行循环操作,操作完之后n++,所以C也是正确的

D选项 for循环的初始化部分只会执行一次,所以只会获取一个字符,所以D错误

这道题的答案是D


💦第七题

以下代码

char *ptr;
char myString[] = "abcdefg";
ptr = myString;
ptr += 5;

A Compiler error
B f
C efg
D defg

这道题声明了一个char类型的指针变量ptr 还有一个指字符数组

ptr = myString 代表ptr初始化指向字符数组的首地址

ptr += 5 代表偏移五个字节,所以这时ptr指向f

所以这道题的答案是B


💦第八题

下面3段程序代码的效果一样吗()

int b;
(1)const int *a = &b;
(2)int const *a = &b;
(3)int *const a = &b;

A (2)=(3)
B (1)=(3)
C (1)=(2)
D 都不一样

这里有const,我们来了解两个概念:

  • 常量指针:指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。
  • 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。
  • 区分:const *的相对位置

const 在 * 的左边,常量指针
const 在 * 的右边,指针常量

12 是常量指针,3 是指针常量

这道题的答案是C


💦第九题

32位系统中,定义**a[3][4],则变量占用内存空间为()。

A 4
B 48
C 192
D 12

是在32位系统中,[]的优先级是高于*的,所以这是一个三行四列数组,存放指针类型

  • 占用4个字节,一共有12个 所以12 * 4 = 48

这道题的答案是48


💦第十题

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>
int main(){
	long long a = 1, b = 2, c = 3;
	printf("%d %d %d\n", a, b, c);
	return 0;
}

A 1,2,3
B 1,0,2
C 1,3,2
D 3,2,1

这道题是在32位小端的机器上运行,先讲一下什么是大小端

大端:低位存高地址

小端:低位存低地址

左低右高
请添加图片描述

longlong类型占8个字节,用小端存储

a:01 00 00 00 00 00 00 00
b:02 00 00 00 00 00 00 00
c:03 00 00 00 00 00 00 00

printf在打印的时候会创建函数栈帧,是从高地址向低地址增长的,从高地址开辟空间往低地址延伸,并且函数在调用的时候是从右往左入栈的,依次是c b a,三个变量入栈以后再进行打印,%d每次获取四个字节,栈是后进先出,所以先打印a

请添加图片描述

所以这道题的答案是1 0 2 ,所以选B


编程题

🔥第一题

链接:最长的数字串

请添加图片描述

  • 解题思路:
  1. 两重循环遍历字符串,记录全部为数字的字符串长度,将所有为数字的字符串添加进入列表对象中
  2. 遍历第一步生成的列表对象,将所有与最大数字字符串长度相等的字符串取出来用新的字符串保存
  • 代码演示:
#include <iostream>
#include <string>
using namespace std;

int main() {
    string str ,cur ,ret;

    cin >> str;

    for(int i = 0; i <= str.length();i++)//注意一定要加=,不然极端情况如果最后是最长的字符串无法进入循环中
    {
        if(str[i] >= '0' && str[i] <= '9')
        {
            cur += str[i];
        }
        else
        {
            if(ret.size() < cur.size())
            {
                ret = cur;
            }
            else
            {
                cur.clear();
            }
        }
    }
    cout << ret << endl;
    
}



🔥第二题

链接:超过长度一半的数字

请添加图片描述

  • 解题思路

思路一:
数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优;

思路二:
众数:就是出现次数超过数组长度一半的那个数字如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。

  • 代码演示:
class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
         if(numbers.empty())
            return 0;

        sort(numbers.begin(),numbers.end());
        int midNum = numbers[numbers.size()/2];
        int count = 0;
        for(int i = 0; i < numbers.size();i++)
        {
            if(midNum == numbers[i])
            {
                count++;
            }
        }
        if(count > numbers.size()/2)
        {
            return midNum;
        }
        return 0;
    }


        // int retsult = numbers[0];
        // int times = 1;

        // for(int i = 1; i < numbers.size();i++)
        // {
        //     if(times != 0)
        //     {
        //         if(numbers[i] == retsult)
        //         {
        //             ++times;
        //         }
        //         else
        //             --times;
        //     }
        //     else
        //     {
        //         retsult = numbers[i];
        //         times = 1;
        //     }
        // }
        // //二次遍历数组看retsult是不是众数
        // for(int i = 0; i < numbers.size();i++)
        // {
        //     if(numbers[i] == retsult)
        //     {
        //         times++;
        //     }
        // }
        // if(times > numbers.size()/2)
        //     return retsult;
        // else
        //     return 0;
    
};



相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【JDBC】入门增删改查
  • 螺旋探索与自适应混合变异的麻雀搜索-附代码
  • 精品基于PHP实现的好物优购商城|电商小程序
  • 求解大规模优化问题的改进正弦余弦算法
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • [系统安全] 逆向工程进阶篇之对抗逆向分析
  • 二十三、Hive本地模式安装
  • Spring Cloud Alibaba — 0、服务架构演变
  • 实战 - AES对称加密算法加密和解密设备联动码
  • IDEA统计项目代码量
  • 图像处理:推导五种滤波算法(均值、中值、高斯、双边、引导)
  • 【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】
  • 合宙AIR32F103CBT6刷回CMSIS-DAP固件以及刷ST-LINK V2-1固件方法
  • 【操作系统】volatile、wait和notify以及“单例模式”基础知识
  • java自定义注解防重提交
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Golang-长连接-状态推送
  • Java 内存分配及垃圾回收机制初探
  • java中的hashCode
  • jQuery(一)
  • js作用域和this的理解
  • leetcode386. Lexicographical Numbers
  • vue-loader 源码解析系列之 selector
  • Vue全家桶实现一个Web App
  • windows下mongoDB的环境配置
  • 删除表内多余的重复数据
  • 移动端唤起键盘时取消position:fixed定位
  • kubernetes资源对象--ingress
  • UI设计初学者应该如何入门?
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #07【面试问题整理】嵌入式软件工程师
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (八)c52学习之旅-中断实验
  • (二)springcloud实战之config配置中心
  • (回溯) LeetCode 77. 组合
  • (接口封装)
  • (七)c52学习之旅-中断
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转) ns2/nam与nam实现相关的文件
  • (转载)利用webkit抓取动态网页和链接
  • .net 4.0发布后不能正常显示图片问题
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET Standard 的管理策略
  • .net 设置默认首页
  • .NET 中让 Task 支持带超时的异步等待
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .net中生成excel后调整宽度
  • @JSONField或@JsonProperty注解使用