一、单选题
1、下列流程图的输出结果是?( B )
A 优秀
B 良好
C 不及格
D 没有输出
解析:【喵呜刷题小喵解析】:根据流程图,当分数大于等于80时,输出“优秀”;当分数在60~79之间时,输出“良好”;当分数小于60时,输出“不及格”。从流程图中的“或”可以看出,只要满足其中一个条件,就会输出对应的结果,而不会继续检查其他条件。因此,当分数为70时,会输出“良好”,而不会输出“优秀”。所以正确答案为“良好”,即选项B。
2、以下选项中不符合 C++变量命名规则的是?( )
A student
B 2_from
C _to
D Text
解析:【喵呜刷题小喵解析】:在C++中,变量命名需要遵循一定的规则。根据C++的命名规则,变量名不能以数字开头,且不能包含空格。选项B中的"2_from"以数字开头,因此不符合C++的变量命名规则。其他选项如"student"、"_to"和"Text"都符合命名规则。
3、以下选项中,不能用于表示分支结构的C++保留字是?( )
A switch
B return
C else
D if
解析:【喵呜刷题小喵解析】:在C++中,用于表示分支结构的保留字有`if`、`else`和`switch`。`return`关键字用于指定函数的返回值,而不是用于表示分支结构。因此,不能用于表示分支结构的C++保留字是`return`。
4、下列说法错误的是?( )
A while 循环满足循环条件时不断地运行,直到指定的条件不满足为止
B if 语句通常用于执行条件判断
C 在C++中可以使用 foreach 循环
D break 和 continue 语句都可以用在 for 循环和 while 循环中
解析:【喵呜刷题小喵解析】:
在C++中并没有直接的 "foreach" 循环。通常使用 `for` 循环结合迭代器(iterator)或者使用C++11引入的范围for循环(range-based for loop)来达到类似的效果。所以,选项C中的说法是错误的。其他选项都是正确的描述:
A. while 循环在满足循环条件时不断运行,直到条件不满足为止。
B. if 语句用于执行条件判断。
D. break 和 continue 语句都可以用在 for 循环和 while 循环中,用于控制循环的流程。
5、下列4个表达式中,答案不是整数8的是?( )
A abs(-8)
B min(max(8, 9), 10)
C int(8.88)
D sqrt(64)
解析:【喵呜刷题小喵解析】:
A. abs(-8)表示求-8的绝对值,结果为8,是整数。
B. min(max(8, 9), 10)表示先求8和9中的最大值,再求最大值和10中的最小值,结果为8,是整数。
C. int(8.88)表示将浮点数8.88转换为整数,结果为8,是整数。
D. sqrt(64)表示求64的平方根,结果为8,但结果是一个浮点数,不是整数。
因此,答案为C。
6、下面C++代码执行后的输出是?( )
int n,a,m,i; n=3, a = 5; m = (a - 1) * 2; for (i=0; i<n-1; i++) m = (m - 1) * 2; cout << m;
A 8
B 14
C 26
D 50
解析:【喵呜刷题小喵解析】
首先,我们初始化变量:
* `n = 3`
* `a = 5`
接着,我们计算`m`的值:
`m = (a - 1) * 2 = (5 - 1) * 2 = 8`
然后我们开始循环,循环的条件是`i < n-1`,即`i < 2`。
在循环中,每次循环都会更新`m`的值:
`m = (m - 1) * 2`
第一次循环:`m = (8 - 1) * 2 = 14`
第二次循环:`m = (14 - 1) * 2 = 26`
循环结束后,`m`的值为26。
最后,我们输出`m`的值,即26。所以答案是C选项。
7、下面C++代码执行后的输出是?( )
int n,i,result; n = 81; i = 1, result = 1; while (i * i <= n){ if (n % (i * i) == 0) result = i * i; i += 1; } cout << result;
A 16
B 36
C 49
D 81
解析:【喵呜刷题小喵解析】:在这个C++程序中,我们初始化n=81,i=1,result=1。然后,我们进入一个while循环,条件是i*i <= n。在循环中,我们检查n是否可以被i*i整除。如果可以,我们将result设置为i*i。然后,我们增加i的值。当i*i大于n时,循环结束。最后,我们输出result的值。
在这个特定的例子中,i的值从1开始,增加到6,因为6*6=36,这是小于或等于81的最大的平方数,且81可以被36整除。因此,result的值为36,这是输出。
所以,答案是B选项,即36。
8、下面C++代码执行后的输出是?( )
int s,t,ans; s = 2, t = 10; ans = 0; while (s != t){ if (t % 2 == 0 && t / 2 >= s) t /= 2; else t -= 1; ans += 1; } cout << ans;
A 2
B 3
C 4
D 5
解析:【喵呜刷题小喵解析】:首先,我们分析给定的C++代码。代码中有三个整数变量s、t和ans,分别初始化为2、10和0。代码的主要逻辑在while循环中,该循环将持续执行,直到s等于t。在循环中,根据t是否为偶数以及t/2是否大于等于s,t要么除以2,要么减1。同时,ans每次循环都增加1。最后,输出ans的值。
我们可以手动模拟代码的执行过程:
1. 初始化:s=2,t=10,ans=0
2. 第一次循环:t=10,t是偶数且t/2=5>=s,t=t/2=5,ans=1
3. 第二次循环:t=5,t是奇数,t=t-1=4,ans=2
4. 第三次循环:t=4,t是偶数且t/2=2>=s,t=t/2=2,ans=3
5. 第四次循环:t=2,t等于s,循环结束。
因此,ans的最终值为3,所以代码执行后的输出是3。
9、下面C++代码执行后的输出是?( )
int n, masks, days,cur; n = 17, masks = 10, days = 0; cur = 2; while (masks != n){ if (cur == 0 || cur == 1) masks += 7; masks -= 1; days += 1; cur = (cur + 1) % 7; } cout << days;
A 5
B 6
C 7
D 8
解析:【喵呜刷题小喵解析】
该题目是一道关于C++的题目,我们需要根据代码计算出代码执行后的输出。
首先,我们需要理解代码的逻辑。代码中有四个变量:n、masks、days和cur。其中,n被赋值为17,masks被赋值为10,days被赋值为0,cur被赋值为2。
代码执行的是一个while循环,循环的条件是masks不等于n。在循环中,首先判断cur是否等于0或1,如果是,则将masks加7。然后将masks减1,days加1,cur的值变为(cur + 1) % 7。
接下来,我们按照代码逻辑逐步分析:
1. 初始化:n = 17, masks = 10, days = 0, cur = 2。
2. 第一次循环:
* cur不等于0也不等于1,所以masks不变,仍然是10。
* masks减1,masks变为9。
* days加1,days变为1。
* cur变为(cur + 1) % 7,cur变为3。
3. 第二次循环:
* cur不等于0也不等于1,所以masks不变,仍然是9。
* masks减1,masks变为8。
* days加1,days变为2。
* cur变为(cur + 1) % 7,cur变为4。
4. 第三次循环:
* cur不等于0也不等于1,所以masks不变,仍然是8。
* masks减1,masks变为7。
* days加1,days变为3。
* cur变为(cur + 1) % 7,cur变为5。
5. 第四次循环:
* cur不等于0也不等于1,所以masks不变,仍然是7。
* masks减1,masks变为6。
* days加1,days变为4。
* cur变为(cur + 1) % 7,cur变为6。
6. 第五次循环:
* cur等于0,所以masks加7,masks变为13。
* masks减1,masks变为12。
* days加1,days变为5。
* cur变为(cur + 1) % 7,cur变为1。
7. 第六次循环:
* cur等于1,所以masks加7,masks变为19。
* masks减1,masks变为18。
* days加1,days变为6。
* cur变为(cur + 1) % 7,cur变为2。
8. 第七次循环:
* cur不等于0也不等于1,所以masks不变,仍然是18。
* masks减1,masks变为17。
* days加1,days变为7。
* cur变为(cur + 1) % 7,cur变为3。
循环结束,输出days,输出结果为7。
所以,答案是D。
10、以下C++代码判断一个正整数N的各个数位是否都是偶数。如果都是,则输出“是”,否则输出“否”。例如N=2024时输出“是”。则横线处应填入( )。
int N,Flag; cin >> N; Flag = true; while (N != 0){ if (N %2 != 0){ Flag = false; _____________ } else N /= 10; } if(Flag == true) cout << "是"; else cout << "否";
A break
B continue
C N = N / 10
D N = N % 10
解析:【喵呜刷题小喵解析】:在C++中,`break`语句用于跳出当前循环,而`continue`语句用于跳过当前循环的剩余部分,直接开始下一次循环。在题目中,如果`N`的某一位不是偶数,需要将`Flag`设置为`false`,并跳出当前循环,因此应该使用`break`语句。但是,由于`Flag`在循环中被设置,所以循环中的后续部分不再需要执行,应该使用`break`来结束循环。选项C和D与循环的判断逻辑无关,不应该选择。因此,正确答案是B,即`continue`。
11、有句俗话叫“三天打渔,两天晒网”。如果小杨前三天打渔,后两天晒网,一直重复这个过程,以下程序代码用于判断,第n天小杨是在打鱼还是晒网,横线处应填写?( )
int n,i; cin >> n; i = n % 5; if (__________________) // 在此处填写代码 cout << "晒网"; else cout << "打鱼";
A i == 0
B i == 4
C i == 0 && i == 4
D i == 0 || i == 4
解析:【喵呜刷题小喵解析】:
在这个问题中,小杨有一个固定的模式:前三天打渔,后两天晒网,然后重复这个过程。为了判断第n天小杨是在打鱼还是晒网,我们需要确定n是在哪个循环周期内的哪一天。
首先,我们可以通过取模运算来确定n是在哪个循环周期内的哪一天。因为每个循环周期有5天(3天打渔+2天晒网),所以n % 5会给我们一个0到4的数值,这个数值表示n是在当前循环周期内的第几天。
然后,我们需要判断这个数值是0还是4。如果n是在当前循环周期的第0天或第4天,那么小杨就在晒网。否则,小杨就在打渔。
因此,我们需要填写的是i == 0 || i == 4。这个条件会检查n是在当前循环周期的第0天还是第4天,如果是,就输出“晒网”,否则就输出“打鱼”。
所以,选项D是正确的。
12、一个数的所有数字倒序排列后这个数的大小保持不变,这个数就是回文数,比如 101 与 6886 都是回文数,而 100 不是回文数。以下程序代码用于判断一个数是否为回文数,横线处应填写?( )
int n,a,k; cin >> n; a = 0; k = n; while (n > 0){ a = __________; // 在此处填写代码 n /= 10; } if (a == k) cout << "是回文数"; else cout << "不是回文数";
A 10 * a + n % 10
B a + n % 10
C 10 * a + n / 10
D a + n / 10
解析:【喵呜刷题小喵解析】:根据回文数的定义,我们需要将输入的数字的每一位数字逆序排列,然后判断这个逆序排列的数字是否与原数字相等。在程序中,我们使用变量`a`来存储逆序排列的数字,`n`存储原数字。在循环中,我们使用`n /= 10`将`n`的个位数字去除,然后使用`a = 10 * a + n % 10`将`n`的个位数字添加到`a`的个位位置,以此实现逆序排列。最后,如果`a`等于原数字`k`,则输出"是回文数",否则输出"不是回文数"。因此,选项A是正确的。
13、给定两个整数n与k,打印出一个栅栏图形,这个栅栏应该分成n段,段与段之间的间隔为 + , 段内的填充为k个 - 。形如n=5,k=6, 时,图形如下:
+-----+-----+-----+-----+-----+
以下程序代码用于绘制该图形,横线处应填写?( )
int n, k, i, j; n = 5, k = 6; for (i = 0; i < n; i++){ __________ // 在此处填写代码 for (j = 1; j < k; j++) cout << '-' ; } cout << '+';
A cout << '+' << endl;
B cout << '+' << ' ' << endl;
C cout << '+';
D cout << '+' << ' ';
解析:【喵呜刷题小喵解析】:
首先,我们分析题目要求。题目要求打印出一个栅栏图形,这个栅栏应该分成n段,段与段之间的间隔为 + ,段内的填充为k个 - 。
然后,我们观察给出的代码。代码中有两个循环,外层循环控制段数,内层循环控制每段内的 - 号的数量。我们需要在内层循环和外层循环之间打印一个 + 号,作为段与段之间的间隔。
最后,我们分析选项。
A. `cout << '+' << endl;`:这个选项会在每段之后打印一个 + 号,并换行,符合题目要求。
B. `cout << '+' << ' ' << endl;`:这个选项会在每段之后打印一个 + 号和一个空格,然后换行,不符合题目要求。
C. `cout << '+';`:这个选项只会在每段之后打印一个 + 号,不会换行,不符合题目要求。
D. `cout << '+' << ' ';`:这个选项会在每段之后打印一个 + 号和一个空格,不会换行,不符合题目要求。
因此,正确答案是A。
14、小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是。( )
A 小程序
B 计时器
C 操作系统
D 神话人物
解析:【喵呜刷题小喵解析】:华为手表上跑的“鸿蒙”应该是指华为自家研发的操作系统,即选项C“操作系统”。而选项A“小程序”通常指的是在微信等平台上运行的小程序,与手表上的操作系统无关;选项B“计时器”只是一个简单的计时工具,也不可能是手表上运行的系统;选项D“神话人物”显然与题目内容没有关联。因此,正确答案是C。
15、中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是( )。
A 制造自动驾驶汽车
B 创立培训学校
C 发明汉字激光照排系统
D 成立方正公司
解析:【喵呜刷题小喵解析】:王选先生是中国计算机学会的重要人物,他在计算机领域做出了重大贡献。根据题目给出的选项,我们需要找到与王选先生相关的重大贡献。制造自动驾驶汽车、创立培训学校、成立方正公司都不是王选先生的主要贡献。而发明汉字激光照排系统是与计算机领域相关的重大贡献,与王选先生的背景相符。因此,正确答案是C。
二、判断题
16、如果有以下C++代码:
double s; int t; s = 18.5; t = int(s) + 10;
那么 cout << t 的结果为 28.5 。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++中,`int(s)`会将`s`强制转换为整数类型,因此`t`的值将是`18`。然后,`t`的值增加`10`,所以`t`的最终值是`28`。因此,`cout << t`的输出将是`28`,而不是`28.5`。所以,题目的陈述是错误的。
17、Xyz , xYz , xyZ 是三个不同的变量。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中的“Xyz , xYz , xyZ 是三个不同的变量”是错误的。因为Xyz,xYz和xyZ都是相同的字母组合,只是大小写和空格不同,它们表示的是同一个变量。在多数编程语言中,大小写敏感的变量会被认为是不同的变量,但在这里空格也被计入,所以它们被认为是同一个变量。因此,这个陈述是错误的,所以答案是B。
18、cout << (8< 9< 10) 的输出结果为 true 。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++中,`cout << (8 < 9 < 10)` 这样的表达式是不合法的。在C++中,表达式中的运算符优先级和结合性决定了运算的顺序。在这个表达式中,`<` 运算符的优先级高于 `<<` 运算符,所以 `8 < 9` 会首先被计算,然后结果(一个布尔值,`true`)会被用于后续的 `< 10` 操作。然而,布尔值不能直接用于 `<` 操作,所以这个表达式在编译时就会出错。
另外,即使我们忽略编译错误,这样的表达式在逻辑上也是没有意义的。`8 < 9` 返回 `true`,`true < 10` 这样的操作在逻辑上也是没有意义的。
所以,这个题目的陈述是错误的。
19、for (i = 0; i < 100; i+=2) ; 语句中变量i的取值范围是0到99。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在给出的for循环中,变量i的初始值为0,终止条件为i < 100,且每次循环i增加2。因此,i的实际取值范围应该是0,2,4,...,98,而不是0到99。所以,题目中的说法是错误的。
20、C++中 cout << float(2022) 与 cout << float('2022') 运行后的输出结果均为2022。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++中,`cout << float(2022)`和`cout << float('2022')`的运行结果并不相同。`float(2022)`会将整数2022转换为浮点数,并输出2022.0。而`float('2022')`则会将字符'2'的ASCII码值(即50)与'0'的ASCII码值(即48)相加,再加上两次的'2'的ASCII码值(即50),总共是50+48+50+50=198,然后再将这个值转换为浮点数,并输出198.0。所以题目的描述是错误的。
21、已知 A 的ASCII码值为65,表达式 int('C')+abs(-5.8) 的值为72.8。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,'C'的ASCII码值为67,int('C')的结果应为67。abs(-5.8)的结果为5.8。所以,int('C')+abs(-5.8)的结果应为67+5.8=72.8,此表达式正确,选项A错误。
22、bool() 函数用于将给定参数或表达式转换为布尔类型。语句 bool(-1) 返回的是 false 值。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Python中,`bool()`函数用于将给定参数或表达式转换为布尔类型。对于非零数值,`bool()`函数会返回`True`。因此,`bool(-1)`会返回`True`,而不是`False`。所以,题目中的陈述是错误的。
23、如果变量 a 的值使得C++表达式 sqrt(a)==abs(a) ,则 a 的值为0。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中给出的表达式是sqrt(a)==abs(a),这个表达式只有在a为非负数时才成立,因为sqrt函数要求参数非负,而abs函数返回的是参数的绝对值,对于任何实数都适用。当a=0时,sqrt(0)和abs(0)都是0,表达式成立;但当a是一个非负数(且不为0)时,sqrt(a)和abs(a)也相等,因此a的值并不限于0。所以,题目的说法是错误的。
24、小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。( )
A 正确
B 错误
解析:【喵呜刷题小喵解析】:WIFI盒子通常具有路由器的功能,因为它需要连接互联网并允许设备接入网络。设置IP地址和接入WIFI盒子是为了使数字电视能够连接到互联网并收看节目。因此,WIFI盒子确实具有路由器的功能,题目的陈述是正确的。
25、任何一个for循环都可以转化为等价的while循环( )。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在编程中,for循环和while循环都是用来重复执行一段代码块的。虽然它们的语法和用法有所不同,但它们在逻辑上是等价的。也就是说,任何一个for循环都可以转化为等价的while循环,反之亦然。因此,题目的陈述是正确的。
三、实操题
26、乘法问题
问题描述
小 A 最近刚刚学习了乘法,为了帮助他练习,我们给他若干个正整数,并要求他将这些数乘起来。
对于大部分题目,小 A 可以精准地算出答案,不过,如果这些数的乘积超过106,小 A 就不会做了。
请你写一个程序,告诉我们小 A 会如何作答。
输入描述
第一行一个整数n,表示正整数的个数。
接下来n行,每行一个整数a。小 A 需要将所有的a乘起来。
保证n≤50,a≤100。
输出描述
输出一行,如果乘积超过106,则输出 >1000000 ;否则输出所有数的乘积。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
2 3 5
样例输出 1
15
样例输入 2
3 100 100 100
样例输出 2
1000000
样例输入 3
4 100 100 100 2
样例输出 3
>1000000
参考答案:对于输入的每一个正整数,我们需要将其累乘起来,如果累乘的结果超过了10^6,则输出">1000000",否则输出累乘的结果。
解析:【喵呜刷题小喵解析】:
根据题目描述,我们需要计算所有输入的正整数的乘积。由于题目限制n≤50,a≤100,因此乘积最大可能为50 * 100^50 = 5 * 10^134,这个数值远大于10^6,所以我们需要对乘积进行判断。如果乘积超过了10^6,则输出">1000000",否则输出乘积。
具体实现时,我们可以使用一个变量来保存乘积,每次输入一个正整数,就将其乘到该变量上。如果乘积超过了10^6,就输出">1000000",否则继续读取下一个正整数。最后,如果所有正整数都读取完毕,且乘积没有超过10^6,就输出乘积。
在编写程序时,需要注意输入和输出的格式,以及边界条件的处理。由于题目限制n≤50,a≤100,因此我们可以使用循环来读取输入的正整数,并使用条件语句来判断乘积是否超过了10^6。同时,需要注意输出的格式,如果乘积超过了10^6,则输出">1000000",否则输出乘积。
27、小杨的日字矩阵
问题描述
小杨想要构造一个N×N的日字矩阵(N为奇数),具体来说,这个矩阵共有N行,每行N个字符,其中最左列、最右列都是 | ,而第一行、最后一行、以及中间一行(即第(N+1)/2行)的第 个字符都是2~N-1 ,其余所有字符都是半角小写字母 x 。例如,一个N=5的日字矩阵如下:
|---| |xxx| |---| |xxx| |---|
请你帮小杨根据给定的N打印出对应的“日字矩阵”。
输入描述
一行一个整数N(5≤N≤49,保证N为奇数)。
输出描述
输出对应的“日字矩阵”。
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出N行,每行除了换行符外恰好包含N个字符,这些字符要么是 - ,要么是 | ,要么是 x 。你的输出必须和标准答案完全一致才能得分,请在提交前仔细检查。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
5
样例输出 1
|---| |xxx| |---| |xxx| |---|
样例输入 2
7
样例输出 2
|-----| |xxxxx| |xxxxx| |-----| |xxxxx| |xxxxx| |-----|
参考答案:br />|---5||xxx5||---5||xxx5||---5|
解析:【喵呜刷题小喵解析】
根据题目描述,小杨想要构造一个N×N的日字矩阵(N为奇数)。这个矩阵的构造规则是:最左列和最右列都是 | ,第一行、最后一行以及中间一行的第N个字符都是数字N,其余所有字符都是x。
对于样例输入1,N=5,所以输出的矩阵应该是:
```
|---5|
|xxx5|
|---5|
|xxx5|
|---5|
```
根据这个规则,我们可以推断出对于任意的奇数N,都可以构造出符合要求的日字矩阵。
对于更大的奇数N,例如N=7,输出的矩阵应该是:
```
|-----7|
|xxxxx7|
|xxxxx7|
|-----7|
|xxxxx7|
|xxxxx7|
|-----7|
```
根据这个规律,我们可以编写程序来生成任意奇数的日字矩阵。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!