【C++】笔试训练(二)

news2024/12/23 6:18:11

目录

  • 一、选择题
  • 二、编程题
    • 1、排序子序列
    • 2、倒置字符串

一、选择题

1、1. 使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的?
A %-30.4e
B %4.30e
C %-30.4f
D %-4.30f

答案:C
解析:默认是右对齐,左对齐要加-,所以是%-30.4f

2、请找出下面程序中有哪些错误()

int main() 
{
	int i = 10;
	int j = 1;
	const int* p1;//(1)
	int const* p2 = &i; //(2)
	p2 = &j;//(3)
	int* const p3 = &i;//(4)
	*p3 = 20;//(5)
	*p2 = 30;//(6)
	p3 = &j;//(7)
	return 0;
}

A 1,2,3,4,5,6,7
B 1,3,5,6
C 6,7
D 3,5

答案:C
解析:常量指针:所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发送改变
指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值是可以发生改变的,可以通过指针解引用改变指针所值空间的值
区别:const在 * 的左边是常量指针,const在 * 的右边是指针常量
p2是一个常量指针,p3是一个指针常量,所以(6)、(7)是错的

3、下面叙述错误的是()

char acX[] = "abc";
char acY[] = { 'a','b','c' };
char* szX = "abc";
char* szY = "abc";

A acX与acY的内容可以修改
B szX与szY指向同一个地址
C acX占用的内存空间比acY占用的大
D szX的内容修改后,szY的内容也会被更改

答案:D
解析:acX和acY是在栈上开辟的,可以修改。A对
szX和szY指向同一个常量字符串,所以指向同一个地址。B对
acX是字符串初始化,末尾有一个‘\0’,也会占一个空间,占了4可空间,acY是字符数组初始化,没有‘\0’,占了3个空间。C对
szX的内容修改后,也就是说szX的指向发生改变,而常量字符串没有发生改变,而szY的指向并没有发生改变,所以常量字符串也没有发生改变

4、在头文件及上下文均正常的情况下,下列代码的运行结果是()

int a[] = { 1, 2, 3, 4 };
int* b = a;
*b += 2;
*(b + 2) = 2;
b++;
printf("%d,%d\n", *b, *(b + 2));

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

答案:C
解析:经过* b += 2、* (b + 2) = 2 后,数组里的元素变为 3,2,2,4,经过b++后,b指向第二个元素,所以* b、* (b + 2) 的结果为2、4

5、下列关于C/C++的宏定义,不正确的是()
A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率

答案:B
解析:由于宏定义没有类型安全检测,并且是在预处理阶段进行宏替换的,所以无法进行调试的,所以要尽量使用const常量

6、有以下定义:

int a[10];
char b[80];

 函数声明为:

void sss(char[], int[]);

 则正确的函数调用形式是()
A sss(a,b);
B sss(char b[],int a[]);
C sss(b[],a[]);
D sss(b,a);

答案:D

7、用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()
A int *a[10];
B int (*a)[10];
C int (*a)(int);
D int (*a[10])(int);

答案:D
A是指针数组。B是数组指针。C是函数指针,有一个int参数,返回值类型也是是int。D是函数指针数组,有一个int参数,并返回int

8、以下 C++ 函数的功能是统计给定输入中每个大写字母的出现次数(不需要检查输入合法性,所有字母都为大写),则应在横线处填入的代码为()

void AlphabetCounting(char a[], int n) {
	int count[26] = {}, i, kind = 10;
	for (i = 0; i < n; ++i)
		_________________;
	for (i = 0; i < 26; ++i) {
		printf("%c=%d", _____, _____);
	}
}

A ++count[a[i]-‘Z’]
  ‘Z’-i
  count[‘Z’-i]
B ++count[‘A’-a[i]]
  ‘A’+i
  count[i]
C ++count[i]
  i c
  ount[i]
D ++count[‘Z’-a[i]]
  ‘Z’-i
  count[i]

答案:D

9、在32位CPU上选择缺省对齐的情况下,有如下结构体定义:

struct A 
{
	unsigned a : 19;
	unsigned b : 11;
	unsigned c : 4;
	unsigned d : 29;
	char index;
};

则sizeof(struct A)的值为()
A 9
B 12
C 16
D 20

答案:C
解析:unsigned类型首先会开辟一个4字节的空间,也就是32比特位,a占19个比特位,b占11个比特位,c占4比特位,d占29比特位,占满32个比特位后,还会开辟一个4字节的空间,所以unsigned类型开辟了12个字节的空间,所以struct A一共开辟了13个空间,内存对齐后,为16字节

10、下面代码会输出()

int main() 
{
	int a[4] = { 1,2,3,4 };
	int* ptr = (int*)(&a + 1);
	printf("%d", *(ptr - 1));
}

A 4
B 1
C 2
D 3

答案:A
解析:(int*)(&a + 1)会偏移整个数组的大小,所以指向的位置是最后一个元素的下一个位置,ptr - 1 向后偏移一个位置,所以打印的结果为4

二、编程题

1、排序子序列

入口:题目连接

题目描述:
在这里插入图片描述

题目解析:
本题要求解的是排序子序列,排序子序列为非递增或者非递减,注意:非递减就是a[i]<=a[i+1],递减就是a[i]>a[i+1],非递增就是a[i]>=a[i+1],递增就是a[i]<a[i+1]。

解题思路:

  1. 本题依次比较整个数组
  2. a[i+1]>a[i] ,则进入非递减序列判断,直到遍历到下一个值不大于等于为止count++,然后进行下一位
    置的判断
  3. a[i+1]<a[i],则进入非递增序列判断,直到遍历到下一个值不小于等于为止count++,然后进行下一位
    置的判断
  4. a[i+1] == a[i]不进行操作,++i进行下一位置遍历,因为相等既可以属于非递增序列,也可以属于非递减
    序列。

本题注意点:本题开始比较a[i+1]与a[i]进行比较,为了避免越界,数组定义为n+1个,同时给a[n] = 0;
a[n] = 0带来的影响,我们分为三种情况讨论:

  1. 若到a[n-1] 的最后一组是非递减序列,当i==n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入
    条件已经说明了(去看看题目输入条件描述),里面的循环结束,i++,count++,i == n,外面的循环结
    束。
  2. 若到a[n-1] 的最后一组是非递增序列,当i==n-1,a[i] >a[i+1],因为前面的数都是大于0的,这个输入
    条件已经说明了(去看看题目输入条件描述),循环再走一次,i++, i == n,里面的循环结束,i++,
    count++,i ==n+1,外面的循环结束。
  3. 第三种情况 1 2 1 2 1最后一个数是单独的情况,后面补个0,序列变成1 2 1 2 1 0,当走完全面的序列
    i==n-1时,a[i] > a[i+1],进入判断出一个非递增序列,count++,i++,循环结束。
  4. 也就是说数组最后一个位置多增加一个0,不会影响第1、2情况的判断,主要是帮助第3情况的正确判
    断。

代码展示:

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n = 0;
	cin >> n;
	vector<int> a;
	a.resize(n + 1);
	a[n] = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> a[i];
	}

	int i = 0;
	int count = 0;
	while (i < n)
	{
		if (a[i] < a[i + 1])
		{
			//注意i不能一直加,要i<n,但是i+1会越界,
			//要多开一个空间,还要a[n]=0
			while (i < n && a[i] <= a[i + 1])
			{
				i++;
			}
			count++;
			i++;
		}
		else if (a[i] == a[i + 1])
		{
			i++;
		}
		else
		{
			while (i < n && a[i] >= a[i + 1])
			{
				i++;
			}
			count++;
			i++;
		}
	}
	cout << count << endl;
	return 0;
}

2、倒置字符串

入口:题目连接

题目描述:
在这里插入图片描述

题目解析:
一段字符串中的前后单词交换,以单词为单位逆置。

解题思路1:
先将整个字符串逆置过来,再遍历字符串,找出每个单词,对单词逆置。这里我们使用了stl算法中的
reverse,所以这里使用迭代器遍历string

代码展示:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
	string str;
	getline(cin, str);
	
	// 翻转整个句子
	reverse(str.begin(), str.end());
	
	// 翻转单词
	auto start = str.begin();

	while (start != str.end())
	{
		auto end = start;
		while (end != str.end() && *end != ' ')
		{
			end++;
		}
		reverse(start, end);
		if (end != str.end())
		{
			start = end + 1;
		}
		else
		{
			start = end;
		}
	}
	cout << str << endl;
	return 0;
}

解题思路2:
第二思路是一个比较讨巧的思路,直接利用cin>>s接收输入,遇到空格就结束了,自然就分割开了每个单
词,其次将每次接收到的单词拼接到之前串的前面就逆置过来了

代码展示:

#include <iostream>
#include <string>
using namespace std;
// cin读取string时自动会被空格分隔开,用另一个字符串存储进行逆序输出
int main()
{
	string s1, s2;
	cin >> s2;
	while (cin >> s1)
		s2 = s1 + " " + s2;
	cout << s2 << endl;
	return 0;
}

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

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

相关文章

zookeeper mac安装

目录 1.下载zookeeper安装包 2.解压安装包 3.修改配置文件 4.启动服务端 5.启动客户端 这边工作中用到了zookeeper组件&#xff0c;但自己独立安装弄的不太多&#xff0c;这边本机mac装一个做测试使用 以下是安装记录&#xff0c;可以作为参考 从以下链接zookeeper版本列…

【二】xxl-job 源码分析

xxl-job 源码分析 简介&#xff1a;阅读优秀的开源项目源码总是一件让人激动的事情&#xff0c;分布式调度平台xxl-job我们在生产环境也是有了很多的实践应用&#xff0c;一款产品使用久了对其实现原理多少有些了解了&#xff0c;今天也是抽出整块的时间来认真分析一下xxl-job的…

RFID技术:钢条加工现场的智能化管理利器

RFID技术&#xff1a;钢条加工现场的智能化管理利器 RFID&#xff08;Radio Frequency Identification&#xff09;技术作为一种非接触式自动识别技术&#xff0c;近年来在工业领域得到广泛应用。本文将探讨RFID在钢条加工现场的应用&#xff0c;包括材料追踪与管理、生产过程…

【LeetCode热题100】--560.和为K的子数组

560.和为K的子数组 示例2的结果&#xff1a; 输入&#xff1a;nums [1,2,3] ,k3的时候 连续子数组有[1,2],[3]&#xff0c;一共有2个 利用枚举法&#xff1a; 枚举[0,…i]里所有的下标j来判断是否符合条件 class Solution {public int subarraySum(int[] nums, int k) {i…

Redis高可用之持久化、主从复制(附配置实例)

目录 一、Redis高可用1.1 简介1.2 高可用策略 二、Redis 持久化2.1 简介2.2 redis 的 2 种持久化方式2.2.1 RDB持久化2.2.2 AOF持久化 三、Redis主从复制3.1 什么是主从复制&#xff1f;3.2 为什么要用主从复制&#xff1f;3.3 主从复制的特性3.4 主从复制工作原理3.4.1 全量复…

Java项目-Spring Boot的生鲜网上交易系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统功能4 功能设计5系统详细设计5.1系统功能模块5.2后台功能模块5\.2\.1用户功…

TextSniper for Mac: 革新您的文本识别体验

你是否曾经需要从图片或扫描文档中提取文本&#xff0c;却苦于没有合适的工具&#xff1f;那么&#xff0c;TextSniper for Mac将是你的完美解决方案。这款文本识别工具将彻底改变你处理图像和扫描文件的方式&#xff0c;让你更快速、更高效地完成任务。 TextSniper for Mac 是…

直流负载箱的使用场景和应用范围是什么?

直流负载箱是用于模拟电子设备负载的测试仪器&#xff0c;用于电源供应器、逆变器、电池等直流电源设备的性能测试和负载仿真&#xff0c;它可以模拟各种负载条件&#xff0c;以便测试和评估电源设备在不同负载情况下的工作性能&#xff0c;直流负载箱的使用场景和应用范围广泛…

Jmeter状态码及请求

Jmeter与LR的区别? 1.都是压测工具&#xff0c;可以用来做性能测试&#xff0c;但是Jmeter比较轻量级。jmeter 是用java语言写的&#xff0c;需要java环境&#xff0c;LR不需要&#xff0c;除非用iavavuser协议 (不用掌握) 2.Jmeter更偏向于功能和技术&#xff0c;LR偏向于业务…

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001

VME-7807RC-414001 350-93007807-414001 VMIVME-017807-411001 VMIVME-017807-414001 由于第12代英特尔酷睿处理器的16核/24线程配置&#xff0c;Nuvo-9000型号与之前的平台相比&#xff0c;性能大幅提升。它们还支持新的DDR5内存标准&#xff0c;以获得更多内存带宽&#xf…

气传导耳机有哪些品牌?性能不错的气传导耳机分享

​气传导耳机采用空气传导技术&#xff0c;使声音传递更加自然舒适。随着气传导耳机的创新发展&#xff0c;越来越多用户不知道气传导耳机该怎么选了&#xff0c;所以今天我来推荐几款相当不错的气传导耳机给大家参考&#xff0c;享受音乐时不受耳道压力的困扰。 一、NANK南卡…

电力智能化运维平台:提高效率和保障电力系统的稳定运行

随着信息技术、人工智能、物联网的发展&#xff0c;电力系统的规模和复杂性也在不断增长。为了确保电力系统的稳定运行&#xff0c;传统的运维方式已经无法满足需求。电力智能化运维平台应运而生&#xff0c;为电力行业带来了全新的运维模式和技术手段。 电力智能化运维平台…

密歇根大学发布3款生成式AI产品,并应用在教学、日常工作!

密歇根日报消息&#xff0c;美国顶级公立大学-密歇根大学宣布推出3款生成式AI产品UM-GPT、UM-GPT开发包和UM-Maizey&#xff0c;并将其应用在教学、日常工作、学术研究等领域。微软也参与了此次产品研发&#xff0c;并提供技术支持。 密歇根大学将为安娜堡分校、弗林特分校、迪…

重学C++ | std::set 的原理

std::set 是C标准库中的容器之一&#xff0c;它基于红黑树实现。std::set 利用红黑树的特性来实现有序的插入、查找和删除操作&#xff0c;并且具有较好的平均和最坏情况下的时间复杂度。 当向 std::set 插入元素时&#xff0c;它会按照特定的比较函数&#xff08;bool less<…

优化您的Mac系统,提升性能——TinkerTool System for Mac

TinkerTool System for Mac 是一款功能强大的系统维护工具&#xff0c;为您提供了一系列优化和排错工具&#xff0c;帮助您轻松管理和提升Mac系统的性能。不论您是普通用户还是高级用户&#xff0c;这款应用程序都能满足您的需求&#xff0c;让您的Mac保持高效稳定。 TinkerTo…

java项目之人事管理系统(ssm源码+文档)

项目简介 人事管理系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、员工管理、部门经理管理、部门信息管理、员工考勤管理、签到管理、请假申请管理、工资查询管理、部门类型管理.部门经理&#xff1a;个人中心、员工管理、部门信息管理、员工考勤管理、签到管理…

【rhce考试时间是每年什么时候呢?】

RHCE9.0 新技术 公开课 10月11日&#xff0c;12日 感兴趣可留言 如果你是一个系统管理员&#xff0c;或者正朝着这个方向努力前进&#xff0c;那么你可能已经听过RHCE这个词。RHCE是Red Hat Certified Engineer的缩写&#xff0c;是全球公认的Linux系统工程师认证之一。通过获…

[C++随笔录] list模拟实现

list模拟实现 基本结构(1)iterator类的基本结构(2)Node类的基本结构(3)list类的基本结构 初始化(1) list类的构造函数(2) Node类的构造函数(3) iterator类中的构造函数 迭代器行为(1) 前置&& 后置(2) 前置-- && 后置--(3)operator* && operator->(4…

微机原理与接口技术

8088/8086 CPU的两种工作模式 8088/8086可工作于两种模式下&#xff1a;最小模式与最大模式 ■最小模式为单处理器模式&#xff0c;所有控制信号由微处理器产生 ■最大模式为多处理器模式&#xff0c;部分控制信号由外部总线控制器 产生 ■用于包含协处…

阿里云服务器共享型和企业级性能差异对比

阿里云ECS云服务器共享型和企业级有什么区别&#xff1f;企业级就是独享型&#xff0c;共享型和企业级云的主要区别CPU调度模式&#xff0c;共享型是非绑定CPU调度模式&#xff0c;企业级是固定CPU调度模式&#xff0c;共享型云服务器在高负载时计算性能可能出现波动不稳定&…