Files
My-Notes/笔记/CSharp/练习/CSharp复习题.md
T
2026-06-18 20:01:30 +08:00

14 KiB
Raw Blame History

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 [代码结果]

写出输出:

int a = 5;
int b = 2;
Console.WriteLine(a / b);
Console.WriteLine(a / 2.0);

你的作答 2 1.0

批改区

  • 结果: 错误
  • 参考答案:
2
2.5
  • 说明:a / b 是整数除法,结果为 2

入门-12 [代码改错]

修复下面代码使其可编译:

Console.Writeline("Hello")

你的作答

Console.Writeline("Hello");

批改区

  • 结果: 错误
  • 参考答案:
Console.WriteLine("Hello");
  • 说明:WriteLineL 需要大写。

入门-13 [简答]

==Equals 的常见区别是什么(1-2句话)

你的作答 Equals 可以用于更复杂判断,== 只比较值。

批改区

  • 结果:⚠️ 部分正确
  • 参考要点:
    • == 是运算符,可被重载;不同类型语义可能不同。
    • Equals 是方法(实例/静态),常用于值相等判断。
    • string 来说,== 比较的是内容(被重载),不是引用地址。

入门-14 [编程]

从控制台读取姓名和年龄,输出:你好,张三,你明年 19 岁。

你的作答

string name = Console.Readline();
int age = int.Parse(Console.Readline());
Console.WriteLine($"你好,{name},你明年 {age} 岁。");

批改区

  • 结果: 错误
  • 参考答案:
string name = Console.ReadLine();
int age = int.Parse(Console.ReadLine()!);
Console.WriteLine($"你好,{name},你明年 {age + 1} 岁。");
  • 说明:ReadLine 大小写错误,且“明年”应输出 age + 1

入门-15 [编程]

输入一个整数,判断奇偶并输出 odd/even

你的作答

int value = int.Parse(Console.ReadLine());
if( value%2 != 0 )
{
	Console.WriteLine("odd");
}
else
{
	Console.WriteLine("even");
}

批改区

  • 结果: 错误
  • 主要问题:int.TryParse(...) 返回 bool,不能直接赋给 int
  • 参考答案:
if (int.TryParse(Console.ReadLine(), out int value))
    Console.WriteLine(value % 2 == 0 ? "even" : "odd");

入门-16 [编程]

输入三个整数,输出最大值

你的作答

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);

批改区

  • 结果: 错误
  • 主要问题:数组未初始化
  • 参考答案:
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 [代码结果]

写出输出:

for (int i = 0; i < 5; i++)
{
    if (i == 2) continue;
    if (i == 4) break;
    Console.Write(i);
}

你的作答 (待填写)

批改区 (待批改)

基础-11 [代码结果]

写出输出:

string s = null;
Console.WriteLine(s?.Length ?? -1);

你的作答 (待填写)

批改区 (待批改)

基础-12 [改错]

找出并修复问题:

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 [代码阅读]

输出是什么:

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 [代码阅读]

输出是什么:

int Add(int a, int b = 10) => a + b;
Console.WriteLine(Add(5));

你的作答 (待填写)

批改区 (待批改)

核心-12 [改错]

指出并修复:

interface IRun { void Go() { Console.WriteLine("go"); } }

你的作答 (待填写)

批改区 (待批改)

核心-13 [简答]

overridenew 隐藏成员的行为区别

你的作答 (待填写)

批改区 (待批改)

核心-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 [代码结果]

写出输出:

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 [代码结果]

判断是否死锁风险并说明一句原因:

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 [编程]

设计一个可并发调用的计数器类,要求线程安全

你的作答 (待填写)

批改区 (待批改)