选择题(每题2分,共30分)
第 1 题 整数-5的16位补码表示是(D)。
A. 1005 B. 1006 C. FFFA D. FFFB
解析:0是FFFF,用0-5(即FFFF-5)得到是FFFB。
第 2 题 如果16位短整数-2的二进制是“FFFE”,则短整数-4的值是(C)。
A. FF04 B. FFFA C. FFFC D. FFFH
解析:FFFF-FFFE=1(2-1),那么FFFF-(4-1)=FFFC
第 3 题 下面C++代码执行后的输出是(C)。
int main()
{
cout << (3|16) << endl;
cout << endl;
return 0;
}
A. 3 B. 16 C. 19 D. 48
解析:3的二进制是11;
16的二进制是1000;
或以下就是 1011。
,所以选C。
第 4 题 定义整数 int x=-5 ,则执行C++代码 cout<< (x==(x<<1>>1); 输出是(B)。
A. 0 B. 1 C. -5 D. 5
解析:-5=1101,左移后变为1010,右移后变为1101(算术移位),1101=1101,所以选B。
第 5 题 已知字符'0'的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是(C)。
int main()
{
string s="316";
int n=s.length();
int x=0;
for(int i = 0; i < n; i++)
x += s[i];
cout << x << endl;
cout << endl;
return 0;
}
A. 10 B. 58 C. 154 D. 316
解析:三位,先用48×3=144,再用144+3+6+1=154,选C。
第 6 题 下⾯C++代码执行后数组中大于0的数的特征是(C)。
int main()
{
int a[20],i;
for(i = 0; i < 20; i++)
a[i] = i+1;
for(int i = 0; i < 20; i++)
if((a[i]%2)&&(a[i]%3))
a[i] = 0;
for(i = 0; i < 20; i++)
if(a[i])
cout << a[i] << " ";
cout << endl;
return 0;
}
A. 2的倍数 B. 3的倍数 C. 能被2或3整除的数 D. 能被2和3同时整除的数
解析:运行后得知(我也不知道为什么,求科普)
第 7 题 执行下面C++代码后输出的第一个数是(A)。
int main()
{
int a[20],i;
for(i = 0; i < 20; i++)
a[i] = i+1;
for( ; i > 0; i--)
cout << a[i-1] << " ";
cout << endl;
return 0;
}
A. 20 B. 19 C. 1 D. 不确定
解析:第一个for后数组内容:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20;
输出(倒着):20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1。
第 8 题 在下列代码的横线处填写(C),可以使得输出是GESP IS INTERESTING。
int main()
{
string str="gEsP is Interesting";
int x = str.length();
for(int i = 0; i < x; i++)
if ((str[i]>='a') && (str[i]<='z'))
________________________;
cout << str << endl;
cout << endl;
return 0;
}
A. str[i]+='a'-'A' B. str[i]+=20 C. str[i]+='A'-'a' D. 无法实现
解析:小写变大写——ch=ch-'a'+'A'或ch+='A'-'a';
第 9 题 假设英文句子由若干词构成。下面C++代码统计输出的词数是(C)。
int main()
{
string str="gEsP is Interesting !";
int x = str.length();
int nwords = 0;
for(int i = 0; i < x; i++)
if (str[i]==' '){
nwords++;
while(str[++i]==' ') ;
}
cout << nwords << endl;
cout << endl;
return 0;
}
A. 1 B. 2 C. 3 D. 4
解析:有3处空格,就相当于有3个词。
第 10 题 C++的字符变量的码值是整数,下面字面量形式的字符码值最大的是(C)。
A. 100 B. 075 C. 0x70 D. 0x60
解析:看大小,。
第 11 题 下面C++程序执行的结果是(D)。
int main()
{
int a[20],i;
int cnt=0;
for(i = 0; i < 20; i++)
a[i] = i+1;
for( ; i > 1; i--)
if((a[i-1]+a[i-2])%3)
cnt++;
cout << cnt << endl;
cout << endl;
return 0;
}
A. 5 B. 6 C. 10 D. 12
解析:第一次for:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
调转后:20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
a[i-1]+a[i-2]:39 37 35 33 31 29 27 25 23 21 19 17 15 13 11 9 7 5 3
cnt: 0 1 2 2 3 4 4 5 6 6 7 8 8 9 10 10 11 12 12
第 12 题 定义字符数组 char str[20] = {'G', 'E', 'S', 'P'}; ,则 str 的字符串长度为(A)。
A. 4 B. 5 C. 19 D. 20
解析:有四个字符,其余都是'\0',选A。
第 13 题 定义整型变量 int a=3, b=16 ,则 a|b 的值和 a+b 的关系是(B)。
A. 大于 B. 等于 C.小于 D. 等于或小于
解析:
,
,
,
。
第 14 题 小杨的父母最近刚刚给他买了⼀块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是(C)。
A. 小程序 B. 计时器 C. 操作系统 D. 神话人物
第 15 题 中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是(C)。
A. 制造自动驾驶汽车 B. 创立培训学校 C. 发明汉字激光照排系统 D. 成立方正公司
判断题(每题2分,共20分)
说明
绿色表示对,红色表示错。
------------------------------------------------------------------------------------------------------------
第 1 题 任意整数a的二进制反码与补码都有1位不同。正数的反码和补码与原码相同。
第 2 题 对整型变量 int a = 3,执行C++代码 a<<2 将把2输出到a中。是把a右移2位。
第 3 题 下⾯C++代码可以计算1到100的累加和,采用的是穷举法。不是穷举法!!!
int main()
{
int i,sum=0;
for(int i = 1; i <= 100 ; i++)
sum += i;
cout << sum << endl;
cout << endl;
return 0;
}
第 4 题 ⼀个 int 类型变量a,执行(a<<2>>2)操作后的值一定是a。你想的好简单!
第 5 题 在C++语言中,(010<<1)执行结果是 100 。是二进制的100!!!
第 6 题 执行下面C++代码后将输出2。
int main()
{
string str="gEsP is Interesting";
int x = str.find("s");
cout << x << endl;
cout << endl;
return 0;
}
第 7 题 在C++语言中,字符数组被定义时,它的大小可以调整。想得美!
第 8 题 对定义的数组 int a[7]={2,0,2,4,3,1,6} ,可以⽤简单循环就找到其中最小的整数。
第 9 题 小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。
第 10 题 任何⼀个 for 循环都可以转化为等价的 while 循环。
编程题(每题25分,共50分)
字母求和
3.1.1 题面描述
小杨同学发明了⼀种新型密码,对于每⼀个小写英文字母,该小写字母代表了一个正整数,即该字母在字母顺序中的位置,例如字母 a 代表了正整数 1,字母 b 代表了正整数 2;对于每一个⼤大写英文字母,该大写字母代表了一个负整数,即该字母的 ASCII 码的相反数,例如字母 A 代表了正整数 -65。小杨同学利用这种方式对⼀个整数进行了加密 并得到了一个由大写字母和小写字母组成的字符串,该字符串中每个字母所代表数字的总和即为加密前的整数,例 如 aAc 对应的加密前的整数为 1+(-65)+3=-61。 对于给定的字符串,请你计算出它对应的加密前的整数是多少。
3.1.2输入格式
第一行一个正整数 ,表示字符串中字母的个数。
第二行一个由大写字母和小写字母的字符串 ,代表加密后得到的字符串。
3.1.3输出格式
输出一行一个整数,表示加密前的整数。
3.1.4 样例数据
3
aAc
-----------------------
-61
-----------------------
提示:
3.1.5 参考答案
#include <bits/stdc++.h>
using namespace std;
long long len;
long long sum = 0;
string s;
int main() {
cin >> len >> s;
for (int i = 0; i < len; i++) {
if (isupper(s[i])) {
sum = sum - int(s[i]);
} else {
sum += (s[i] - 'a' + 1);
}
}
cout << sum;
}
完全平方数
3.2.1 题目描述
小杨同学有一个包含个非负整数的序列
,他想要知道其中有多少对下标组合
(
,','表示条件并列),使得
是完全平方数。 如果
是完全平方数,则存在非负整数
使得
。
3.2.2 输入格式
第一行一个非负整数,表示非负整数个数。 第二行包含
个非负整数
,表示序列
包含的非负整数。
3.2.3 输出格式
输出一个非负整数,表示和是完全平方数的非负整数对数。
3.2.4 样例
输入:
5
1 4 3 3 5
输出:
3
范围:
3.2.5 代码
#include <bits/stdc++.h>
using namespace std;
int n, a[100005];
int cnt;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
for (int j = i; j <= n; j++) {
int re = a[i] + a[j];
double x = sqrt(re);
int b = x;
if (b == x) {
cnt++;
}
}
}
cout << cnt;
}
啊!!!终于整完了!!!