14 KiB
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");
- 说明:
WriteLine中L需要大写。
入门-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 [简答]
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 [代码结果]
写出输出:
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 [编程]
设计一个可并发调用的计数器类,要求线程安全
你的作答 (待填写)
批改区 (待批改)