试卷总分:100分
选择题 15题 30分
判断题 10题 20分
编程题 2题 50分
关于计算机的数据编码,下面说法不正确的是()。
关于进制转换,下面说法不正确的是()。
下面程序的运行结果是()。
#include <iostream> using namespace std ; int main() { int x = 1; for (int i = 0 ; i = 0 ; i <= 5) { x++; } cout << x << endl; return 0 ; }
关于计算机编码中补码,下面说法错误的是()。
下面程序执行的结果是()。
#include <iostream> using namespace std ; int main() { int x = 2026; int count = 0 ; while (x > 0) { count++; x = x & (x - 1); } cout << count << endl; }
关于位运算,下列说法错误的是()。
计算3 & 7 | 15 ^ ~11(a=3 , b=7 , c=15 , d=11):()。
下面函数是一个加密解密的函数,横线处应该填入的程序段是()。
#include <iostream> #include <string> using namespace std ; int main() { int key; cin >> key; string msg = "Hello GESP "; cout << msg << endl; for (int i = 0 ; i < msg .size(); i++) { msg [i] = msg [i] ^ key; } cout << msg << endl; ______________________ cout << msg << endl; return 0 ; }
下列程序是分别判断输入的N 个数是否可能是二进制、八进制、十进制、十六进制,横线处应该填入的是()
#include <iostream> using namespace std ; int main() { int n = 0 ; cin >> n ; for (int i = 0 ; i < n ; i++) { char str [11]; cin >> str; char max = '0 '; for (int i = 0 ; str [i] != '\0 '; i++) if (str [i] > max) max = str [i]; _______________________ } return 0 ; }
下面的程序是位掩码技术实现权限的组合管理。首先定义四个权限常量,分别对应读、写、修改、删除,每个权限占用整数的一个独立二进制位。初始化权限掩码mask 为0,代表没有任何权限。如果想实现如下的操作:添加读权限;添加写权限;清除读权限,其他位不变;添加删除权限。则横线处应该填入的是()。
#include <iostream> using namespace std ; int main() { const int READ = 1 << 0 ; const int WRITE = 1 << 1; const int MODIFY = 1 << 2; const int DELETE_ = 1 << 3 ; int mask = 0 ; return 0 ; }
下面选项中提到的变量都是正整数,关于位运算,下面说法错误的是()。
已知:a=0 , b=2 , c=11 , d=7 , e=5,表达式!a & b << c ^ d | e 的结果是()
关于string 的成员函数,下面说法错误的是()
以下数组定义,符合C++语法的是()
三进制有个奇妙的应用,有1000 个酒缸,恰好1 缸有毒。毒酒喝下后24 小时毒发死亡;无毒酒无影响。总共有48 小时,可以做两轮实验,每轮可以重新安排老鼠喝酒。有三种情况,这只老鼠两轮都不喝这缸酒;这只老鼠第一轮喝这缸酒;这只老鼠第二轮喝这缸酒,要保证找出毒酒,最少需要多少只老鼠?
对于计算机编码运算,补码做加法运算时,如果最高位产生进位,需要把该进位循环加到结果的最低位。
求-13的补码,可以对正数13的二进制,从右向左扫描,遇到第一个1之后,右边所有位全部取反,左边保持不变。
一个8 位二进制原码表示的有符号数,可表示的数值范围是-128到+127。
这段代码执行后,能够将数组中所有大于0 的元素赋值为0。
int a [] = {2 , -5 , 7 , 0 , -1}; int n = sizeof(a) / sizeof(a [0]); for (int num : a) { if (num > 0) { num = 0 ; } }
a 是int 有符号整型,若(a & 1) == 1 结果为true,则a 一定是正奇数。
char str[4] = "GESP "; 将在内存空间中给str[4] 分配5 个字节。
判断字符串中字符是否是'0 ' 或者'1 ',可以写条件:if(str[i]==0 || str[i]==1)。
下面程序执行后,将输出98。
#include <iostream> using namespace std ; int main() { int a = 'a ', b = 'b '; if (a > 0 || b++ > 0) { } cout << b ; }
枚举可以在保证不漏解的前提下缩小枚举范围,不是必须遍历全部。
下面流程图逻辑:初始化sum=0,i=0; 当 i<n 成立时,执行 sum=sum+a[i],再执行 i=i+1; 循环结束输出 sum。该流程图可以正确计算一维数组 a[0]~a[n] 全部元素的总和。
小红有 n 个非负整数 a1,a2,...,an。她将每个整数转换为二进制后,想知道有多少个二进制位在所有整数中均为 1。
二进制位从右向左编号为 0,1,2,...。若某个整数的二进制表示中没有第 k 位,则认为它的第 k 位为 0。
请你求出满足条件的二进制位数量。
第一行一个整数n,表示整数的个数。
第二行n个非负整数a1,a2,...,an。
输出一个整数,表示所有整数的二进制表示中均为 1 的二进制位数量。
2≤n≤20000,0≤ai≤10^9。
3
13 7 15
2
小明拿到了一段字符串文本,小明希望用下面的规则分割这个字符串:
最后输出每次分割的左侧的字符串,以及最后一次分割的右侧字符串。
如果字符串完全无法进行任何一次分割,直接输出其本身。
输入一行,一个字符串。
输出若干行。每行为分割后的一个字符串,注意依次输出:
第一次分割左侧的字符串,第二次分割左侧的字符串,...,最后一次分割左侧的字符串,最后一次分割右侧的字符串。