Files
My-Notes/笔记/CSharp/练习/CSharp复习题.md
T

794 lines
14 KiB
Markdown
Raw Normal View History

2026-06-18 20:01:30 +08:00
# CSharp 复习题库(分层练习)
> 使用方式:每题都在“你的作答”填写答案;“批改区”由我批改后填写。
---
## 入门(16题)
### 入门-1 [选择]
C# 源文件常见扩展名是:A. `.cs` B. `.csharp` C. `.dotnet` D. `.clr`
**你的作答**
A
**批改区**
- 结果:✅ 正确
- 参考答案:A
### 入门-2 [选择]
`Main` 方法作为入口,正确签名之一是:A. `void main()` B. `static void Main(string[] args)` C. `public Main()` D. `int Main(void)`
**你的作答**
B
**批改区**
- 结果:✅ 正确
- 参考答案:B
### 入门-3 [选择]
下列哪个是值类型:A. `string` B. `object` C. `int` D. `Array`
**你的作答**
C
**批改区**
- 结果:✅ 正确
- 参考答案:C
### 入门-4 [选择]
`var x = 10;``x` 的编译期类型是:A. `dynamic` B. `object` C. `int` D. `long`
**你的作答**
C
**批改区**
- 结果:✅ 正确
- 参考答案:C
### 入门-5 [选择]
输出到控制台应使用:A. `Console.ReadLine` B. `Console.WriteLine` C. `Console.Open` D. `Console.Print`
**你的作答**
B
**批改区**
- 结果:✅ 正确
- 参考答案:B
### 入门-6 [填空]
用于单行注释的符号是 `____`
**你的作答**
`//`
**批改区**
- 结果:✅ 正确
- 参考答案:`//`
### 入门-7 [填空]
`if` 条件表达式的结果类型必须是 `____`
**你的作答**
`bool`
**批改区**
- 结果:✅ 正确
- 参考答案:`bool`
### 入门-8 [填空]
将字符串 `"123"``int`,可用 `int.Parse("123")``____("123", out n)`
**你的作答**
`Convert.Int32("123", out n)`
**批改区**
- 结果:❌ 错误
- 参考答案:`int.TryParse("123", out n)`
- 说明:`Convert.ToInt32` 没有 `out` 参数;带 `out` 的是 `TryParse`
### 入门-9 [判断]
`const` 字段的值可以在运行时修改。对/错
**你的作答**
**批改区**
- 结果:✅ 正确
- 参考答案:错
### 入门-10 [判断]
`string` 在 C# 中是引用类型。对/错
**你的作答**
**批改区**
- 结果:✅ 正确
- 参考答案:对
### 入门-11 [代码结果]
写出输出:
```csharp
int a = 5;
int b = 2;
Console.WriteLine(a / b);
Console.WriteLine(a / 2.0);
```
**你的作答**
`2`
`1.0`
**批改区**
- 结果:❌ 错误
- 参考答案:
```text
2
2.5
```
- 说明:`a / b` 是整数除法,结果为 `2`
### 入门-12 [代码改错]
修复下面代码使其可编译:
```csharp
Console.Writeline("Hello")
```
**你的作答**
```csharp
Console.Writeline("Hello");
```
**批改区**
- 结果:❌ 错误
- 参考答案:
```csharp
Console.WriteLine("Hello");
```
- 说明:`WriteLine``L` 需要大写。
### 入门-13 [简答]
`==``Equals` 的常见区别是什么(1-2句话)
**你的作答**
`Equals` 可以用于更复杂判断,`==` 只比较值。
**批改区**
- 结果:⚠️ 部分正确
- 参考要点:
- `==` 是运算符,可被重载;不同类型语义可能不同。
- `Equals` 是方法(实例/静态),常用于值相等判断。
-`string` 来说,`==` 比较的是内容(被重载),不是引用地址。
### 入门-14 [编程]
从控制台读取姓名和年龄,输出:`你好,张三,你明年 19 岁。`
**你的作答**
```csharp
string name = Console.Readline();
int age = int.Parse(Console.Readline());
Console.WriteLine($"你好,{name},你明年 {age} 岁。");
```
**批改区**
- 结果:❌ 错误
- 参考答案:
```csharp
string name = Console.ReadLine();
int age = int.Parse(Console.ReadLine()!);
Console.WriteLine($"你好,{name},你明年 {age + 1} 岁。");
```
- 说明:`ReadLine` 大小写错误,且“明年”应输出 `age + 1`
### 入门-15 [编程]
输入一个整数,判断奇偶并输出 `odd/even`
**你的作答**
```Csharp
int value = int.Parse(Console.ReadLine());
if( value%2 != 0 )
{
Console.WriteLine("odd");
}
else
{
Console.WriteLine("even");
}
```
**批改区**
- 结果:❌ 错误
- 主要问题:`int.TryParse(...)` 返回 `bool`,不能直接赋给 `int`
- 参考答案:
```csharp
if (int.TryParse(Console.ReadLine(), out int value))
Console.WriteLine(value % 2 == 0 ? "even" : "odd");
```
### 入门-16 [编程]
输入三个整数,输出最大值
**你的作答**
```Csharp
int[] value;
int maxValue = 0;
value[0] = int.Parse(Console.ReadLine());
value[1] = int.Parse(Console.ReadLine());
value[2] = int.Parse(Console.ReadLine());
for(int i = 0;i<2;i++)
{
if(value[i]>=value[i+1])
{
maxValue = value[i];
}
}
Console.WriteLine(maxValue);
```
**批改区**
- 结果:❌ 错误
- 主要问题:数组未初始化
- 参考答案:
```csharp
int a = int.Parse(Console.ReadLine()!);
int b = int.Parse(Console.ReadLine()!);
int c = int.Parse(Console.ReadLine()!);
int maxValue = Math.Max(a, Math.Max(b, c));
Console.WriteLine(maxValue);
```
---
## 基础(18题)
### 基础-1 [选择]
`for` 循环最适合:A. 已知次数迭代 B. 无限循环 C. 异常处理 D. 命名空间管理
**你的作答**
A
**批改区**
- 结果:✅ 正确
- 参考答案:A
### 基础-2 [选择]
`break` 在循环中的作用是:A. 跳过本次 B. 结束当前循环 C. 结束程序 D. 重启循环
**你的作答**
B
**批改区**
- 结果:✅ 正确
- 参考答案:B
### 基础-3 [选择]
`continue` 的作用是:A. 结束方法 B. 退出程序 C. 跳过本次迭代 D. 抛出异常
**你的作答**
C
**批改区**
- 结果:✅ 正确
- 参考答案:C
### 基础-4 [选择]
数组声明正确的是:A. `int arr = new int[3]` B. `int[] arr = new int[3]` C. `array<int> arr` D. `int arr[] = 3`
**你的作答**
B
**批改区**
- 结果:✅ 正确
- 参考答案:B
### 基础-5 [选择]
`List<T>` 位于命名空间:A. `System.Text` B. `System.Collections.Generic` C. `System.Linq.Expressions` D. `System.IO`
**你的作答**
B
**批改区**
- 结果:✅ 正确
- 参考答案:B
### 基础-6 [填空]
定义一个可空整型变量:`int____ x = null;`
**你的作答**
?
**批改区**
- 结果:✅ 正确
- 参考答案:`?`
### 基础-7 [填空]
声明并初始化字典:`Dictionary<string,int> d = new ____();`
**你的作答**
`Dictionary<string,int>
**批改区**
- 结果:✅ 正确
- 参考答案:`Dictionary<string,int>`
- 说明:你填的类型名是对的,只是 Markdown 里的反引号没闭合。
### 基础-8 [填空]
捕获异常的关键字是 `____`
**你的作答**
try和catch
**批改区**
- 结果:⚠️ 部分正确
- 参考答案:`catch`
- 说明:`try` 用来包裹可能抛异常的代码,真正负责捕获异常的是 `catch`。
### 基础-9 [填空]
释放非托管资源常用模式:实现 `____` 接口
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-10 [代码结果]
写出输出:
```csharp
for (int i = 0; i < 5; i++)
{
if (i == 2) continue;
if (i == 4) break;
Console.Write(i);
}
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-11 [代码结果]
写出输出:
```csharp
string s = null;
Console.WriteLine(s?.Length ?? -1);
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-12 [改错]
找出并修复问题:
```csharp
int[] nums = {1,2,3};
Console.WriteLine(nums[3]);
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-13 [简答]
`throw;` 和 `throw ex;` 的差异是什么
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-14 [编程]
用 `while` 计算 `1..n` 的和(n 从输入读取)
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-15 [编程]
统计一个字符串中元音字母个数(忽略大小写)
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-16 [编程]
手写一个方法 `bool IsPrime(int n)`
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-17 [编程]
使用 `List<int>` 去重并升序输出
**你的作答**
(待填写)
**批改区**
(待批改)
### 基础-18 [编程]
使用 `Dictionary<string,int>` 统计一句话中每个单词出现次数
**你的作答**
(待填写)
**批改区**
(待批改)
---
## 核心(18题)
### 核心-1 [选择]
面向对象三大特性不包括:A. 封装 B. 继承 C. 多态 D. 事务
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-2 [选择]
`virtual` + `override` 用于:A. 字段隐藏 B. 运行时多态 C. 命名空间引用 D. 泛型约束
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-3 [选择]
`abstract` 类:A. 可直接实例化 B. 不能包含实现 C. 不能被继承 D. 不能直接实例化
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-4 [选择]
`interface` 成员默认:A. private B. protected C. public 合同 D. internal
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-5 [选择]
泛型约束 `where T : class` 的含义是:A. 值类型 B. 引用类型 C. 必须有无参构造 D. 必须实现 IDisposable
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-6 [填空]
声明一个自动属性:`public int Age { ____; ____; }`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-7 [填空]
只读自动属性常见写法:`public string Id { get; ____; }`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-8 [填空]
委托声明关键字是 `____`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-9 [填空]
事件订阅语法:`publisher.SomeEvent ____ Handler;`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-10 [代码阅读]
输出是什么:
```csharp
class A { public virtual void M() => Console.Write("A"); }
class B : A { public override void M() => Console.Write("B"); }
A x = new B();
x.M();
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-11 [代码阅读]
输出是什么:
```csharp
int Add(int a, int b = 10) => a + b;
Console.WriteLine(Add(5));
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-12 [改错]
指出并修复:
```csharp
interface IRun { void Go() { Console.WriteLine("go"); } }
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-13 [简答]
`override` 与 `new` 隐藏成员的行为区别
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-14 [简答]
什么时候用接口,什么时候用抽象类(简述判断标准)
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-15 [编程]
设计 `Shape` 抽象类,派生 `Circle/Rectangle`,实现 `GetArea()`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-16 [编程]
实现泛型方法 `Swap<T>(ref T a, ref T b)`
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-17 [编程]
定义一个 `event EventHandler<DataEventArgs>`,在数据变化时触发
**你的作答**
(待填写)
**批改区**
(待批改)
### 核心-18 [编程]
实现一个只读集合包装(对外不可修改,内部可维护)
**你的作答**
(待填写)
**批改区**
(待批改)
---
## 进阶(18题)
### 进阶-1 [选择]
`async/await` 中,`await` 作用是:A. 创建线程 B. 异步等待任务完成 C. 阻塞 UI 线程 D. 强制并行
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-2 [选择]
表示“一个无返回值异步操作”的常用返回类型:A. `void` B. `Task` C. `object` D. `Result`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-3 [选择]
LINQ 中用于投影的操作符:A. `Where` B. `Select` C. `Any` D. `Count`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-4 [选择]
延迟执行是 LINQ 的常见特性之一,以下通常会立即执行的是:A. `Where` B. `Select` C. `ToList` D. `OrderBy`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-5 [选择]
`using` 语句主要用于:A. 导入命名空间 B. 自动释放资源 C. 定义别名 D. 启动任务
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-6 [填空]
声明取消令牌源:`var cts = new ____();`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-7 [填空]
正则匹配常用类型:`System.Text.RegularExpressions.____`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-8 [填空]
线程安全递增可用:`Interlocked.____(ref x);`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-9 [填空]
文件全部文本读取:`File.____(path)`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-10 [代码结果]
写出输出:
```csharp
var nums = new[] {1,2,3,4,5};
var q = nums.Where(x => x % 2 == 1).Select(x => x * x);
Console.WriteLine(string.Join(",", q));
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-11 [代码结果]
判断是否死锁风险并说明一句原因:
```csharp
Task.Run(async () => { await Task.Delay(100); }).Wait();
```
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-12 [简答]
`Task.WhenAll` 与顺序 `await` 的区别
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-13 [简答]
`IEnumerable<T>` 与 `IQueryable<T>` 的核心差异
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-14 [编程]
异步读取文本文件并统计行数,支持取消(`CancellationToken`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-15 [编程]
用 LINQ 完成:给定学生列表,按班级分组后求每组平均分并降序输出
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-16 [编程]
实现一个简单缓存 `MemoryCache<TKey,TValue>`(带过期时间)
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-17 [编程]
写一个扩展方法 `IsNullOrEmptyEx(this string? s)`
**你的作答**
(待填写)
**批改区**
(待批改)
### 进阶-18 [编程]
设计一个可并发调用的计数器类,要求线程安全
**你的作答**
(待填写)
**批改区**
(待批改)