CCF-GESP 等级考试 2023年12月认证C++一级真题解析

2023年12月真题

单选题(每题 2 分,共 30 分)

第 1 题 以下C++不可以作为变量的名称的是( )。

  • A. CCF GESP
  • B. ccfGESP
  • C. CCFgesp
  • D. CCF_GESP

正确答案:A
解析

  • 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
解析

  • A: 0 不正确,实际计算得1。
  • B: 正确答案,按照操作符优先级计算得1。
  • C: 2 不正确,实际计算得1。
  • D: 3 不正确,实际计算得1。

第 3 题 假设现在是上午⼗点,求出N⼩时(正整数)后是第⼏天⼏时,如输⼊20⼩时则为第2天6点,如N输⼊4则为今天14点。为实现相应功能,应在横线处填写代码是( )。

int N, dayX, hourX;
cin >> N;
dayX = ______, hourX = _______;
if(dayX == 0)
   cout << "今天" << hourX << "点";
else
   cout << "第" << (dayX + 1) << "天" << hourX << "点";
  • 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
解析

  • A: 不正确,计算顺序颠倒,会导致天数和小时数错误。
  • B: 正确的计算方式,正确处理小时数和天数的换算。
  • C: 不正确,没有加上当前的时间10点。
  • D: 不正确,10 / 24 结果为0,10 % 24 结果为10,无法正确计算时间。

第 4 题 下面的程序用于判断N是否为偶数,横线处应填写代码是( )。

cin >>  N;
if(_____)
   cout << "偶数";
else
   cout << "奇数";
  • A. N % 2 == 0
  • B. N % 2 = 0
  • C. N % 2
  • D. N % 2 != 0

正确答案:A
解析

  • A: 正确,判断条件符合偶数的定义。
  • B: 语法错误,应为比较操作 == 而非赋值操作 =
  • C: 不正确,因为该条件判断奇数,而非偶数。
  • D: 不正确,因为该条件判断奇数,而非偶数。

第 5 题 下面对C++代码执行后输出的描述,正确的是( )。

cin >> N;
cnt = 0;
for(int i = 1; i < N; i++)
   cnt += 1;
cout << cnt;
  • A. 如果输入的N是小于等于2的整数,第5行将输出0。
  • B. 如果输入的N是大于等于2的整数,第5行将输出N-1。
  • C. 如果输入的N是大于等于2的整数,第5行将输出N。
  • D. 以上说法均不正确。

正确答案:B
解析

  • A: 如果输入的N是小于等于2的整数,第5行将输出0:不正确,对于N=2,输出为1。
  • B: 如果输入的N是大于等于2的整数,第5行将输出N-1:正确,循环从1到N-1,共计N-1次。
  • C: 如果输入的N是大于等于2的整数,第5行将输出N:不正确,输出应为N-1。
  • D: 以上说法均不正确:不正确,选项B是正确的。

第 6 题 下面C++代码执行后的输出是( )。

cnt = 0;
for(int i = 1; i < 10; i++){
   cnt += 1;
   i += 2;
}
cout << cnt;
  • A. 10
  • B. 9
  • C. 3
  • D. 1

正确答案:C
解析

  • A: 不正确,循环执行次数少于10。
  • B: 不正确,循环执行次数少于9。
  • C: 正确,i从1开始,每次增加3,共执行3次。
  • D: 不正确,循环执行次数多于1次。

第 7 题 下面C++代码执行后的输出是( )。

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;
  • A. 90
  • B. 44
  • C. 20
  • D. 10

正确答案:A
解析

  • A: 正确,总和为90。
  • B: 不正确,总和达到90。
  • C: 不正确,总和超过20。
  • D: 不正确,总和超过10。

第 8 题 下面C++代码执行后的输出是( )。

N = 10;
cnt = 0;
while(1){
   if(N == 0) break;
   cnt += 1;
   N -= 2;
}
cout << cnt;
  • A. 11
  • B. 10
  • C. 5
  • D. 4

正确答案:C
解析

  • A: 不正确,循环执行次数少于11。
  • B: 不正确,循环执行次数少于10。
  • C: 正确,N从10开始,每次减2,共执行5次。
  • D: 不正确,循环执行次数多于4次。

第 9 题 下面C++代码用于判断一个数是否为质数(素数),在横线处应填入代码是( )。

cin >> N;
cnt = 0;
for(int i = 1; i < N + 1; i++)
   if(N % i == 0)
   _____________;
if(cnt == 2)
  cout << N << "是质数。";
else
   cout << N << "不是质数。";
  • A. cnt = 1
  • B. cnt = 2
  • C. cnt =+ 1
  • D. cnt += 1

正确答案:D
解析

  • A: 不正确,只会在第一次满足条件时计数,错误。
  • B: 不正确,只会在第一次和第二次满足条件时计数,错误。
  • C: 语法错误,应为cnt += 1
  • D: 正确,计数器在每次满足条件时自增1。

第 10 题 对下面的代码,描述正确的是( )。

#include <stdlib.h>
using namespace std;
int main(){
   int arr[] = {2,6,3,5,4,8,1,0,9,10};
   for(int i = 0; i < 10; i++)
       cout << arr[i] << " ";
   cout << i << endl;
   cout << endl;
   return 0;
}
  • 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
解析

  • A: 不正确,代码有错误。
  • B: 不正确,代码有错误。
  • C: 不正确,代码有错误。
  • D: 正确,代码中访问未定义的变量i

第 11 题 执行下面C++代码后输出是( )。

cnt = 0;
for(i = 10; i > 3; i -= 3)
   cnt = cnt + i;
cout << cnt;
  • A. 3
  • B. 21
  • C. 27
  • D. 49

正确答案:B
解析

  • A: 不正确,计算错误。
  • B: 正确,10 + 7 + 4 = 21。
  • C: 不正确,计算错误。
  • D: 不正确,计算错误。

第 12 题 定义变量char c ,下面对c赋值的语句,不符合语法的是( )。

  • A. c = (char)66;
  • B. c = (char)(66);
  • C. c = char(66);
  • D. c = char 66;

正确答案:D
解析

  • A: 正确,合法的类型转换和赋值。
  • B: 正确,合法的类型转换和赋值。
  • C: 正确,合法的类型转换和赋值。
  • D: 不正确,缺少括号,语法错误。

第 13 题 下图所示C++代码对大写字母’A’ 到’Z’ 分组,对每个字母输出所属的组号,那么输入’C’ 时将输出的组号是?( )。

char c;
while(1){
    cin >> c;
    if(c == 'q') break;
    switch(c){
        case 'A' : cout << "1"; break;
        case 'B' : cout << "3"; 
        case 'C' : cout << "3"; 
        case 'D' : cout << "5"; break;
        case 'E' : cout << "5"; break;
        default : cout << "9";
    }
    cout << endl;
}
  • A. 3
  • B. 3 5
  • C. 3 5 9
  • D. 以上都不对

正确答案:B. 3 5

解析:

  • A. 3:不正确,‘C’ 输出后没有 break,将继续执行下一个 case。
  • B. 3 5:正确,‘C’ 的 case 输出 3,继续执行 ‘D’ 的 case,输出 5。
  • C. 3 5 9:不正确,执行到 ‘D’ 的 case 时,遇到 break,跳出 switch。
  • D. 以上都不对:不正确,B 选项是正确的。

第 14 题 某公司新出的一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )

  • A. 麦克风
  • B. 扬声器
  • C. 油量表
  • D. 传感器

正确答案:C
解析

  • A: 不正确,麦克风用于接收语音指令,是必须的。
  • B: 不正确,扬声器用于提供语音反馈,是必须的。
  • C: 正确,油量表仅用于显示油量,不直接影响选路。
  • D: 不正确,传感器用于感知环境,是必须的。

第 15 题 现代计算机是指电子计算机,它所基于的是( )体系结构。

  • A. 艾伦·图灵
  • B. 冯·诺依曼
  • C. 阿塔纳索夫
  • D. 埃克特-莫克利

正确答案:B
解析

  • A: 不正确,图灵是计算机科学的奠基人之一,但现代计算机体系结构主要基于冯·诺依曼的设计。
  • B: 正确,冯·诺依曼体系结构是现代计算机的基础设计。
  • C: 不正确,阿塔纳索夫设计了早期的电子计算机,但其结构未广泛应用于现代计算机。
  • D: 不正确,尽管他们是ENIAC计算机的设计者,但现代计算机体系结构主要基于冯·诺依曼的设计。

二、判断题(每题2分,共20分)

第 1 题 C++表达式int(3.14)的值为3。( )

正确答案:√

解析:

  • C++中的 int(3.14) 会将浮点数3.14转换为整数3。

第 2 题 C++语句cout << (2 * 3, 3 % 10, 2+3)的输出为6,3,5。 ( )

正确答案:×

解析:

  • 逗号运算符返回最后一个表达式的值,所以 cout << (2 * 3, 3 % 10, 2 + 3) 实际输出为5。

第 3 题 for(int i = 1; i < 10; i += 3;) ;表⽰i从1开始到10结束间隔为3,相当于1、4、7、10。( )

正确答案:×

解析:

  • i 的值依次为1、4、7,当 i 达到10时不满足 i < 10,循环结束,所以 i 的值不会达到10。

第 4 题 C++表达式010+100+001的值为111。( )

正确答案:×

解析:

  • 前导0表示八进制,所以 010 为八进制的10,即十进制的8,001 为八进制的1,所以表达式的值为8 + 100 + 1 = 109。

第 5 题 if语句中的条件表达式的结果可以为int类型。

正确答案:√

解析:

  • 在C++中,if语句的条件表达式可以是int类型,非零值为真,零为假。

第 6 题 在下⾯的C++代码while(1) continue;中,由于循环中的continue是⽆条件被执⾏,因此将导致死循环。( )

正确答案:√

解析:

  • while(1) 是一个无限循环,continue 语句会使得控制流直接回到循环的开头,因此会导致死循环。

第 7 题 C++表达式 (‘1’+‘1’==‘2’? flag=1:flag=2) 的结果值和表达式 (flag ==2)的相同。( )

正确答案:×

解析:

  • '1'+'1' 的ASCII值相加等于98,不等于字符’2’的ASCII值50,因此表达式 ('1'+'1'=='2'? flag=1:flag=2) 的结果是 flag=2,与 flag==2 的结果不同。

第 8 题 在C++的程序中,不能⽤scanf作为变量名。( )

正确答案:×

解析:

  • scanf 不是C++的关键字,可以用作变量名,尽管不建议这样做以避免混淆。

第 9 题 ⼩杨最近在准备考GESP,他⽤的Dev C++来练习和运⾏程序,所以Dev C++也是⼀个⼩型操作系统。( )

正确答案:×

解析:

  • Dev C++ 是一个集成开发环境(IDE),不是操作系统。

第 10 题 任何⼀个while循环都可以转化为等价的for循环( )。

正确答案:√

解析:

  • 所有的 while 循环都可以通过 for 循环的初始化、条件和递增部分来实现,因此可以相互转换。

三、编程题(每题25分,共50分)

3.1 编程题 1 (小杨的考试)

3.1.1 问题描述

今天是星期 X,小杨还有 N 天就要考试了,你能推算出小杨考试那天是星期几吗?(本题中使用 7 表示星期日)

3.1.2 输入描述

输入 2 行,第 1 行一个整数 X(1 ≤ X ≤ 7);第 2 行一个整数 N(1 ≤ N ≤ 364)。

3.1.3 输出描述

输出一个整数,表示小杨考试那天是星期几。

3.1.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.1.5 样例输入 1
1
6
3.1.6 样例输出 1
7
3.1.7 样例解释 1

今天是星期 1,那么 6 天后就是星期日,星期日在本题中用 7 表示。

3.1.8 样例输入 2
5
3
3.1.9 样例输出 2
1
3.1.10 样例解释 2

今天是星期 5,那么 3 天后就是星期 1。

3.1.11 参考程序
#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;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 XNX 表示今天是星期几,N 表示还有多少天就是考试日。
  2. 公式推导:

    • 由于一周有 7 天,我们可以利用模运算来简化计算。例如,今天是星期 X,再过 N 天的情况可以用 (X + N) 来表示星期几。
    • 但是直接用 (X + N) 可能会超出 7,因此需要取模 (X + N) % 7 来将值保持在 1 到 7 之间。
    • 具体公式为 (X - 1 + N % 7) % 7 + 1,其中:
      • X - 1 是将 X 转换为从 0 开始的索引(即 X 为 1 时,代表第 0 天)。
      • N % 7 是计算 N 天后是几天内的第几天(避免超过一周)。
      • (X - 1 + N % 7) % 7 计算从 0 开始的索引,得到一个在 0 到 6 范围内的值。
      • 最后再加 1 将索引转换回从 1 开始的星期几表示。
  3. 输出结果:

    • 将计算结果输出,即考试当天是星期几。

详细解释计算过程:

  • 如果今天是星期 X,距离考试还有 N 天,那么我们可以通过 X + N 计算出考试日的星期几。
  • 例如,今天是星期 1,距离考试还有 6 天,则 1 + 6 = 7,即星期日(7 表示星期日)。
  • 由于一周只有 7 天,所以需要对总天数取模运算以确保结果在 1 到 7 之间。
  • 公式 (X - 1 + N % 7) % 7 + 1 通过转换和取模确保结果在正确范围内。
    通过这种方式,程序能够准确地计算出小杨考试当天是星期几,并输出结果。

3.2 编程题 2 (小杨报数)

3.2.1 问题描述

小杨需要从 1 到 n 报数。在报数过程中,小杨希望跳过 m 的倍数。例如,如果 n 为 5,m 为 2,那么小杨就需要依次报出 1、3、5。
现在,请你依次输出小杨报的数。

3.2.2 输入描述

输入 2 行,第 1 行一个整数 n(1 ≤ n ≤ 100);第 2 行一个整数 m(1 ≤ m ≤ 10)。

3.2.3 输出描述

输出若干行,依次表示小杨报的数。

3.2.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.2.5 样例输入 1
5
2
3.2.6 样例输出 1
1
3
5
3.2.7 样例输入 2
10
3
3.2.8 样例输出 2
1
2
4
5
7
8
10
3.2.9 参考程序
#include <stdio.h>

int main(int argc, char **argv) {
    int n, m, i;
    // 从标准输入读取两个整数,表示报数的范围和需要跳过的倍数
    scanf("%d%d", &n, &m);
    // 从1到n进行循环
    for(i = 1; i <= n; i++) {
        // 如果i不是m的倍数,输出i
        if(i % m != 0) {
            printf("%d\n", i);
        }
    }
    return 0;
}

解释:

  1. 读取输入:

    • 程序从标准输入读取两个整数,分别是 nmn 表示报数的范围,m 表示需要跳过的倍数。
  2. 循环处理:

    • 使用一个 for 循环从 1 到 n 进行遍历。
    • 在循环中,使用 if 条件判断 i 是否是 m 的倍数,即 i % m != 0。如果 i 不是 m 的倍数,则输出 i
  3. 输出结果:

    • 将所有满足条件的数逐行输出,即小杨报的数。

详细解释计算过程:

  • 例如,输入 n = 5m = 2 时:

    • 循环从 1 开始到 5:
      • 1 % 2 != 0,输出 1。
      • 2 % 2 == 0,跳过 2。
      • 3 % 2 != 0,输出 3。
      • 4 % 2 == 0,跳过 4。
      • 5 % 2 != 0,输出 5。
    • 输出结果为 1, 3, 5。
  • 通过这种方式,程序能够准确地输出小杨报的数,跳过指定倍数的数。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CCF-CSP(中国计算机学会认证系统程序员)认证考试是由中国计算机学会主办的,旨在选拔高水平的系统程序员和开发人员。该认证考试包括两个级别:初级和高级。初级考试主要测试候选人的基础知识和编程能力,高级考试则主要测试候选人的系统设计和开发能力。CCF-CSP认证考试的评分标准严格,要求考生表现出扎实的计算机理论基础和熟练的编程技巧。 为了顺利通过CCF-CSP认证考试,考生需要掌握扎实的计算机基础知识和熟练的编程技巧,并且需要在考试前进行充分的准备。以下是一些复习技巧指导: 1. 确认考试大纲 考生需要仔细阅读考试大纲,了解考试范围和题型。要特别注意考试大纲中的重点内容,重点复习。 2. 提前规划复习进度 准备CCF-CSP认证考试需要时间,而时间是很宝贵的,考生需要提前规划好复习进度和复习内容,尽可能利用零散时间进行复习。 3. 多做题 要想掌握CCF-CSP认证考试所需的知识和技能,考生需要多做题,并针对性地练习一些经典的考题。在练习中,考生需要注重练习思路和解题方法,该方法可以加深对知识点的理解。 4. 关注考试动态 考试动态指的是考试来的趋势和变化,考生需要不断关注考试动态,了解考试趋势,及时更新复习内容和方法,以便更好地应对考试。 总之,要想通过CCF-CSP认证考试,考生需要理论基础和开发经验充足,并且需要在复习时切实遵循学科规范,灵活应用知识点,较好地掌握考试技巧,这是顺利通过CCF-CSP认证考试的关键。 ### 回答2: ccf-csp认证考试是中国计算机学会(CCF认证的一个计算机软件专业技能等级考试,也是中国IT行业里非常重要的证书之一。该考试分为初级、中级和高级三个等级,其中初级考试包含了基础的程序设计和算法等内容,中级考试中主要考察了软件工程、数据结构、算法设计和网络安全等领域的知识,而高级考试则更注重的是对软件工程和软件项目管理的理解和应用,以及对复杂系统的设计和实现方法的掌握。为了能够成功通过ccf-csp认证考试,首先需要在考前充分准备,并且需要有一些好的复习技巧,这里向大家推荐以下几点: 1.学好基础知识。初级、中级和高级csp认证考试所涉及到的内容都是建立在一定的基础知识上的。由于考试的难度逐级递增,所以建议在准备考试之前先花时间学好基础知识。 2.多做练习题。做练习题能够帮助我们加深对知识的理解,熟悉考试形式和规则,同时也能提高我们的答题速度和准确度。 3.注意时间管理。不同级别的csp认证考试都有时限,在考试过程中需要注意时间的分配。建议在每次做练习题的时候都设置一个时间限制,并逐步缩短时间限制,以提高答题效率。 4.了解考试规则。在考前一定要熟悉考试规则和题型,知道考试时可以携带哪些资料和工具,了解考试的答题和评分规则等。 总之,ccf-csp认证考试是一项非常重要的认证考试,通过这个认证不仅可以增加个人的职业竞争力,还能证明个人在软件开发和IT行业方面的专业能力。因此,我们需要认真地准备和复习,字斟句酌地做好每一个细节,以确保顺利通过考试。 ### 回答3: ccf-csp认证考试是由中国计算机学会主办的全国性计算机考试考试内容涵盖了计算机应用、技术、算法等多个方面,分为初级、中级和高级三个等级。参加此考试不仅有助于检测个人的计算机专业水平,更能提升自身的竞争力和职业发展前景。 为了通过ccf-csp认证考试,考生需要重点复习考试要求中的各个内容模块,如数据类型、运算符、控制结构、数组、函数、文件操作等程序设计相关方面;还包括计算机网络、操作系统、数据库等计算机技术类知识;另外,还需要掌握常见算法和数据结构,如排序、查找、树等。此外,考生还需要通过大量的编程练习和模拟题练习,熟悉考试题型和答题技巧,提升自己的完成效率和准确性。 在复习过程中,需要注重细节和实践。例如,对于程序设计相关方面,需要理解每个知识点的原理和应用场景,在编写代码时要注重细节避免出现错误。对于算法和数据结构方面,需要熟悉常见算法的实现方式和优缺点,掌握好算法的时间复杂度和空间复杂度,做到熟练掌握。 总之,通过充分准备和钻研,考生有望成功通过ccf-csp认证考试,展现自己的计算机专业能力和职业素养。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值