【C++刷题集】-- day3

news2024/11/15 9:50:11

目录

选择题

单选

OR59 字符串中找出连续最长的数字串⭐

【题目解析】

【解题思路】

JZ39 数组中出现次数超过一半的数字⭐

【题目解析】

【解题思路1】

【解题思路2】


选择题

单选

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

#include <stdio.h>
int 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);
    return 0;
}
6
6789
'6'
789

正确答案:


解析:

  • %s:格式化打印是遇见 '\0'(0) 才会停止打印。

----------------------------------------------

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

#include <iostream.h>
using namespace std;
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;
}
second third
hello
first second
hellothird

正确答案:


解析:

        根据x % 2 = 1匹配 case 1: ,根据y = 3匹配 default: ,于是会打印 "hello" 。但是此处我们需要注意,外层的switch语句的case : 是没有 break; 语句的,所以其会继续向下执行,然后执行case 2: ,再打印 "third" 。

        没有 break; 语句会一直执行到 break; 语句为止 / 结束。

----------------------------------------------

3、 以下能对二维数组a进行正确初始化的语句是 ( )
int a[2][] = {{0,1,2},{3,4,5}};
int a[][3] = {{0,1,2},{3,4,5}};
int a[2][4] = {{0,1,2},{3,4},{5}};
int a[][3] = {{0,,2},{},{3,4,5}};

正确答案:


解析:

二维数组再声明的时候,行可以省略,列是不可以省略的。

:声明的是两行,但是初始化的时候,初始化的是三行。

:初始化每一行的时候,必须连续的初始化,中间不能间隔。

----------------------------------------------

4、 能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是 ( ) 
return这二个数
形参用数组
形参用二个指针
用二个全局变量

正确答案:


解析:

return 每一次只能 return 一个数据类型,多个除非放到一个数组 / 一个容器里面。

用数组的话,在调用这个函数的时候需要传递数组的地址,然后将函数处理的结果,放到这个数组中,然后函数调用完之后,就可以通过主调函数去访问数组来获取处理结果。

用指针的话,在调用这个函数的时候需要传递两个地址变量,然后将对应的处理结果,放到地址的所属空间中,然后在函数调用完之后,主调函数通过两个指针去访问所属空间的值。

全局变量的作用域是在整个源文件都是有效的,所以主调函数可以对其访问,以获取处理结果。

----------------------------------------------

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

正确答案:


解析:

  • 题int *p[4]:[]的优先级是高于*的,所以p先和[]进行结合表示其是一个数组,然后数组里面存储的是int类型的指针 —— int类型的指针数组,元素个数为4

int p[4]:int类型的数组,元素个数为4

int *p:int类型的指针数组

int *(p[4]):此时[]的优先级是高于*的,int类型的指针数组,元素个数为4

int (*p)[4]:此时*的优先级是高于[]的,数组指针,元素个数为4,int类型

----------------------------------------------

6、 设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是
n=0; while(ch=getchar()!='\n') n++;
n=0; while(getchar()!='\n') n++;
for(n=0; getchar()!='\n'; n++);
n=0; for(ch=getchar(); ch!='\n'; n++);

正确答案:


解析:

while(ch=getchar()!='\n'):先getchar()获取一个字符,然后由于 != 优先级高于 '\n' ,所以,先进行 getchar()!='\n' 后再执行 ch = (getchar()!='\n'),虽然ch存在很奇怪,但是能计算。

操作符优先级(详细说明+表格+问题表达式)_川入的博客-CSDN博客

while(getchar()!='\n'):的简易版,能实现。

for(n=0; getchar()!='\n'; n++):getchar()!='\n' 作为判断条件,此可以理解为与效果一样,能实现。

for(ch=getchar(); ch!='\n'; n++):ch=getchar() 作为初始化部分,只有最开始的时候才会执行一次,所以是无法实现的,并且如果输入的第一个字符不是 '\n' 将会死循环。

----------------------------------------------

7、 以下代码
char* ptr;
char myString[] = "abcdefg";
ptr = myString;
ptr += 5;
代码执行之后ptr指向的内容是?
Compiler error
fg
efg
defg

正确答案:


解析:

        因为p指向的类型是char类型的。

----------------------------------------------

8、 下面3段程序代码的效果一样吗()
int b;
(1)const int* a = &b;
(2)int const* a = &b;
(3)int* const a = &b;
(2)=(3)
(1)=(3)
(1)=(2)
都不一样

正确答案:


解析:

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

(1)常量指针

(2)常量指针

(3)指针常量

----------------------------------------------

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

正确答案:


解析

        三行四列的一个数组,一共有 3 * 4 = 12 个元素。每一个元素都是int的二位指针类型,指针类型在32位系统中,是4个字节,于是:12 * 4 = 48。

----------------------------------------------

10、 假设在一个 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;
}
1,2,3
1,0,2
1,3,2
3,2,1

正确答案:


解析:

  • 大端:低位存高地址,高位存低地址。
  • 小段:高位存高地址,低位存低地址。

 C语言整数存储_大小端_川入的博客-CSDN博客

看题:

        long long类型是占8个字节,32 位 little endian 的机器。

        利用printf函数打印这三个变量的值,printf是一个库函数,在调用的时候,会创建一个函数栈帧。(栈:高地址向低地址增长)

        调用printf函数的时候,变量是从右到左入栈的(先c,再b,再a)。

        然后利用 %d 进行打印,每次获取4个字节内存的数据,然后根据后进先出的原则,依次向后4个字节,以转化为十进制打印。

        所以输出为:1 0 2

----------------------------------------------

OR59 字符串中找出连续最长的数字串

字符串中找出连续最长的数字串_牛客题霸_牛客网 (nowcoder.com)

【题目解析】

        本题是一个很简单的题目,这里就不解析了。

【解题思路】

        遍历字符串,使用str_tmp临时记录出现的数字片段,使用str_ret记录str_tmp临时出现的最长数字片段,最后返回str_ret。
#include <iostream>
#include <string>
using namespace std;

int main() {
    string str;
    cin >> str;
    string str_ret;
    string str_tmp;
    for(auto ch : str)
    {
        if(ch <= '9' && ch >= '0')
            str_tmp.push_back(ch);
        else
        {
            if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
            str_tmp.clear();
        }
    }
    if(str_tmp.size() > str_ret.size()) str_ret = str_tmp;
    cout << str_ret << endl;
}

JZ39 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字_牛客题霸_牛客网 (nowcoder.com)

【题目解析】

        本题题意很简单,需要找出超过一半的那个数字,需要注意这个题是一个往年面试的热门题型。

【解题思路1】

        数组排序后,如果符合条件的数存在,则一定是数组中间那个数。这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优。
class Solution {
public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        if(numbers.empty()) return 0;
        sort(numbers.begin(), numbers.end());
        return numbers[numbers.size() / 2];
    }
};

【解题思路2】

        众数:就是出现次数超过数组长度一半的那个数字,如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。
class Solution {
  public:
    int MoreThanHalfNum_Solution(vector<int> numbers) {
        int result = numbers[0];
        int times = 1;
        int i = 1;
        for (int i = 1; i < numbers.size(); ++i)
        {
            if (times != 0)
            {
                if (numbers[i] == result) // 相同记录个数
                    ++times;
                else // 不同消
                    --times;
            } 
            else // 前面的数全部消完,需要重新挨着再拿出一个数做标准
            {
                result = numbers[i];
                times = 1;
            }
        }
        return result;
    }
};

/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/564525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vite + vue3 + storybook + ts 搭建组件库记录

目标 只按需引入&#xff0c;不依赖babel-import-plugin 插件。第三方依赖都不打包。用原生fetch请求数据。仅支持esmodule。配置package.json type:"module" 搭建 根据storybook 官网文档&#xff0c;需要在已有的项目中运行 npx storybooklatest init 也就是事…

电源原理分析、波形分析、应力计算、回路布局

1、Flyback变换器工作模态分析&#xff1b; 2、Flyback关键波形分析&#xff1b; 3、RCD吸收电路设计及开关管应力&#xff1b; 4、从噪音回路看布线要点。 5、基于实际项目&#xff0c;原创反激开关电源视频教程曝光 Flyback 变换器模态分析 ​ ON&#xff1a;开关管导通&…

516. 最长回文子序列

516. 最长回文子序列 C代码&#xff1a;dp int longestPalindromeSubseq(char* s) {int n strlen(s);int dp[n][n];memset(dp, 0, sizeof(dp));for (int i 0; i < n; i) {dp[i][i] 1;}for (int i n - 1; i > 0; i--) {for (int j i 1; j < n; j) {if (s[i] s[…

2023最新CTF入门的正确姿势

前言 随着网络安全意识的增强&#xff0c;越来越多的人开始涉足网络安全领域&#xff0c;其中CTF比赛成为了重要的学习和竞赛平台。本人从事网络安全工作多年&#xff0c;也参加过大大小小的CTF比赛&#xff0c;今天就来详细介绍CTF的流程&#xff0c;以及需要具备的知识&…

【前端相关】elementui使用el-upload组件实现自定义上传

elementui使用el-upload组件实现自定义上传 一、问题描述二、实现方式三、实现步骤3.1 方式一&#xff1a;选择后自动上传3.2 方式二&#xff1a;选择图片后手动上传3.3 拓展&#xff1a;上传文件夹 四、服务器相关接口 一、问题描述 elmentui 中的upload默认的提交行为是通过…

[C++]哈希表实现,unordered_map\set封装

目录​​​​​​​ 前言&#xff1a; 1 哈希 1.1 为什么有哈希 1.2 哈希结构 1.3 哈希冲突 2 闭散列 2.1 闭散列结点结构和位置状态表示 2.2 哈希类结构 2.3 插入 2.4 查找 2.5 删除 3 开散列 3.1 哈希表结点结构 3.2 哈希表结构 3.3 插入 3.4 查找、删除 3.5…

Ubuntu/Debian/CentOS搭建Socks5代理一键脚本

说明 Socks5属于明文代理&#xff0c;不要用于科学上网&#xff0c;否则会被阻断端口&#xff0c;可用于正常的跳板使用&#xff1b; 比如SSH转发加速国外VPS的连接速度&#xff0c;特别是一些延迟高或者丢包高的VPS&#xff1b; 使用Socks5转发后SSH就可以快速稳定的连接了&a…

Java中的Replace和ReplaceAll的区别

replace和replaceAll是都是String类中提供的两种用于字符/字符串替换的方法&#xff0c;从字面意思理解&#xff0c;replace表示替换单个匹配项&#xff0c;而replaceAll表示替换所有匹配项&#xff1b;实际上并不是这样子的,replace和replaceAll都是替换所有匹配项,replace是非…

链式二叉树OJ题思路分享

⏩博主CSDN主页:杭电码农-NEO⏩   ⏩专栏分类:刷题分享⏪   ⏩代码仓库:NEO的学习日记⏩   &#x1f339;关注我&#x1faf5;带你刷更多C语言和数据结构的题!   &#x1f51d;&#x1f51d; 链式二叉树OJ题分享 1. 前言&#x1f6a9;2. 单值二叉树&#x1f6a9;2.1 审题…

macOS Ventura 13.5beta OpenCore黑苹果双引导分区原版镜像

镜像特点&#xff08;原文地址&#xff1a;http://www.imacosx.cn/113700.html&#xff0c;转载请注明出处&#xff09; 完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引…

六级备考25天|CET-6|听力第五讲|演讲满分技巧|分值最高|2022年6月考题16-18题|18:15~19:00

14.2分一题 抓重点 目录 2. 听力原文复现 问题16 问题17 问题18 3. 听力原文重点词汇 问题16 问题17 问题18 2. 听力原文复现 问题16 What does the speaker say about most American hospitals&#xff1f; visit brief useless Dont challenge with the authority unle…

HEVC熵编码核心点介绍

熵编码基本原理 消息与信息 把客观物质运动和主观思维的活动状态表达出来就成为了消息&#xff1b;消息中包含信息&#xff0c;是信息的载体&#xff1b;因此&#xff0c;信息与消息既有区别又有联系的&#xff1b; 获取信息的过程就是一个消除或部分消除不确定性的过程&…

Linux网络基础-4

在之前的网络基础博客中&#xff0c;我们对网络进行了概要解释&#xff0c;了解了应用层和传输层的知名协议。接下来我们来对网络层的典型协议进行解析。 目录 1.网络层协议 2.IP协议 2.1协议格式 2.2地址管理 2.3特殊网络 2.3.1私网的组建 2.3.2特殊IP地址 2.4路由选…

ACP(MaxCompute篇)-Tunnel上传下载数据

概述 相关命令 odpscmd里面包含了tunnel test11_123>tunnel help; Usage: tunnel <subcommand> [options] [args] Type tunnel help <subcommand> for help on a specific subcommand.Available subcommands:upload (u)download (d)resume (r)show (s)purge …

探索SpringBoot 3.1的惊艳新特性

一、介绍 1.1 新特性概述 经过半年的沉淀 Spring Boot 3.1于2023年5月18日正式发布了&#xff0c;带来了许多令人兴奋的新特性和改进。本篇博客将详细介绍Spring Boot 3.1的新特性、升级说明以及核心功能的改进。 同时&#xff0c;2.6.x 版本线已经停止维护了&#xff0c;最新…

《消息队列高手课》课程笔记(二)

消息模型&#xff1a;主题和队列有什么区别&#xff1f; 两类消息模型 早期的消息队列&#xff0c;就是按照“队列”的数据结构来设计的。 生产者&#xff08;Producer&#xff09;发消息就是入队操作&#xff0c;消费者&#xff08;Consumer&#xff09;收消息就是出队也就是…

数字逻辑习题

第一次作业 第二次作业 第三次作业 卡诺图最小项 计算模数M考察74LS161的特点 计数器数据选择器 在A和C加上非门即可 求计数器的模数M 该计数器是环形计数器&#xff08;循环右移&#xff09;&#xff0c;模数根据初始状态而定 由n个移位寄存器构成的环形计数器最大可能模值为n…

韩流在元宇宙中崛起,感受韩国文化的魅力!

大获成功&#xff01;第一波 K-verse 土地全部售罄&#xff01; 多家领先韩国文化公司&#xff0c;包括 SMBM、CUBE 娱乐、LINE Studio、Gravity、乐天世界、K League 等进驻 The Sandbox&#xff0c;并在第一波 K-verse 土地销售活动上发布了邻近这些公司的 LAND。 所有土地全…

哈希表(散列表)详解

&#x1f495;**今天的每一秒都是珍贵的&#xff0c;因为它永远不会再次出现。**&#x1f495; &#x1f43c;作者&#xff1a;不能再留遗憾了&#x1f43c; &#x1f386;专栏&#xff1a;Java学习&#x1f386; &#x1f697;本文章主要内容&#xff1a;深入理解哈希表&#…

npm init和npm create、npm create vite什么意思

npm init 和npm create 之前在用npm时&#xff0c;一直都是npm init来初始化一个项目并生成package.json文件。 但是&#xff0c;今天在看vite的官方文档时&#xff0c;vite上说创建一个vite项目的命令是 npm create vitelatest之前一直没有用过npm create这个命令&#xff…