第一章 C++ 基础语法
一、填空题
- C++ 源文件的扩展名通常是______。
- C++ 程序的入口函数是______。
- 在 C++ 中,注释有两种形式,分别是______和______。
- 声明一个整型变量 a 的语句是______。
- 输出语句的关键字是______。
二、判断题
- C++ 区分大小写。( )
- 一个 C++ 程序可以没有 main 函数。( )
- 注释会影响程序的运行速度。( )
- 变量在使用前必须先声明。( )
- 输出语句中可以使用转义字符。( )
三、选择题
- 以下哪个是 C++ 的合法标识符?( )
A. 123abc
B. abc-123
C. _abc123
D. abc#123 - 下列哪个语句可以正确输出 "Hello World"?( )
A. cout << "Hello World";
B. printf ("Hello World");
C. print ("Hello World");
D. cout << "Hello World" \n; - 以下关于变量声明的说法正确的是( )
A. 变量声明可以放在程序的任何位置
B. 变量声明必须放在函数的开头
C. 变量声明时必须初始化
D. 不同类型的变量不能在同一声明语句中声明 - 以下哪个不是 C++ 的关键字?( )
A. int
B. float
C. if
D. abc - 在 C++ 中,语句结束的标志是( )
A. 逗号
B. 句号
C. 分号
D. 冒号
四、编程题
- 编写一个程序,输出 "Hello, C++!"。
- 声明两个整型变量 a 和 b,分别赋值为 10 和 20,然后输出它们的和。
- 编写一个程序,输入一个字符,然后输出该字符及其对应的 ASCII 码值。
- 计算并输出 1 到 100 的整数和。
- 编写一个程序,输入两个实数,输出它们的平均值。
第二章 数据类型与运算符
一、填空题
- C++ 中基本数据类型包括整型、浮点型、字符型和______。
- 短整型的关键字是______。
- 字符型数据在内存中存储的是______。
- 运算符 "++" 的作用是______。
- 关系运算符的结果是______类型。
二、判断题
- 整型数据和浮点型数据可以混合运算。( )
- 取模运算符 "%" 的操作数可以是浮点型。( )
- 赋值运算符的优先级低于算术运算符。( )
- 逻辑运算符 "&&" 的优先级高于 "||"。( )
- 自增运算符 "++" 只能用于变量,不能用于常量或表达式。( )
三、选择题
- 以下哪个数据类型占用的内存空间最小?( )
A. int
B. short int
C. long int
D. float - 下列哪个运算符是赋值运算符?( )
A. +=
B. ==
C. !=
D. >> - 表达式 5 / 2 的结果是( )
A. 2.5
B. 2
C. 3
D. 2.0 - 以下关于数据类型转换的说法正确的是( )
A. 自动转换是由编译器自动完成的
B. 强制转换会丢失数据精度
C. 字符型数据可以自动转换为整型数据
D. 以上说法都正确 - 表达式 a += b 等价于( )
A. a = a + b
B. a = b + a
C. a = a - b
D. a = b - a
四、编程题
- 编写一个程序,输入一个整数,判断它是奇数还是偶数。
- 输入三个整数,输出其中的最大值。
- 计算并输出一个实数的平方和立方。
- 输入一个字符,判断它是否是大写字母。
- 编写一个程序,输入两个整数 a 和 b,交换它们的值并输出。
第三章 流程控制
一、填空题
- C++ 中的流程控制语句包括顺序结构、选择结构和______。
- if 语句的条件表达式必须是______类型。
- switch 语句中,每个 case 后面的常量表达式必须是______。
- while 循环的特点是______。
- do-while 循环的特点是______。
二、判断题
- if 语句后面可以跟多个 else if 子句。( )
- switch 语句中,default 子句可以省略。( )
- while 循环和 do-while 循环的区别在于循环条件的判断时机不同。( )
- break 语句可以用于跳出循环或 switch 语句。( )
- continue 语句的作用是结束整个循环。( )
三、选择题
- 以下哪个语句可以跳出当前循环?( )
A. break
B. continue
C. return
D. exit - 下列关于 switch 语句的说法正确的是( )
A. case 后面可以是变量
B. case 后面的常量表达式可以相同
C. switch 语句的表达式可以是浮点型
D. switch 语句可以嵌套使用 - 当 while 循环的条件为 false 时,循环体执行的次数是( )
A. 0 次
B. 1 次
C. 多次
D. 无限次 - 以下哪个循环语句至少会执行一次循环体?( )
A. while
B. do-while
C. for
D. 以上都不是 - 在 for 循环中,循环变量的初始化可以放在( )
A. 循环体中
B. for 语句的第一个表达式中
C. for 语句的第二个表达式中
D. for 语句的第三个表达式中
四、编程题
- 编写一个程序,输入一个整数 n,输出 1 到 n 的所有整数。
- 输入一个整数,判断它是否是素数(质数)。
- 输入一个温度,判断是否发烧。
- 使用 for 循环计算 1 到 100 中所有能被 3 整除的数的和。
- 编写一个程序,根据输入的成绩(0-100),输出对应的等级(A:90-100,B:80-89,C:70-79,D:60-69,E:0-59)。
- 使用嵌套循环输出一个 5 行 5 列的星号矩阵。
第四章 一维数组
一、填空题
- 数组是一组具有相同______的变量的集合。
- 声明一个包含 5 个整型元素的数组 a 的语句是______。
- 数组元素的下标从______开始。
- 可以通过______来访问数组中的元素。
- 对数组进行初始化时,可以省略数组的______,但必须给出所有元素的值。
二、判断题
- 数组的大小在声明后可以改变。( )
- 数组名代表数组的首地址。( )
- 可以将一个数组直接赋值给另一个数组。( )
- 访问数组元素时,下标可以超出数组的范围。( )
- 可以在声明数组的同时对其进行初始化。( )
三、选择题
- 以下哪个数组声明是正确的?( )
A. int a [5] = {1, 2, 3, 4, 5, 6};
B. float b [] = {1.1, 2.2, 3.3};
C. char c [3] = "abc";
D. double d (10); - 数组 a [10] 中,最后一个元素的下标是( )
A. 10
B. 9
C. 11
D. 0 - 以下关于数组的说法错误的是( )
A. 数组在内存中是连续存储的
B. 可以通过指针访问数组元素
C. 数组的大小必须是常量表达式
D. 数组元素的类型可以不同 - 若数组 a 的定义为 int a [5] = {1, 2, 3, 4, 5};,则 a [2] 的值是( )
A. 1
B. 2
C. 3
D. 4 - 要遍历一个包含 n 个元素的数组,循环条件通常是( )
A. i < n
B. i <= n
C. i > n
D. i >= n
四、编程题
- 编写一个程序,输入 10 个整数,存储到数组中,然后输出数组中的所有元素。
- 计算一个整型数组中所有元素的平均值。
- 找出一个整型数组中的最大值和最小值,并输出它们的位置(下标)。
- 将一个整型数组逆序存储(例如,原数组为 {1, 2, 3, 4, 5},逆序后为 {5, 4, 3, 2, 1})。
- 编写一个程序,输入一个字符串(用字符数组存储),计算字符串的长度(不包含结束符 '\0')。
第五章 二维数组
一、填空题
- 二维数组可以看作是一个______的数组。
- 声明一个 3 行 4 列的整型二维数组 a 的语句是______。
- 二维数组元素 a [i][j] 中,i 表示______,j 表示______。
- 对二维数组进行初始化时,可以按______或按______进行初始化。
- 二维数组在内存中是按______顺序存储的。
二、判断题
- 二维数组的行数和列数必须都是常量。( )
- 可以通过两个下标来访问二维数组中的元素。( )
- 二维数组的初始化可以只初始化部分元素,未初始化的元素自动初始化为 0。( )
- 二维数组名代表数组的首地址,即第一行的首地址。( )
- 可以将二维数组作为参数传递给函数,此时需要指定数组的列数。( )
三、选择题
- 以下哪个二维数组声明是正确的?( )
A. int a [][3] = {{1, 2}, {3, 4, 5}, {6}};
B. float b [2, 3];
C. char c [3][];
D. double d [][]; - 二维数组 a [2][3] 中,元素的个数是( )
A. 2
B. 3
C. 5
D. 6 - 若二维数组 a 的定义为 int a [3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};,则 a [1][2] 的值是( )
A. 6
B. 7
C. 8
D. 10 - 以下关于二维数组的说法正确的是( )
A. 二维数组的每一行都是一个一维数组
B. 二维数组的存储空间是不连续的
C. 可以省略二维数组声明中的行数
D. 以上说法都不正确 - 要遍历一个 m 行 n 列的二维数组,通常需要使用( )
A. 一个循环
B. 两个嵌套循环
C. 三个循环
D. 不需要循环
四、编程题
- 编写一个程序,输入一个 3 行 3 列的整型二维数组,输出数组中的所有元素。
- 计算一个 3 行 4 列的二维数组中所有元素的和。
- 找出一个 3 行 3 列的二维数组中的主对角线元素之和(主对角线是从左上角到右下角的对角线)。
- 将一个 2 行 3 列的二维数组转置(转置后行和列交换,例如原数组为 [[1, 2, 3], [4, 5, 6]],转置后为 [[1, 4], [2, 5], [3, 6]])。
- 编写一个程序,输入两个 3 行 3 列的整型二维数组,计算它们的和(对应位置的元素相加),并输出结果数组。
第六章 穷举法
一、填空题
- 穷举法的基本思想是列举所有可能的______,逐一验证是否满足条件。
- 穷举法的关键在于确定______和______,避免遗漏或重复。
- 穷举法通常使用______结构(如 for 循环、while 循环)实现。
- 在穷举范围内,若问题有 n 个变量,每个变量有 m 种取值,总枚举次数为______。
- 穷举法的时间复杂度通常较高,优化方法包括______和______。
二、判断题
- 穷举法适用于解空间有限且可枚举的问题。( )
- 穷举法必须遍历所有可能情况,无法进行优化。( )
- 鸡兔同笼问题可以用穷举法求解。( )
- 穷举法的枚举顺序不影响结果正确性。( )
- 穷举法在编程竞赛中常用于暴力求解简单问题。( )
三、选择题
- 以下哪种问题不适合用穷举法解决?( )
A. 求 100 以内的素数
B. 破解 4 位数字密码
C. 计算斐波那契数列第 100 项
D. 找出三个数中的最大值 - 穷举法的优化策略不包括( )
A. 缩小枚举范围
B. 减少变量数量
C. 提前终止条件
D. 使用递归替代循环 - 在穷举法中,判断一个数是否为偶数的条件是( )
A. n % 2 == 1
B. n / 2 == 0
C. n % 2 == 0
D. n % 2 != 0 - 穷举法的时间复杂度主要取决于( )
A. 计算机运行速度
B. 枚举次数
C. 循环嵌套层数
D. 变量类型 - 以下关于穷举法的说法正确的是( )
A. 穷举法一定比其他算法效率低
B. 穷举法不需要明确问题的解空间
C. 穷举法可以解决所有编程问题
D. 穷举法的实现通常较为简单
四、编程题
- 求水仙花数:编写程序,找出 100-999 之间所有水仙花数(各位数字的立方和等于自身的数,如 153=1³+5³+3³)。
- 百钱买百鸡:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?输出所有可能的解。
- 素数判断:输入一个正整数 n(n≤1000),判断其是否为素数(需用穷举法遍历因数)。
- 数字组合:用 1、2、3 三个数字能组成多少个互不相同且无重复数字的三位数?输出所有组合。
- 密码验证:假设密码是一个两位数,已知其十位数字与个位数字之和为 8,之差为 2。编写程序穷举所有可能的密码。
第七章 数位拆分
一、填空题
- 数位拆分是指将一个多位数分解为各个______上的数字。
- 提取一个数 n 的个位数字的方法是______,十位数字的方法是______。
- 若要将一个数的各位数字存储到数组中,通常需要先确定数字的______。
- 数位拆分的核心运算为______(取余)和______(整除)。
- 对于负数的数位拆分,通常先取______再进行处理。
二、判断题
- 数位拆分只能处理正整数。( )
- 拆分数字 1234 的结果为 1、2、3、4。( )
- 使用 n % 10 可以依次获取数字的高位到低位。( )
- 数位拆分可用于判断回文数(如 1221)。( )
- 拆分后的数位可以重新组合成新的数字。( )
三、选择题
- 提取数字 n=567 的十位数字,正确的表达式是( )
A. n / 10 % 10
B. n % 10
C. n / 100
D. n % 100 - 以下哪个操作可以去掉数字的最后一位?( )
A. n = n % 10
B. n = n / 10
C. n = n * 10
D. n = n + 10 - 数位拆分后,计算各位数字之和的步骤不包括( )
A. 初始化和为 0
B. 依次取出各位数字
C. 对数字进行排序
D. 将各位数字累加到和中 - 判断一个数是否为回文数的关键是( )
A. 各位数字之和为偶数
B. 最高位与最低位数字相同
C. 数字左右对称
D. 数字能被 11 整除 - 若数字 n=4321,拆分后逆序组成的新数是( )
A. 1234
B. 4321
C. 1243
D. 4123
四、编程题
- 计算各位数字之和:输入一个正整数 n(n≤10^6),计算其各位数字之和并输出。
- 判断回文数:输入一个正整数,判断其是否为回文数(如 121、1331 是回文数,123 不是)。
- 生成逆序数:输入一个正整数,生成其逆序数(如输入 123,输出 321)。
- 统计数位出现次数:输入一个正整数和一个数字 d(0-9),统计 d 在该数中出现的次数。
- 数位重组:输入一个三位数,将其各位数字重新排列成最大的三位数(如输入 213,输出 321)。