信息学奥赛初赛天天练-22-C++基础关键字、进制转换、结构体与联合体的实用技巧大揭秘

PDF文档公众号回复关键字:20240607

在这里插入图片描述

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

1 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )

A unsigned

B const

C static

D mutable

2 八进制数12345670(8) 和07654321(8)的和为( )

A 22222221(8)

B 21111111(8)

C 22111111(8)

D 22222211(8)

3 阅读下述代码,请问修改data的value成员以存储3.14,正确的方式是( )。

union Data{
    int num;    
    float value;    
    char symbol;
};
union Data data;

A data.value = 3.14;

B value.data = 3.14;

C data->value = 3.14;

D value->data = 3.14;

9 数101010(2)和166(8)的和为( )

A 10110000(2)

B 236(8)

C 158(10)

D A0(16)

2 相关知识点

1) C++ 关键字

unsigned 关键字

用于声明无符号整数类型。无符号整数类型只能表示非负整数,即它们的值总是大于或等于零

例如

short是16为二进制组成,第1位是符号位,表示范围-32768~32767之间
unsigned short是16为二进制组成,无符号位, 表示范围0~65535之间

#include<bits/stdc++.h>
using namespace std;
/*
 无符号关键字
 short是16为二进制组成,第1位是符号位,表示范围-32768~32767之间
 unsigned short是16为二进制组成,无符号位, 表示范围0~65535之间
*/ 
int main(){
	short a=32769;//超出了short的范围 
	unsigned short b=32769;//在范围内可以正常表示 
	cout<<"a的值为:"<<a<<endl; //输出不正确 
	cout<<"b的值为:"<<b<<endl;
	return 0;
}
/* 
a的值为:-32767 
b的值为:32769
*/

static 关键字

在 C 和 C++ 中,当变量被声明为 static 时,它会在程序的整个执行期间存在,而不仅仅是定义它的代码块(例如函数)的执行期间。这意味着 static 变量在函数调用之间保持其值

主要在不同作用域或对象之间共享数据

const 关键字

在 C++ 中,const 是一个类型修饰符,用于指定一个变量或对象的值是不可更改的。这意味着一旦为 const 变量分配了初始值,就不能再对其进行修改

#include<bits/stdc++.h>
using namespace std;
const int a=10; 
int main(){
	//改变const 关键字修饰变量的值 编译会出错 
	a=3;// [Error] assignment of read-only variable 'a' 
	cout<<a;
	return 0;
}

mutable 关键字

在声明const的成员函数,不能修改成员变量,如果成员函数声明时加 mutable则可以修改

#include <iostream>
using namespace std;

class Test {
public:
    Test(int c):counter(c){}//构造函数 并为counter字段赋值 
    /* 声明为const函数,表示不会修改类的成员属性,但是mutable的属性除外 */
    int getValue() const;
private:
    mutable int counter;
};

int Test::getValue() const {
    counter++;  // 允许在 const 成员函数中修改 mutable 成员变量
    return counter;
}

int main()
{
    Test mc = 1;
    cout << mc.getValue() << endl;
    return 0;
}

2) 进制转换

R进制转十进制

按权展开,但要注意各个位的权,最低位(最右边)的权是0次方,权值为1

(11010110)2=1×2^7+1×2^6+0×2^5+1×2^4+0×2^3+1×2^2+1×2^1+0×2^0=(214)10

十进制整数转R进制

十进制小数转R进制

二进制转八进制

二进制转换成八进制的方法是,取三合一法,即从二进制的小数点为分界点,向左(或向右)每三位取成一位

(1010 0100)B = (010 001 100 )B=(244)O

八进制转二进制

二进制转换成八进制的反向操作

(244)O=(010 001 100 )B=(1010 0100)B

二进制转十六进制

二进制转换成十六进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位

(10100100)B = (1010 0100)B = (A4)H

十六进制转二进制

二进制转换成十六进制的反向操作

(A4)H = (1010 0100)B =(10100100)B

3) 不同进制加法

进制不同不能直接相加,需转换成相同进制再进行相加

二进制相加

//类似十进制相加,不同的是逢二进一
5+9=14
(5)10=(0101)2,(9)10=(1001)2
 0101
+1001
------
 1110
二进制 1110 转10进制
(1110)2=1*2^3+1*2^2+1*2^1=14

八进制相加

//类似十进制相加,不同的是逢8进一
5+9=14
(5)10=(5)8,(9)10=(11)2
 05
+11
------
 16
八进制 16 转10进制 
(16)8=1*8^1+6*8^0=8+6=14

4) struct 结构体

struct 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,是一种复合数据类型,结构类型

#include<bits/stdc++.h>
using namespace std;
//定义一个结构体,可以把多个不同的变量 组织在一起 
struct stu{
	string no;//学号 
	string name;//姓名 
	int age;//年龄 
}; 

int main(){
	stu stu1;
	stu1.no="001";//001赋值给stu1的no
	stu1.name="张三";//张三赋值给stu1的name
	stu1.age=18;//18赋值给stu1的age
	cout<<"学号:"<<stu1.no<<endl;//输出结构体stu1的学号
	cout<<"姓名:"<<stu1.name<<endl;//输出结构体stu1的姓名
	cout<<"年龄:"<<stu1.age;//输出结构体stu1的年龄
	return 0;
}

5) union 联合体

在 C++ 中,union 是一种特殊的数据结构,它允许在相同的内存位置存储不同的数据类型。union 可以帮助节省内存,因为它们使用相同的内存空间来存储不同的数据类型,但是只能同时存储其中一个

在定义 union 时,所有成员共享同一块内存空间。当为 union 的某个成员赋值时,会覆盖 union 中已有的值。这也是 union 的一个特点:它不会记录哪个成员是当前有效的,因此在使用 union 时,需要确保对应的成员是正确的

#include <iostream>
using namespace std;
/*
  定义union联合体,联合体内多个变量共享内存
  内存大小和占用空间最大的变量相同
  同一时刻只有一个变量的值是有效的 
*/ 
union MyUnion {
    int i;
    double d;
    char c;
};

int main() {
    MyUnion u;
    u.i = 42;//给联合体变量i赋值 
    cout << "联合体变量i的值:" << u.i << endl;//输出42,其他2个变量d和c无效 
    u.d = 3.14159;//给联合体变量d赋值
    cout << "联合体变量d的值:" << u.d << endl;//输出3.14159,其他2个变量i和c无效
    u.c = 'A';//给联合体变量d赋值
    cout << "联合体变量c的值:" << u.c << endl;//输出A,其他2个变量i和d无效
    return 0;
}

6) 结构体(struct)和联合体(union)区别

在 struct 中,每个成员都有自己的内存空间,在 union 中,所有成员共享同一块内存空间,union 的大小取决于其最大的成员

struct 中的成员可以同时存在,每个成员都有自己的地址,union 中的成员共享相同的内存,同一时刻只能存储一个成员的值

struct 的大小等于其所有成员大小的总和,每个成员都有独立的内存空间,union 的大小等于其最大成员的大小,各变量共享内存

#include <iostream>
using namespace std;
/*
  定义结构体 MyStruct
  内包括3个变量,这3个变量被组织到一起,可以同时使用 
*/ 
struct MyStruct {//占用空间必须是最大占用空间变量的整数倍 
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8) 
    int i;
//d 占用8个字节 (8) 
    double d;
//c 占用1个字节 需要补7个字节到8个字节 (8) 
    char c;
};//所以 MyStruct总共占用24个字节 

struct MyStruct1 {//占用空间必须是最大占用空间变量的整数倍 
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8) 
	int i;
//d 占用8个字节  (8) 
    double d;
//用4个字节 和后面c一起补足8个字节 (j,c一起再补足3个字节)  (8) 
    int j;
//c 占用1个字节 
    char c;
};//所以 MyStruct1总共占用24个字节

struct MyStruct2 {//占用空间必须是最大占用空间变量的整数倍
//i 占用4个字节 需要补4个字节够8个字节,因为后面够8个字节 (8) 
    int i; 
//d 占用8个字节  (8)
    double d;
//j用4个字节 补足8个字节  (8) 
    int j;
//d1 占用8个字节  (8)
    double d1;
//c 占用1个字节 补足8个字节  (8)  
    char c;
};//所以 MyStruct1总共占用40个字节

/*
  定义一个联合体 MyUnion
  内包括3个不同类型变量 这3个变量同时只能使用一个 
  占用空间,联合体变量占用空间最大的变量 
*/ 
union MyUnion {
    int i;//i占用4个字节 
    double d;//d占用8个字节 
    char c;//c占用1个字节 
};//联合体占用空间为8个字节 

int main() {
    cout << "struct占用内存空间大小:" << sizeof(MyStruct) << " bytes" << endl;
    cout << "struct1占用内存空间大小:" << sizeof(MyStruct1) << " bytes" << endl;
    cout << "struct2占用内存空间大小:" << sizeof(MyStruct2) << " bytes" << endl;
    cout << "union占用内存空间大小:" << sizeof(MyUnion) << " bytes" << endl;
	
    MyStruct s;
    s.i = 42;
    s.d = 3.14;
    s.c = 'A';

    cout << "Struct的值: " << s.i << ", " << s.d << ", " << s.c << endl;

    MyUnion u;
    u.i = 42;
    cout << "联合体i的值: " << u.i << endl;

    u.d = 3.14;
    cout << "联合体重新赋值后d的值: " << u.d << endl;

    return 0;
}

3 思路分析

1 在C++中,下面哪个关键字用于声明一个变量,其值不能被修改?( )

A unsigned

B const

C static

D mutable

答案 B

分析

unsigned 为无符号,只影响数据类型的取值范围

const 为不可修改关键字,const在变量前,此变量为常量,不能修改,修改编译会报错

static 为静态变量,被static关键字修饰后,可以在多个对象直接共享此变量,都可以修改

mutable 和const配合使用,在定义为const的函数使用mutable关键词修饰的变量,可以修改

2 八进制数12345670(8) 和07654321(8)的和为( )

A 22222221(8)

B 21111111(8)

C 22111111(8)

D 22222211(8)

答案 D

分析

由于相加的2个数都是8进制,因此可以直接相加,逢八进一

 12345670
+07654321
---------
 22222211

3 阅读下述代码,请问修改data的value成员以存储3.14,正确的方式是( )。

union Data{
    int num;    
    float value;    
    char symbol;
};
union Data data;

A data.value = 3.14;

B value.data = 3.14;

C data->value = 3.14;

D value->data = 3.14;

答案 A

Union 为联合体,和 struct 类似,赋值应用.运算符

9 数101010(2)和166(8)的和为( )

A 10110000(2)

B 236(8)

C 158(10)

D A0(16)

答案 D

转换统一进制后再计算

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

讯方618代表有话说 | 行业大咖详解鸿蒙,全程在线答疑

讯方618“代表有话说” 系列专场直播活动来啦 6月11日&#xff08;周二&#xff09;19:30 本期直播特邀华为、学校、讯方代表 与大家畅聊鸿蒙奥秘 共同开启未来技术之门&#xff01; 行业大咖将带大家 了解鸿蒙概况和岗位需求 解析鸿蒙系统强势崛起带来的影响 解读高校…

常见Rabbitmq面试题及答案总结

1、 什么是 rabbitmq 釆用AMQP高级消息队列协议的一种消息队列技术撮大的特点就是消费并不需要 确保提供方存在,实现了服务之间的高度解耦 2、 为什么要使rabbitmq &#xff08;1&#xff09; 在分布式系统下具备异步&#xff0c;削峰&#xff0c;负载均衡等一系列高级功能&…

openh264 场景变化检测算法源码分析

文件位置 openh264/codec/processing/scenechangedetection/SceneChangeDetection.cppopenh264/codec/processing/scenechangedetection/SceneChangeDetection.h 代码流程 说明&#xff1a; 通过代码流程分析&#xff0c;当METHOD_SCENE_CHANGE_DETECTION_SCREEN场景类型为时…

【PostgreSQL 小课】日志及审计 01:日志

日志及审计 01&#xff1a;日志 以下内容是来自于我的知识星球&#xff1a;《PostgreSQL 小课》专栏&#xff0c;有需要可以关注一下 PostgreSQL 提供了非常丰富的日志基础设施。能够检查日志是每个 DBA 的关键技能——日志提供了关于集群过去的操作、当前正在进行的操作以及发…

Android 高德地图API(新版)

新版高德地图 前言正文一、创建应用① 获取PackageName② 获取调试版安全码SHA1③ 获取发布版安全码SHA1 二、配置项目① 导入SDK② 配置AndroidManifest.xml 三、获取当前定位信息① ViewBinding使用和导包② 隐私合规设置③ 权限请求④ 初始化定位⑤ 获取定位信息 四、显示地…

高级文件操作

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python内置的os模块除了可以对目录进行操作&#xff0c;还可以对文件进行一些高级操作&#xff0c;具体函数如表4所示。 表4 os模块提供的与文件相…

重新学习STM32(2)NVIC

概念简介 NVIC&#xff0c;即嵌套向量中断控制器&#xff0c;控制着中断相关的功能&#xff0c;是内核里面的一个外设。 中断在单片机编程中的作用是使单片机能及时响应需要立即处理的事件&#xff0c;但是这些事件也分紧急和非紧急&#xff0c;因此需要优先级来区分。…

frp之XTCP实现内网穿透家用电脑远程桌面公司电脑

官网XTCP介绍 《XTCP介绍》 实现图 fprs.toml # frps 服务端口&#xff08;不填&#xff0c;则默认&#xff1a;7000&#xff09; bindPort 81 auth.token "token 令牌"公司电脑frpc.toml serverAddr "frps公网服务器域名或ip" serverPort frps 服…

基于 vue-element-template 框架添加 tagsview

1. 需求 vue-element-template 是一个基础模板&#xff0c;默认没有 tagsview。所以要手动添加。 参考最全面的集成方案框架 vue-element-admin &#xff0c;拷贝和修改相关文件到你的项目中。 2. 修改 复制如下文件或文件夹 \src\layout\components\TagsView\src\store\mo…

什么情况下要配置DNS服务

什么是DNS 一、DNS就是域名解析 我们上网的方式通常都由ip地址组成&#xff0c;但是为了有个规范&#xff0c;而且我们也不可能去记住那么多一串Ip数字&#xff0c;首先域名就会比ip好记很多&#xff0c;其次固定性&#xff0c;一旦服务器换了&#xff0c;只要重新绑定域名对…

java第二十一课 —— 快捷键,包,访问修饰符

IDEA 快捷键 删除行&#xff1a;Ctrl Y复制行&#xff1a;Ctrl D补全代码&#xff1a;Alt /添加取消注释&#xff1a;Ctrl /导入该行需要的类&#xff1a;Alt Enter快速格式化代码&#xff1a;Ctrl Shift L快速运行程序&#xff1a;Ctrl Shift F10生成构造器&#xf…

分享万能点击器免费版,吾爱大佬出品,这个太赞了!

小伙伴们&#xff01;阿星又来给大家推荐神奇的小软件啦&#xff01;这次的主角可是个神器——鼠标连点器&#xff01;你听过没&#xff1f;这玩意儿简直是个“自动小助手”&#xff0c;让你的鼠标在屏幕上飞舞&#xff0c;点得飞快&#xff0c;解放你的双手&#xff0c;让你网…

企业费用标准如何制定?

在当前宏观经济环境和市场竞争日益激烈的背景下&#xff0c;国内很多企业的费用管理流程依旧面临诸多挑战。特别是制造业、零售业等人员众多的企业&#xff0c;如何通过制定精细化、自动化的企业费用标准来实现降本增效&#xff0c;已经成为企业财务流程优化的首要目标。 企业…

Oracle数据库设计规范指南(Word原件)

方便业务功能实现、业务功能扩展&#xff1b;方便设计开发、增强系统的稳定性和可维护性&#xff1b;保证数据完整性和准确性&#xff1b;提高数据存储效率&#xff0c;在满足业务需求的前提下&#xff0c;使时间开销和空间开销达到优化平衡。资料获取&#xff1a;本文本个人名…

常见硬件工程师面试题(一)

大家好&#xff0c;我是山羊君Goat。 对于硬件工程师&#xff0c;学习的东西主要和电路硬件相关&#xff0c;所以在硬件工程师的面试中&#xff0c;对于经验是十分看重的&#xff0c;像PCB设计&#xff0c;电路设计原理&#xff0c;模拟电路&#xff0c;数字电路等等相关的知识…

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结

FANUC机器人SRVO-348 DCS MCC关闭报警处理方法总结 如下图所示,由于操作人员在操机时误打开了安全门,导致机器人紧急制动停止,示教器上显示: SRV0-348 DCS MCC关闭报警0,1, 如下图所示,查看手册中关于SRVO-348报警的具体内容: 原因分析:给机器人主电源上电的接触器在紧…

全志T527芯片详解【三】:丰富接口

工业控制接口 T527集成了大量适用于工业场景的功能接口&#xff0c;包括PCle接口、CAN总线接口、UART接口和PWM接口等。 PCle是智慧工业领域广泛应用的接口&#xff0c;可满足数据高速传输的需求&#xff0c;亦可用于外接大算力NPU/GPU进行算力扩展、外接高速存储介质以及外接…

无忧易售ERP:赋能Onbuy平台,打造产品刊登新高度

在当今全球化的电商蓝海潮涌动下&#xff0c;Onbuy平台以其独特的优势吸引了众多卖家的目光&#xff0c;成为跨境贸易的一片新蓝海。然而&#xff0c;如何在这片海域中扬帆远航&#xff0c;快速、精准地将产品推向世界舞台&#xff0c;是每位卖家面临的挑战。此刻&#xff0c;无…

压缩视频在线压缩网站,压缩视频在线压缩工具软件

在数字化时代&#xff0c;视频成为了人们记录和分享生活的重要载体。然而&#xff0c;视频文件一般都非常大&#xff0c;这不仅占据了大量的存储空间&#xff0c;也给视频的传输和分享带来了不便。因此&#xff0c;压缩视频成为了许多人必须掌握的技能。本文将详细介绍如何压缩…

python数据分析-问卷数据分析(地理课)

学生问卷 分析学生背景&#xff1a;班级分布、每周地理课数量、地理成绩分布 根据问卷&#xff0c;可以知道&#xff1a; 班级分布&#xff1a; 七年级有118名学生。 八年级有107名学生。 每周地理课的数量&#xff1a; 有28名学生每周有1节地理课。 有99名学生每周有2…