GESP2023年3月 c++二级考试答案详解

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

1. 以下存储器中的数据不会受到附近强磁场干扰的是( D )。

A.硬盘         B.U 盘         C.内存         D.光盘

解析:光盘上的信息储存方式,实际上是由激光烧蚀成有规律的小凹坑组成的,是一种机械结构形式。磁场对此不起作用。因此,磁场对于光盘没有影响。

2. 下列流程图,属于计算机的哪种程序结构?( C )。

A.顺序结构         B.循环结构         C.分支结构         D.数据结构

3. 下列关于 C++语言的叙述,不正确的是( A )。

A.double 类型的变量占用内存的大小是浮动的

B.bool 类型的变量占用 1 字节内存

C.int 类型变量的取值范围不是无限的

D.char 类型的变量有 256 种取值

解析:double占用64位(8字节)内存空间,并提供大约15位的有效数字。

double与float的不同点:

①精度方面:double是双精度浮点类型,它可以表示更大范围的数值并具有更高的精度。它占用64位(8字节)内存空间,并提供大约15位的有效数字。float是单精度浮点类型,它的范围和精度相对较低。它占用32位(4字节)内存空间,并提供大约6-7位的有效数字。

②存储空间方面:double类型的变量占用的内存空间是float类型的两倍。这是因为double需要更多的位来存储更高的精度和更大的范围。如果项目考虑内存空间因素,并且数值范围和精度要求不是非常高,可以使用float类型来节省内存。

③范围方面:double可以表示的范围更广。它的最小非零正数可以非常接近 4.9e-324,而最大正数可以达到 1.8e+308。float的最小非零正数约为 1.4e-45,最大正数约为 3.4e+38。当处理需要更大范围的数值时,double类型更适合使用。

④精度损失方面:由于float的精度较低,它在进行浮点数计算时可能会出现更多的精度损失。如果对数值的精度要求较高,特别是在进行科学计算或涉及大量浮点数计算的情况下,使用double类型可以减少精度损失。

⑤运算指令方面:double和float的运算指令是不同的。CPU通常具备针对double和float类型的不同浮点运算指令。在执行浮点数运算时,CPU会根据操作数的类型选择适当的指令进行处理。因此,对于同一种浮点运算,使用double和float可能会涉及到不同的指令序列。

⑥数据传输方面:double数据类型的变量需要更多的内存空间来存储,因此在数据传输过程中可能需要更多的时间和带宽。相比之下,float类型的数据需要较少的内存空间,传输速度相对更快。总之,double和float是Java中用于表示浮点数的两种不同数据类型。double提供了更高的精度和更大的数值范围,但占用更多的内存空间。float则在精度和范围方面相对较低,但可以更节省内存。在选择使用哪种类型时,需要根据具体的需求和性能要求进行权衡。此外,CPU可能会使用不同的指令来处理double和float类型的运算。然而,现代的CPU通常能够高效地处理这些浮点数操作,并且针对double和float类型进行了优化,以提供高性能的浮点数计算。

疑问:为什么十进制的 0.1 在二进制中是一个无限循环的小数?

    当我们将十进制的 0.1 转换为二进制时,它变成了一个无限循环的二进制小数:0.1(十进制) = 0.0001100110011001100110011...(二进制)   由于二进制小数的循环部分无限重复,我们无法用有限的位数表示它。因此,在浮点数的二进制表示中,0.1 被近似为一个无限位的二进制小数。这种近似导致了在浮点数运算中可能出现的舍入误差和精度损失。原因:十进制的 0.1 在二进制中是一个无限循环的小数,是由于二进制无法精确表示分数 1/10。在十进制中,我们可以使用有限的位数准确地表示分数 1/2、1/4、1/8 等,因为它们的分母是 2 的幂。例如,1/2 在十进制中表示为 0.5,1/4 表示为 0.25,1/8 表示为 0.125,以此类推。然而,在十进制中,1/10 的分母不是 2 的幂,它是一个无限循环的小数。类似地,在二进制中,1/10 的分母也不是 2 的幂,因此无法以有限位数精确表示。

4. 下列关于 C++语言的叙述,不正确的是( D )。

A.变量定义后,可以使用赋值语句改变它的值

B.变量定义时,必须指定类型

C.变量名必须为合法标识符

D.合法标识符可以以数字开始

5. 以下哪个不是 C++语言的关键字 ? ( B )

A.return         B.max         C.else         D.case

解析:

6. 以下哪个不是 C++语言的运算符 ?( A )

A.\=         B./=         C.-=         D.!=

7. 如果 a 和 b 都是 char 类型的变量,下列哪个语句不符合 C++语法 ?( C )

A.b = a + 1;         B.b = a + '1';         C.b = 'a'++;         D.b = a++; 

8. 如果 a、b、c 和 d 都是 int 类型的变量,则下列哪个表达式能够正确计算它们的平均值 ?

 A. (a + b + c + d) / 4           B. (a + b + c + d) % 4                                                ( C )

C. (a + b + c + d) / 4.0         D. (a + b + c + d) % 4.0

9. 如果 a 为 char 类型的变量,且 a 的值为'2',则下列哪条语句执行后,a 的值不会变为'3'?

A.a = a + 1;         B.a + 1;         C.a = 1 + a;         D.++a;                                ( B )

10.如果 a 为 int 类型的变量,且 a 的值为 9,则执行 a -= 3;之后,a 的值会 是( B )。

A.3         B.6         C.9         D.12

11.如果 a 和 b 均为 int 类型的变量,下列表达式能正确判断“a 等于 0 或 b 等 于 0”的是?

 A.(!a) || (!b)                         B.(a == b == 0)                                                        ( A )

C. (a == 0) && (b == 0)         D.(a == 0) - (b == 0) == 0

12.如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a 是小写字 母” ?( D )

A.a <= a <= z           B.a - 'a' <= 'z' - 'a'

C.'a' <= a <= 'z'        D.a >= 'a' && a <= 'z'

13.在下列代码的横线处填写( C ),使得输出是`50 10`。

A.a -= b         B.a += b         C.a = b - a         D.a = b

解析:枚举或带入倒推

14.在下列代码的横线处填写( D ),可以使得输出是`5`。

A.ch < '5'         B.ch >= 5         C.ch >= '4'         D.ch % 2 == 1

解析:细心

15.执行以下 C++语言程序后,输出结果是( C )。

A.false         B.true         C.0         D.1

解析:主函数的返回值类型为 int

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

1. 明明和笑笑在“小庙会”上分别抽到一个 4GB 和 4096MB 的 U 盘,

        容量大的盘是笑笑的。( False )

2. IPv4 的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中 a、b、c、d 都是         1~255 之间的十进制整数。( False )

3. 在 C++语言中,一个程序不能有多个 main 函数。( True )

4. 在 C++语言中,标识符中可以有下划线_,但不能以下划线_开头。( False )

5. 如果 a 是 int 类型的变量,而且值为 1,则表达式'a'的值为'1'。( False )

6. 在 if ... else 语句中,else 子句可以嵌套 if ... else 语句,但 if 子句不可以,

        因为会造成二义性。( False )

7. while 语句的循环体至少会执行一次。( False )

8. C++语言中>=是运算符,但=>不是。( True )

9. 如果 a 为 char 类型的变量,且取值为小写字母,则执行语句 a = a - 'a' + 'A';后,

        a 的值会变为与原值对应的大写字母。( True )

10.表达式(10.0 / 2)的计算结果为 5.0,且结果类型为 double。( True )

解析:

1. 4G = 4*1024MB

2.IPv4 的地址通常用“点分十进制”的表示形式,形如(a.b.c.d),其中 a、b、c、d 都是         0~255 之间的十进制整数。

3.在 C++语言中,一个程序只能有1个 main 函数。

4.标识符不能以数字开头,能以字母或下划线开头。

5.无法判断

6.嵌套 if 语句:在 C++ 中,嵌套 if-else 语句是合法的,这意味着您可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。

嵌套 if 语句是一种 if 语句的变体,其中一个 if 语句可以在另一个 if 语句中嵌套。

嵌套 if 语句可以帮助您更精确地测试多个条件。

总结:① if 语句:如果布尔表达式为true,则 if 语句内的代码块将被执行。如果布尔表达式为false,则 if 语句结束后的第一组代码(闭括号后)将被执行。C 语言把任何非零和非空的值假定为true,把或null 假定为false。

② if...else 语句:如果布尔表达式为 true,则执行 if 块内的代码。如果布尔表达式为 false,则执行 else 块内的代码。

7. do while 语句的循环体至少会执行一次。while 和 for 语句可能一次也不执行。

8. 运算符的定义

9. char类型的运用

10. 数据类型

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

1. 画三角形

【问题描述】 输入一个正整数 n,请使用大写字母拼成一个这样的三角形图案(参考样例 输入输出):三角形图案的第 1 行有 1 个字母,第 2 行有 2 个字母,以此类推; 在三角形图案中,由上至下、由左至右依次由大写字母 A-Z 填充,每次使用大写 字母 Z 填充后,将从头使用大写字母 A 填充。

【输入描述】 输入一行,包含一个正整数 n。约定 2≤n≤40。

【输出描述】 输出符合要求的三角形图案。注意每行三角形图案的右侧不要有多余的空格。 【样例输入 1】 3

【样例输出 1】

A

BC

DEF

【样例输入 2】 7

【样例输出 2】

A

BC

DEF

GHIJ

KLMNO

PQRSTU

VWXYZAB

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    int start=0;
    for( int i=1; i<=n; i++ ){
        for( int j=1; j<=i; j++ ){
            cout<<(char)( 'A' + (start++)%26 );
        }
        cout<<endl;
    }
    return 0;
}

2. 百鸡问题

【问题描述】 “百鸡问题”是出自我国古代《张丘建算经》的著名数学问题。大意为:“每只公鸡 5 元,每只母鸡 3 元,每 3 只小鸡 1 元;现在有 100 元,买了 100 只鸡, 共有多少种方案?”

小明很喜欢这个故事,他决定对这个问题进行扩展,并使用编程解决:如果每只公鸡 x 元,每只母鸡 y 元,每 z 只小鸡 1 元;现在有 n 元,买了 m 只鸡,共有多少种方案?

【输入描述】 输入一行,包含五个整数,分别为问题描述中的 x、y、z、n、m。约定 1≤ x, y, z ≤10,1≤ n, m ≤1000。

【输出描述】 输出一行,包含一个整数 C,表示有 C 种方案。 【样例输入 1】 5 3 3 100 100

【样例输出 1】 4

【样例解释 1】 这就是问题描述中的“百鸡问题”。4 种方案分别为:公鸡 0 只、母鸡 25 只、 小鸡 75 只;公鸡 4 只、母鸡 18 只、小鸡 78 只;公鸡 8 只、母鸡 11 只、小鸡 81 只;公鸡 12 只、母鸡 4 只、小鸡 84 只。 

【样例输入 2】 1 1 1 100 100

【样例输出 2】 5151

#include<iostream>
using namespace std;
int main(){
    int x, y, z, n, m, number=0;
    cin>> x >> y >> z >> n >> m;
    for( int gj = 0; gj*x <= n && gj <= m; gj++ )
        for( int mj = 0; mj*y + gj*x <= n && mj + gj <= m; mj++ ){
            int xj = ( n - gj*x - mj*y ) * z;
            if( gj + mj + xj == m )
                number++;
        }
    cout<< number;
    return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值