内容正文:
《算法与程序设计C#》河北科学技术出版社
第六章 数组
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共35小题,每题2分,共70分)
1. 声明 int[] arr = new int[5]; ,关于该数组说法正确的是( )。
A. 数组长度可随时修改
B. 数组元素默认值全为 0
C. 可直接通过 arr[5] 访问第六个元素
D. 数组类型为二维数组
2. 以下创建二维数组的语句正确的是( )。
A. int[,] arr = new int[3][4];
B. int[,] arr = {{1,2},{3,4}};
C. int[,] arr = new int[2,3]{{1,2},{3,4}};
D. int[][] arr = new int[2,3];
3. 执行 string[] strs = {"a","b","c"}; foreach (char c in strs) { /* 操作 */ } ,编译结果是( )。
A. 正常编译,遍历字符
B. 编译错误,类型不匹配
C. 运行时报错
D. 正常编译,无输出
4. 有数组 int[] nums = {10,20,30}; ,执行 foreach (int num in nums) { num = 5; } ,说法正确的是( )。
A. 数组元素全变为 5
B. 编译错误, foreach 中迭代变量是只读的
C. 运行时修改成功
D. 仅第一个元素变为 5
5. 数组 int[,] arr = new int[2,3]{{1,2,3},{4,5,6}}; , arr.GetLength(1) 的结果是( )。
A. 2
B. 3
C. 6
D. 报错
6. 声明 int[] arr; 后,直接执行 Console.WriteLine(arr[0]); ,结果是( )。
A. 输出 0
B. 编译错误
C. 运行时抛 NullReferenceException
D. 正常输出
7. 以下能正确遍历一维数组 int[] nums 并修改元素值的是( )。
A. foreach (int num in nums) { num = 1; }
B. for (int i=0;i<nums.Length;i++) { nums[i] = 1; }
C. for (int i=0;i<=nums.Length;i++) { nums[i] = 1; }
D. while (nums.Length>0) { nums[0] = 1; }
8. 要创建一个长度由用户输入决定的一维数组,正确的是( )。
A. Console.Write("输入长度:"); int len = int.Parse(Console.ReadLine()); int[] arr = new int[len];
B. int[] arr = new int[Console.ReadLine()];
C. int len; Console.Write("输入长度:"); len = Console.ReadLine(); int[] arr = new int[len];
D. int[] arr = new int[]; 再手动设置长度
9. 二维数组 int[,] arr = {{1,2},{3,4}}; ,访问元素 4 的正确写法是( )。
A. arr[1,1]
B. arr[2,2]
C. arr[1,2]
D. arr[2,1]
10. 执行 int[] arr = {1,2,3,4}; int sum = 0; for (int i=0;i<arr.Length;i++) { if (i%2==0) continue; sum += arr[i]; } , sum 结果是( )。
A. 10
B. 5
C. 6
D. 3
11. 数组 string[] names = {"Tom","Jerry"}; ,以下操作会引发异常的是( )。
A. names[0] = "Spike";
B. Console.WriteLine(names[2]);
C. foreach (string n in names) { Console.WriteLine(n); }
D. names = new string[3]{"A","B","C"};
12. 关于数组初始化, int[] arr = new int[3]{1,2}; 说法正确的是( )。
A. 编译错误,初始化元素数量与长度不符
B. 正常编译,第三个元素默认 0
C. 运行时报错
D. 语法错误
13. 有数组 int[] nums = {5,3,7,1}; ,用 Array.Sort(nums); 排序后,数组元素顺序是( )。
A. 1,3,5,7
B. 7,5,3,1
C. 5,3,7,1 (不变 )
D. 随机顺序
14. 以下代码输出结果是( )。
int[] arr = {1,2,3};
int[] arr2 = arr;
arr2[0] = 10;
Console.WriteLine(arr[0]);
A. 1
B. 10
C. 编译错误
D. 运行时错误
15. 二维数组 int[,] arr = new int[3,2]; ,元素总个数是( )。
A. 3
B. 2
C. 6
D. 5
16. 执行 int[] arr = Enumerable.Range(1,5).ToArray(); ,数组元素是( )。
A. 1,2,3,4,5
B. 0,1,2,3,4
C. 2,3,4,5,6
D. 随机数
17. 数组 int[] nums = {8,2,6}; ,以下求最大值的正确代码是( )。
A. int max = nums[0]; for (int i=1;i<nums.Length;i++) { if (nums[i]>max) max = nums[i]; }
B. int max = nums.Max(); (需引用 System.Linq )
C. 以上两种都对
D. 以上两种都错
18. 声明 int[][] jaggedArr = new int[3][]; ,关于该数组说法正确的是( )。
A. 这是二维数组
B. 是交错数组( jagged array ),每个子数组需单独初始化
C. 元素默认值全为 0
D. 长度不可变
19. 以下创建交错数组并初始化的正确代码是( )。
A. int[][] arr = new int[2][3]{{1,2},{3,4}};
B. int[][] arr = {{1,2},{3,4,5}};
C. int[][] arr = new int[2][]; arr[0] = new int[]{1,2}; arr[1] = new int[]{3,4,5};
D. int[][] arr = new int[][]{new int[2]{1,2}, new int[3]{3,4,5}};
20. 执行 int[] arr = {3,1,2}; Array.Reverse(arr); ,数组元素变为( )。
A. 2,1,3
B. 3,2,1
C. 1,2,3
D. 不变
21. 有数组 int[] nums = {4,4,4}; ,判断是否所有元素相等,正确代码是( )。
A. bool isEqual = nums.Distinct().Count() == 1; (需 System.Linq )
B. bool isEqual = true; for (int i=1;i<nums.Length;i++) { if (nums[i]!=nums[0]) { isEqual = false; break; } }
C. 以上两种都对
D. 以上两种都错
22. 数组 string[] strs = {"Hello","World"}; ,拼接成 HelloWorld 的正确代码是( )。
A. string result = string.Join("", strs);
B. string result = strs[0] + strs[1];
C. 以上两种都对
D. 以上两种都错
23. 执行 int[] arr = {1,2,3}; int[] newArr = arr.Select(x => x*2).ToArray(); (需 System.Linq ), newArr 元素是( )。
A. 1,2,3
B. 2,4,6
C. 3,6,9
D. 报错
24. 以下代码输出结果是( )。
int[,] arr = {{1,2},{3,4}};
for (int i=0;i<2;i++) {
for (int j=0;j<2;j++) {
Console.Write(arr[j,i] + " ");
}
}
A. 1 3 2 4
B. 1 2 3 4
C. 2 4 1 3
D. 3 4 1 2
25. 数组 int[] nums = {5,3,7}; ,找出索引为奇数的元素之和,正确代码是( )。
A. int sum = 0; for (int i=0;i<nums.Length;i++) { if (i%2!=0) sum += nums[i]; }
B. int sum = nums.Where((x,i) => i%2!=0).Sum(); (需 System.Linq )
C. 以上两种都对
D. 以上两种都错
26. 若一维数组 int[] arr = {1,2,3,4,5}; ,以下访问正确的是( )
A. arr[5]
B. arr[0]
C. arr[1]
D. arr[6]
27. 声明二维数组语法正确的是( )
A. int[2,3] arr;
B. int[,] arr = new int[2,3];
C. int[][] arr = new int[2][3];
D. int[,] arr = {{1,2},{3,4}};
28. 锯齿数组 int[][] jagged = new int[3][]; ,以下初始化正确的是( )
A. jagged[0] = new int[2] {1,2};
B. jagged = new int[3,2];
C. jagged[1] = new int[] {3};
D. 以上都对
29. 数组 int[] nums = new int[5]; ,默认每个元素值是( )
A. null
B. 0
C. 随机值
D. 未定义
30. 二维数组 int[,] arr = new int[2,3] {{1,2,3},{4,5,6}}; , arr[1,2] 的值是( )
A. 3 B. 6 C. 5 D. 下标越界
31. 以下创建数组的方式,能直接初始化元素的是( )
A. int[] arr = new int[3];
B. string[] names = {"Tom", "Jerry"};
C. double[,] scores = new double[2,2];
D. char[][] chars = new char[2][];
32. 数组长度属性是( )
A. Length
B. Count
C. Size
D. Capacity
33. 以下关于数组的说法,错误的是( )
A. 数组元素类型必须相同
B. 数组一旦创建,长度不可变
C. 可以用 foreach 遍历数组
D. 数组索引可以是浮点数
34. 锯齿数组 int[][] jagged = { new int[] {1,2}, new int[] {3} }; ,总元素个数是( )
A. 2 B. 3 C. 4 D. 不确定
35. 以下代码运行后, result 的值是( )
int[] arr = {1,2,3,4};
int result = arr[1] + arr[3];
A. 3 B. 6 C. 5 D. 7
2、 判断题(本题共10小题,每题1分,共10分)
1. 声明 int[] arr = new int[5]; 后, arr[0] 默认值为 0 ,因此可直接通过 arr[0] = 10; 修改值。( )
续可通过下标修改值。
2. 二维数组 int[,] arr = { {1,2}, {3,4} }; ,可直接通过 arr[2,0] 访问第三行第一列元素。( )
3. foreach 遍历数组时,迭代变量是只读的,因此无法在 foreach 循环内修改数组元素的值。( )
4. 数组 int[] nums = { 1, 2, 3 }; ,执行 nums = new int[4] { 4, 5, 6, 7 }; 后,原数组 { 1, 2, 3 } 会被自动销毁。( )
5. 声明 int[] arr; 后,直接执行 Console.WriteLine(arr.Length); 会引发 编译错误。( )
6. 交错数组 int[][] jaggedArr = new int[3][]; ,每个子数组需单独初始化,否则默认值为 null 。( )
7. 数组 int[] arr = { 1, 2, 3 }; ,执行 Array.Sort(arr); 后,数组会按降序排列。( )
8. 二维数组 int[,] arr = new int[2, 3]; , arr.GetLength(0) 返回行数( 2 ), arr.GetLength(1) 返回列数( 3 )。( )
9. 数组元素的索引必须是非负整数,且不能超过数组长度 1,否则会引发下标越界异常。( )
10. 声明 int[] arr = { 1, 2, 3 }; ,执行 arr[0] = arr[1] + arr[2]; 后, arr[0] 的值为 5 。( )
三、程序分析题(共 2 小题,每小题 5 分,共 10 分 )
1. 程序运行后,控制台输出是
int[] nums = { 8, 3, 5, 9, 2 };
int temp = 0;
for (int i = 0; i < nums.Length 1; i++)
{
for (int j = 0; j < nums.Length 1 i; j++)
{
if (nums[j] > nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
foreach (int num in nums)
{
Console.Write(num + " ");
}
2. 程序运行后,控制台输出是
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int sum = 0;
for (int i = 0; i < 3; i++)
{
sum += matrix[i, i];
}
Console.WriteLine( sum);
四、 程序填空题(共 2 小题,每空 5 分,共 10 分 )
1.将数组 { 10, 20, 30, 40, 50 } 逆序存储(即变为 { 50, 40, 30, 20, 10 } ),补全代码。
int[] arr = { 10, 20, 30, 40, 50 };
int len = arr.Length;
for (int i = 0; i < len / 2; i++)
{
// 交换 arr[i] 和 arr[len-1-i]
int temp = arr[i];
arr[len - 1- i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
2. 程序填空题(统计数组中偶数个数)
需求:统计数组 { 1, 2, 3, 4, 5, 6 } 中偶数的个数,补全代码。
int[] nums = { 1, 2, 3, 4, 5, 6 };
int count = 0;
foreach (int num in nums)
{
if
{
count++;
}
}
Console.WriteLine("偶数个数:" + count);
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$
《算法与程序设计C#》河北科学技术出版社
第六章 数组
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共35小题,每题2分,共70分)
1. 声明 int[] arr = new int[5]; ,关于该数组说法正确的是( )。
A. 数组长度可随时修改
B. 数组元素默认值全为 0
C. 可直接通过 arr[5] 访问第六个元素
D. 数组类型为二维数组
【答案】B
【解析】 new int[5] 创建长度为5的一维数组,元素默认值 int 类型是 0 ;长度创建后不可变, arr[5] 下标越界,这是一维数组,A、C、D错误 。
2. 以下创建二维数组的语句正确的是( )。
A. int[,] arr = new int[3][4];
B. int[,] arr = {{1,2},{3,4}};
C. int[,] arr = new int[2,3]{{1,2},{3,4}};
D. int[][] arr = new int[2,3];
【答案】B
【解析】二维数组创建语法是 int[,] 数组名 = new int[行数,列数]; ,A 语法错误;C 初始化时 new int[2,3] ,应该是两行三列,每个大括号中应该是三个值,D 选项等号前是不规则数组,等号后也应该写为new int[2][3]; 形式 。
3. 执行 string[] strs = {"a","b","c"}; foreach (char c in strs) { /* 操作 */ } ,编译结果是( )。
A. 正常编译,遍历字符
B. 编译错误,类型不匹配
C. 运行时报错
D. 正常编译,无输出
【答案】B
【解析】 strs 是 string 类型数组, foreach 遍历变量 c 声明为 char ,类型不匹配,编译报错,选B 。
4. 有数组 int[] nums = {10,20,30}; ,执行 foreach (int num in nums) { num = 5; } ,说法正确的是( )。
A. 数组元素全变为 5
B. 编译错误, foreach 中迭代变量是只读的
C. 运行时修改成功
D. 仅第一个元素变为 5
【答案】B
【解析】 foreach 迭代变量默认是值类型副本,且为只读,无法赋值修改,编译报错,选B 。
5. 数组 int[,] arr = new int[2,3]{{1,2,3},{4,5,6}}; , arr.GetLength(1) 的结果是( )。
A. 2
B. 3
C. 6
D. 报错
【答案】B
【解析】 GetLength(0) 获取行数, GetLength(1) 获取列数,此数组列数是3,选B 。
6. 声明 int[] arr; 后,直接执行 Console.WriteLine(arr[0]); ,结果是( )。
A. 输出 0
B. 编译错误
C. 运行时抛 NullReferenceException
D. 正常输出
【答案】C
【解析】数组仅声明未初始化(未 new 分配空间 ),直接访问元素会引发空引用异常,选C 。
7. 以下能正确遍历一维数组 int[] nums 并修改元素值的是( )。
A. foreach (int num in nums) { num = 1; }
B. for (int i=0;i<nums.Length;i++) { nums[i] = 1; }
C. for (int i=0;i<=nums.Length;i++) { nums[i] = 1; }
D. while (nums.Length>0) { nums[0] = 1; }
【答案】B
【解析】A foreach 迭代变量只读无法修改;C 下标 i<=nums.Length 会越界;D 死循环且逻辑错误,B 通过 for 循环下标可正确修改,选B 。
8. 要创建一个长度由用户输入决定的一维数组,正确的是( )。
A. Console.Write("输入长度:"); int len = int.Parse(Console.ReadLine()); int[] arr = new int[len];
B. int[] arr = new int[Console.ReadLine()];
C. int len; Console.Write("输入长度:"); len = Console.ReadLine(); int[] arr = new int[len];
D. int[] arr = new int[]; 再手动设置长度
【答案】A
【解析】B Console.ReadLine() 返回 string ,无法直接给数组长度;C len 未转 int 类型;D 数组创建需指定长度(除非初始化时赋值 ),A 先获取长度转 int 再创建数组,正确 。
9. 二维数组 int[,] arr = {{1,2},{3,4}}; ,访问元素 4 的正确写法是( )。
A. arr[1,1]
B. arr[2,2]
C. arr[1,2]
D. arr[2,1]
【答案】A
【解析】二维数组下标从 0 开始, 4 在第二行(下标 1 )第二列(下标 1 ),即 arr[1,1] ,选A 。
10. 执行 int[] arr = {1,2,3,4}; int sum = 0; for (int i=0;i<arr.Length;i++) { if (i%2==0) continue; sum += arr[i]; } , sum 结果是( )。
A. 10
B. 5
C. 6
D. 3
【答案】C
【解析】循环中 i 为 0 (跳过 )、 1 (加 2 )、 2 (跳过 )、 3 (加 4 ), sum=2+4=6 ,选C 。
11. 数组 string[] names = {"Tom","Jerry"}; ,以下操作会引发异常的是( )。
A. names[0] = "Spike";
B. Console.WriteLine(names[2]);
C. foreach (string n in names) { Console.WriteLine(n); }
D. names = new string[3]{"A","B","C"};
【答案】B
【解析】 names 长度为2,下标 2 越界,访问会抛异常,A 正常修改,C 正常遍历,D 重新赋值数组,选B 。
12. 关于数组初始化, int[] arr = new int[3]{1,2}; 说法正确的是( )。
A. 编译错误,初始化元素数量与长度不符
B. 正常编译,第三个元素默认 0
C. 运行时报错
D. 语法错误
【答案】B
【解析】数组创建时指定长度,初始化元素可少于长度,剩余元素用类型默认值( int 是 0 ),正常编译,选B 。
13. 有数组 int[] nums = {5,3,7,1}; ,用 Array.Sort(nums); 排序后,数组元素顺序是( )。
A. 1,3,5,7
B. 7,5,3,1
C. 5,3,7,1 (不变 )
D. 随机顺序
【答案】A
【解析】 Array.Sort 对一维数组默认升序排序,排序后为 1,3,5,7 ,选A 。
14. 以下代码输出结果是( )。
int[] arr = {1,2,3};
int[] arr2 = arr;
arr2[0] = 10;
Console.WriteLine(arr[0]);
A. 1
B. 10
C. 编译错误
D. 运行时错误
【答案】B
【解析】 arr2 是 arr 的引用(数组是引用类型 ),修改 arr2 元素会影响 arr ,输出 10 ,选B 。
15. 二维数组 int[,] arr = new int[3,2]; ,元素总个数是( )。
A. 3
B. 2
C. 6
D. 5
【答案】C
【解析】二维数组元素个数=行数×列数, 3×2=6 ,选C 。
16. 执行 int[] arr = Enumerable.Range(1,5).ToArray(); ,数组元素是( )。
A. 1,2,3,4,5
B. 0,1,2,3,4
C. 2,3,4,5,6
D. 随机数
【答案】A
【解析】 Enumerable.Range(1,5) 生成从 1 开始,共 5 个连续整数,转数组后是 1,2,3,4,5 ,选A 。
17. 数组 int[] nums = {8,2,6}; ,以下求最大值的正确代码是( )。
A. int max = nums[0]; for (int i=1;i<nums.Length;i++) { if (nums[i]>max) max = nums[i]; }
B. int max = nums.Max(); (需引用 System.Linq )
C. 以上两种都对
D. 以上两种都错
【答案】C
【解析】A 通过循环遍历比较找最大值;B 借助 LINQ 的 Max 方法(需 using System.Linq; ),都可实现,选C 。
18. 声明 int[][] jaggedArr = new int[3][]; ,关于该数组说法正确的是( )。
A. 这是二维数组
B. 是交错数组( jagged array ),每个子数组需单独初始化
C. 元素默认值全为 0
D. 长度不可变
【答案】B
【解析】 int[][] 是交错数组(数组的数组 ),不是二维数组,需为每个子数组单独 new 初始化,A 错误;元素未初始化时是 null ,C 错误;交错数组长度(子数组个数 )创建后不可变,但子数组长度可变,这里强调概念,B 正确 。
19. 以下创建交错数组并初始化的正确代码是( )。
A. int[][] arr = new int[2][3]{{1,2},{3,4}};
B. int[][] arr = {{1,2},{3,4,5}};
C. int[][] arr = new int[2][]; arr[0] = new int[]{1,2}; arr[1] = new int[]{3,4,5};
D. int[][] arr = new int[][]{new int[2]{1,2}, new int[3]{3,4,5}};
【答案】C
【解析】A 交错数组不能用 new int[2][3] 语法;B 缺少 new 初始化;D 语法错误,正确是先声明数组长度,再初始化子数组,C 正确
20. 执行 int[] arr = {3,1,2}; Array.Reverse(arr); ,数组元素变为( )。
A. 2,1,3
B. 3,2,1
C. 1,2,3
D. 不变
【答案】A
【解析】 Array.Reverse 反转数组元素,原数组 {3,1,2} 反转后为 {2,1,3} ,选A 。
21. 有数组 int[] nums = {4,4,4}; ,判断是否所有元素相等,正确代码是( )。
A. bool isEqual = nums.Distinct().Count() == 1; (需 System.Linq )
B. bool isEqual = true; for (int i=1;i<nums.Length;i++) { if (nums[i]!=nums[0]) { isEqual = false; break; } }
C. 以上两种都对
D. 以上两种都错
【答案】C
【解析】A 用 Distinct 去重后判断数量;B 循环比较每个元素与第一个元素,都可实现,选C 。
22. 数组 string[] strs = {"Hello","World"}; ,拼接成 HelloWorld 的正确代码是( )。
A. string result = string.Join("", strs);
B. string result = strs[0] + strs[1];
C. 以上两种都对
D. 以上两种都错
【答案】C
【解析】A 用 string.Join 拼接数组元素(分隔符为空 );B 直接字符串拼接,都可得到 HelloWorld ,选C 。
23. 执行 int[] arr = {1,2,3}; int[] newArr = arr.Select(x => x*2).ToArray(); (需 System.Linq ), newArr 元素是( )。
A. 1,2,3
B. 2,4,6
C. 3,6,9
D. 报错
【答案】B
【解析】 Select 方法遍历数组,每个元素乘以 2 ,结果数组是 {2,4,6} ,选B 。
24. 以下代码输出结果是( )。
int[,] arr = {{1,2},{3,4}};
for (int i=0;i<2;i++) {
for (int j=0;j<2;j++) {
Console.Write(arr[j,i] + " ");
}
}
A. 1 3 2 4
B. 1 2 3 4
C. 2 4 1 3
D. 3 4 1 2
【答案】A
【解析】内层循环交换了行列下标,依次访问 arr[0,0]=1 、 arr[1,0]=3 、 arr[0,1]=2 、 arr[1,1]=4 ,输出 1 3 2 4 ,选A 。
25. 数组 int[] nums = {5,3,7}; ,找出索引为奇数的元素之和,正确代码是( )。
A. int sum = 0; for (int i=0;i<nums.Length;i++) { if (i%2!=0) sum += nums[i]; }
B. int sum = nums.Where((x,i) => i%2!=0).Sum(); (需 System.Linq )
C. 以上两种都对
D. 以上两种都错
【答案】C
【解析】A 循环判断下标奇偶性累加;B 用 LINQ 的 Where 结合索引筛选、 Sum 求和,都可实现,选C 。
26. 若一维数组 int[] arr = {1,2,3,4,5}; ,以下访问正确的是( )
A. arr[5]
B. arr[0]
C. arr[1]
D. arr[6]
【答案】B
【解析】C# 数组索引从 0 开始,最大索引为 数组长度 1 (此数组长度为 5,最大索引是 4 ), arr[0] 访问第一个元素,A、D 超出索引范围,C 负索引不合法。
27. 声明二维数组语法正确的是( )
A. int[2,3] arr;
B. int[,] arr = new int[2,3];
C. int[][] arr = new int[2][3];
D. int[,] arr = {{1,2},{3,4}};
【答案】B
【解析】A 语法错误,C# 二维数组声明用 [,] 且初始化需分步(如锯齿数组);C 是锯齿数组(数组的数组)语法,不能直接 new int[2][3] ;D 初始化缺少 new int[,] 关键字,正确写法是 int[,] arr = new int[,] {{1,2},{3,4}}; ,B 是标准二维数组声明。
28. 锯齿数组 int[][] jagged = new int[3][]; ,以下初始化正确的是( )
A. jagged[0] = new int[2] {1,2};
B. jagged = new int[3,2];
C. jagged[1] = new int[] {3};
D. 以上都对
【答案】A
【解析】锯齿数组是“数组的数组”,每个子数组长度可独立定义。A 正确初始化第一个子数组长度为 2;B 试图用二维数组语法赋值,类型不匹配;C 子数组初始化需指定长度(如 new int[1] {3} )或用 new int[] {3} 但需保证语法完整,实际写 jagged[1] = new int[] {3}; 也可,不过更规范是指定长度,本题严格看 A 最标准(题目设计侧重区分锯齿与二维,选 A )。
29. 数组 int[] nums = new int[5]; ,默认每个元素值是( )
A. null
B. 0
C. 随机值
D. 未定义
【答案】B
【解析】C# 中值类型数组(如 int )初始化时,元素默认值为对应类型的“零值”, int 的零值是 0 ;引用类型数组默认值才是 null 。
30. 二维数组 int[,] arr = new int[2,3] {{1,2,3},{4,5,6}}; , arr[1,2] 的值是( )
A. 3
B. 6
C. 5
D. 下标越界
【答案】B
【解析】二维数组 arr[行索引, 列索引] ,行、列索引均从 0 开始。 arr[1,2] 对应第二行(索引 1 )第三列(索引 2 ),值为 6 。
31. 以下创建数组的方式,能直接初始化元素的是( )
A. int[] arr = new int[3];
B. string[] names = {"Tom", "Jerry"};
C. double[,] scores = new double[2,2];
D. char[][] chars = new char[2][];
【答案】B
【解析】B 是数组初始化的简洁语法,直接用 {} 赋值元素;A、C 仅创建空数组,需后续赋值;D 是锯齿数组空声明,未初始化子数组。
32. 数组长度属性是( )
A. Length
B. Count
C. Size
D. Capacity
【答案】A
【解析】C# 中数组通过 Length 属性获取长度(如 int[] arr = {1,2}; arr.Length == 2 ); Count 多为集合(如 List )的属性; Size 不是数组标准属性; Capacity 是 List 预分配容量的属性。
33. 以下关于数组的说法,错误的是( )
A. 数组元素类型必须相同
B. 数组一旦创建,长度不可变
C. 可以用 foreach 遍历数组
D. 数组索引可以是浮点数
【答案】D
【解析】数组索引必须是整数(从 0 开始的有序整数),不能用浮点数;A、B 是数组基本特性(元素同类型、长度固定);C foreach 支持遍历数组。
34. 锯齿数组 int[][] jagged = { new int[] {1,2}, new int[] {3} }; ,总元素个数是( )
A. 2
B. 3
C. 4
D. 不确定
【答案】B
【解析】第一个子数组有 2 个元素,第二个子数组有 1 个元素,总元素数 2 + 1 = 3 。
35. 以下代码运行后, result 的值是( )
int[] arr = {1,2,3,4};
int result = arr[1] + arr[3];
A. 3
B. 6
C. 5
D. 7
【答案】B
【解析】 arr[1] 是 2 , arr[3] 是 4 ,相加得 2 + 4 = 6 。
2、 判断题(本题共10小题,每题1分,共10分)
1. 声明 int[] arr = new int[5]; 后, arr[0] 默认值为 0 ,因此可直接通过 arr[0] = 10; 修改值。( )
【答案】√
【解析】数组创建时,元素会被编译器初始化为对应类型默认值( int 类型默认 0 ),后续可通过下标修改值。
2. 二维数组 int[,] arr = { {1,2}, {3,4} }; ,可直接通过 arr[2,0] 访问第三行第一列元素。( )
【答案】×
【解析】二维数组下标从 0 开始, arr 只有 2 行(下标 0 、 1 ), arr[2,0] 会导致下标越界异常。
3. foreach 遍历数组时,迭代变量是只读的,因此无法在 foreach 循环内修改数组元素的值。( )
【答案】√
【解析】 foreach 的迭代变量是数组元素的“副本”(值类型)或“引用副本”(引用类型),赋值操作不会影响原数组,且语法上不允许直接修改。
4. 数组 int[] nums = { 1, 2, 3 }; ,执行 nums = new int[4] { 4, 5, 6, 7 }; 后,原数组 { 1, 2, 3 } 会被自动销毁。( )
【答案】×
【解析】 nums 重新赋值后,原数组对象会成为“垃圾”,但销毁由 C# 垃圾回收机制(GC)自动处理,并非“立即销毁”。
5. 声明 int[] arr; 后,直接执行 Console.WriteLine(arr.Length); 会引发 编译错误。( )
【答案】×
【解析】 arr 仅声明未初始化(未 new 分配空间 ),直接访问 Length 会引发 运行时异常( NullReferenceException ),编译可通过。
6. 交错数组 int[][] jaggedArr = new int[3][]; ,每个子数组需单独初始化,否则默认值为 null 。( )
【答案】√
【解析】交错数组是“数组的数组”,声明后需为每个子数组 new int[] 分配空间,否则子数组默认是 null 。
7. 数组 int[] arr = { 1, 2, 3 }; ,执行 Array.Sort(arr); 后,数组会按降序排列。( )
【答案】×
【解析】 Array.Sort 对一维数组默认按升序排序,若需降序,需结合 Comparison 或 LINQ 处理。
8. 二维数组 int[,] arr = new int[2, 3]; , arr.GetLength(0) 返回行数( 2 ), arr.GetLength(1) 返回列数( 3 )。( )
【答案】√
【解析】 GetLength(index) 方法中, index = 0 对应行数, index = 1 对应列数(多维数组以此类推 )。
9. 数组元素的索引必须是非负整数,且不能超过数组长度 1,否则会引发下标越界异常。( )
【答案】√
【解析】C# 数组索引从 0 开始,最大索引为 数组长度 1 ,越界会抛出 IndexOutOfRangeException 。
10. 声明 int[] arr = { 1, 2, 3 }; ,执行 arr[0] = arr[1] + arr[2]; 后, arr[0] 的值为 5 。( )
【答案】√
【解析】 arr[1] 是 2 , arr[2] 是 3 ,相加赋值给 arr[0] ,结果为 5 。
三、程序分析题(共 2 小题,每小题 5 分,共 10 分 )
1. 程序运行后,控制台输出是
int[] nums = { 8, 3, 5, 9, 2 };
int temp = 0;
for (int i = 0; i < nums.Length 1; i++)
{
for (int j = 0; j < nums.Length 1 i; j++)
{
if (nums[j] > nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
foreach (int num in nums)
{
Console.Write(num + " ");
}
【答案】 2 3 5 8 9
【解析】这是冒泡排序算法,通过相邻元素比较、交换,将数组按升序排列,最终输出排序后的数组。
2. 程序运行后,控制台输出是
int[,] matrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int sum = 0;
for (int i = 0; i < 3; i++)
{
sum += matrix[i, i];
}
Console.WriteLine( sum);
【答案】 15
【解析】遍历二维数组的主对角线( matrix[0,0] 、 matrix[1,1] 、 matrix[2,2] ),求和为 1 + 5 + 9 = 15 。
四、 程序填空题(共 2 小题,每空 5 分,共 10 分 )
1.将数组 { 10, 20, 30, 40, 50 } 逆序存储(即变为 { 50, 40, 30, 20, 10 } ),补全代码。
int[] arr = { 10, 20, 30, 40, 50 };
int len = arr.Length;
for (int i = 0; i < len / 2; i++)
{
// 交换 arr[i] 和 arr[len- 1-i]
int temp = arr[i];
arr[len - 1 - i] = temp;
}
foreach (int num in arr)
{
Console.Write(num + " ");
}
【答案】arr[i] = arr[len - 1 - i];
【解析】双指针指向前边与后边元素。
2. 程序填空题
需求:统计数组 { 1, 2, 3, 4, 5, 6 } 中偶数的个数,补全代码。
int[] nums = { 1, 2, 3, 4, 5, 6 };
int count = 0;
foreach (int num in nums)
{
if
{
count++;
}
}
Console.WriteLine("偶数个数:" + count);
【答案】(num % 2 == 0)
【解析】遍历数组,通过 num % 2 == 0 判断偶数,统计个数。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$