因为17号要开赛了,甚至是用云端编辑器,debuff拉满,只能临时抱佛脚了
各个选择题的选择项我就不标出来了,默认ABCD排,手打太麻烦了
目录
1.阅读以下语句:double m=0;for(int i=3;i>0;i--)m+=1/i;将m保留三位小数输出,结果为()
3.下列选项中,运算结果的数据类型为double的选项是()
6."阅读以下代码:int main(){ int x=100; cout<<__①__<<<__②__<<"">
9.若有int a;char b;string c;cin>>a>>b>>c;则下列输入形式错误的是()
11.对于32位机,已知int x=1;下列选项中错误的是()
13.设char型变量x中的值为1010 1010,则表达式(x+5)^(-1)的计算结果的二进制为()
单选题:
1.阅读以下语句:double m=0;for(int i=3;i>0;i--)m+=1/i;将m保留三位小数输出,结果为()
A 0
B 1
C1.833
D6
答案:B
解析:涉及到了数据类型的特点,i是int类型,所以不能有小数,所以计算1/i这个过程中,三次计算的结果分别是0,0,1。因此,m的结果也就是在0,0,1。最终结果也就是1
2.下列选项中,不是C++关键字的是()
namespace
typename
main
class
答案:C
解析:
解释:
- namespace 是 C++ 关键字,用于定义命名空间。
- typename 是 C++ 关键字,用于声明类型名称。
- main 不是关键字,它是 C++ 程序的入口函数名称。
- class 是 C++ 关键字,用于定义类。
3.下列选项中,运算结果的数据类型为double的选项是()
A'+'B'-'C'
2-3.0*0
(int)1.0+5
10LL-10
答案:B
解析:这里涉及的是数据类型的转换,
解释:
- A'+'B'-'C':此表达式中,字符常量 'A'、'B'、'C' 会先转换为它们的 ASCII 值,这些都是整数运算,结果是整数类型。
- 2-3.0*0:此表达式中,3.0 是一个 double 类型的常量,乘法运算会导致整个表达式的结果类型为 double。即使是 0,运算的结果也会保持为 double 类型。
- (int)1.0+5:这里将 1.0 强制类型转换为整数,结果是整数类型,然后加上 5,最终结果也是整数类型。
- 10LL-10:这里使用的是长长整型(long long int),减去一个整数 10,结果仍然是长长整型。
4.下列运算结果的数据类型是int的选项为()
1
1LL
'A'
'A'+1
答案:D
解析:这里涉及的同为数据类型转换,
- 1:这是一个整数常量,数据类型为
int,但是我想的是这个过程并没有运算,所以不符合题意
- 1LL:这是一个
long long int
类型的常量,数据类型是long long int
,而不是int
。 - 'A':字符常量
'A'
没有表达式的话就是默认的char类型。 - 'A' + 1:这个表达式首先会将
'A'
转换为整数值 65,然后与 1 相加,结果是 66,仍然是int
类型。
5. 关于C++数据类型,下列描述错误的是()
相同数据类型所占字节数在不同系统中可能不同
枚举类型是C++中的一种派生数据类型
对于小数1.0,其默认数据类型是float
数据类型转换有自动转换、赋值转换、强制转换
答案:C
解析:对于小数 1.0,C++ 默认的数据类型是 double
,而不是 float
。这是因为浮点数常量默认会被视为 double
类型,除非明确指定 f
后缀。例如:
1.0
是double
类型。1.0f
是float
类型。
6."阅读以下代码:
int main()
{
int x=100;
cout<<__①__<<x<<__②__<<"" ""<<x;
return 0;
},若程序输出结果为64 144,则下列选项中描述正确的是()"
可将①补全为oct,②补全为hex,输出结果为64 144
100的二进制为11000010
cout是一个ostream类的对象
变量x与0x144相等
答案:C
解析:对于A,答案反了,oct是八进制,答案是144,hex是16进制,答案是64
对于B:单纯的算错了
C:属于 ostream
类的实例。ostream
类用于输出数据。正确
D:0x是16进制的意思,这里算出来就是324,和选项A对应
7. 下列选项中与控制输出精度有关的函数为()
setf()
width()
setprecision()
fill()
答案:C
解析:认单词
setf()
:用于设置输出格式标志,例如setf(ios::fixed)
可以控制输出为定点格式,但它本身并不直接控制精度。width()
:设置输出的最小宽度,但不控制精度。它定义输出内容的最小宽度,内容不足时会填充空格。setprecision()
:用于设置浮点数输出的精度,控制小数点后位数。fill()
:用于设置填充字符,常用于设置width()
中空白位置的填充字符,而不是控制精度。
8.关于C++输入输出,下列描述错误的是()
getline()可以接收一个字符串,包括空格
ofstream类的对象可以输出到文件
cin.getline()和getline()是一样的函数
cerr和clog流对象都是标准错误流,但存在一些区别
答案:C
解析:cin.getline()
是 istream
类的成员函数,专门用于从标准输入流读取一行字符串。而 getline()
(不带 cin
)是全局函数,通常用于读取字符串数据,无论是从标准输入流还是从其他输入流(如文件流)中读取。
9.若有int a;char b;string c;cin>>a>>b>>c;则下列输入形式错误的是()
1<回车>a<回车>abc
1 a abc
1a abc
"1,a,abc"
答案:D
解析:char后面不是空格的任何输入都会算成string类型
10.下列位运算表达式的结果为2的选项是()
~(-2)&2+1
5^6+1
4%3*7/2
4>=5?1+2:2+3
答案:选B
解析:5 ^ 6 + 1
:
- 先计算
6 + 1
:6 + 1 = 7
- 然后表达式变为:
5 ^ 7
- 计算
5 ^ 7
:5
的二进制是0101
,7
的二进制是0111
,按位异或:0101 ^ 0111 = 0010
,即结果是2
。
11.对于32位机,已知int x=1;下列选项中错误的是()
x<<36的值与x<<4的相等
~(-(x+1000))的值等于1000
-1的二进制为32个1
x<<31+1的值为负数
答案:D
x << 36 的值与 x << 4 相等
- 对于32位整数,位移的最大有效范围是 0 到 31。
- 位移操作的位数实际上是对32取模,因此
x << 36
等价于x << (36 % 32)
,也就是x << 4
。 - 这个选项是正确的,因为
36 % 32 = 4
,所以x << 36
和x << 4
是相等的。
~(-(x + 1000)) 的值等于 1000
- 先计算
x + 1000
:x = 1
,所以x + 1000 = 1001
。 - 对
1001
取负值:-1001
。 - 然后对
-1001
进行按位取反(~
运算符):按位取反相当于将每一位的0
和1
反转,即~(-1001)
会得到1000
,这是因为按位取反后,我们得到的是-1001
的补码表示反转的结果。 - 这个选项是正确的,因为
~(-(x + 1000)) = 1000
。
-1的二进制为32个1
- 在32位机器上,
-1
的二进制表示是补码表示,补码表示中,-1
的二进制是11111111 11111111 11111111 11111111
,即 32个1
。 - 这个选项是正确的,因为
-1
的二进制表示确实是32个1
。
x << 31 + 1 的值为负数
- 优先级问题:运算符优先级中,
<<
(位移操作符)优先级高于+
,所以x << 31 + 1
会被解析为x << (31 + 1)
,也就是x << 32
。 - 对于32位整数,位移32位会将值移动回原来的位置(即
x << 32
实际上等价于x
)。所以x << 32
结果是1
。 - 这个选项是错误的,因为
x << 31 + 1
的值是1
,而不是负数
12.下列运算符中,不属于关系运算符的是()
!=
==
<<=
<=
答案:C
解析:c选项就是<<,位移运算符,
13.设char型变量x中的值为1010 1010,则表达式(x+5)^(-1)的计算结果的二进制为()
0101 0000
1010 1111
1111 1111
0101 0001
答案:A
解析:计算就是175的二进制对-1进行异或运算,
14.关于位运算,下列描述正确的是()
位运算适用于所有基本数据类型
位运算的效率普遍较低
~(-3)的值为2
符号位不参与位运算
答案:C
解析:
-
位运算适用于所有基本数据类型:
- 错误。位运算通常适用于整数类型(如
int
,char
,long
等),而不适用于浮点型(如float
,double
)等数据类型。浮点数在内存中的存储方式与整数不同,因此无法直接进行位运算。
- 错误。位运算通常适用于整数类型(如
-
位运算的效率普遍较低:
- 错误。位运算实际上是非常高效的,通常比加法、乘法等算术运算要快,因为它直接操作位级数据,不涉及复杂的算术计算。所以这句话是错误的,位运算的效率通常较高。
-
符号位不参与位运算:
- 错误。符号位是会参与位运算的。在二进制补码表示法中,符号位实际上也是一个位,并且在进行位运算(如按位与、按位或、按位异或等)时,符号位也会参与运算。因此,符号位会影响运算的结果。
15.若有一个3*3的int型二维数组n,第一、二、三行分别存储数据为{1,2,3}、{4,5,6}、{7,8,9},有一个int型指针p,p=n[0];则(*(p+2)+2)的值为()
2
3
4
5
答案:选D
解析:
p
是指向n[0][0]
的指针,也就是说p
当前指向数组n[0]
的第一个元素(值为 1)。p + 2
会使指针向后偏移两个元素(即跳过n[0][0]
和n[0][1]
,指向n[0][2]
,即值为3
)。*(p + 2)
解引用该指针,得到值为3
(即n[0][2]
的值)。- 然后,
*(p + 2) + 2
就是3 + 2 = 5
。
操作题
必须要提的是,这是我第一次参加这个计挑赛,对比赛用的云端编辑器一点了解都没有
1."Excel表列名称由字母A~Z组成,列字母的规律如下:
A、B、C.....Z、AA、AB......AZ、BA、BB.......ZZZZY、ZZZZZ.......
输入:
输入包含两个列名称字符串,长度均小于等于5。
输出:
输出两个列名称之间共有多少列
样例输入:
AA AZ
样例输出:
24"
代码:
#include<bits/stdc++.h>
using namespace std;
int satoi(string s){
int num = 0;
for(int i =0;i<s.size();i++){
num *=26;
num+= s[i] - 'A'+1;
}
return num;
}
int main()
{
string ar1,ar2;
cin>>ar1>>ar2;
int num1 =satoi(ar1);
int num2 = satoi(ar2);
cout<<num2-num1-1<<endl;
return 0;
}
2."九键拼音中数字与英文字母成对应关系:2--abc, 3-def, 4-ghi, 5--jkl, 6--mno, 7--pqrs, 8--tuv, 9--wxyz。
输入:
输入一个由英文小写字母组成的字符串(长度<=100000)
输出:
输出其对应的九键数字。
样例输入:
fwgeta
样例输出:
394382"
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
map<char,int>ar;
int len =0;
int num =2;
for(char a = 'a';a<='o';a++){
ar[a]=num;
len++;
if(len==3){
num++;
len=0;
}
}
for(char a = 'p';a<='z';a++){
ar[a]=num;
len++;
if(len==4){
num++;
len=0;
}
}
ar['w']=9;
string s;
cin>>s;
const char* s1 = s.c_str();
for(int i=0;i<s.size();i++){
cout<<ar[s1[i]];
}
return 0;
}
3."给定两个字符串str1和str2(长度均<=10000),问字符串str2内每个字符是否能在字符串str1内找到
输入:
第一行输入字符串str1
第二行输入字符串str2
输出:
若能找到,则输出‘Y’,否则输出‘N’;
样例输入:
abdcdewrtde
wbaqx
样例输出:
YYYNN"
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1,str2;
cin>>str1>>str2;
for(int i=0;i<str2.size();i++){
if(str1.find(str2[i])!=string::npos){
cout<<"Y";
}
else
cout<<"N";
}
return 0;
}
4."有N个正整数,求这N个正整数两两之间的最大公约数之积
输入:
第一行输入正整数N(N<=100)
第二行有N个正整数(<10000)
输出:
输出这N个正整数两两之间的最大公约数之积,结果对1000000007取模
样例输入:
4
6 8 9 10
样例输出:
24"
代码:
#include<bits/stdc++.h>
using namespace std;
const int n =1000000007;
int main()
{
int res = 1;
int N;
cin>>N;
vector<int>ar(N+1);
for(int i=0;i<N;i++){
cin>>ar[i];
}
for(int i=0;i<N-1;i++){
for(int j=i+1;j<N;j++){
res*=__gcd(ar[i],ar[j]);
}
}
cout<<res%n;
return 0;
}