# C# 基础编程 面试题汇总(一)

本文档覆盖 C# 入门基础、面向对象、集合与泛型、文件 IO、WinForms/GDI+、进程线程、网络与 Socket 等核心知识点,每题含考察点与参考答案,适合面试复习使用。

目录

  • [第 1 部分:C# 入门基础(day01--day03)](# 入门基础(day01–day03))
  • [第 2 部分:枚举、数组与方法(day04--day06)](#第 2 部分:枚举、数组与方法(day04–day06))
  • [第 3 部分:面向对象核心(day07--day09)](#第 3 部分:面向对象核心(day07–day09))
  • [第 4 部分:集合、泛型与文件 IO(day10--day11)](#第 4 部分:集合、泛型与文件 IO(day10–day11))
  • [第 5 部分:WinForms、GDI+ 与多线程(day12--day13)](#第 5 部分:WinForms、GDI+ 与多线程(day12–day13))
  • [第 6 部分:网络编程与项目实战(day14--day15)](#第 6 部分:网络编程与项目实战(day14–day15))

第 1 部分:C# 入门基础(day01--day03)

本部分题目涵盖:编程语言与 .NET、软件架构与开发工具、变量与数据类型、运算符、计算机存储单位与进制、原码反码补码、字符串类型与转义字符、控制台输入输出、数据类型转换、流程控制、循环结构等主题。

编程语言与.NET

Q:什么是编程语言?计算机语言分为哪几大类?

考察点: 编程语言的概念与分类

参考答案:

  • 编程语言是用来定义计算机程序的语言,是一种被标准化的交流技巧,用来向计算机发出指令;计算机按照指令集中的指令执行。
  • 计算机语言的种类非常多,总体上分为三大类:
    1. 机器语言:一种指令集的体系,该指令集称机器码(machine code),是电脑的 CPU 可直接解读的数据,又称原生码(Native Code),与运行平台相关。
    2. 汇编语言:用于电子计算机、微处理器等可编程器件的低级语言,又称符号语言;用助记符(Mnemonics)代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。
    3. 高级语言:如 C#、C++、C、Java、Python 等。

Q:C、C++、Java、C# 四种高级语言各有什么特点?

考察点: 常见高级语言对比

参考答案:

  • C 语言:面向过程编程语言,由 Dennis Ritchie 在 20 世纪 70 年代中期发明;结构紧凑、操作简单,具有强大的运算和控制结构,适用于大量重复性工作的代码编写(如操作系统、编译器、网络协议等),也是许多其他编程语言的底层语言。
  • C++ 语言:基于 C 语言的面向对象编程语言,由 Bjarne Stroustrup 在 20 世纪 80 年代开始发明;完全兼容 C 语言并添加了面向对象的概念,常用于 3D 游戏制作、桌面应用、数据库等领域。
  • Java 语言:跨平台的面向对象编程语言,由 Sun Microsystems 公司在 20 世纪 90 年代推出;具有平台独立性、安全性、易用性等优点,广泛应用于 Web 开发、服务器端程序开发、移动设备开发等领域。
  • C# 语言:由微软(Microsoft)开发的一种通用面向对象的编程语言,运行于 .NET 平台之上;安全、稳定、简单、优雅,由 C 和 C++ 衍生而来,去掉了部分复杂特性,构想与 Java 非常相似。

Q:C# 语言有哪些特点?主要应用于哪些领域?

考察点: C# 语言特性与应用场景

参考答案:

  • 特点:C#(发音为 "C sharp")是微软开发的一种通用的面向对象的编程语言,结构化且易于学习,运行于 .NET 平台之上;是一种安全的、稳定的、简单的、优雅的高级程序设计语言;源于 C 语言系列,继承 C 和 C++ 强大功能的同时去掉了一些复杂特性。
  • 应用领域:C# 是 Windows 平台上的主要开发语言,用于创建 Console Application(控制台应用程序,基础阶段基本使用)、Desktop Application(桌面应用程序)、Web Application(网页应用程序)等。
  • 行业应用:在工业控制和自动化领域,上位机软件的开发至关重要,可用来监控和控制下位机设备、进行数据采集和处理;C# 在 Unity3D 开发中具有明显优势,是 Unity3D 官方推荐且主要支持的编程语言(易于学习、拥有大量现成库和强大的跨平台性能)。

Q:什么是 .NET?.NET 与 C# 是什么关系?

考察点: .NET 概念、.NET 与 C# 的关系

参考答案:

  • .NET 是一种用于构建多种应用的免费开源开发平台(开发者平台),可以使用 C# 编写 .NET 应用程序;.NET 为应用程序提供了开发和运行的环境。
  • .NET 类库在不同应用和应用类型中共享功能,无论构建哪种类型的应用,代码和项目文件看起来都一样,可以访问每个应用的相同运行时、API 和语言功能。
  • 关系:C# 仅仅是一个语言,是 .NET 平台下的一个程序设计语言,是运行在 .NET 平台上、用于创建应用程序的高级语言;C# 是 .NET 平台使用最多的开发语言。

Q:.NET 可以开发哪些类型的应用程序?

考察点: .NET 的应用范围

参考答案:

  • 可以使用 .NET 生成多种类型的应用程序和库,例如:Web 应用、Web API 和微服务、云中的无服务器函数、云原生应用、移动应用、桌面应用(Windows WPF、Windows 窗体)、通用 Windows 平台(UWP)、游戏、物联网(IoT)、机器学习、控制台应用、Windows 服务等。

Q:.NET Framework、.NET Core、.NET 5+ 三者有什么区别与联系?

考察点: .NET 版本演进

参考答案:

  • .NET Framework :Microsoft 最早发布的 .NET 版本,主要用于 Windows 桌面应用程序和 Web 应用程序的开发,包含大量类库和运行时环境;依赖特定的操作系统和框架版本,只能用于 Windows 操作系统,跨平台方面受到一定限制。
  • .NET Core:Microsoft 推出的跨平台开源 .NET 版本,与 .NET Framework 兼容,可以运行在 Windows、Linux 和 macOS 等操作系统上;更小、更快,支持云原生开发、微服务架构等现代应用程序开发模式。
  • .NET 5+:将 .NET Core 和 .NET Framework 进行整合的下一个主要版本,不再使用 "Core" 或 "Framework" 命名,采用统一的 ".NET" 命名;继续提供跨平台支持,并加强了对移动应用程序(Android、iOS)以及嵌入式设备的支持。
  • 演进过程:.NET 之前按 .NET Framework 版本发展,到 .NET Framework 4.8 结束;之后按 .NET Core 版本发展,到 .NET Core 3.1.3 结束;最后把两者合并,名称从 .NET 5.0 开始。

Q:为什么说 C# 在制造业与工控行业有优势?

考察点: C# 行业前景(课程观点)

参考答案:

  • 行业前景建议选择偏工控行业、桌面应用、Web 开发、物联网等方向。
  • 国家加快推进新型工业化,工业化中最重要的为制造业,而制造业中 C# 相关技术栈为 Number One。
  • 在工业控制和自动化领域,上位机软件的开发至关重要,可以用来监控和控制下位机设备、进行数据采集和处理;C# 是 Windows 平台上用于创建控制台、桌面等应用的主要开发语言。
  • C# 被广泛用于 Web 开发、桌面应用程序开发、游戏开发、移动应用程序开发以及后端服务开发等领域,发展前景好。

Q:机器语言、汇编语言与高级语言各有什么特点?

考察点: 语言层次与抽象程度

参考答案:

  • 机器语言:CPU 可直接解读的数据(机器码/原生码),无需翻译即可执行,但可读性差、编写困难,且与运行平台相关。
  • 汇编语言:低级语言/符号语言,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址,比机器语言易读、易记,但仍面向硬件。
  • 高级语言:如 C#、C++、C、Java、Python 等,接近自然语言和数学表达,易学易用,需要经过编译等步骤转换为机器可执行的代码(C# 经 csc.exe 编译为 .exe 再运行)。

软件架构与开发工具

Q:什么是 C/S 架构?

考察点: C/S 架构概念

参考答案:

  • C 是英文单词 "Client" 的首字母,即客户端;S 是 "Server" 的首字母,即服务器。
  • C/S 是 "Client/Server" 的缩写,即"客户端/服务器"模式,是一种软件系统体系结构(需要安装软件),是生活中很常见的架构。
  • 特点:一般建立在专用的网络上、小范围里的网络环境(局域网),局域网之间再通过专门服务器提供连接和数据交换服务;面向相对固定的用户群,对信息安全的控制能力很强,高度机密的信息系统适宜采用 C/S 结构。

Q:什么是 B/S 架构?

考察点: B/S 架构概念

参考答案:

  • B 是 "Browser"(浏览器)的首字母,S 是 "Server"(服务器)的首字母。
  • B/S 是 "Browser/Server" 的缩写,即"浏览器/服务器"模式,是随着 Internet 技术的兴起而出现的、不同于 C/S 结构的新体系架构。
  • 在这种结构下,用户操作与交互的界面是通过通用的浏览器(如 IE、Google Chrome、Firefox 等)来实现的;一般只要有操作系统和浏览器就行。

Q:C/S 架构与 B/S 架构有什么区别?

考察点: 两种架构对比

参考答案:

  1. 开发成本:C/S 开发成本高于 B/S。不同的客户端要开发不同的程序,调试和升级都需要在客户端完成;B/S 只需要升级服务器即可。
  2. 硬件环境:C/S 一般建立在专用的网络上、小范围里的网络环境(局域网);B/S 建立在广域网之上,不必是专门的网络硬件环境,一般只要有操作系统和浏览器就行。
  3. 安全要求:C/S 面向相对固定的用户群,对信息安全的控制能力很强,高度机密的信息系统适宜采用 C/S 结构;B/S 建立在广域网之上,对安全的控制能力相对弱,面向不可知的用户群。

Q:什么是 IDE?Visual Studio 有哪些功能?

考察点: 开发工具认知

参考答案:

  • IDE(Integrated Development Environment,集成开发环境)是用于程序开发的软件,一般包括代码编辑器、编译器、调试器和图形用户界面工具,为用户使用 C#、Java、C、C++、PHP、Python 等编程语言提供方便。
  • Visual Studio 是一款功能强大的开发人员工具,可用于在一个位置完成整个开发周期(编写、编辑、调试和生成代码,然后部署应用)。
  • 除代码编辑和调试外,Visual Studio 还包括编译器、代码完成工具、源代码管理、扩展和许多其他功能,以改进软件开发过程的每个阶段。

Q:解决方案、项目、.cs 文件之间是什么关系?

考察点: VS 项目结构

参考答案:

  • 一个解决方案 可以管理多个项目 ,一个项目 可以管理多个 .cs 文件
  • 项目是构成某个程序的全部组件的容器,该程序可能是控制台程序、基于窗口的程序或某种其它的程序。
  • 类比记忆:解决方案相当于"公司",项目相当于公司中的"部门",.cs(c sharp)文件相当于部门中的"员工"。

Q:简述 C# 程序从源代码到运行的执行过程。

考察点: C# 执行过程

参考答案:

  1. 创建 .cs 源文件(如 Test.cs),编写代码。
  2. 编译:通过 csc.exe 编译器编译 .cs 文件,将 .cs 文件编译为 .exe 文件(使用 DOS 通过 csc.exe 编译 .cs 文件)。
  3. 运行:运行(如双击)生成的 .exe 文件。
  • 注意事项:必须正确配置 csc.exe 的环境变量,才可以在任意目录中执行 csc.exe;csc.exe 编译器所在目录为 C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Q:环境变量 Path 的作用是什么?操作系统查找文件时按什么顺序进行?

考察点: 环境变量与文件查找顺序

参考答案:

  • 作用:配置了环境变量(Path)后,可以在任意文件夹中操作该文件(如 csc.exe)。
  • 查找顺序
    1. 在当前目录中查找要操作的文件,找到就执行;
    2. 当前目录中没有,则在环境变量 Path 属性对应的路径中寻找------先从用户变量的 Path 路径中寻找,找到就执行;
    3. 用户变量 Path 中没有找到,再在系统变量 Path 路径中寻找;
    4. 环境变量 Path 中都没有找到,报错。
  • 相关常用 DOS 命令:切换盘符(盘符名:)、查看目录内容(dir)、切换文件夹(cd,返回上层 cd..)、清屏(cls)、查看 IP 配置(ipconfig)、运行可执行文件(文件名.exe文件名)。

Q:注释的作用是什么?注释会被编译执行吗?

考察点: 注释的作用与分类

参考答案:

  • 作用:注释用于解释代码的功能或用途,方便阅读和理解代码,增强代码的可读性;也可以临时禁用某些代码。
  • 关键点:注释不会被编译及执行,被注释的内容对程序的执行没有影响。
  • 分类
    • 单行注释:以 // 开始,其后的所有内容不会被编译及执行;快速注释一行:选中要注释的行按 Ctrl + K + /
    • 多行注释:以 /* 开始、以 */ 结束,之间的所有内容不会被编译及执行;快速多行注释:Ctrl + Shift + /

Q:写出一个输出 "Hello World" 的完整 C# 控制台程序。

考察点: .cs 文件结构、控制台输出

参考答案:

  • 程序中所有的功能需要写在方法中(Main 方法为程序入口)。
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Demo01
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World");
            Console.ReadKey();
        }
    }
}

Q:Visual Studio 中常用的快捷键有哪些?

考察点: 开发效率工具

参考答案:

  • 文件操作:保存当前文件 Ctrl + S;复制 Ctrl + C;粘贴 Ctrl + V;剪切 Ctrl + X;撤销 Ctrl + Z。
  • 运行程序:F5(或 Fn + F5)。
  • 代码对齐:Ctrl + K + D;复制一行:Ctrl + D;切换窗口:Ctrl + Tab。
  • 快速注释/取消注释一行:Ctrl + K + /;快速多行注释:Ctrl + Shift + /。
  • 快速生成 Console.WriteLine():输入 cw 后按 Enter(回车)。

变量与数据类型

Q:什么是变量?变量存储在哪里?

考察点: 变量概念

参考答案:

  • 变量是用于存储数据的;"变"的含义是变量中存储的数据允许被改变。
  • 一句话、阿拉伯数字、一个英文字母、一串符号等都可以称为数据(如 123、字母 a、符号 <> 都是数据)。
  • 变量存储的数据在内存中。

Q:C# 中的数据类型分为哪两大类?各包含什么?

考察点: 值类型与引用类型

参考答案:

  • 值类型:包括整数类型(sbyte、byte、short、ushort、int、uint、long、ulong)、浮点类型(float、double、decimal)、布尔类型(bool)、字符类型(char)。
  • 引用类型:字符串类型(String)等等。
  • 值类型都有明确的取值范围、大小(占用的位/字节数)和默认值;每一种数据类型都有它自己所使用的场景(如数字类型的数据可以进行数学计算,而其它类型的数据可能不允许数学计算)。

Q:C# 中有哪些整数类型?各自的取值范围和大小是多少?

考察点: 整数类型

参考答案:

类型 描述 范围 大小
sbyte 8 位有符号整数 -128 到 127 8 位(1 字节)
byte 8 位无符号整数 0 到 255 8 位(1 字节)
short 16 位有符号整数 -32,768 到 32,767 16 位(2 字节)
ushort 16 位无符号整数 0 到 65,535 16 位(2 字节)
int 32 位有符号整数 -2,147,483,648 到 2,147,483,647 32 位(4 字节)
uint 32 位无符号整数 0 到 4,294,967,295 32 位(4 字节)
long 64 位有符号整数 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 64 位(8 字节)
ulong 64 位无符号整数 0 到 18,446,744,073,709,551,615 64 位(8 字节)
  • 使用频率最高的是 int(默认值 0)和 long(默认值 0L)。

Q:float、double、decimal 有什么区别?使用时有什么注意事项?

考察点: 浮点类型与 decimal

参考答案:

  • float:单精度浮点型,32 位(4 字节),范围约 ±1.5×10^-45 至 ±3.4×10^38(约 6-9 位数字),默认值 0.0F。
  • double:双精度浮点型,64 位(8 字节),范围约 ±5.0×10^-324 到 ±1.7×10^308(约 15-17 位数字),默认值 0.0D。
  • decimal:精确的十进制值,具有 28~29 个有效位数,128 位(16 字节),默认值 0.0M。
  • 注意事项:使用 float 类型存储浮点数时,必须添加后缀 f|F;使用 double 类型存储浮点数时,可以不添加 d|D;使用 decimal 类型存储浮点数时,必须添加 m|M。
csharp 复制代码
float f = 5.1f;
float f1 = 5.1F;
double d = 6.1;
double d1 = 6.1d;
double d2 = 6.1D;
decimal dc = 7.1m;
decimal dc1 = 7.1M;

Q:char 和 bool 类型的使用有什么注意事项?

考察点: 字符与布尔类型

参考答案:

  • char :字符类型,Unicode 字符,范围 U+0000 到 U+FFFF,16 位(2 字节),默认值 '\0';使用 char 类型时只能存储一个字符,并且必须由单引号 '' 修饰 ,如 char c = 'a';
  • bool :布尔类型,值只能是 True 或 False,8 位(1 字节),默认值 False,如 bool bo = true;
  • 注意:字符串必须由双引号 "" 修饰,字符必须由单引号 '' 修饰,两者不能混用。

Q:变量的命名规则有哪些?

考察点: 标识符命名规范

参考答案:

  • 变量名可包含字母、数字和下划线;不允许使用特殊字符(如英镑 #、短划线 -、美元符号 $)。
  • 变量名必须以字母、@、下划线开头,不能以数字开头(下划线、@ 用于特殊目的)。
  • 变量名不能是 C# 关键字或保留字,例如不允许声明 float float;string string;
  • 变量名多个单词建议使用小驼峰命名法,例如 studentAge。
  • 变量名中大小写敏感(严格区分大小写)。
  • 尽量使用有意义的变量名,便于理解代码的意图。

Q:变量的定义方式有哪两种?

考察点: 变量声明与赋值

参考答案:

  • 先声明,后赋值 :暂时不需要给变量赋值,随着程序运行,后面再给变量赋值。
    • 语法格式:数据类型 变量名;(数据类型和变量名之间有空格,必须以分号结尾)。
csharp 复制代码
int a;       // 声明一个 int 类型变量 a
int i, j;    // 声明多个变量
  • 声明的同时并赋值
    • 语法格式:数据类型 变量名 = 值;
csharp 复制代码
int a = 1;   // int 是数据类型,a 是变量名,1 是数据,= 表示赋值,分号必须有

Q:值类型变量的默认值分别是什么?

考察点: 默认值

参考答案:

  • 整数类型(sbyte、byte、short、ushort、int、uint、long、ulong)默认值为 0(long 记作 0L)。
  • float 默认值 0.0F;double 默认值 0.0D;decimal 默认值 0.0M。
  • bool 默认值 False。
  • char 默认值 '\0'。

Q:什么是数据?为什么说每一种数据类型都有它所使用的场景?

考察点: 数据与类型场景

参考答案:

  • 一句话、阿拉伯数字、一个英文字母、一串符号等都可以称为数据(例如:123、456、"我们都是中国人"、字母 a、符号 <> 都是数据)。
  • 数字类型的数据可以进行数学计算(加、减、乘、除等),而其它类型的数据可能不允许数学计算。
  • 因此,在存储和操作数据时,要根据数据的用途选择合适的类型,即每一种数据类型都有它自己所使用的场景。

Q:为什么说变量是"变"的?请用代码演示变量重新赋值。

考察点: 变量的可改变特性

参考答案:

  • 变量中存储的数据允许被改变,这就是"变"的含义。
  • 示例:光头强跟新女友说自己刚满 18,其实已经 81 了,可以使用一个变量的重新赋值完成。
csharp 复制代码
int age = 18;      // 光头强自己说的年龄
Console.WriteLine(age);
age = 81;          // 重新赋值,真实的年龄
Console.WriteLine(age);

Q:请定义变量存储以下同学信息并输出:姓名张三、年龄18、身高175.3、电话123456789、性别true。

考察点: 变量综合运用(类型选择)

参考答案:

  • 姓名用 string(字符串,双引号修饰);年龄用 int;身高用 double(浮点数);电话用 string;性别用 bool。
csharp 复制代码
string name = "张三";
int age = 18;
double height = 175.3;
string phone = "123456789";
bool gender = true;

Console.WriteLine($"姓名:{name},年龄:{age},身高:{height},电话:{phone},性别:{gender}");
Console.ReadKey();

运算符

Q:算术运算符有哪些?各有什么作用?

考察点: 算术运算符

参考答案:

  • 假设变量 A 的值为 10,变量 B 的值为 20:
    • +:把两个操作数相加(A + B 将得到 30)。
    • -:从第一个操作数中减去第二个操作数(A - B 将得到 -10)。
    • *:把两个操作数相乘(A * B 将得到 200)。
    • /:分子除以分母(B / A 将得到 2)。
    • %:取模运算符,整除后的余数(B % A 将得到 0)。
    • ++:自增运算符,整数值增加 1(A++ 将得到 11)。
    • --:自减运算符,整数值减少 1(A-- 将得到 9)。

Q:取模运算符 % 的作用是什么?有哪些典型应用场景?

考察点: 取模运算

参考答案:

  • % 是取模运算符,结果是两个数整除后的余数(如 B % A 即 20 % 10,结果为 0)。
  • 典型应用场景:
    1. 判断整除 :若 a % b == 0,则 a 能被 b 整除(如闰年判断中 year % 4 == 0)。
    2. 判断奇偶n % 2 == 0 为偶数,否则为奇数(如"打印 1~100 之间所有的奇数")。

Q:赋值运算符有哪些?复合赋值运算符的含义是什么?

考察点: 赋值运算符

参考答案:

  • 简单赋值运算符:=,把右边操作数的值赋给左边操作数(C = A + B 将把 A + B 的值赋给 C)。
  • 复合赋值运算符:
    • +=:加且赋值,C += A 相当于 C = C + A。
    • -=:减且赋值,C -= A 相当于 C = C - A。
    • *=:乘且赋值,C *= A 相当于 C = C * A。
    • /=:除且赋值,C /= A 相当于 C = C / A。
    • %=:求模且赋值,C %= A 相当于 C = C % A。

Q:关系运算符有哪些?运算结果是什么类型?

考察点: 关系运算符

参考答案:

  • 关系运算符:==(相等)、!=(不相等)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
  • 运算结果为布尔值(true / false)。
  • 例如 A=10、B=20 时:(A == B) 不为真;(A != B) 为真;(A > B) 不为真;(A < B) 为真;(A >= B) 不为真;(A <= B) 为真。

Q:逻辑运算符有哪些?各自的运算规则是什么?

考察点: 逻辑运算符

参考答案:

  • 假设变量 A 为布尔值 true,变量 B 为布尔值 false:
    • &&:逻辑与。如果两个操作数都非零(都为真),则条件为真。(A && B) 为假。
    • ||:逻辑或。如果两个操作数中有任意一个非零(为真),则条件为真。(A || B) 为真。
    • !:逻辑非。用来逆转操作数的逻辑状态,如果条件为真则逻辑非运算符将使其为假。!(A && B) 为真。

Q:=== 有什么区别?

考察点: 关系运算符与赋值运算符辨析

参考答案:

  • =:赋值运算符,把右边操作数的值赋给左边操作数,例如 int a = 10;
  • ==:关系运算符,检查两个操作数的值是否相等,如果相等则条件为真(结果为 bool),例如 if (a == 10)
  • 注意:在 if 等判断条件中误写 = 是把右边值赋给左边,属于常见笔误,判断相等应使用 ==

Q:如何判断某一年是否为闰年?请用逻辑运算符写出判断表达式。

考察点: 逻辑运算符综合应用

参考答案:

  • 闰年的判定(符合下面两个条件之一):
    1. 年份能够被 400 整除;
    2. 年份能够被 4 整除但不能被 100 整除。
  • 判断表达式:
csharp 复制代码
int year = 2024;
bool isLeap = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
Console.WriteLine(isLeap);   // 输出 true / false

Q:自增 ++ 与自减 -- 运算符的作用是什么?

考察点: 自增自减

参考答案:

  • ++:自增运算符,整数值增加 1(A++ 将得到 11)。
  • --:自减运算符,整数值减少 1(A-- 将得到 9)。
  • 常用于循环的增量/减量表达式(如 for 循环中的 i++)。

Q:请计算半径为 5 的圆的面积和周长(pi 取 3.14)。

考察点: 算术运算符应用

参考答案:

  • 面积公式:pi * r * r;周长公式:2 * pi * r。
csharp 复制代码
double pi = 3.14;
int r = 5;
double area = pi * r * r;
double perimeter = 2 * pi * r;
Console.WriteLine($"面积:{area},周长:{perimeter}");
Console.ReadKey();

Q:小明买了 3 件单价 35 元的 T 恤和 2 条单价 120 元的裤子,应付多少钱?打 8.8 折后呢?

考察点: 混合运算与赋值

参考答案:

csharp 复制代码
int shirt = 35;      // T恤单价
int trousers = 120;  // 裤子单价
double total = 3 * shirt + 2 * trousers;   // 应付金额
double discount = total * 0.88;            // 打 8.8 折
Console.WriteLine($"应付:{total} 元,8.8 折后:{discount} 元");
Console.ReadKey();

计算机存储单位与进制

Q:计算机中常用的存储单位有哪些?换算关系是什么?

考察点: 存储单位

参考答案:

  • 字节(Byte):计算机存储容量的基本单位之一,通常用来表示数据的大小或存储空间的大小;一个字节由 8 bit 组成。
  • 千字节(KB):1KB 等于 1024 字节,通常用于表示小型文件、短文本或图像的大小。
  • 兆字节(MB):1MB 等于 1024KB,或者 1048576 字节,通常用于表示中等大小的文件、照片、音频或视频文件的大小。
  • 换算关系:1Byte = 8bit;1MB = 1024KB = 1024 × 1024 Byte = 1024 × 1024 × 8 bit。

Q:什么是比特(bit)?为什么说它是计算机中最基本的存储单元?

考察点: 比特概念

参考答案:

  • 比特是计算机中最基本的存储单元,它代表数字信息的最小单位。
  • 比特只能表示两种状态之一,通常用 0 和 1 来表示。
  • 字节由 8 个比特组成(1Byte = 8bit)。

Q:为什么计算机采用二进制?

考察点: 二进制原理

参考答案:

  • 二进制数是计算机唯一能处理的数,任何数据传入计算机中都会先被转换成二进制数,然后再被计算机处理。
  • 二进制数每位只能是 0 或 1,满 2 进 1,与计算机"比特只能表示 0 和 1 两种状态"的存储机制一致。

Q:二进制数的特征是什么?如何表示?

考察点: 二进制表示

参考答案:

  • 二进制数每位都只能是 0 或 1,满 2 进 1。
  • 表示方式:0b101 或 0B101(前缀 0b/0B 表示二进制字面量)。

Q:二进制如何转换为十进制?

考察点: 二进制转十进制

参考答案:

  • 方法:从低位到高位计算,每一位乘 2 的相应次方(从 2^0 次方开始),然后把每一项结果加起来。
  • 示例:0b101 = 1×2^0 + 0×2^1 + 1×2^2 = 1 + 0 + 4 = 5。
  • 示例:0b1101 = 1×2^0 + 0×2^1 + 1×2^2 + 1×2^3 = 1 + 0 + 4 + 8 = 13。

Q:十进制如何转换为二进制?

考察点: 十进制转二进制

参考答案:

  • 方法:十进制数一直除以 2,直到商为 0 结束,把每次得到的余数倒序排列即可。
  • 示例:将 13 转换为二进制。
    • 13 ÷ 2 = 6 余 1;6 ÷ 2 = 3 余 0;3 ÷ 2 = 1 余 1;1 ÷ 2 = 0 余 1;余数倒序为 1101。
    • 结果:13(十进制)= 1101(二进制)。

Q:八进制和十六进制各有什么特点?C# 中能直接表示八进制吗?

考察点: 八进制与十六进制

参考答案:

  • 八进制:每一位只能用 0~7 来表示,满 8 进 1;在 C# 中不能直接表示。
  • 十六进制:逢 16 进 1,每一位的表示数据为 0~9,遇到两位数时用 A、B、C、D、E、F 分别表示 10、11、12、13、14、15。
  • 十六进制表示方式:0xab 或 0Xab。

Q:什么是机器数?什么是符号位?

考察点: 机器数与符号位

参考答案:

  • 机器数是将符号数字化的数(数字表示符号),是数字在计算机中的二进制表示形式。
  • 机器数通常是带有符号的(有正数和负数之分),计算机用最高位存放符号,最高位叫做符号位。
  • 正数的符号位为 0,负数的符号位为 1。
  • 例如:十进制 +7 用 1byte(8bit)存储,二进制为 0 0 0 0 0 1 1 1;-7 为 1 0 0 0 0 1 1 1
  • 以 1 个 sbyte 存储数字:最大值 0 1 1 1 1 1 1 1(127),最小值 1 0 0 0 0 0 0 0(-128)。

原码、反码、补码

Q:什么是原码?为什么原码不能直接用于负数的计算?

考察点: 原码及其缺陷

参考答案:

  • 十进制数字的二进制表现形式就是原码;原码最左边的一位就是符号位,0 为正,1 为负。
  • 原码的缺陷:直接使用原码计算负数会出现错误结果。
    • 例如 -5 + 2:1 0 0 0 0 1 0 1 + 0 0 0 0 0 0 1 0 = 1 0 0 0 0 1 1 1,得到 -7,而正确结果应为 -3。
    • 例如 -3 + 2:1 0 0 0 0 0 1 1 + 0 0 0 0 0 0 1 0 = 1 0 0 0 0 1 0 1,得到 -5,而正确结果应为 -1。
  • 为了解决原码不能用于计算负数的问题,反码出现了,作为负数计算的"救星"。

Q:什么是反码?正数和负数的反码如何转换?

考察点: 反码规则

参考答案:

  • 反码的转换规则:
    • 正数的反码是其本身(等于原码)。
    • 负数的反码是符号位保持不变,其余位取反(1 变成 0,0 变成 1)。
  • 示例(1byte):2 的原码、反码都是 0 0 0 0 0 0 1 0;-5 原码 1 0 0 0 0 1 0 1,反码 1 1 1 1 1 0 1 0

Q:反码有什么缺陷?

考察点: 反码的不足

参考答案:

  • 负数跨零进行计算时,计算得出的结果不正确,因此补码出现了,作为反码的"补"。
  • 示例 -3 + 3(用反码):3 的反码 0 0 0 0 0 0 1 1 + -3 的反码 1 1 1 1 1 1 0 0 = 1 1 1 1 1 1 1 1,转换为原码为 1 0 0 0 0 0 0 0,得到 -0,而正确结果应为 0。
  • 示例 -3 + 5(用反码):1 1 1 1 1 1 0 0 + 0 0 0 0 0 1 0 1 = 1 0 0 0 0 0 0 0 1,多出的一位舍弃后为 0 0 0 0 0 0 0 1,得到 1,而正确结果应为 2。

Q:什么是补码?如何求一个数的补码?

考察点: 补码规则

参考答案:

  • 补码规则:
    • 正数的补码是其本身
    • 负数的补码等于其反码 + 1
  • 示例(1byte):-3 原码 1 0 0 0 0 0 1 1,反码 1 1 1 1 1 1 0 0,补码 = 反码 + 1 = 1 1 1 1 1 1 0 1

Q:为什么计算机底层使用补码来存储和计算数据?

考察点: 补码的意义

参考答案:

  • 计算机底层使用二进制形式的补码来计算和存储数据。
  • 原因:原码不能用于负数的计算(负数用原码相加结果错误);反码在负数跨零进行计算时结果不正确(如 -3 + 3 得到 -0)。
  • 补码解决了上述问题,使负数与正数可以按统一的加法规则直接计算并得到正确结果;加法运算中多出的进位直接舍弃即可。

Q:请用补码演示 -3 + 3 的计算过程。

考察点: 补码加法

参考答案:

  • 3 的原码、反码、补码:0 0 0 0 0 0 1 1
  • -3 原码:1 0 0 0 0 0 1 1;反码:1 1 1 1 1 1 0 0;补码:1 1 1 1 1 1 0 1
  • 计算:
text 复制代码
  0 0 0 0 0 0 1 1
+ 1 1 1 1 1 1 0 1
-----------------
1 0 0 0 0 0 0 0 0
多出的一位舍弃:0 0 0 0 0 0 0 0 -> 0
  • 结果正确:-3 + 3 = 0。

Q:请用补码演示 -3 + 5 的计算过程。

考察点: 补码加法(溢出舍弃)

参考答案:

  • 5 的原码、反码:0 0 0 0 0 1 0 1
  • -3 原码:1 0 0 0 0 0 1 1;反码:1 1 1 1 1 1 0 0;补码:1 1 1 1 1 1 0 1
  • 计算:
text 复制代码
  0 0 0 0 0 1 0 1
+ 1 1 1 1 1 1 0 1
-----------------
1 0 0 0 0 0 1 0
多出的一位舍弃:0 0 0 0 0 0 1 0 -> 2
  • 结果正确:-3 + 5 = 2。

Q:为什么 1 个 sbyte(8 位有符号整数)的取值范围是 -128 ~ 127?

考察点: 符号位与取值范围

参考答案:

  • 8 位中最高位是符号位(0 为正、1 为负),剩余 7 位表示数值。
  • 最大值:符号位为 0,数值位全为 1,即 0 1 1 1 1 1 1 1,对应十进制 127。
  • 最小值:符号位为 1,数值位全为 0,即 1 0 0 0 0 0 0 0,对应十进制 -128。
  • 因此 sbyte 范围为 -128 到 127;同理 byte(无符号)范围为 0 到 255。

字符串类型与转义字符

Q:什么是字符串?字符串类型有什么特点?

考察点: 字符串类型

参考答案:

  • 字符串用于存储一系列的文本字符,字符串必须由双引号 " " 修饰。
  • 字符串类型为引用数据类型。
  • 在 C# 中,string 关键字是 String 的别名,String 和 string 是等效的(虽然建议使用别名 string)。
  • 示例:string ch = "S";string word = "String";string text = "This is a string.";

Q:Console.WriteLine(str) 与 Console.WriteLine("str") 有什么区别?

考察点: 变量与字面量的输出

参考答案:

  • Console.WriteLine(str) 输出 str 变量对应的值。
  • Console.WriteLine("str") 输出字符串 "str"(双引号内的字面内容)。
csharp 复制代码
String str = "abc";
Console.WriteLine(str);    // 输出 str 变量对应的值:abc
Console.WriteLine("str");  // 输出字符串 str

Q:字符串拼接有哪几种方式?

考察点: 字符串拼接

参考答案:

  • 多个字符串可以用 + 运算符连接。
csharp 复制代码
string firstName = "James";
string lastName = "Bond";
Console.WriteLine(firstName + lastName);   // 输出 JamesBond

string name = firstName + lastName;
Console.WriteLine(name);                   // 输出 JamesBond
  • 也可以使用占位符插值({0}{1})或 $ 字符串插值(见下题),它们都是连接字符串的更好方法。

Q:字符串插值有哪两种方式?有什么区别?

考察点: 字符串插值

参考答案:

  • 方式一:{} 占位符。{} 中添加数字,从 0 开始的整数,按顺序用后面的变量值填充。
csharp 复制代码
string firstName = "James";
string lastName = "Bond";
// 将 firstName 变量值填充到 {0},lastName 变量值填充到 {1}
Console.WriteLine("Mr {0}{1}", firstName, lastName);   // 输出 Mr JamesBond
  • **方式二: 与 {}**。包含特殊字符 ,用于标识插值的字符串;插值字符串是静态字符串和字符串变量的混合,其中字符串变量应放在 {} 括号中。
csharp 复制代码
Console.WriteLine($"Mr {firstName}{lastName}");        // 输出 Mr JamesBond

Q:字符串与数字使用 + 拼接时结果是什么?请分析以下代码的输出。

考察点: + 运算符的拼接规则

参考答案:

  • 数字与数字之间用 + 是数学加法;一旦数字与字符串用 + 拼接,数字会转换为字符串进行拼接。
csharp 复制代码
string name = "JamesBond";
int i = 100;
int j = 200;
Console.WriteLine(i + j);          // 300(数字相加)
Console.WriteLine(i + j + name);   // 300JamesBond(先相加再拼接)
Console.WriteLine(name + i + j);   // JamesBond100200(从左到右拼接)
Console.WriteLine(i + name);       // 100JamesBond
Console.WriteLine(i + name + j);   // 100JamesBond200

Q:什么是转义字符?常见的转义字符有哪些?

考察点: 转义字符

参考答案:

  • 转义字符是以 \ 开头的字符,后面跟一个或几个字符,其意思是将反斜杠 \ 后面的字符转变为另外的意义。
  • 将普通字符转换为具有特殊含义的字符:
    • \t:制表符(用于对齐,如表格格式输出)。
    • \n:换行符。
  • 将具有特殊含义的字符转换为普通字符:
    • \":双引号。
    • \\:反斜杠本身。
  • 示例:
csharp 复制代码
string path = "C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319";
string path1 = "C:/Windows/Microsoft.NET/Framework64/v4.0.30319";

string msg1 = "姓名\t手机号码\t年龄";
Console.WriteLine(msg1);
Console.WriteLine("光头强\t123456789\t28");

Console.Write("你好吗?\n");
Console.WriteLine("小老弟");

Q:@ 符号在字符串中有什么作用?

考察点: 原样字符串(verbatim string)

参考答案:

  • @ 用于忽略转义字符,使字符串按原样输出:
    1. 不需要对 \ 进行转义,路径可以直接书写。
    2. 不需要对 "" 进行转义 ,内容必须使用 """"(两个双引号)修饰。
csharp 复制代码
string str = @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319";
string str1 = @"""你好""";   // 输出 "你好"

Q:@ 如何实现字符串跨行?

考察点: 跨行字符串

参考答案:

  • 普通字符串跨行需要借助 + 拼接。
  • 使用 @ 修饰的字符串可以原样跨行书写。
csharp 复制代码
string str = "北京市" +
             "门头沟区" +
             "永定锦绣江文创园";

string str1 = @"北京市
                门头沟区
                永定锦绣江文创园";

Q:@ 在标识符(变量名)中的用法是什么?

考察点: 关键字转义为标识符

参考答案:

  • 使用关键字作为变量名时,可以将关键字用 @ 转义,使其成为合法的标识符。
csharp 复制代码
string @string = "你好啊";
int @int = 123;
Console.WriteLine(@string);
Console.WriteLine(@int);

Q:请使用变量存储并打印以下登记表内容(姓名、年龄、家庭住址、工资、婚否、手机号)。

考察点: 字符串与转义字符综合应用

参考答案:

csharp 复制代码
string name = "光头强";
int age = 32;
string address = "北京市光头区光头村";
double salary = 5000.5;
string married = "否";
string phone = "13777777777";

Console.WriteLine("姓名:\"光头强\"");
Console.WriteLine($"年龄:{age}");
Console.WriteLine("家庭住址:\"北京市光头区光头村\"");
Console.WriteLine($"工资:{salary}");
Console.WriteLine($"婚否:'{married}'");
Console.WriteLine($"手机号:{phone}");
  • 如需对齐输出,可使用 \t 制表符:
csharp 复制代码
Console.WriteLine($"姓名\t年龄\t家庭住址\t\t工资\t婚否\t手机号");
Console.WriteLine($"{name}\t{age}\t{address}\t{salary}\t{married}\t{phone}");

控制台输入输出

Q:Console.Write 与 Console.WriteLine 有什么区别?

考察点: 控制台输出

参考答案:

  • Console.Write():输出内容后不换行
  • Console.WriteLine():输出内容后换行
  • 快捷输入:输入 cw 后按 Enter(回车)可快速生成 Console.WriteLine()。
  • 注意:编写的内容必须在英文输入法状态下。

Q:Console.ReadKey 与 Console.ReadLine 有什么区别?

考察点: 控制台输入

参考答案:

  • Console.ReadKey():按下键盘任意按键,程序都会继续执行。
  • Console.ReadLine():只有按下键盘 Enter 键,程序才会继续向下执行;执行到 ReadLine() 方法时程序会阻塞(程序停止执行),直到用户按下 Enter 键。

Q:Console.ReadLine 的返回值是什么类型?

考察点: ReadLine 返回类型

参考答案:

  • 使用 ReadLine 方法接收控制台输入的数据,返回接收的数据类型为固定的 String 类型
  • 因此输入"数字"后,如果后续要参与数学计算,需要先用 Convert 类转换成对应的数字类型(如 Convert.ToInt32)。

Q:如何从控制台读取一个数字并参与计算?

考察点: 输入与类型转换结合

参考答案:

  • ReadLine 返回 string,先使用 Convert 方法转换为数字类型再参与运算。
csharp 复制代码
Console.WriteLine("请输入商品价格:");
double price = Convert.ToDouble(Console.ReadLine());   // string -> double
Console.WriteLine($"商品价格:{price}");
  • 整数示例:int num = Convert.ToInt32(Console.ReadLine());

Q:Console.ReadKey() 的作用是什么?一般放在程序什么位置?

考察点: ReadKey 作用

参考答案:

  • Console.ReadKey() 使程序停止执行,直到用户按下一个键为止。
  • 通常放在程序末尾(输出结束后),作用是让控制台窗口停留,方便查看程序运行结果;否则窗口可能一闪而过。
  • 示例:Console.WriteLine("Hello World"); Console.ReadKey();

Q:如何接收用户输入的姓名和年龄并输出?请写出完整代码。

考察点: 输入输出综合

参考答案:

csharp 复制代码
Console.WriteLine("请输入您的姓名:");
string name = Console.ReadLine();
Console.WriteLine("请输入您的年龄:");
string age = Console.ReadLine();
Console.WriteLine($"您的姓名为:{name},年龄为:{age}");

Console.ReadKey();

Q:在控制台提问用户"你喜欢的男生类型是什么?"并回应"哈,这么巧,我就是你说的XX类型"。

考察点: 输入与字符串插值应用

参考答案:

csharp 复制代码
Console.WriteLine("你喜欢的男生类型是什么?");
string type = Console.ReadLine();
Console.WriteLine($"哈,这么巧,我就是你说的{type}类型");
Console.ReadKey();

Q:分别提示用户输入姓名、年龄、生日、地址并输出信息。

考察点: 多次输入输出

参考答案:

csharp 复制代码
Console.WriteLine("请输入姓名:");
string name = Console.ReadLine();
Console.WriteLine("请输入年龄:");
string age = Console.ReadLine();
Console.WriteLine("请输入生日:");
string birthday = Console.ReadLine();
Console.WriteLine("请输入地址:");
string address = Console.ReadLine();

Console.WriteLine($"{name} 您的年龄是{age},生日为{birthday},地址为{address}");
Console.ReadKey();

数据类型转换

Q:常见数字类型的取值范围排序是怎样的?

考察点: 数值精度顺序

参考答案:

  • 常见数字类型取值范围排序:sbyte < short < int < long < float < double。
  • 注意:float 虽占 4 字节、long 占 8 字节,但按"取值范围/精度"排序时 float 排在 long 之后,即 long 可以隐式转换为 float。

Q:什么是隐式转换(自动类型转换)?有什么特点?

考察点: 隐式转换

参考答案:

  • 低精度变量值赋值给高精度变量时,由编译器进行自动转换,不需要程序员手动转换,这种情况称为隐式转换 (低转高),又称自动类型转换
  • 语法格式:高精度类型 变量名 = 低精度的变量;
csharp 复制代码
sbyte sb = 1;
short s = sb;
int i = s;
long l = s;
float f = l;
double d = f;

Q:什么是显式转换(强制类型转换)?有什么注意事项?

考察点: 显式转换

参考答案:

  • 高精度变量值赋值给低精度变量时,必须由程序员手动类型转换,这种需要在代码中明确写出来的类型转换称为显式转换 (高转低),又称强制类型转换
  • 语法格式:低精度类型 变量名 = (低精度类型) 高精度的变量;
csharp 复制代码
long l = 100;
int i = (int)l;

double d = 1.2;
float f = (float)d;
  • 注意事项:强制转换时,如果高精度存储的值超过了低精度的范围,会出现精度丢失;程序中应尽量避免高精度转为低精度。

Q:隐式转换与显式转换有什么区别?

考察点: 两种转换对比

参考答案:

对比项 隐式转换 显式转换(强制转换)
方向 低精度 → 高精度(低转高) 高精度 → 低精度(高转低)
是否手动 编译器自动完成,无需手动 必须由程序员手动写出 (类型)
风险 安全,不会丢失数据 可能精度丢失,应尽量避免

Q:Convert 类的作用是什么?常见的 Convert 方法有哪些?

考察点: Convert 类

参考答案:

  • C# 中提供了 Convert 类,该类可以进行显式类型转换,主要作用是将一种数据类型转换为另一种数据类型。
  • 常见方法:
    • ToString:将指定的值转换为与其等效的 string 表示形式(所有数据类型都可以转换为 string 类型)。
    • ToInt32:将指定的值转换为 32 位有符号整数。
    • ToDouble:将指定的值转换为双精度浮点数字。
    • ToSByte / ToByte / ToUInt32 / ToInt64 / ToUInt64:分别转换为对应位数的有符号/无符号整数。
    • ToSingle:转换为单精度浮点数字。
    • ToBoolean:转换为等效的布尔值。
    • ToChar:转换为 Unicode 字符。
    • ToDateTime:转换为 DateTime。
    • ToDecimal:转换为 Decimal 数字。

Q:如何将 string 类型转换为 int?如何将任意类型转换为 string?

考察点: string 与其它类型的互转

参考答案:

  • string → int:使用 Convert.ToInt32。
csharp 复制代码
string str = "100";
int i = Convert.ToInt32(str);
  • 任意类型 → string:使用 Convert.ToString(所有数据类型都可以转换为 string 类型)。
csharp 复制代码
int num = 100;
string s = Convert.ToString(num);

Q:什么是精度丢失?什么情况下会发生?

考察点: 精度丢失

参考答案:

  • 强制转换(显式转换)时,如果高精度存储的值超过了低精度类型的范围,会出现精度丢失。
  • 例如把 double 类型 1.2 强转为 int:int i = (int)1.2; 小数部分会被截断。
  • 因此程序中应尽量避免高精度转为低精度。

Q:综合案例:让用户输入姓名和语文、数学、英语三门课的成绩,输出总成绩与平均成绩。

考察点: Convert 综合应用

参考答案:

  • ReadLine 返回 string,需用 Convert 转为 double 再计算。
csharp 复制代码
Console.WriteLine("请输入姓名:");
string name = Console.ReadLine();
Console.WriteLine("请输入语文成绩:");
double chinese = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入数学成绩:");
double math = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入英语成绩:");
double english = Convert.ToDouble(Console.ReadLine());

double total = chinese + math + english;
double avg = total / 3;
Console.WriteLine($"{name},你的总成绩为{total}分,平均成绩为{avg}分");
Console.ReadKey();

Q:让用户输入 107653 秒,计算是几天几小时几分钟?

考察点: 类型转换与整除/取模应用

参考答案:

  • 1 天 = 24 小时 = 86400 秒;1 小时 = 3600 秒;1 分钟 = 60 秒。
csharp 复制代码
Console.WriteLine("请输入秒数:");
int seconds = Convert.ToInt32(Console.ReadLine());

int day = seconds / (24 * 3600);          // 天
int hour = seconds % (24 * 3600) / 3600;  // 小时
int minute = seconds % 3600 / 60;         // 分钟

Console.WriteLine($"{seconds}秒 = {day}天{hour}小时{minute}分钟");
Console.ReadKey();

流程控制

Q:程序中有哪几种流程控制结构?

考察点: 流程控制分类

参考答案:

  • 顺序结构:程序中最简单、最基本的流程控制,没有特定的语法结构,程序会按照代码的先后顺序依次执行。
  • 分支结构:根据不同的条件,执行不同分支的代码,从而得到不同的结果(if 系列、switch)。
  • 循环结构:根据条件重复做多次相同或有规律的事情(while、do while、for)。

Q:if 语句有哪几种形式?各自的语法是什么?

考察点: if 分支结构

参考答案:

  • if 语句(单分支)
csharp 复制代码
if (关系表达式)
{
    // 条件成立时执行的代码
}
  • if ... else(双分支)
csharp 复制代码
if (关系表达式)
{
    // 条件成立时执行
}
else
{
    // 条件不成立时执行
}
  • if ... else if ... else(多分支)
csharp 复制代码
if (关系表达式)
{
    // 代码
}
else if (关系表达式)
{
    // 代码
}
else
{
    // 代码
}

Q:if ... else if ... else 结构有什么注意事项?

考察点: 多分支注意点

参考答案:

  • else if 可以出现多次。
  • else 可以没有(可以只写 if + else if,不写最后的 else)。
  • 分支从上往下依次判断,一旦某个条件成立执行对应代码块,其余分支不再判断。

Q:if、if...else、if...else if...else 的判断次数有什么规律?

考察点: 分支判断次数

参考答案:

  • if 出现几次,就会进行几次的判断(每次都要判断)。
  • if ... else 适用于两种情况的判断,只判断一次。
  • if ... else if ... else 适用于多种情况的判断:最理想的情况判断一次,最不理想的情况判断(情况数 - 1)次。

Q:switch 结构的语法是什么?有什么特点?

考察点: switch 分支结构

参考答案:

csharp 复制代码
switch (变量 | 表达式 | 值)
{
    case 值:
        // 代码
        break;
    default:
        // 代码
        break;
}
  • 特点与注意事项:
    • switch 用于等值的判断。
    • case 可以出现多次;default 可以没有。
    • 每个 case 分支一般以 break 结束。
    • 示例:提示用户输入月份(如 1 月),输出月份对应的季节(3、4、5 月春季,6、7、8 月夏季,9、10、11 月秋季,12、1、2 月冬季)。

Q:switch 支持哪些数据类型?

考察点: switch 支持的类型

参考答案:

  • switch 用于等值判断,支持的数据类型:整数、字符、字符串、枚举、布尔、object

Q:if 与 switch 有什么区别?如何选择?

考察点: if 与 switch 对比

参考答案:

  • if 既可以做等值判断,也可以做非等值判断(如大于、小于、范围判断)。
  • switch 只能做等值判断。
  • 选择建议:等值判断且分支较多时用 switch 更清晰;需要范围、大小比较或复杂条件时用 if。

Q:什么是 if 的嵌套?使用时要注意什么?

考察点: 嵌套分支

参考答案:

  • if 的嵌套是指在一个 if(或 else)代码块中再写 if 结构(分支中还有分支)。
  • 例如"数学成绩比语文成绩好"的外层判断中嵌套"是否满分"等进一步判断。
  • 注意:嵌套会逐层判断,层数过多会降低代码可读性,应合理组织判断逻辑。

Q:Debug 调试有什么作用?使用步骤是什么?

考察点: Debug 调试

参考答案:

  • 作用:Debug(调试)是程序员必会技能之一;当代码较多时,可以使用 Debug 查看某段代码的执行过程、查看代码的执行流程,帮助定位问题。
  • 使用步骤
    1. 打断点:在需要程序停止执行的位置打断点。
    2. Debug 运行:以调试方式运行程序,程序会在断点处停下。
    3. 下一行:逐行执行代码,观察每行代码的执行结果和变量的变化。

Q:请用 if 系列分支实现:输入数学和语文成绩,数学好输出"数学成绩更好",语文好输出"数学成绩没有语文成绩好",相同输出"数学成绩和语文成绩一样好"。

考察点: 多分支综合应用

参考答案:

csharp 复制代码
Console.WriteLine("请输入数学成绩:");
double math = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入语文成绩:");
double chinese = Convert.ToDouble(Console.ReadLine());

if (math > chinese)
{
    Console.WriteLine("数学成绩更好");
}
else if (math < chinese)
{
    Console.WriteLine("数学成绩没有语文成绩好");
}
else
{
    Console.WriteLine("数学成绩和语文成绩一样好");
}
Console.ReadKey();

循环结构

Q:循环结构的作用是什么?它会提升运行效率吗?

考察点: 循环作用

参考答案:

  • 循环结构:根据条件重复做多次相同或有规律的事情。
  • 作用:通过循环结构可以大大减少代码量(无需重复书写相同的代码)。
  • 注意:循环只会提升开发效率 ,并不会提升运行效率

Q:while 循环的语法和执行流程是什么?

考察点: while 循环

参考答案:

csharp 复制代码
while (关系表达式)
{
    // 循环体
}
  • 执行流程:先执行条件表达式 (先判断,后执行)。
    1. 条件表达式结果为 true,执行循环体;循环体执行完成后,再次执行条件表达式。
    2. 条件表达式结果为 false,不执行循环体。
  • 特点:"先判断,后执行",循环体可能一次没执行,也可能执行多次。

Q:do while 循环的语法和执行流程是什么?

考察点: do while 循环

参考答案:

csharp 复制代码
do
{
    // 循环体
} while (关系表达式);
  • 执行流程:先执行循环体,再执行条件表达式 (先执行,后判断)。
    1. 条件表达式结果为 true,继续执行循环体。
    2. 条件表达式结果为 false,不再执行循环体。
  • 特点:"先执行,后判断",循环体至少执行一次

Q:while 与 do while 有什么区别?分别适合什么场景?

考察点: 两种循环对比

参考答案:

  • 判断时机不同:while 先判断后执行;do while 先执行后判断。
  • 最少执行次数不同:while 的循环体可能一次都不执行;do while 的循环体至少执行一次。
  • 适用场景:条件第一次判断就很可能不满足时用 while(如"要求用户只能输入 yes 或 no,否则一直重新输入");无论条件是否满足都至少要执行一次时用 do while(如菜单至少显示一次)。

Q:for 循环的语法和执行流程是什么?

考察点: for 循环

参考答案:

csharp 复制代码
for (表达式1; 表达式2; 表达式3)
{
    // 循环体
}
  • 表达式1:初始变量(int i = 0);表达式2:判断条件(i < 10);表达式3:增量 | 减量(i++)。
  • 执行流程:先执行且只执行一次表达式1
    1. 执行表达式2,获取表达式2 的 bool 类型结果值。
    2. 结果为 true,执行循环体,再执行表达式3,然后再次执行表达式2。
    3. 结果为 false,不执行循环体,循环结束。

Q:for 循环的特点和适用场景是什么?

考察点: for 循环适用场景

参考答案:

  • for 循环是使用频率较高的一种循环结构,因为 for 循环代码结构更加紧凑(初始、判断、增量集中在一条语句中)。
  • 主要使用场景:固定次数的循环(如输出 20 个 HelloWorld、计算 1~100 之和、打印 1~100 之间的奇数等)。

Q:break 关键字在循环中的作用是什么?

考察点: break

参考答案:

  • break 语句用在循环语句体中,表示终止 while、do while、for 循环。
  • 循环体中执行到 break 时,直接终止循环(不再执行后续循环体,也不再进行条件判断)。
  • 示例:循环录入 5 个人的年龄,如果录入的数据出现负数或大于 100 的数则结束循环。

Q:continue 关键字在循环中的作用是什么?

考察点: continue

参考答案:

  • continue 语句用在循环语句体中,用于终止某次循环过程。
  • 作用:跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定(并不结束整个循环)。
  • 示例:使用 continue 打印 1~100 之间所有的奇数;打印 1~100 之间除能被 7 整除之外的所有整数的和。

Q:break 和 continue 有什么区别?

考察点: break 与 continue 对比

参考答案:

  • break:终止(跳出)整个循环,循环到此结束,不再继续。
  • continue:只终止当前这一次循环(跳过本次循环中 continue 之后尚未执行的语句),然后继续下一次循环的条件判断,循环并没有结束。
  • 简单记忆:break 是"跳出循环",continue 是"跳过本次"。

Q:什么是循环的嵌套?请写出打印九九乘法表的代码。

考察点: 循环嵌套

参考答案:

  • 循环的嵌套:循环体中还存在循环(外层循环每执行一次,内层循环执行一轮)。
csharp 复制代码
for (int i = 1; i <= 9; i++)
{
    for (int j = 1; j <= i; j++)
    {
        Console.Write($"{j} * {i} = {j * i}\t");
    }
    Console.WriteLine();
}
Console.ReadKey();

Q:请用循环计算 1~100 之间所有数字的和并输出。

考察点: 循环与累加

参考答案:

csharp 复制代码
int sum = 0;
for (int i = 1; i <= 100; i++)
{
    sum += i;
}
Console.WriteLine($"1~100 的和为:{sum}");
Console.ReadKey();
  • 也可以使用 while 循环实现同样的累加。

Q:请使用 continue 打印 1~100 之间所有的奇数。

考察点: continue 应用

参考答案:

csharp 复制代码
for (int i = 1; i <= 100; i++)
{
    if (i % 2 == 0)
    {
        continue;   // 偶数跳过本次循环,不输出
    }
    Console.WriteLine(i);
}
Console.ReadKey();

Q:请用 do while 与 switch 实现一个简易超市管理系统(录入商品、查看商品、退出系统)。

考察点: do while、switch、break 综合应用

参考答案:

csharp 复制代码
Console.WriteLine("-------------------------");
Console.WriteLine("欢迎使用简易超市管理系统");
Console.WriteLine("-------------------------");
bool started = true;
string name = null;
double price = 0.0;
do
{
    Console.WriteLine("\n请选择您的操作:");
    Console.WriteLine("   1.录入商品");
    Console.WriteLine("   2.查看商品");
    Console.WriteLine("   3.退出系统");
    int num = Convert.ToInt32(Console.ReadLine());
    switch (num)
    {
        case 1:
            Console.WriteLine("\n请输入商品名称:");
            name = Console.ReadLine();
            Console.WriteLine("请输入商品价格:");
            price = Convert.ToDouble(Console.ReadLine());
            break;
        case 2:
            Console.WriteLine($"\n商品名称:{name},商品价格:{price}");
            break;
        case 3:
            Console.WriteLine("感谢使用,再见!");
            started = false;   // 改变循环条件,退出 do while
            break;
        default:
            Console.WriteLine("输入有误");
            break;
    }
} while (started);
Console.ReadKey();

相关推荐
CODER030417 分钟前
win11系统编译安装cuda版llama-cpp-python(踩完所有的坑)
开发语言·python·llama
神仙别闹22 分钟前
基于C语言+SQLite 实现(控制台+图形界面)图书管理系统
c语言·开发语言·sqlite
祀爱32 分钟前
C# MQTT 连接服务
后端·c#·.net
何以解忧,唯有..34 分钟前
LangChain 模型调用方法总结:invoke、batch、stream 的入参与出参
开发语言·langchain·batch
SamChan9039 分钟前
Python+ReportLab自动生成PDF翻译质量审计报告:从数据到可视化的完整方案
开发语言·python·ai·pdf·wpf
深念Y39 分钟前
Makefile vs go run:Go 项目构建方式对比
java·开发语言·golang·k8s·编译·流水线·cicd
whcyhhh40 分钟前
头歌实践教学平台:数据科学与大数据技术导论(十八2)
大数据·开发语言·python
一晌小贪欢41 分钟前
Python办公18:PDF 转 Word——利用 OCR 技术批量提取不可编辑的文档内容
开发语言·python·pdf·word·excel·数据可视化·python办公
我命由我123451 小时前
Android Camera - 获取当前设备屏幕的旋转角度、保存帧到外部存储的私有空间
android·java·开发语言·java-ee·android jetpack·android-studio·android runtime