2023 年 GESP12月认证 C++二级试卷解析

文章详细解析了C++中的基本概念,包括变量命名规则、表达式运算、for循环的使用,以及一些编程实例,如判断表达式的值、寻找因子对和输出特定矩阵。同时涉及无人驾驶系统的声控功能和计算机体系结构基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 单选题(每题 2 分,共 30 分)
1 以下不可以做为 C++ 变量的是( )
A. FiveStar
B. fiveStar
C. 5Star
D. Star5
答案【 C
   
2 C++ 中,与 for(int i = 10; i < 20; i +=2) cout << i; 输出结果相同的是( )
A. for(int i = 10; i < 19; i +=2) cout << i;
B. for(int i = 11; i < 19; i +=2) cout << i;
C. for(int i = 10; i < 21; i +=2) cout << i;
D. 以上均不对
答案【A】
    
3 以下 C++ 代码实现从小到大的顺序输出能整除 N 的数( N 的因子),例如 N=18 时输出1 2 3 6 9 18,横线处应填 入( )。
A. int i = 0; i < N; i++
B. int i = 1; i < N; i++
C. int i = 0; i < N+1; i++
D. int i = 1; i < N+1; i++
答案【D】
     
4 下面 C++ 代码用于判断输入的整数是否为对称数,如 1221 12321 是对称数,但 123 、972不是对称数。下面 对该题对应代码的说法,正确的是( )。
A. 代码没有语法错误,如果 N 为对称数,第 8 行将能正确输出。
B. 代码没有语法错误,但如果 N 为负数,将导致死循环。
C. 代码存在语法错误,程序不能被执行。
D. 代码没有语法错误,但不能达到预期目标,因为循环结束 N 总为 0
答案【D】
   
5 下面 C++ 代码用于判断 N (大于等于 2的正整数)是否为质数(素数)。下面对如下代码的说法,正确的是(  )。
A. 代码能正确判断 N 是否为质数。
B. 代码总是不能判断 N 是否质数。
C. 删除第 5 break ,将能正确判断 N 是否质数。
D. 代码存在漏洞,边界存在问题,应将第 2 行和第 7 行的 N / 2 改为 N / 2 + 1
答案【D】
    
6 下面 C++代码执行后的输出是(  )。
A. 2#3#0
B. 1#2#0
C. 1#0#
D. 2#3#
答案【A】
     
   
7 下面 C++ 代码执行后的输出是( )。
A. 0
B. 8#8
C. 4
D. 4#4
答案【D】
     
8 下面 C++ 代码执行后的输出是( )。
A. 100
B. 95
C. 55
D. 0
答案【C】
      
9 下面 C++ 代码执行后的输出是( )。
A. 1
B. 1,3
C. 15,17
D. 1,10,12
答案【D】
      
10 下面 C++ 代码执行后的输出是( )。
A. 5
B. 10
C. 20
D. 30
答案【B】
 
   
11 以下 C++ 代码用于输出 1-100 (含)的整数平方数(完全平方数),如 16 4 的平方,横线处应填写( )。
A. int(sqrt(i)) * int(sqrt(i)) = i
B. int(sqrt(i)) == sqrt(i)
C. int(sqrt(i)) * int(sqrt(i)) == i
D. int(sqrt(i)) == int(i/sqrt(i))
答案【C】
       
  
12 下面的 C++ 代码用于实现如下左图所示的效果,应在以下右图 C++ 代码中填入( )。
A. 与第 8 行下面填入一行: cout << nowNum;
B. 与第 2 行下面填入一行: cout << endl;
C. 与第 7 行下面填入一行: cout << nowNum;
D. 与第 9 行下面填入一行: cout << endl;
答案【D】
    
13 某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动
选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。(
A. 麦克风
B. 扬声器
C. 油量表
D. 传感器
答案【C】
    
14 现代计算机是指电子计算机,它所基于的是( )体系结构。
A. 艾伦 · 图灵
B. · 诺依曼
C. 阿塔纳索夫
D. 埃克特 -莫克利
答案【B】
    
  
15 输入一个正整数 N ,想找出它所有相邻的因数对,比如,输入 12 ,因数对有 (1,2) (2,3) (3,4)。下面哪段代 码找不到所有的因数对?( )
A. for(i=1;i<N;i++) if(!(N%i) && !(N%(i+1))) printf("(%d,%d)\n", i, i+1);
B. for(i=2;i<N;i++) if(!(N%i) && !(N%(i+1))) printf("(%d,%d)\n", i, i+1);
C. for(i=2;i<N/2;i++) if(!(N%(i-1)) && !(N%i)) printf("(%d,%d)\n", i-1, i);
D. for(i=1;i<N/2;i++) if(!(N%i) && !(N%(i+1))) printf("(%d,%d)\n", i, i+1);
答案【B】
     
2 判断题(每题 2 分,共 20 分)
1 C++ 表达式 -7/2 的值为整数 -3 。( )
答案【T】
   
  
2 C++ 表达式 2*int('9')*2 的值为 36 ( )
答案【F】
    
3 C++ 表达式 3+2 && 5-5 的值为 false ( )
答案【F】
    
4 C++ 代码中,执行 srand(0) 后连续两次执行 rand() 的结果相等。 ( )
答案【F】
  
  
5 C++ 代码中 while(1){...} 的判断条件不是逻辑值,将导致语法错误。( )
答案【F】
    
6 执行以下 C++ 代码后将输出 0 。( )
答案【F】
     
7 C++ 代码中,运算符只能处理相同的数据类型,不同类型之间必须转换为相同的数据类型。()
答案【F】
   
8 C++ 代码中,虽然变量都有数据类型,但同一个变量也可以先后用不同类型的值赋值。( )
答案【T】
   
9 小杨最近在准备考 GESP ,他用的 Dev C++ 来练习和运行程序,所以 Dev C++ 也是一个小型操作系统。( )
答案【F】
  
    
10 任何一个 while 循环都可以转化为等价的 for 循环( )。
答案【T】
     
3 编程题(每题 25 分,共 50 分)
编程题 1
试题名称 :小杨做题
时间限制 1.0 s
内存限制 128.0 MB
问题描述
为了准备考试,小杨每天都要做题。第 1 天,小杨做了 道题;第 2 天,小杨做了 道题;从第 3 天起,小杨每天 做的题目数量是前两天的总和。
此外,小杨还规定,当自己某一天做了大于或等于 题时,接下来的所有日子里,他就再也不做题了。 请问,到了第 天,小杨总共做了多少题呢?
输入描述
总共 4 行。第一行一个整数 ,第二行一个整数 ,第三行一个整数 ,第四行一个整数 。
保证0<=a,b<=10; a,b<M<=1000000; 3<=N<=364 。
输出描述
一行一个整数,表示小杨 天里总共做了多少题目。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
样例输入 1
1
2
10
5
样例输出 1
19
样例解释 1
小杨第一天做 1题,第二天做2 题,第三天做1+2=3 题,第四天做2+3=5题,第五天做3+5=8题。因此 他总共做了1+2+3+5+8=19 题。
样例输入 2
1
1
5
8
样例输出 2
12
样例解释 2
小杨前 5 天分别做了1,1,2,3,5题,由于第 5 天小杨做了5 题,而m=5,于是小杨从此以后不再做题。因此小杨总共做了1+1+2+3+5=12 题。
   
[参考程序]:
斐波那契数列求和 ,循环加判断
#include<iostream>
#include<cstdio>
int main(){
	long long a=0, b=0, m=0, n=0, ans=0, c=0, i;
	scanf("%lld%lld%lld%lld", &a, &b, &m, &n);
	ans = a+b;
	for(i=3; i<=n; i++)	{
		c = a+b;
		ans += c;
		a = b;
		b = c;
		if(c>=m) break;
	}
	printf("%lld\n", ans);
	return 0;
}
编程题 2
试题名称 :小杨的 H 字矩阵
时间限制 1.0 s
内存限制 128.0 MB
问题描述
输入描述
一行一个整数 (5<=N<=49 ,保证 N为奇数)。
输出描述
输出对应的 “H 字矩阵
请严格按格式要求输出,不要擅自添加任何空格、标点、空行等任何符号。你应该恰好输出 行,每行除了换行符 外恰好包含 个字符,这些字符要么是 - ,要么是 | ,要么是 a 你的输出必须和标准答案完全一致才能得分, 请在提交前仔细检查。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
样例输入 1
5
样例输出 1
样例输入 2
7
样例输出 2
参考程序:
规律:第一列和最后一列输出 | ,中间行输出 - ,其余输出a
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if (j == 1 || j == n) {//第一列或者最后一列,输出|
                cout << '|';
            } else if (i == n / 2 + 1) {//中间行,输出-
                cout << '-';
            } else {//其他,输出a
                cout << 'a';
            }
        }
        cout << endl;
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值