【C++笔试强训】第四天

news/2024/10/21 3:48:11/

文章目录

    • 选择题
    • 编程题

选择题

#include<iostream>
#include<cstdio>
using namespace std;
int main(){int m=0123, n=123;printf("%o %o\n", m, n);return 0;
}

程序运行后的输出结果是()
A 0123 0173
B 0123 173
C 123 173
D 173 173

这道题考查输出的格式,要区分各种进制的表达格式

二进制:1010b

八进制:0123456

十进制:123

十六进制:0x123

%d是十进制,%o是八进制,%x是十六进制输出。%o代表的是八进制整型输出整数,数字前0代表八进制、0x代表16进制,因此m输出为123,十进制123转换为8进制为173,所以n输出为173,因此答案选C

以下哪个选项一定可以将flag的第二个bit置0()

A flag&=~2
B flag|=2
C flag^=2
D flag>>=2

按位或(有1就是1) 按位与(同1才为1) 按位异或(相同为0,不同为1)

一个一个看即可,选A

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

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;

本题还是对const修饰的考查,要求所指向的内存地址不能改变,内存中的值可以被改变:即x本身不能变,而*x解引用的值可以改变故选B

以下C语言指令:运行结果是什么?

int a[5] = {1,3,5,7,9};
int *p = (int *)(&a+1);
printf(“%d,%d”,*(a+1),*(p-1));

A 2,1
B 3,1
C 3,9
D 运行时崩溃

数组名只有在& 和 sizeof之后表示数组本身,其余都表示数组首元素的地址
&a是一个地址,类型为int(*)[5],&a + 1 是跨越了一个数组大小,p被强转为(int*),p-1指向9,*(a+1)是3 选C

二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()

A Oxf8b821c4
B Oxf8b821a6
C Oxf8b82198
D Oxf8b821c0
在这里插入图片描述

答案选A

根据下面递归函数:调用函数Fun(2),返回值是多少()

int Fun(int n)
{if(n==5)return 2;elsereturn 2*Fun(n+1);
}

A 2
B 4
C 8
D 16

这个自己展开一下就知道结果了选D

以下程序的输出结果是:

#include <iostream>
using namespace std;
void func(char **m)
{++m;cout<<*m<<endl;
}int main()
{static char *a[]={"morning", "afternoon", "evening"};char **p;p=a;func(p);return 0;
}

A afternoon
B 字符o的起始地址
C 字符o
D 字符a的起始地址

数组名表示数组首元素的地址,数组除了放在&和sizeof之后才表示数组本身,所以这里的*a指的是首元素的地址也就是morning的地址
++m也就是偏移一个元素的大小,也就是指向了afternoon故选A

求函数返回值,输入x=9999

int func(int x){int count=0;while (x){count++;x=x&(x-1);//与运算}return count;
}

A 8
B 9
C 10
D 12

image-20221204160431254

所以9999的二进制有8个1,故选A

#include <stdio.h>
int cnt = 0;
int fib(int n) 
{cnt++;if (n == 0)return 1;else if (n == 1)return 2;elsereturn fib(n - 1) + fib(n - 2);
}
void main() {fib(8);printf("%d", cnt);
}

下列程序执行后,输出的结果为()
A 41
B 67
C 109
D 177

cnt实际统计的是:斐波那契递归的总次数

在这里插入图片描述

答案选B

在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是()

struct A
{int a;short b;int c;char d;
};
struct B
{int a;short b;char c;int d;
};

A 16,16
B 13,12
C 16,12
D 11,16

结构体内存对齐:

第一个成员在与结构体变量偏移量为0的地址处。

其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。VS中默认的值为8

结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。

如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

image-20221204141102042

选C


编程题

计算糖果

在这里插入图片描述

这题一开始我的做法就是直接for循环进行嵌套,无脑强行求出结果:

#include <iostream>
#include <string>
using namespace std;
int main()
{int sum1, sum2, sum3, sum4;cin >> sum1 >> sum2 >> sum3 >> sum4;int a=0, b=0, c=0;int flag = 0;for (a = -30; a <=30; a++){for (b = -30; b <= 30; b++){for (c = -30; c <= 30; c++){if ((a - b) == sum1 && (b - c) == sum2 && (a + b) == sum3 && (b + c) == sum4){cout << a << " " << b << " " << c << endl;flag = 1;break;}}}}if(flag == 0){cout<<"No"<<endl;}return 0;
}

但是现在我们来看一看题目所给出的条件:

image-20221204124209422

#include <iostream>
#include <string>
using namespace std;
int main()
{int a,b,c,d;cin>>a>>b>>c>>d;int A = (a+c)/2;int B1 = (b+d)/2;int B2 = (c-a)/2;int C = (d-b)/2;if(B1!=B2){cout<<"No"<<endl;}else{cout<<A<<" "<<B1<<" "<<C<<endl;}return 0;
}

进制转换

在这里插入图片描述

先考虑M是正负数问题,可以利用flag来标记一下.当M==0的时候也要处理一下。

然后创建两个字符串ret和table,ret用来存放结果,由于是利用拼接+=,所以最后的结果我们需要倒置一下,而table用来存储进制所代表的数字字母。最后再去一一求出M的每一位数字即可。

image-20221204130419375

#include <iostream>
#include <algorithm>
using namespace std;
int main() {int M,N;cin>>M>>N;bool flag = true;string ret;string table = "0123456789ABCDEF";if(M<0){M = -M;flag = false;}if(M == 0){ret="0";}while(M){ret+=table[M%N];M/=N;}if(flag == false){ret+='-';}reverse(ret.begin(),ret.end());cout<<ret<<endl;
}

http://www.ppmy.cn/news/2697.html

相关文章

算法面试题——删除链表后第N个节点

给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], n 2 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&#xff…

蜂鸟E203学习笔记(六)——交付

1.1 处理器中指令的交付、取消、冲刷 1.1.1 指令交付、取消和冲刷 影响指令交付的因素&#xff1a; 中断、异常以及分支预测指令造成流水线冲刷ARM中存在条件码&#xff0c;只会取消自己不会造成流水线冲刷 交付的位置 执行阶段&#xff08;&#xff09;完成分支预测之后写…

【实操篇】Linux组管理

目录 ●组管理 ●linux组的基本介绍 ●组的创建以及对用户的操作&#xff08;复习&#xff09; ●查看文件的所有者 ●改变文件所有者 ●修改文件所在的组 ●改变用户所在组 ●linux组的基本介绍 在Linux中的每个用户必须属于一个组&#xff0c;不能独立于组外。并且在Li…

springboot+easyexcel:导入excel表格

目录 前言 1.常规导入 2.读取到指定的列 3.读取全部的sheet页 4.日期、数字及其他自定义格式的转换 5.表头有多行的读取 前言 excel表格的导入与导出&#xff0c;可以说是业务系统里比较常见的功能了&#xff0c;早些时候相信很多人都是使用POI实现excel的导入与导出功能…

mac OS 环境下安装 Redis(使用Homebrew终端安装)

使用Homebrew终端安装Redis&#xff08;好处后面会介绍&#xff09; 获取安装Homebrew&#xff08;复制如下代码到终端运行&#xff09;&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"选择好克隆原后按提示…

为所有弹窗增加全屏切换功能

1、现状 在开发两个管理系统&#xff0c;现在的页面20&#xff0c;其中包含不少的弹窗。在项目开发过程中没人提过弹窗要全屏的事情&#xff0c;且在数据量较大的位置已经增加了可全屏的入口。但老板两次说为什么不给所有的弹窗增加全屏的功能&#xff0c;从中感觉到了侮辱&am…

aws cdk 创建eks集群和ecs集群并部署服务

cdk 和 eks 使用cdk版本2.45通过cdk创建eks集群 const cdk require("aws-cdk-lib"); const eks require("aws-cdk-lib/aws-eks"); const ec2 require("aws-cdk-lib/aws-ec2"); const iam require("aws-cdk-lib/aws-iam");class …

编译原理 2 - 词法分析

第3章 词法分析3.1 词法分析器的功能和结构3.2 状态转换图3.3 正则文法 和 正则表达式3.4 有限自动机 DFA与NFA测试第3章 词法分析 重点&#xff1a;① 词法分析器的输入、输出&#xff1b;② 用于识别符号的状态转移图的构造&#xff1b;③ 根据状态转移图实现词法分析器 难点…