一、单选题(每题2分,共30分)
题目 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
答案 | A | D | B | C | B | C | B | C | C | C | C | D | C | C | B |
1.在C++中 ,下列不可做变量的是( )。
A.five-Star
B.five_star
C.fiveStar
D._fiveStar
【答案】A
【考纲知识点】变量名的命名规则,即组成部分只有数字、字母和下划线。
【解析】依据变量名的命名规则,选项 A “five-Star” 不符合要求,因为其包含了非法字符 “-”(变量命名中不允许出现这种符号),B 选项 “five_star”、C 选项 “fiveStar” 为常规命名方式均正确,依据命名规则数字不能作为开头,但下划线是可以作为开头的,所以 D 选项 “_fiveStar” 也正确,故答案为 A 选项。
2.C++表达式3-3*3/5的值是( )。
A.-1.2
B.1
C.0
D.2
【答案】D
【考纲知识点】C++ 基本运算中运算符的优先级以及从左至右的运算顺序。
【解析】表达式中没有小括号,按照运算符的优先级和从左至右的顺序,会先计算 3 乘以 3 的结果然后除以 5,由于 9 整除 5 结果为 1(这里是整数除法,只取商的整数部分),所以最后是计算 3 减 1 的结果,故答案为 D 选项。
3.在C++中 ,假设N为正整数 ,则表达式 cout << (N % 3 + N % 7) 可能输出的最⼤值是( )。
A.6
B.8
C.9
D.10
【答案】B
【考纲知识点】C++ 中取模运算(%)的概念及运算结果范围,以及对表达式结果最大值的分析。
【解析】题目中的表达式为变量模 3 和模 7 的结果求和,正整数模 3 最大的结果为 2(例如当 N = 2 时,2 % 3 = 2),模 7 的最大结果为 6(例如当 N = 6 时,6 % 7 = 6),所以可能输出的最大值为 2 + 6 = 8,故答案为 B 选项。
4.C++语句printf("5%%2={%d}\n",5 % 2) 执⾏后的输出是( )。
A.1={1}
B.5%2={5%2}
C.5%2={1}
D.5 ={1}
【答案】C
【考纲知识点】C++ 中 printf 函数的格式化输出规则,特别是对特殊字符 “%” 的处理。
【解析】题目中使用 printf 进行格式化输出,由于单独一个 “%” 不会直接显示,双 “%” 则会正常显示,所以整体格式为 “5%2={}”,花括号内部 “% d” 为占位符,显示的结果为 5 % 2 的计算结果 1,故答案为 C 选项。
5.对整型变量i,执⾏C++语句c in >> i, cout << i 时如果输⼊5+2,下述说法正确的是( )。
A.将输出整数7
B.将输出5
C.语句执⾏将报错 ,输⼊表达式不能作为输出的参数
D.语句能执⾏ ,但输出内容不确定
【答案】B
【考纲知识点】C++ 中 cin 输入流对象对输入数据的读取规则,以及对输入字符串格式的处理。
【解析】按照题目中代码进行输入,首先程序不会报错可以正常接收数据,在 C++ 中使用 cin >> i 从标准输入读取数据到整型变量 i 时,cin 会尝试读取一个有效的整数。如果输入的是 “5 + 2” 这样的字符串,cin 只会读取直到它遇到第一个非数字字符为止。因此,在这个例子中,cin 将只读取 5,并将它存储在变量 i,故答案选择 B 选项。
6.下面C++代码执行后的输出是( )。
A.102={102}
B.a+1={a+1}
C.a+1={102}
D.a先被赋值为浮点数 ,后被赋值为整数 ,执⾏将报错
【答案】C
【考纲知识点】变量赋值、基本运算以及格式化输出语句的综合运用,理解代码逻辑和输出格式要求。
【解析】按照给定的程序,变量 a 中存储的数值是 101,运行第四行格式化输出之后会将加一的计算结果 102(不进行保留小数位)显示在格式内,所以最终输出的格式为 “a + 1 = {102}”,故正确答案为 C 选项。
7.表达式9/4 - 6 % (6 - 2) * 10 的值是( )。
A. -17.75
B. -18
C. -14
D. -12.75
【答案】B
【考纲知识点】C++ 基本运算中运算符的优先级(先乘除后加减,有括号先算括号内等规则)以及取模运算的运用。
【解析】题目中的表达式按照运算优先级规律会先将 9 除以 4 的整除结果 2 算出来(整数除法只取商的整数部分),然后减去后方最终的计算结果 6 % 4 * 10(先算括号里 6 - 2 = 4,再算 6 % 4 = 2,最后 2 * 10 = 20),结果为 2 - 20 = -18,故正确选项为 B 选项。
8.下面C++代码执行时输入10后,正确的输出是( )。
A.第5行代码1
B.第6行代码1
C.第5行代码 1
D.第6行代码 1
【答案】C
【考纲知识点】C++ 中分支语句(if 语句)结合取模运算的逻辑判断以及格式化输出语句的格式要求。
【解析】题目中向程序输入的数据为 10,由于 10 % 3 表达式结果为 1,进行分支判断,会执行 if 语句后方的输出,按照输出格式(%2d 要求输出占两位宽度)正常显示,所以答案应该为 C 选项,不可错选为 A 选项。
9.下⾯C++代码执⾏后输出是( )。
A.9 45
B.10 55
C.10 45
D.11 55
【答案】C
【考纲知识点】C++ 中 for 循环的执行逻辑、循环变量的变化以及累加操作的实现与最终结果输出。
【解析】题目中 for 循环的写法虽然没有采用最常规的写法,但程序逻辑是清晰的,累加的所有数字为 0、1、2、3、4、5、6、7、8、9,最终变量 i 变为 10 循环结束,所以输出的结果为 10 和 45(前面是循环结束后 i 的值,后面是累加的结果),故正确答案为 C 选项。
10.下⾯C++代码⽤于判断N是否为质数(只能被1和它本⾝整除的正整数) 。程序执⾏后 ,下⾯有关描述正确的是( )。
A.如果输⼊负整数 ,可能输出“是质数”
B.如果输⼊2,将输出“不是质数”, 因为此时循环不起作⽤
C.如果输⼊2,将输出“是质数”, 即便此时循环体没有被执⾏
D.如果将if (N >= 2) 改为if (N > 2) 将能正确判断N是否质数
【答案】C
【考纲知识点】C++ 中循环结构与分支结构结合判断质数的逻辑,以及对不同输入情况的处理分析。
【解析】如果输入的是负整数,程序进行分支判断一定是输出 “不是质数”,A 选项错误;如果输入的是 2,flag 的结果会是 true,虽然循环没有执行(因为循环条件从 2 开始判断,2 本身不进入循环体,但满足质数定义),但是最终的结果会输出 “是质数”,所以 C 选项正确,B 选项错;如果将最开始的判断条件改写为 > 2,则不能正确判断是否为质数,这样会忽略掉质数 2,故答案选择 C 选项。
11.下⾯的C++代码⽤于求1~N之间所有奇数之和 ,其中N为正整数 ,如果N为奇数 ,则求和时包括N。有关描述错误的是( )。
A.执⾏代码时如果输⼊10 ,则最后⼀⾏输出将是 11 25
B.执⾏代码时如果输⼊5,则最后⼀⾏输出将是6 9
C.将i += 1 移到if (i % 2 == 1) 前⼀⾏, 同样能实现题⽬要求
D.删除if (i % 2 == 1) ,并将i += 1 改为i += 2 ,同样可以实现题⽬要求
【答案】C
【考纲知识点】C++ 中循环结构、条件判断语句(if 语句)以及变量自增操作的配合使用,分析代码能否实现既定求和功能。
【解析】如果输入数据 10,则累加的数字是 1、3、5、7、9,最终计算结果为 25,A 选项正确;如果输入的数据是 5,则累加的数字是 1、3、5,最终结果为 9,B 选项正确;由于起点是 1,所以采用步长为 2 的方式同样可以实现要求,D 选项正确;如果将条件判断和变量 i 自增切换位置则程序计算结果错误(会导致偶数也被累加进来等不符合要求的情况),故答案为 C 选项。
12.如果⼀个整数N能够表⽰为 X*X 的形式 ,那么它就是⼀个完全平⽅数 ,下⾯C++代码⽤于完成判断N是否为 ⼀个完全平⽅数 ,在横线处应填⼊的代码是( )。
A. i == N*N
B. i*10 == N
C. i+i == N
D. i*i == N
【答案】D
【考纲知识点】C++ 中根据题目要求判断完全平方数的逻辑,涉及到变量关系及表达式的正确书写。
【解析】根据题目描述条件,应判断变量 i 的平方结果是否为 N,四个选项中只有 D 选项 “i * i == N” 是正确的书写格式,且符合题目要求,故答案为 D 选项。
13.执⾏下⾯C++代码后输出的cnt的值是( )。
A. 8
B. 7
C. 4
D. 1
【答案】C
【考纲知识点】C++ 中循环结构的执行次数判断,重点关注循环变量的初始值、步长以及终止条件。
【解析】题目最终求解的是循环次数,需要注意变量 i 步长为 2,最大增长到 6(从 0 开始,每次加 2,分别是 0、2、4、6,到 6 时下次循环判断就不满足条件了),后面循环将不再成立,所以共循环四次,故答案为 C 选项。
14.⼩杨⽗母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级 ,那他可以选择的认证语⾔有⼏种? ( )
A. 1
B. 2
C. 3
D. 4
【答案】C
【考纲知识点】对 GESP 认证考试可选语言种类的了解。
【解析】GESP认证考试可选语言有三种分别是scratch、python和C++,故答案为C选项
15.ENIAC于1946年投⼊运⾏ ,是世界上第⼀台真正意义上的计算机 ,它的主要部件都是( )组成的。
A.感应线圈
B.电⼦管
C.晶体管
D.集成电路
【答案】B
【考纲知识点】计算机发展历史中关于 ENIAC 计算机主要部件构成的知识。
【解析】本题为计算机信息学历史知识,ENIAC,全称为Electronic Numerical Integrator And Computer,它是完全的电子计算机,能够重新编程,解决各种计算问题。它于1946年2月14日在美国宣告诞生。它的主要部件都是由电子管组成的,故答案为B选项
二、判断题(每题2分,共20分)
题目 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
答案 | ✕ | ✕ | ✓ | ✕ | ✓ | ✓ | ✕ | ✕ | ✕ | ✓ |
1.在C++代码中变量X被赋值为16.44,则cout << X / 10 执⾏后输出的⼀定是1 。( )
【答案】✕
【考纲知识点】C++ 中变量类型对运算结果输出的影响,若未明确变量类型,除法运算结果不一定符合预期整数结果情况。
【解析】题目没有指明变量X的类型,并不一定是整数类型,故答案为错误
2.题目没有指明变量X的类型,并不一定是整数类型,故答案为错误
【答案】✕
【考纲知识点】C++ 中不同类型数据(整型与浮点型混合)的运算规则以及结果的准确性判断。
【解析】变量N被赋值为10,除以4会进行整除答案为2,和4做模运算结果也为2,最后和4.0做除法可以算出正确的结果2.5,故答案为错误
3.定义C++的float型变量N,则语句c in >> N; cout << int(float(N)) 可以输⼊正负整数和浮点数, 并将其转换为整数后输出 。 ( )
【答案】✓
【考纲知识点】C++ 中基本数据类型转换操作,通过先将 float 型变量强制转换为整型实现输出整数的功能,以及 cin 对不同数值类型输入的处理。
【解析】按照题目所示的类型转换是可以完成对于正负整数和浮点数的正确类型转换,最后输出为整数类型的结果,故答案为正确
4.C++的整型N被赋值为5,语句printf("%d*2",N)执⾏后将输出10。( )
【答案】✕
【考纲知识点】C++ 中 printf 函数的格式化输出规则,明确格式字符串中普通字符与占位符的区别以及输出情况。
【解析】按照题目所示的格式进行输出*2并不会参与到运算中而是会正常显示,所以输出的答案是5*2,故答案为错误
5.在C++中,break语句⽤于终⽌当前层次的循环 ,循环可以是 for循环 ,也可以是 while循环 。 ( )
【答案】✓
【考纲知识点】C++ 中 break 语句的功能及适用的循环结构范围,了解其在控制循环流程方面的作用。
【解析】break以语句可以正确终止当前层次的循环,并且无论是for循环还是while循环都可以,故答案为正确
6.在C++, continue语句通常与if语句配合使⽤ 。 ( )
【答案】✓
【考纲知识点】C++ 中 continue 语句的使用特点,即在循环中用于跳过本次循环,通常结合一定条件判断(常通过 if 语句设定条件)来决定是否跳过循环体剩余部分。
【解析】continue语句在循环中用于跳过本次循环,通常需要设定某种条件来跳过对应的循环,所以说与if语句配合使用情况居多,故答案为正确
7.在C++代码中 ,不可以将变量命名为 printf, 因为 printf是C++语⾔的关键字 。 ( )
【答案】✕
【考纲知识点】C++ 语言中关键字的概念以及合法变量命名的范围,区分常用函数名与关键字的不同。
【解析】将printf作为变量名是非常不妥当的做法,但题目描述的后半句话存在明显错误因为printf不是C++语言的关键字,故答案为错误
8.在C++中有整型变量N,则表达式N += 8/4//2 相当于N += 8/(4/2)。( )
【答案】✕
【考纲知识点】C++ 中运算符的优先级以及注释符号(双斜线 “//” 在这里会被当作注释起始符号)的影响,正确分析表达式实际运算情况。
【解析】按照题目描述的表达式,双斜线会被理解为注释,进行计算相当于书写的是N+=8/4,故答案为错误
9.C++中定义变量int N,则表达式( !!N)的值也是N的值。( )
【答案】✕
【考纲知识点】C++ 中逻辑取反(!)运算符的作用及多次使用后的结果类型与原变量值的区别,了解布尔类型转换情况。
【解析】按照题目表达式对数字进行两次取反运算的结果一定是布尔类型,例如变量N为数字5,则最终输出的表达式的结果为1,故答案为错误
10.GESP测试是对认证者的编程能⼒进⾏等级认证, 同⼀级别的能⼒基本上与编程语⾔⽆关 。 ( )
【答案】✓
【考纲知识点】对 GESP 测试性质的理解,明确其重点考察编程能力,而不是局限于特定编程语言知识本身。
【解析】编程能力与编程语言没有直接联系,编程能力考察的是认证者的程序设计和程序理解能力,故答案为正确
三、编程题(每题25分,共50分)
1、休息时间
【问题描述】
小杨计划在某个时刻开始学习,并决定在学习k秒后开始休息。
小杨想知道自己开始休息的时刻是多少。
【输入描述】
前三行每行包含一个整数,分别表示小杨开始学习时刻的时h、分m、秒s(h,m,s的值符合1≤h ≤12,0 ≤m ≤59,0 ≤s ≤59)
第四行包含一个整数k,表示小杨学习的总秒数(注:k的值符合1≤k ≤3600)。
【输出描述】
输出一行,包含三个整数,分别表示小杨开始休息时刻的时、分、秒。
【样例输入 1】
12
59
50
10
【样例输出 1】
13 0 9
【题目大意】
小杨要开始学习,已知开始学习的具体时刻(分别用时、分、秒来表示),以及学习持续的时长(以秒为单位),需要通过编程计算出小杨开始休息的具体时刻(同样用时、分、秒来呈现)。
【考纲知识点】
1.基础数据类型:涉及整型数据类型的使用,用于存储时(h)、分(m)、秒(s)以及学习时长(k)这些整数值,符合题目给定的取值范围要求,体现对整型数据类型在实际编程场景中的操作运用。
2.基本运算:包括整数的加法运算(用于将学习时长的秒数与开始学习时刻对应的总秒数相加),以及整除运算(将总秒数换算成对应的小时数,即总秒数除以 3600 取整)和取模运算(分别用总秒数对 3600 取模后再除以 60 取整得到分钟数,以及对 60 取模得到最终的秒数),以此来实现时间数据在不同单位间的转换与计算。
2.顺序结构:按照先读取输入的时、分、秒以及学习时长数据,接着进行时间转换计算,最后输出休息时刻的时、分、秒的顺序来组织代码逻辑,体现顺序结构在解决这类按步骤执行任务的编程场景中的应用。通过合理安排语句顺序,保证程序能正确完成从输入到计算再到输出的完整流程。
【解题思路】
1.输入数据获取:
首先,使用 cin 语句分别读取表示开始学习时刻的小时数 h、分钟数 m 和秒数 s,以及学习的总秒数 k。这一步是获取程序运行所需的原始数据,按照题目给定的输入格式和要求进行操作,确保能准确接收到正确的时间相关数值。
2.时间转换为总秒数:
将开始学习时刻换算成统一的秒数。根据时间单位换算规则,1 小时等于 3600 秒,1 分钟等于 60 秒,所以开始学习时刻对应的总秒数可以通过公式 total_seconds = h * 3600 + m * 60 + s 来计算得到。这样就把时、分、秒表示的时间统一转化成了便于后续计算的单一秒数形式,避免了直接在不同时间单位上分别进行加法运算时可能出现的复杂进位处理情况。
3.计算休息时刻的总秒数:
把学习时长 k 秒与前面得到的开始学习时刻的总秒数相加,即 total_seconds += k,得到小杨开始休息时刻对应的总秒数。这一步简单直观地根据题目要求实现了时间的累加,为后续换算回时、分、秒做准备。
4.将总秒数转换回时、分、秒格式:
计算休息时刻的小时数,通过整除运算 new_h = total_seconds / 3600,得到休息时刻对应的小时数(这里的除法运算会自动舍去余数,符合小时数取整的要求)。
接着,计算分钟数。先对总秒数取模 3600(去除已经计算到小时部分的秒数),得到剩余的秒数,再将其除以 60 取整,即 new_m = (total_seconds % 3600) / 60,以此得到休息时刻对应的分钟数。
最后,计算秒数,通过对总秒数先取模 3600(去除小时部分对应的秒数),再对 60 取模,即 new_s = (total_seconds % 3600) % 60,得到休息时刻对应的秒数。这样就完成了从累加后的总秒数重新转换回符合题目输出要求的时、分、秒格式的时间数据。
5.输出休息时刻:
使用 cout 语句按照题目要求的格式输出休息时刻的小时数 new_h、分钟数 new_m 和秒数 new_s,输出格式为在一行中依次输出这三个整数,中间用空格隔开,例如 cout << new_h << " " << new_m << " " << new_s << endl;,确保输出结果能清晰准确地呈现小杨开始休息的具体时刻。
【参考程序】
2、立方数
【问题描述】
小杨有一个正整数n,他想知道n是否是一个立方数。
一个正整数n是立方数当且仅当存在一个正整数x满足x×x×x=n。
【输入描述】
第一行包含一个正整数n。
【输出描述】
如果正整数n是一个立方数,输出Yes,否则输出No。
【样例输入 1】
8
【样例输出 1】
Yes
【样例输入 2】
9
【样例输出 2】
No
【题目大意】
给定一个正整数 n,需要通过编程判断这个正整数是否为立方数。立方数的定义是存在某个正整数 x,使得 x * x * x 的结果等于给定的这个正整数 n,根据判断结果输出相应的提示信息(是立方数输出 Yes,不是则输出 No)。
【考纲知识点】
1.基础数据类型:主要运用到整型数据类型,用于存储输入的正整数 n,以及在循环过程中定义的循环变量(用于尝试寻找满足立方数条件的那个数)等,体现对整型在存储数值以及参与运算方面的知识点考查。
2.控制语句结构(循环与选择):
循环结构(例如 for 循环):通过循环来遍历可能满足条件的正整数范围,尝试找到一个数,其立方等于输入的 n。从较小的正整数开始逐个尝试,直到达到某个合理的上限(一般可以根据 n 的大小大致确定一个合理的查找范围),以此来检测是否存在符合立方数定义的数,考查对循环语句的语法、执行逻辑以及如何利用循环来解决这类查找匹配问题的掌握程度。
选择结构(if 语句):在循环内部,使用 if 语句来判断当前循环变量所代表的数的立方是否等于输入的 n,如果满足条件则进行相应的标记操作(改变标记变量的值)。循环结束后,再次通过 if 语句根据标记变量的值来决定最终输出 Yes 还是 No,考查对条件判断以及根据不同条件执行不同分支代码的能力,体现选择结构在程序逻辑控制中的重要作用。
3.基本运算(乘法运算):在循环过程中,需要不断计算循环变量的立方(即进行三次乘法运算 i * i * i),然后与输入的正整数 n 进行比较,这涉及到对乘法运算的运用以及理解如何通过运算来验证是否符合特定的数学定义(立方数定义),考查基本运算在实际逻辑判断中的应用。
【解题思路】
1.输入数据获取:
使用 cin 语句读取输入的正整数 n,这是后续判断操作的基础数据,确保能准确接收到需要判断是否为立方数的那个数值。
2.初始化标记变量:
定义一个整型变量(例如命名为 FL,也可以使用更表意明确的名字如 is_cube 等),并将其初始值设为 0。这个变量用于标记是否找到了满足 x * x * x = n 条件的正整数 x,初始值为 0 表示还未找到这样的数。
3.循环查找:
可以使用 for 循环(当然也可以使用其他合适的循环结构,如 while 循环等)来遍历可能的正整数范围。通常从 1 开始,循环条件可以设置为一个合理的上限,例如循环到 n 的立方根(可以通过取整函数来获取大致的整数上限,在 C++ 中可以使用 sqrt 函数结合类型转换等方式来获取合适的整数上限,但这里为了简单理解,也可以直接设置一个相对较大但合理的数作为上限,比如 n 本身或者稍大一点的值)。
在循环体内部,计算当前循环变量 i 的立方(即 i * i * i),然后使用 if 语句判断这个立方值是否等于输入的正整数 n。如果相等,说明找到了满足立方数定义的数,此时将标记变量 FL(或 is_cube 等)的值修改为 1,表示找到了,然后可以使用 break 语句跳出循环,因为已经找到了符合条件的数,无需再继续循环查找了。
4.结果判断与输出:
循环结束后,通过 if 语句再次判断标记变量的值。如果标记变量的值为 1,说明在前面的循环中找到了满足条件的正整数,即输入的 n 是立方数,此时使用 cout 语句输出 Yes;如果标记变量的值仍为 0,则说明没有找到满足条件的正整数,输入的 n 不是立方数,使用 cout 语句输出 No。
【参考程序】