一、单选题
1、高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。(2023-6-2级)
A 编辑
B 保存
C 调试
D 编译
解析:【喵呜刷题小喵解析】:高级语言编写的程序需要经过编译操作,才能生成在计算机上运行的可执行代码。编译是将高级语言程序翻译成机器语言的过程,生成可执行文件或目标文件,这些文件可以直接在计算机上运行。编辑、保存和调试是编程过程中的其他步骤,但它们本身并不能生成可执行代码。因此,正确答案是D,即编译。
2、能够实现下面流程图功能的伪代码是()。
A if 条件判断 then 语句块
B if 条件判断 then 什么也不做 else 语句块
C while 条件判断 do 语句块
D while not 条件判断 do 语句块
解析:【喵呜刷题小喵解析】:题目中的流程图描述了一个条件判断,当条件满足时执行语句块,当条件不满足时不执行任何操作。这种结构在伪代码中通常用"if 条件判断 then 语句块"来表示,所以选项B是正确的。选项A描述的是一个条件判断后执行语句块,但并未说明条件不满足时的操作,与流程图不符。选项C和D描述的是循环结构,与流程图的功能不符。
3、下列关于 C++语言的叙述,正确的是()。
A char 类型变量不能赋值给 int 类型的变量。
B 两个 int 类型变量相乘,计算结果还是 int 类型。
C 计算两个 int 类型变量相乘时,如果乘积超出了 int 类型的取值范围,程序会报错崩溃。
D 计算两个 double 类型变量相除时,如果除数的值为 0.0,程序会报错崩溃。
解析:【喵呜刷题小喵解析】:
A选项错误,char类型变量可以赋值给int类型变量,因为char类型本质上就是较小的int类型。
B选项正确,两个int类型变量相乘,其结果仍然是int类型,不会改变数据类型。
C选项错误,计算两个int类型变量相乘时,如果乘积超出了int类型的取值范围,程序不会报错崩溃,而是会发生溢出,导致结果不正确。
D选项错误,计算两个double类型变量相除时,如果除数的值为0.0,程序不会报错崩溃,而是会返回无穷大或者NaN(Not a Number)。在C++中,除以0不会导致程序崩溃,而是返回特殊的数学值。
4、下列关于 C++语言的叙述,不正确的是()。
A if 语句中的判断条件必须用小括号‘(’和‘)’括起来。
B for 语句中两个‘;’之间的循环条件可以省略,表示循环继续执行的条件一直满足。
C 循环体包含多条语句时,可以用缩进消除二义性。
D 除了“先乘除、后加减”,还有很多运算符优先级。
解析:【喵呜刷题小喵解析】:在C++语言中,if语句中的判断条件并不一定要用小括号‘()’和‘)’括起来,只有当条件表达式包含多个部分或者为了提高代码的可读性时,才推荐使用小括号。因此,选项A的描述是不准确的。
对于for语句,其标准形式为“for(初始化; 条件; 增量) { 循环体 }”。其中的条件表达式不能省略,因为该表达式决定了循环是否继续执行。所以,选项B的描述是错误的。
循环体中的语句如果有多个,可以通过缩进的方式增强代码的可读性,但并不能消除二义性。二义性需要通过合理的语句结构和语义来消除,因此选项C的描述也是不准确的。
在C++中,运算符的优先级确实是有规则的,除了“先乘除、后加减”之外,还有其他的优先级规则。例如,括号内的运算优先级最高,接着是一元运算符,然后是算术运算符,等等。因此,选项D的描述是正确的。
综上所述,不正确的叙述是选项B。
5、以下哪个是 C++语言的关键字?()
A main
B max
C double
D sqrt
解析:【喵呜刷题小喵解析】:在C++语言中,关键字是预定义的,具有特殊含义的单词,不能作为变量名、函数名等。在给定的选项中,只有"double"是C++的关键字,表示双精度浮点数类型。而"main"、"max"和"sqrt"都不是C++的关键字。"main"是C++程序的入口点,但它是函数名,不是关键字;"max"和"sqrt"可以作为变量名或函数名,但它们也不是关键字。因此,正确答案是C。
6、以下哪个不是 C++语言的运算符?()
A >=
B /=
C ||
D <>
解析:【喵呜刷题小喵解析】
在C++语言中,我们常见的运算符有算术运算符、关系运算符、逻辑运算符等。
A选项“>=”是关系运算符,用于比较两个值的大小。
B选项“/=”是算术运算符,用于执行除法操作,并将结果赋值给左侧的变量。
C选项“||”是逻辑运算符,用于表示“或”逻辑。
D选项“<>”在C++中并不是合法的运算符。可能是受到了HTML标签中实体字符的影响,"<>"在C++中实际上被解释为"<"和">"两个字符,而不是一个运算符。
因此,D选项“<>”不是C++语言的运算符。
7、如果 a 为 int 类型的变量,b 为 char 类型的变量,则下列哪个语句不符合C++语法?()
A a = a + 1.0;
B a = (int)(b - '0');
C b = (char)(a + '0');
D (int)b = a;
解析:【喵呜刷题小喵解析】:在C++中,类型转换和赋值操作需要遵循一定的语法规则。
A选项:`a = a + 1.0;` 是合法的,因为这里将浮点数 `1.0` 强制转换为 `int` 类型,然后与 `a` 相加,再赋值给 `a`。
B选项:`a = (int)(b - '0');` 也是合法的。这里将字符 `b` 强制转换为 `int` 类型,然后减去字符 `'0'` 的ASCII值,得到的结果再强制转换为 `int` 类型,并赋值给 `a`。
C选项:`b = (char)(a + '0');` 是合法的。这里将整数 `a` 加上字符 `'0'` 的ASCII值,得到的结果强制转换为 `char` 类型,并赋值给 `b`。
D选项:`(int)b = a;` 是不合法的。在C++中,变量不能通过类型转换来改变其类型,并且类型转换后的值也不能直接赋值给另一个变量。这里 `(int)b` 尝试将 `b` 强制转换为 `int` 类型,但后面又试图将 `a` 赋值给它,这是不符合C++语法的。
因此,D选项是不符合C++语法的。
8、如果用两个 int 类型的变量 a 和 b 分别表达平行四边形的两条边长,用 int类型的变量 h 表达 a 边对应的高,则下列哪个表达式不能用来计算 b 边对应的高?()
A a / b * (0.0 + h)
B (0.0 + a * h) / b
C a * h / (b + 0.0)
D (a + 0.0) * h / b
解析:【喵呜刷题小喵解析】题目要求找出不能用来计算b边对应的高的表达式。
首先,我们知道平行四边形的面积计算公式为:面积 = 底 × 高。
对于选项A:`a / b * (0.0 + h)`,可以化简为 `a * h / b`,这实际上是面积公式的一个变形,可以用来计算b边对应的高。
对于选项B:`(0.0 + a * h) / b`,同样可以化简为 `a * h / b`,也是面积公式的变形,可以用来计算b边对应的高。
对于选项D:`(a + 0.0) * h / b`,同样可以化简为 `a * h / b`,也是面积公式的变形,可以用来计算b边对应的高。
但对于选项C:`a * h / (b + 0.0)`,这里除数是`b + 0.0`,由于`0.0`的存在,导致这个表达式并不能化简为面积公式的形式,因此不能用来计算b边对应的高。
所以,选项C是不能用来计算b边对应的高的表达式。
9、以下哪个循环语句会无限次执行?()
A for (int a = 0; a; a++) ;
B for (bool b = false; b <= true; b++) ;
C for (char c = 'A'; c < 'z'; c++) ;
D for (double d = 0.0; d < 10.0; d += 0.001) ;
解析:【喵呜刷题小喵解析】对于A选项,`for (int a = 0; a; a++)`,条件`a`永远为真,因为整数0以外的所有整数都是非零的,所以该循环会无限次执行。对于B选项,`for (bool b = false; b <= true; b++)`,循环会执行两次,一次当`b`为`false`,另一次当`b`为`true`,所以不会无限次执行。对于C选项,`for (char c = 'A'; c < 'z'; c++)`,循环会执行从'A'到'Y'的25次,所以不会无限次执行。对于D选项,`for (double d = 0.0; d < 10.0; d += 0.001)`,循环会执行约10000次,所以不会无限次执行。因此,只有A选项的循环会无限次执行。
10、如果 a 为 char 类型的变量,且 a 的值为'C'(已知'C'的 ASCII 码为 67),则执行 cout << (a + 2);会输出()。
A E
B C+2
C C2
D 69
解析:【喵呜刷题小喵解析】在C++中,字符类型(char)实际上是以ASCII码的形式存储的。因此,当我们将字符'C'(其ASCII码为67)与整数2相加时,实际上是将67与2相加,得到的结果是69。所以,执行cout << (a + 2);会输出69。因此,正确选项为D。
11、如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于 1 且 b等于 1”的是()。
A (a == b) && (b == 1)
B (a && b)
C (a == b == 1)
D (a * b == 1)
解析:【喵呜刷题小喵解析】要正确判断“a 等于 1 且 b等于 1”,需要有两个条件:首先,a 等于 1;其次,b 等于 1。
选项A:(a == 1) && (b == 1)
这个表达式首先检查 a 是否等于 1,然后检查 b 是否等于 1。只有当两个条件都满足时,整个表达式才为真。
选项B:(a && b)
这个表达式检查 a 和 b 是否都为非零值。如果 a 和 b 都是非零的,表达式为真。但是,这并不检查 a 和 b 是否都等于 1。
选项C:(a == b == 1)
这个表达式试图检查 a 是否等于 b 并且 b 是否等于 1。然而,这样的写法在 C 或 C++ 中是不合法的。正确的写法应该是 (a == 1 && b == 1)。
选项D:(a * b == 1)
这个表达式检查 a 和 b 的乘积是否等于 1。这并不检查 a 和 b 是否都等于 1。例如,如果 a 是 2 而 b 是 0.5,乘积确实是 1,但这并不是我们想要的条件。
因此,正确答案是选项A:(a == 1) && (b == 1)。
12、如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a 是数字”?()
A '0' <= a && a <= '9'
B '1' <= a && a <= '0'
C '0' <= a <= '9'
D '1' <= a <= '0'
解析:【喵呜刷题小喵解析】在C语言中,字符型变量可以参与数值运算,这是因为字符在内存中的存储本质上就是ASCII码值。数字字符0~9在ASCII中的值分别为48~57。要判断字符型变量a是否为数字,我们需要判断a的ASCII值是否在48~57之间。在选项中,只有A选项的表达式正确,它表示a的ASCII值在48('0')到57('9')之间,即a为数字字符。其他选项的表达式均存在逻辑错误,例如B选项将'1'和'0'的位置颠倒了,C选项和D选项则使用了不正确的运算符,无法正确判断a是否为数字。
13、在下列代码的横线处填写(),使得输出是 9。
A (a + b)
B (a + b - '0')
C (char)(a + b)
D (char)(a + b - '0')
解析:【喵呜刷题小喵解析】:从题目中的代码来看,题目应该是想要从字符'0'到'9'之间的两个字符进行相加或某种操作后得到结果'9'。我们知道在ASCII表中,字符'0'的ASCII值为48,字符'9'的ASCII值为57。如果字符'a'和字符'b'分别代表数字字符'0'和'9',那么它们的ASCII值分别为48和57。
选项A:`(a + b)`,这里直接对字符'a'和'b'进行加法运算,结果仍然是两个字符,不会等于9。
选项B:`(a + b - '0')`,这里尝试从字符'a'和'b'的ASCII值中减去'0'的ASCII值(即48),然后再进行加法运算。但这样得到的结果仍然是一个字符的ASCII值,不会等于9。
选项C:`(char)(a + b)`,这里对字符'a'和'b'进行加法运算,然后再进行强制类型转换,将其转换为字符。但这样得到的结果仍然是一个字符,不会等于9。
选项D:`(char)(a + b - '0')`,这里首先对字符'a'和'b'的ASCII值进行相减,然后再减去'0'的ASCII值(即48),这样得到的结果是一个整数。如果字符'a'代表'0',字符'b'代表'9',那么计算结果为57 - 48 = 9。然后,将这个整数强制转换为字符,得到字符'9'。
因此,正确答案是选项D。
14、在下列代码的横线处填写(),可以使得输出是 42。
A i % 3 == 0
B 20 % i == 0
C i <= 8
D i >= 18
解析:【喵呜刷题小喵解析】:根据题目中的图片,我们可以推测这是一个循环结构,循环条件是`i`从1开始,每次递增1,直到某个条件满足。题目要求输出42,我们需要找到满足条件的`i`值。
观察选项,我们可以逐一分析:
A. `i % 3 == 0`:这个条件表示`i`是3的倍数,当`i`为3、6、9、12、15、18、21、24、27、30等时,条件成立。但输出42的条件并不是`i`是3的倍数。
B. `20 % i == 0`:这个条件表示`i`是20的约数,当`i`为1、2、4、5、10、20时,条件成立。我们需要找到一个满足条件的`i`,使得`20 % i == 0`并且循环体中的代码输出42。当`i`为4时,`20 % 4 == 0`,此时循环体中的代码会输出42。
C. `i <= 8`:这个条件表示`i`小于等于8,当`i`为1、2、3、4、5、6、7、8时,条件成立。但这个条件并不能使得输出为42。
D. `i >= 18`:这个条件表示`i`大于等于18,当`i`为18、19、20、21、22、23、24、25、26、27、28、29、30等时,条件成立。但这个条件并不能使得输出为42。
因此,正确答案是B,即`20 % i == 0`。
15、执行以下 C++语言程序后,输出结果是()。
A A
B B
C C
D D
解析:【喵呜刷题小喵解析】:
由于题目中缺少具体的C++代码,因此无法根据现有信息确定程序执行后的输出结果。C++语言程序的输出结果取决于程序中变量的定义、赋值以及输出的语句,如果缺少这些具体信息,则无法确定输出结果。因此,需要补充提供完整的C++代码,才能根据代码的具体内容来分析程序的输出结果。
二、判断题
16、诞生于 1986 年的中华学习机 CEC-I 入选了 2021 年的 CCF 计算机历史记忆(一类),它的内存只有 64KB。当时的汉字编码字符集 GB2312 中共有 6763 个汉字,假如每个汉字用 2 个字节编码,将整个 GB2312 汉字字符集都放入 CEC-I 的内存,也只占用了不超过 1/5 的内存空间。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中描述CEC-I的内存只有64KB,而GB2312汉字编码字符集中共有6763个汉字,每个汉字用2个字节编码,因此总共需要13526个字节,即约13KB的空间。这个空间只占了CEC-I内存的约1/5,因此题目中的描述是正确的。
17、域名是由一串用点分隔的名字来标识互联网上一个计算机或计算机组的名称,CCF 编程能力等级认证官方网站的域名是 gesp.ccf.org.cn,其中顶级域名是gesp。(2023-6-2级)
A 正确
B 错误
解析:【喵呜刷题小喵解析】:题目中提到“其中顶级域名是gesp”,这是错误的。域名由多个部分组成,最右边的部分称为顶级域名(TLD),它通常表示网站的类型或注册机构。在gesp.ccf.org.cn中,顶级域名是.cn,表示这是一个中国的网站。因此,题目中的陈述是错误的。
18、在使用 C++语言编写程序时,不能使用 sqrt、abs 等数学函数,包含<cmath>或<math.h>头文件后就能够使用了。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++语言中,sqrt和abs等数学函数通常在
19、在 C++语言中,标识符中可以有下划线‘_’。同时,‘_’也是 C++语言的运算符。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++语言中,标识符的命名规则允许使用下划线‘_’作为标识符的一部分。例如,变量名、函数名等都可以包含下划线。同时,下划线‘_’在C++中也是一个合法的运算符,用于全局变量的声明。因此,选项A“正确”是正确的。
20、如果 a 是 double 类型的变量,而且值为 3.5,则表达式 a * 10 的计算结果为 35,且结果类型为 int。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Java中,如果a是double类型的变量,并且值为3.5,那么表达式a * 10的结果类型仍然是double,而不是int。这是因为Java中的算术运算遵循类型提升规则,即如果操作数中有至少一个是浮点数,那么结果也是浮点数。所以,a * 10的结果是35.0,而不是35。因此,原题的描述是错误的。
21、在 if 语句中,如果条件成立时需要执行多条语句,可以使用大括号‘{’和‘}’将这些语句括起来。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在编程中,如果需要在条件成立时执行多条语句,确实可以使用大括号‘{’和‘}’将这些语句括起来。这是因为在if语句中,如果只有一条语句需要执行,那么不需要使用大括号,但如果有多条语句需要执行,就需要使用大括号将它们括起来。这样做可以使代码更清晰、易读,也便于管理和维护。因此,题目的描述是正确的。
22、循环语句的循环体有可能无限制地执行下去。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:循环语句的循环体是否会无限制地执行下去,取决于循环条件。如果循环条件始终为真,循环体会一直执行下去。但如果循环条件有终止条件,当条件不满足时,循环体会退出循环。因此,循环语句的循环体并不是一定会无限制地执行下去。
23、++和==都是 C++语言的运算符,但+=不是。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在C++语言中,++和==都是运算符,它们用于执行特定的操作。++是一个增量运算符,用于对变量的值进行增加;==是一个等于运算符,用于比较两个值是否相等。然而,+=不是C++语言的运算符,这个说法是不准确的。+=是赋值运算符的一种,用于将右侧的操作数加到左侧的操作数上,并将结果赋值给左侧的操作数。因此,++和==确实是C++语言的运算符,但+=也是C++语言的运算符,所以题目的说法是错误的。
24、如果 a 为 char 类型的变量,且取值为大写字母'F',则执行语句 a = a + 1;后,a 的值会变为大写字母'G'。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:在Java中,char类型的数据被视为ASCII码值。大写字母'F'的ASCII码值是70,执行语句a = a + 1;后,a的值变为71,对应的字符是大写字母'G'。然而,这个变化是在数值层面上的,而不是在字符层面上。在Java中,你不能直接对字符进行算术运算,这个语句实际上会编译错误。如果你想让字符'F'变为'G',应该使用字符型加减运算,如a = (char)(a + 32);,即将'F'对应的数值加上32,得到'G'对应的数值。因此,原题目中的说法是错误的。
25、表达式 sqrt(9.0)的计算结果为 3,且结果类型为 int。
A 正确
B 错误
解析:【喵呜刷题小喵解析】:表达式sqrt(9.0)的计算结果确实为3,但结果类型并不是int,而是double。在大多数编程语言中,sqrt函数返回的是浮点数(float或double),而不是整数(int)。因此,这个表达式的计算结果并不是整数3,而是浮点数3.0。所以,题目的陈述是错误的。
三、实操题
26、找素数
【问题描述】
小明刚刚学习了素数的概念:如果一个大于 1 的正整数,除了 1 和它自身外,不能被其他正整数整除,则这个正整数是素数。现在,小明想找到两个正整数A和B之间(包括A和B)有多少个素数?
【输入描述】
输入 2 行,第一行包含正整数A,第二行包含正整数B。约定 2≤A≤B≤1000。
【输出描述】
输出一行,包含一个整数C,表示找到C个素数。
【样例输入 1】
2 10
【样例输出 1】
4
【样例解释 1】
在 2 和 10 之间有 4 个素数,分别为:2、3、5、7。
【样例输入 2】
98 100
【样例输出 2】
0
参考答案:输入:210输出:4解析:在2和10之间的素数有2、3、5、7,共4个。输入:98100输出:0解析:在98和100之间没有素数,所以输出0。
解析:【喵呜刷题小喵解析】:
这是一个关于找素数的问题。首先,我们需要明确什么是素数。素数是大于1的自然数,除了1和它本身以外不再有其他因数。例如,2、3、5、7都是素数。
根据题目描述,我们需要找到两个正整数A和B之间(包括A和B)的素数数量。我们可以使用一个循环,从A开始,逐个检查每个数是否为素数,直到B。如果是素数,计数器加1。最后,输出计数器的值即可。
在第一个样例中,A是2,B是10。我们需要找出2到10之间的素数。通过逐个检查,我们可以找到4个素数:2、3、5、7。
在第二个样例中,A是98,B是100。我们需要找出98到100之间的素数。但是,99和100都不是素数,所以在98和100之间没有素数。因此,输出0。
27、自幂数判断
【问题描述】
自幂数是指,一个N位数,满足各位数字N次方之和是本身。例如,153 是 3位数,其每位数的 3 次方之和,13 + 53 + 33 = 153,因此 153 是自幂数;1634是 4 位数,其每位数的 4 次方之和,14 + 64 + 34 + 44 = 1634,因此 1634 是自幂数。
现在,输入若干个正整数,请判断它们是否是自幂数。
【输入描述】
输入第一行是一个正整数M,表示有M个待判断的正整数。约定 1≤M≤100。
从第 2 行开始的M行,每行一个待判断的正整数。约定这些正整数均小于108。
【输出描述】
输出M行,如果对应的待判断正整数为自幂数,则输出英文大写字母'T',否则输出英文大写字母'F'。
提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。
【样例输入 1】
3 152 111 153
【样例输出 1】
F F T
【样例输入 2】
5 8208 548834 88593477 12345 5432
【样例输出 2】
T T T F F
参考答案:br />输入样例1:3152111153输出样例1:FFT输入样例2:5820854883488593477123455432输出样例2:TTTFF
解析:【喵呜刷题小喵解析】
自幂数是指一个N位数,满足各位数字N次方之和是本身。判断一个数是否为自幂数,我们需要将该数的每一位数字取出,计算其N次方,并将所有位数字的N次方相加,判断这个和是否等于原数。
对于输入样例1,第一个数152不是自幂数,因为1^3 + 5^3 + 2^3 = 158,不等于152;第二个数111不是自幂数,因为1^3 + 1^3 + 1^3 = 3,不等于111;第三个数153是自幂数,因为1^3 + 5^3 + 3^3 = 153。
对于输入样例2,第一个数8208是自幂数,因为8^4 + 2^4 + 0^4 + 8^4 = 8208;第二个数548834是自幂数,因为5^4 + 4^4 + 8^4 + 8^4 + 3^4 + 4^4 = 548834;第三个数88593477是自幂数,因为8^8 + 8^5 + 5^8 + 9^8 + 3^8 + 4^7 + 7^7 = 88593477;第四个数12345不是自幂数,因为1^5 + 2^5 + 3^5 + 4^5 + 5 = 1601,不等于12345;第五个数5432不是自幂数,因为5^4 + 4^4 + 3^4 + 2^4 = 5465,不等于5432。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!