答案详情
只看错题
[单选题]
1.
以下C++不可以作为变量的名称的是( )。
A.
CCF GESP
B.
ccfGESP
C.
CCFgesp
D.
CCF_GESP
我的答案:
A
正确答案:
A
答案解析:
正确答案是 A。在C++中,变量名不能包含空格。因此,选项 A 中的 CCF GESP 是不合法的变量名。其他选项都是合法的变量名:
B. ccfGESP:合法,小写字母和大写字母可以混合使用。
C. CCFgesp:合法,大小写字母可以混合使用。
D. CCF_GESP:合法,字母和下划线可以混合使用。
2.
C++表达式 10 - 3 * (2 + 1) % 10 的值是( )。
A.
0
B.
1
C.
2
D.
3
我的答案:
B
正确答案:
B
答案解析:
为了求解C++表达式 10 - 3 * (2 + 1) % 10 的值,我们按照运算符的优先级和结合性来计算:
首先,计算括号内的表达式 (2 + 1) 得到 3。
接下来,计算乘法 3 * 3 得到 9。
然后,计算减法 10 - 9 得到 1。
最后,计算取余数 1 % 10 得到 1。
因此,C++表达式的值是1。
正确的选项是B. 1。
3.
假设现在是上午十点,求出N小时(正整数)后是第几天几时,如输入20小时则为第2天6点,如N输入4则为今天14点。为实现相应功能,应在横线处填写代码是( )。
A.
(10 + N) % 24 , (10 + N) / 24
B.
(10 + N) / 24 , (10 + N) % 24
C.
N % 24 , N / 24
D.
10 / 24 , 10 % 24
我的答案:
B
正确答案:
B
答案解析:
正确答案是 B。在横线处应该填写 (10 + N) / 24 和 (10 + N) % 24。
完整的代码如下:
#include <iostream>
using namespace std;
int main() {
int N, dayX, hourX;
cin >> N;
}
这段代码的逻辑是,首先计算从上午十点开始经过N小时后的总小时数 (10 + N),然后通过 (10 + N) / 24 计算出经过的天数,通过 (10 + N) % 24 计算出当天的小时数。最后根据计算结果输出相应的信息。选项 B 包含了这种逻辑。
4.
下面的程序用于判断N是否为偶数,横线处应填写代码是( )。
A.
N % 2 == 0
B.
N % 2 = 0
C.
N % 2
D.
N % 2 != 0
我的答案:
A
正确答案:
A
答案解析:
正确答案是 A。在横线处应填写 N % 2 == 0。
完整的代码如下:
#include <iostream>
using namespace std;
int main() {
int N;
cin >> N;
}
这段代码使用取余运算符 % 来判断输入的数 N 是否为偶数。选项 A 包含了正确的逻辑。
5.
下面对C++代码执行后输出的描述,正确的是( )。
A.
如果输⼊的N是⼩于等于2整数,第5⾏将输出0。
B.
如果输⼊的N是⼤于等于2整数,第5⾏将输出N-1。
C.
如果输⼊的N是⼤于等于2整数,第5⾏将输出N。
D.
以上说法均不正确。
我的答案:
D
正确答案:
A
答案解析:
让我们逐步分析:
用户输入一个整数N。
初始化变量cnt为0。
使用for循环迭代N次,每次迭代将cnt增加1。
输出cnt的值。
现在,我们可以对每个选项进行分析:
A. 如果输入的N是小于等于2的整数,循环不会执行或执行一次,因此cnt保持为0,第5行输出0。这是正确的。
B. 如果输入的N是大于等于2的整数,循环会执行N次,每次将cnt增加1。因此,第5行输出的是N而不是N-1。这是不正确的。
C. 如果输入的N是大于等于2的整数,循环会执行N次,每次将cnt增加1。因此,第5行输出的是N而不是N-1。这是不正确的。
D. 以上说法均不正确。这是不正确的,因为选项A是正确的。
因此,正确的答案是A。
6.
下面C++代码执行后的输出是( )。
A.
10
B.
9
C.
3
D.
1
我的答案:
C
正确答案:
C
答案解析:
正确答案是 C。在给定的代码中,for 循环的迭代中,i 每次增加2。因此,实际上只有 i 的每三个值会执行一次循环。循环中的 cnt += 1; 语句将被执行三次。
循环迭代过程:
i=1,执行循环体,cnt=1,i变为4。
i=4,执行循环体,cnt=2,i变为7。
i=7,执行循环体,cnt=3,i变为10。
i=10,循环条件不再满足,退出循环。
因此,最终输出 cout << cnt; 将输出 3。选项 C 正确地反映了这个结果。
7.
下面C++代码执行后的输出是( )。
A.
90
B.
44
C.
20
D.
10
我的答案:
C
正确答案:
A
答案解析:
正确答案是 A。让我们分析循环的执行过程:
cnt = 0;
for(int i = 1; i < 20; i++){
if(i % 2)
continue;
else if(i % 3 == 0 && i % 5 == 0)
break;
cnt += i;
}
cout << cnt;
循环从 i=1 开始,每次递增,但只有在满足特定条件时才会执行循环体内的代码:
当 i 为奇数时,if(i % 2) 的条件为真,执行 continue; 跳过循环体,不执行后续代码。
当 i 为偶数时,执行 cnt += i;,累加 i 的值。
当 i 能同时被3和5整除时,执行 break;,提前结束循环。
循环迭代过程:
i=1,奇数,continue,不执行后续代码。
i=2,偶数,执行 cnt += i;,cnt=2。
i=3,奇数,continue,不执行后续代码。
i=4,偶数,执行 cnt += i;,cnt=6。
i=5,奇数,continue,不执行后续代码。
i=6,偶数,执行 cnt += i;,cnt=12。
i=7,奇数,continue,不执行后续代码。
i=8,偶数,执行 cnt += i;,cnt=20。
i=9,奇数,continue,不执行后续代码。
i=10,偶数,执行 cnt += i;,cnt=30。
i=11,奇数,continue,不执行后续代码。
i=12,偶数,执行 cnt += i;,cnt=42。
i=13,奇数,continue,不执行后续代码。
i=14,偶数,执行 cnt += i;,cnt=56。
i=15,奇数,continue,不执行后续代码。
i=16,偶数,执行 cnt += i;,cnt=72。
i=17,奇数,continue,不执行后续代码。
i=18,偶数,执行 cnt += i;,cnt=90。
所以,最终输出 cout << cnt; 将输出 90。选项 A 正确地反映了这个结果。
8.
下面C++代码执行后的输出是( )。
A.
11
B.
10
C.
5
D.
4
我的答案:
D
正确答案:
C
答案解析:
正确答案是 C。让我们分析循环的执行过程:
N = 10;
cnt = 0;
while(1){
if(N == 0) break;
cnt += 1;
N -= 2;
}
cout << cnt;
循环使用 while(1) 表示无限循环,但在循环体内使用了 if(N == 0) break; 来在满足条件时退出循环。
循环迭代过程:
第一次循环,N=10,cnt=1,N -= 2,N=8。
第二次循环,N=8,cnt=2,N -= 2,N=6。
第三次循环,N=6,cnt=3,N -= 2,N=4。
第四次循环,N=4,cnt=4,N -= 2,N=2。
第五次循环,N=2,cnt=5,N -= 2,N=0。
此时满足 if(N == 0) 的条件,跳出循环。
所以,最终输出 cout << cnt; 将输出 5。选项 C 正确地反映了这个结果。
9.
下面C++代码用于判断一个数是否为质数(素数),在横线处应填入代码是( )。
A.
cnt = 1
B.
cnt = 2
C.
cnt =+ 1
D.
cnt += 1
我的答案:
B
正确答案:
D
答案解析:
正确答案是 D。在给定的代码中,横线处应该填入 cnt += 1;,这样在循环中每当找到 N 的一个因子时,cnt 就会增加1。完整的代码如下:
#include <iostream>
using namespace std;
int main() {
int N, cnt = 0;
cin >> N;
}
这个代码片段用于判断输入的数 N 是否为质数,通过统计 N 有多少个因子(除了1和N本身)。如果 cnt 的值为2,说明 N 只有两个因子,即1和N,因此 N 是质数。
10.
对下面的代码,描述正确的是( )。
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
}
A.
输出 2 6 3 5 4 8 1 0 9 10 10
B.
输出 2 6 3 5 4 8 1 0 9 9
C.
输出 2 6 3 5 4 8 1 0 9 10
D.
提示有编译错误
我的答案:
D
正确答案:
D
答案解析:
答案是 D。在给定的代码中,cout << i << endl; 中的 i 在循环外部是不可见的。这是因为 i 的作用域仅限于 for 循环内。因此,试图在 cout 语句外部输出 i 会导致编译错误。
所以,选项 D 正确地指出了可能的编译错误。
11.
执行下面C++代码后输出是( )。
A.
3
B.
21
C.
27
D.
49
我的答案:
B
正确答案:
B
答案解析:
答案是 B。让我们分析循环的执行过程:
int cnt = 0;
for(int i = 10; i > 3; i -= 3)
cnt = cnt + i;
循环从 i=10 开始,每次减去3,直到 i 不再大于3。循环体内的操作是将 i 的值加到 cnt 上。循环迭代如下:
i=10,cnt=0+10=10
i=7,cnt=10+7=17
i=4,cnt=17+4=21
最终输出 cout << cnt; 将输出 cnt 的值,即 21。所以,答案是 B。
12.
定义变量 char c ,下面对 c 赋值的语句,不符合语法的是( )。
A.
c = (char)66
B.
c = (char)(66);
C.
c = char(66);
D.
c = char 66;
我的答案:
B
正确答案:
D
答案解析:
答案是 D。在 C++ 中,赋值语句应该使用等号 =,而不是空格。因此,正确的赋值语句应该是类似于 c = (char)66; 的形式。
所以,选项 D 中的语法是不正确的。
13.
下图所示C++代码对大写字母 'A' 到 'Z' 分组,对每个字母输出所属的组号,那么输入 'C' 时将输出的组
号是?( )。
A.
3
B.
3 5
C.
3 5 9
D.
以上都不对
我的答案:
D
正确答案:
B
答案解析:
答案是 B。当输入为 'C' 时,根据 switch 语句的逻辑,程序会输出 "3 5 "。
注意在 switch 语句中,虽然 'C' 的情况下会输出 "3 ",但是由于缺少 break 语句,控制流会继续执行下一个情况,即 'D',输出 "5 "。
所以,输出将是 "3 5 "。选项 B 正确地反映了这个结果。
14.
某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )
A.
麦克风
B.
扬声器
C.
油量表
D.
传感器
我的答案:
D
正确答案:
C
答案解析:
答案是C。油量表(油量计)不是驾驶系统完成选路所必须的。油量表通常用于显示车辆的燃油水平,而与驾驶系统选择路线的功能无关。驾驶系统通常依赖于传感器、麦克风等设备来感知环境和乘客的指令,而扬声器用于提供语音提示或回馈。因此,油量表与选择路线的功能无直接关系。
15.
现代计算机是指电子计算机,它所基于的是( )体系结构。
A.
艾伦·图灵
B.
冯·诺依曼
C.
阿塔纳索夫
D.
埃克特-莫克利
我的答案:
A
正确答案:
B
答案解析:
--
[判断题]
1.
C++表达式 int(3.14) 的值为3。( )
正确
错误
我的答案:
正确
正确答案:
正确
答案解析:
正确。
在C++中,进行类型转换时,可以使用静态类型转换操作符。在这个表达式中,(int) 是一种静态类型转换操作符,将浮点数 3.14 转换为整数。
对于 (int)3.14,静态类型转换将直接截断小数部分,取整数部分,因此结果是3。
所以,选项是正确的。
2.
C++语句 cout << (2 * 3, 3 % 10, 2+3) 的输出为 6,3,5 。 ( )
正确
错误
我的答案:
错误
正确答案:
错误
答案解析:
错误。
在C++中,逗号运算符 , 会依次计算每个表达式,并返回最后一个表达式的值。在给定的语句中:
cout << (2 * 3, 3 % 10, 2 + 3);
逗号运算符的结果是最后一个表达式 2 + 3 的值,即5。因此,这个语句实际上相当于:
cout << 5;
因此,输出将是5,而不是给定的 6,3,5。所以,选项是错误的。
3.
for(int i = 1; i < 10; i += 3;) ; 表示i从1开始到10结束间隔为3,相当于1、4、7、10。( )
正确
错误
我的答案:
正确
正确答案:
错误
答案解析:
错误。
在给定的 for 循环中,递增部分 i += 3; 被放在了循环头的分号后面。这样的话,循环将不会执行任何语句,即循环体为空。递增部分应该放在循环体内,而不是在循环头的分号后面。
正确的写法应该是:
for(int i = 1; i < 10; i += 3)
{
// 循环体
}
所以,给定的 for 循环并不会按照预期的方式递增,选项是错误的。
4.
C++表达式010+100+001的值为111。( )
正确
错误
我的答案:
正确
正确答案:
错误
答案解析:
在C++中,以0开头的整数字面量被解释为八进制数。所以,010表示八进制数,其对应的十进制值为8。
因此,表达式 010 + 100 + 001 的值为 8 + 100 + 1 = 109,而不是111。
选项是错误的。
5.
if 语句中的条件表达式的结果可以为 int 类型。
正确
错误
我的答案:
正确
正确答案:
正确
答案解析:
在C++中,if语句的条件表达式的结果实际上可以是任何可以隐式转换为布尔值的类型。这意味着,条件表达式的结果不仅可以是bool类型,还可以是整数、指针、浮点数等其他类型。
6.
在下面的C++代码 while(1) continue; 中,由于循环中的 continue 是无条件被执行,因此将导致死循环。( )
正确
错误
我的答案:
正确
正确答案:
正确
答案解析:
正确。
在下面的C++代码 while(1) continue; 中,while循环是一个无限循环,因为条件永远为真(1代表真)。而在循环体内,continue;语句是一个无条件的跳过本次循环的语句,但由于没有改变循环条件或执行其他导致循环结束的语句,循循环将一直继续下去,导致死循环。
因此,选项是正确的。这段代码将导致无限循环。
7.
C++表达式 ('1'+'1' == '2' ? flag=1:flag=2) 的结果值和表达式 (flag==2) 的相同。( )
正确
错误
我的答案:
正确
正确答案:
错误
答案解析:
在C++中,三元条件运算符 ? : 的优先级较低,因此先执行 '1' + '1',这会将字符 '1' 转换为其对应的ASCII码值(49),然后执行加法操作,结果为98。
因此,表达式 ('1'+'1' == '2' ? flag=1:flag=2) 中的条件判断为假(98 == '2'为假),因此执行 flag=2。
然后,表达式 (flag==2) 的值为真,因为在上一步中 flag 被赋值为2。
因此,选项是错误的。这两个表达式的结果值不同。
8.
在C++的程序中,不能用 scanf 作为变量名。( )
正确
错误
我的答案:
错误
正确答案:
错误
答案解析:
在c++中,定义名为scanf 的变量是不会报错的,如果同时在使用scanf 函数时会报错。
9.
小杨最近在准备考GESP,他用的Dev C++ 来练习和运行程序,所以Dev C++也是一个小型操作系统。( )
正确
错误
我的答案:
正确
正确答案:
错误
答案解析:
错误。
Dev C++ 不是一个操作系统,而是一个集成开发环境(IDE),用于编写、编译和运行C和C程序。Dev C提供了一个用户友好的界面,帮助程序员更轻松地进行编程工作,但它本身并不是操作系统。
一个操作系统是一种控制计算机硬件和软件资源的系统软件。常见的操作系统包括Windows、Linux、macOS等。Dev C++ 可以在这些操作系统上运行,并提供一个用于编写和运行C++程序的环境,但它本身并非操作系统。
10.
任何一个 while 循环都可以转化为等价的 for 循环( )。
正确
错误
我的答案:
错误
正确答案:
正确
答案解析:
正确。
任何一个while循环都可以被转化为等价的for循环,反之亦然。这是因为for和while是两种不同的循环结构,它们之间的差异主要体现在语法形式上,而在执行逻辑上是等价的。
例如,一个while循环:
while (condition) {
// 循环体
}
可以被转化为等价的for循环:
for (; condition; ) {
// 循环体
}
反之亦然,for循环可以被转化为等价的while循环。这样的转换不影响循环的逻辑,只是改变了表达形式。
[编程题]
1.
题目描述
今天是星期 X,小杨还有 N天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用7 表示星期日)
输入格式
输入 2 行,第一行一个整数 X(1<=X<=7 );第二行一个整数 ( 1<=N<=364)。
输出格式
输出一个整数,表示小杨考试那天是星期几。
输入输出样例
输入#1
1
6
输出#1
7
输入#2
5
3
输出#2
1
说明/提示
时间限制:1.0 s
内存限制:128.0 MB
#include<bits/stdc++.h>
using namespace std;
int main(){
int x,n;
cin>>x>>n;
if(n+x<=7)cout<<n+x;
else {
int m=(n+x)%7;
cout<<m;
}
}
测试点信息
#1
AC
1ms/3.33m
#2
AC
1ms/3.42m
#3
WA
0ms/3.28m
#4
AC
0ms/3.35m
#5
AC
0ms/3.31m
答案解析:
x-1:将输入的星期值 x 转换为以 0 表示星期一的形式。
n%7:取距离考试的天数对 7 取余,这样可以确保在一周内循环。
(x-1+n%7)%7:将得到的结果再次转换为以 0 表示星期一的形式。
+1:将结果加一,以匹配以 1 表示星期一的形式。
#include <stdio.h>
int main(int argc, char **argv)
{
int x, n;
scanf("%d%d", &x, &n);
printf("%d\n", (x-1+n%7)%7+1);
return 0;
}
2.
题目描述
小杨需要从1 到 N报数。在报数过程中,小杨希望跳过 M的倍数。例如,如果 N=5,M=2 ,那么小杨就需要
依次报出1 、3 、5 。
现在,请你依次输出小杨报的数。
输入格式
输入 2 行,第一行一个整数 ( 1<=N<=1000);第二行一个整数 (2<=M<=100 )。
输出格式
输出若干行,依次表示小杨报的数。
输入输出样例
输入#1
5
2
输出#1
1
3
5
输入#2
10
3
输出#2
1
2
4
5
7
8
10
说明/提示
时间限制:1.0 s
内存限制:128.0 MB
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
if(i%m!=0)cout<<i<<endl;
}
return 0;
}
测试点信息
#1
AC
0ms/3.33m
#2
AC
1ms/3.34m
#3
AC
0ms/3.17m
#4
AC
0ms/3.33m
#5
AC
0ms/3.39m
答案解析:
for循环将i初始化为1,并在i小于或等于n时循环。
if语句检查当前i的值是否不是m的倍数。i % m计算i除以m的余数,而i % m != 0检查这个余数是否不为零。
如果条件为真(即i不是m的倍数),则执行if语句内的代码。在这种情况下,它使用printf("%d\n", i)打印i的值。
#include <stdio.h>
int main(int argc, char **argv)
{
int n, m, i;
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
{
if(i%m!=0) printf("%d\n", i);
}
return 0;
}