【C/C++笔试练习】——常量指针和指针常量、位段的内存分配、统计输入的字母个数、排序子序列、倒置字符串

news2024/11/25 0:10:01

文章目录

  • C/C++笔试练习
    • 1.常量指针和指针常量
      • (1)常量指针和指针常量的定义
      • (2)判别常量指针和指针常量
      • (3)常量指针和指针常量的特性
    • 2.结构体内存分配
      • (4)位段的内存分配计算
    • 3.完善程序
      • (5)统计输入大写字母的出现次数
    • 4.编程题
      • (6)排序子序列
      • (7)倒置字符串

C/C++笔试练习

1.常量指针和指针常量

(1)常量指针和指针常量的定义

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

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

  

  “常量指针”和“指针常量”是两种特殊类型的指针,它们有着各自的特性和用途。

  (1)常量指针(Constant Pointer):

  常量指针是指向常量的指针。这意味着你不能通过这个指针来改变它所指向的值,但你可以改变这个指针本身所指向的地址。例如:

int a = 5;  
int b = 10;  
int * const ptr = &a;  
*ptr = 10;  // 错误,不能修改ptr所指向的值  
ptr = &b;   // 正确,可以修改ptr所指向的地址

  (2)指针常量(Pointer Constant):

  指针常量是指常指针,即指针本身是个常量,不能改变它的指向,但它所指向的值可以改变。例如:

int a = 5;  
int b = 10;  
const int * ptr = &a;  
*ptr = 10;  // 错误,不能修改ptr所指向的值  
ptr = &b;   // 错误,不能修改ptr所指向的地址

  
  判别常量指针和指针常量我们可以通过const和*的位置来判断:

  int const * p:const 在 *p 前面为常量指针

  int * const p:* 在const前面为指针常量

在这里插入图片描述

  (6)int const *p2 = &i; 这里定义了一个指向 const int 的指针 p2,然后试图修改它指向的值 *p2 = 30;,这是不允许的,因为 *p2 是一个常量,此时const修饰的是p2指向的值,所以不能被修改。

  (7)int *const p3 = &i; 这里定义了一个 const 指针 p3,然后试图改变它的指向 p3 = &j;,这是不允许的,因为 p3 是一个常量指针,此时const修饰的是p3,是一个指针,所以不能改变它的指向。

   答案选:C

             

(2)判别常量指针和指针常量

   下面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 都不一样

在这里插入图片描述
  通过上面的概念我们可以得到:(1)是常量指针(2)是常量指针(3)是指针常量

   答案选:C

             

(3)常量指针和指针常量的特性

   请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。

A.const int const *x = &y;
B.int * const x = &y;
C.const int *x = &y;
D.int const *x = &y;
E.const int * const x = &y;

在这里插入图片描述
   结合第(1)(2)对于常量指针和指针常量的介绍

   答案选:B

             

2.结构体内存分配

(4)位段的内存分配计算

  在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

在这里插入图片描述
  为了放下unsigned类型元素,系统申请了四个字节即32个比特位,此时可以放下a和b总共30比特位,接下来的c占4比特位,前四个字节放不下了,所以再开辟四个新的字节空间放入c,接下来的的d占了29个比特位,第二个字节已经有了4个比特位,29+4=33>32放不下,所以再开辟四个字节。放入上面的5个元素时,struct A一共占13个字节,根据结构体对其规则,结构体的大小必须为最大对齐数的整数倍,所以还要申请3个字节,使其成为4的整数倍。

   答案选:C

             

3.完善程序

(5)统计输入大写字母的出现次数

   以下 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’]     B ++count[‘A’-a[i]]
   ‘Z’-i           ‘A’+i
   count[‘Z’-i]       count[i]

  C ++count[i]      D ++count[‘Z’-a[i]]
   i           ‘Z’-i
   count[i]        count[i]

   们需要统计给定输入中每个大写字母的出现次数。给定的输入是一个字符数组a,数组长度为n。

   首先,我们定义一个长度为26的整型数组count,用来存储每个大写字母出现的次数。数组下标0对应字母’A’,下标1对应字母’B’,以此类推,下标25对应字母’Z’。

   接下来,我们遍历输入字符数组a中的每个字符。对于每个字符,我们可以将其与字符’Z’做差,得到对应的数组下标,然后将对应的计数器加1。

   最后,我们遍历计数器数组count,输出每个字母和其出现的次数。

   答案选:D

             

4.编程题

(6)排序子序列

排序子序列

  解题思路:

  (1)应该依次比较整个数组

  (2)a[i+1]>a[i] ,则进入非递减序列判断, 直到遍历到下一个值不大于等于为止count++,然后进行下一位置的判断

  (3)a[i+1]<a[i],则进入非递增序列判断, 直到遍历到下一个值不小于等于为止count++,然后进行下一位置的判断

  (4)a[i+1] == a[i]不进行操作,++i进行下一位置遍历,因为相等既可以属于非递增序列,也可以属于非递减序列。

#include <iostream>
#include<vector>
using namespace std;

int main() {
    int n=0;
    cin>>n;
    vector<int> v(n,0);
    for(int i=0;i<n;i++)
    {
        cin>>v[i];
    }
    //遍历整个vector
    int i=0;
    int count=0;
    while(i<n)//如果有递增或者递减情况改变,计数器++
    {
        if(v[i]>v[i+1])//递减序列
        {
            while(i<n&&v[i]>=v[i+1])
            {
                i++;//满足递减情况就一直向后移动
            }

            //不满足了直接退出,count++
            count++;
            i++;//寻找下一段子序列的情况
        }
        else if(v[i]<v[i+1])//递增序列
        {
            while(i<n&&v[i]<+v[i+1])
            {
                i++;//满足递增情况就一直向后移动
            }

            count++;
            i++;
        }
        else//相等的元素直接向后走
        {
            i++;
        }
    }
    cout<<count;
    return 0;
}

             

(7)倒置字符串

倒置字符串

  解法一:

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

#include <algorithm>
#include <iostream>
using namespace std;
 
int main() {
    string str;
    getline(cin,str);
    reverse(str.begin(),str.end());//整体反转
    //再进入循环单个反转
    string::iterator start=str.begin();
    while(start!=str.end())
    {
        auto end=start;
        while(*end!=' '&&end!=str.end())
        {
            end++;//找单个单词
        }
 
        //找到后反转单个单词
        reverse(start,end);
 
        //更改start和end的位置,使其指向下一个位置
        if(end!=str.end())
        {
            start=end+1;
        }
        else
        {
            start=end;
        }
    }
    cout<<str;
    return 0;
}

  
  解法二:

  直接利用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/1048766.html

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

相关文章

【事务】事务的特性、并行事务有什么问题、事务的隔离级别等重点知识汇总

目录 事务的四大特性 并行事务会引发什么问题&#xff1f; 事务的隔离级别 事务的四大特性 原子性&#xff1a;一个事务中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成&#xff0c;不会结束在中间某个环节。事务在执行过程中发生错误&#xff0c;会被恢复…

目标检测算法改进系列之Backbone替换为EfficientFormerV2

EfficientFormerV2 随着视觉Transformers&#xff08;ViTs&#xff09;在计算机视觉任务中的成功&#xff0c;最近的技术试图优化ViT的性能和复杂性&#xff0c;以实现在移动设备上的高效部署。研究人员提出了多种方法来加速注意力机制&#xff0c;改进低效设计&#xff0c;或…

如何测试接口?首先你得知道如何开发接口。

接口测试&#xff1a;接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。&#xff08;来自某百科&a…

最全的QgraphicsEffect设置

在Qt中&#xff0c;QGraphicsEffect有四个子类&#xff0c;分别为QGraphicsBlurEffect, QGraphicsColorizeEffect, QGraphicsDropShadowEffect, and QGraphicsOpacityEffect&#xff0c;用于实现模糊、着色、阴影、透明度功能 下面就是对这四种功能以及效果做测试 1.QGraphicsB…

服务器搭建(TCP套接字)-libevent版(服务端)

Libevent 是一个开源的事件驱动库&#xff0c;用于开发高性能、并发的网络应用程序。它提供了跨平台的事件处理和网络编程功能&#xff0c;具有高性能、可扩展性和可移植性。下面详细讲解 Libevent 的主要组成部分和使用方法。 一、事件基础结构&#xff08;event_base&#x…

26530-2011 地理标志产品 崂山绿茶

声明 本文是学习GB-T 26530-2011 地理标志产品 崂山绿茶. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了崂山绿茶地理标志产品的术语和定义、保护范围、分类、等级和实物标准样、要求、试 验方法、检验规则、标志、标签、包装、…

遥遥领先!探索Amazon CodeWhisperer魔力,你的私人AI编程助手!

本文目录 【前言】一、Amazon CodeWhisperer 功能概览1.1 强大的代码建议1.2 支持多种语言与IDE1.3 安全扫描 二、沉浸式体验使用Amazon CodeWhisperer实战开发代码2.1 Pycharm中快速导入Amazon CodeWhisperer2.2 使用CodeWhisperer快速构建Python代码2.3 Amazon CodeWhisperer…

26049-2010 银包铜粉 阅读笔记

声明 本文是学习GB-T 26049-2010 银包铜粉. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了银包铜粉的要求、试验方法、检验规则、标志、包装、运输、贮存、质量证明书以及合同 (或订货单)内容。 本标准适用于电子、机电、通讯…

汽车电子——产品标准规范汇总和梳理(信息安全)

文章目录 前言 一、整车 二、充电接口 三、诊断接口 四、远程接口 五、实施指南 总结 前言 见《汽车电子——产品标准规范汇总和梳理》 一、整车 《GB/T 40861-2021 汽车信息安全通用技术要求》 《GB XXXXX—XXXX 汽车整车信息安全技术要求》 《GB/T 41871-2022 信息…

华为再放大招!联合伙伴发布AI新人类,助力场景化大模型商用落地

原创 | 文 BFT机器人 随着人工智能技术的不断发展&#xff0c;我们正迎来一个全新的智能时代。在这个时代里&#xff0c;人工智能将在各个领域发挥重要作用&#xff0c;为人类带来更智能、便捷和高效的生活体验。为了加速人工智能的商用落地&#xff0c;华为联合伙伴发布了系列…

kafka各版本消息介绍

kafka各版本消息介绍 V0 offset&#xff1a;分区中的偏移量message size&#xff1a;消息大小crc32(4B):crc32校验值。校验范围为magic至value之间。magic(1B):消息格式版本号&#xff0c;此版本的magic值为0。attributes (1B):消息的属性。总共占1个字节&#xff0c;低3 位表…

IDEA社区版,真香!

IDEA&#xff08;IntelliJ IDEA&#xff09;是众多 Java 开发者的首选。 商业版的昂贵 IDEA 商业版&#xff08;IntelliJ IDEA Ultimate&#xff09;功能非常强大&#xff0c;能够满足 Java 开发的所有需求&#xff0c;但其高昂的价格…… 此时只能感叹&#xff0c;不是不想用…

学习在windows环境下定时执行python脚本的方法

学习在windows环境下定时执行python脚本的方法 一、准备Python脚本二、创建定时任务1、打开【任务计划程序】2、打开【创建任务】窗口3、创建任务一一常规4、创建任务一一触发器5、创建任务一一操作程序或脚本&#xff1a;添加参数&#xff1a;起始于&#xff1a; 7、创建任务一…

CAD/CAM/CAE SDK 国庆大放送:Eyeshot 2023.X Crack

创建、探索或编辑 3D CAD 数据 开发您自己的&#xff08;独立的&#xff09;CAD/CAM/CAE 应用程序,请选择合适自己的版本&#xff1a;&#xff1a;关注我&#xff0c;得知全球最新最全的组件动态&#xff0c;这个sdk我们会一直持续更新到最新&#xff0c;跟着我们&#xff0c;你…

GAT学习

文章目录 GAT注意力机制的定义图注意力层多头注意力机制GATConv层中forward函数步骤解析&#xff1a;1. 计算wh。wh:带权特征向量2. 计算注意力分数e3. 激活注意力分数e4. 由边的索引获取邻接矩阵5. 获得注意力分数矩阵。 attention[i][j]表示i j之间的注意力分数torch.where详…

苹果发布iOS 17.1首个beta版本,新增了这几个新功能!

苹果今日向iPhone/iPad用户推送了iOS/iPadOS17.1开发者预览版Beta版更新&#xff0c;iOS/iPadOS17.1Beta内部版本号为21B5045h。 iOS/iPadOS17.1Beta更新内容如下&#xff1a; 一&#xff1a;Apple Music“已喜爱”分类 用户可以在 iOS 17.1 的 Apple Music 中收藏歌曲、专辑…

优化邮箱体验!推荐替代方案:提升企业效率的选择

近年来&#xff0c;随着互联网技术的快速发展&#xff0c;电子邮件成为了企业沟通和协作的重要工具。而作为国内知名的企业邮箱服务提供商&#xff0c;网易企业邮箱凭借其稳定性、安全性和易用性&#xff0c;受到了广大企业的青睐。然而&#xff0c;随着市场竞争的加剧&#xf…

26532-2011 地理标志产品 慈溪杨梅

声明 本文是学习GB-T 26532-2011 地理标志产品 慈溪杨梅. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了慈溪杨梅的术语和定义、地理标志产品保护范围、要求、试验方法、检验规则及标志、 标签、包装、运输和贮存。 本标准适用…

基于java的银行风险预警系统的研究与实现

文章目录 导文摘要:前言:绪论:相关技术与方法介绍:系统分析:系统设计:系统实现:系统测试:总结与展望:导文 基于java的银行风险预警系统的研究与实现 本文基于Java开发了一款银行风险预警系统,旨在帮助银行有效管理风险并提前预警潜在风险。下面将对文中的各个部分进行…

微信小程序 课程签到系统

目录 前端页面展示主页面我的课程个人中心评论功能签到功能课程绑定超级管理员页面 前端文件结构文件结构app.json前端架构和开发工具前端项目地址 后端后端架构后端项目地址 注意事项 前端页面展示 主页面 登录页面&#xff1a; 账号是&#xff1a;用户名或者手机号 密码是&a…