一、单选题(每题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;
}