IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C++笔试强训】第三天 -> 正文阅读

[C++知识库]【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;
    
};



  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:13:43  更:2022-10-17 12:13:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 10:37:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码