C#教程1:基础入门
1. C#简介和开发环境搭建
1.1 C#简介
诞生背景与发展历程
C# 是微软公司在 2000 年推出的一种面向对象的编程语言,是微软 .NET 战略的重要组成部分。它结合了 C++的高效性与 Visual Basic 的易用性,既可用于 Windows 应用程序开发,也能在 Web 开发、游戏开发(如Unity 游戏引擎广泛使用 C# 进行脚本编写)等领域大展身手。随着.NET 平台的不断演进,C# 语言也在持续更新,新增了许多实用的功能和改进,以适应现代软件开发的需求。

语言特点
- 面向对象 :支持封装、继承、多态等面向对象特性,便于代码的组织、复用与扩展。例如,通过定义类来创建具有特定属性和行为的对象,模拟现实世界中的实体。
- 类型安全 :在编译和运行时会对数据类型进行严格检查,减少因类型错误导致的程序崩溃等意外情况。
- 跨平台(通过 .NET Core 等实现) :借助 .NET Core 等技术,C# 开发的应用可以运行在 Windows、Linux、macOS 等多种操作系统上,拓宽了其应用范围。
应用场景
- Windows 桌面应用 :利用 Windows 窗体(WinForms)或 WPF(Windows Presentation Foundation)开发出功能丰富的桌面软件,如办公软件、工具软件等。
- Web 应用开发 :结合 ASP.NET 框架,能够构建动态网站、Web 服务等,处理客户端请求并返回相应的动态内容。
- 游戏开发 :在 Unity 游戏引擎中,C# 是主要的脚本编写语言,开发者可以使用它来控制游戏角色的行为、场景切换、碰撞检测等各个方面,创造出精彩的游戏体验。
1.2 VS(Visual Studio)环境搭建
下载与安装
- 选择合适的版本 :Visual Studio 有多个版本,如社区版(免费,功能较为全面,适合个人开发者及小型团队)、专业版(付费,提供更多高级功能)、企业版(付费,面向大型企业,包含最全面的功能集)。对于初学者,推荐使用社区版。
- 下载地址 :访问微软官方网站(https://visualstudio.microsoft.com/),在页面上找到对应版本的下载链接,根据自己的操作系统(如 Windows)进行下载。
- 安装步骤 :运行下载好的安装程序,启动 Visual Studio 安装器。在安装器界面中,选择要安装的 Visual Studio 版本,然后在 “工作负载” 选项卡中,勾选 “.NET 桌面开发”(用于开发 Windows 桌面应用)和 “ASP.NET 和 Web 开发”(用于 Web 相关项目)等相关工作负载,以确保安装 C# 开发所需的组件。点击 “安装” 按钮,等待安装过程完成,期间安装程序会自动下载并安装所选工作负载对应的各种工具、模板等资源。
安装后配置
- 启动 Visual Studio :安装完成后,首次启动 Visual Studio 时,会提示进行一些基本的设置,如选择默认的编辑器主题(浅色、深色等)、设置语言等,按照个人喜好进行配置即可。
- 更新组件 :Visual Studio 会自动检查是否有可用的更新,建议及时更新到最新版本,以获取最新的功能和修复已知问题。
1.3 VS 创建项目、运行、调试
创建项目
- 打开 Visual Studio :在主界面中,点击 “创建新项目”。

- 选择项目类型 :在弹出的对话框中,搜索 “C#”,然后根据要开发的应用类型选择对应的模板。例如,若要创建一个简单的控制台应用程序,就选择 “控制台应用” 模板;若要开发 Windows 窗体应用,就选择 “Windows 窗体应用” 模板。选中模板后,点击 “下一步”。

- 配置项目信息 :输入项目名称(如 “MyFirstCSharpApp”)、选择项目保存位置,可进一步设置解决方案名称(一般默认与项目名称相同)等,点击 “下一步” 按钮

在下一个页面选择.net版本,然后点击“创建”,Visual Studio 就会根据所选模板生成一个基础的项目框架,包含必要的文件和文件夹结构。

编写代码与运行
- 编写代码 :以控制台应用程序为例,在生成的项目中,会有一个 “Program.cs” 文件打开,里面包含了一个简单的 “Hello World!” 程序代码框架。可以在代码编辑区修改代码,例如将
Console.WriteLine("Hello World!");
修改为Console.WriteLine("Welcome to C# Programming!");
,实现输出不同的文本内容。

- 运行项目 :点击 Visual Studio 界面顶部菜单栏中的 “调试” 菜单,选择 “开始执行(不调试)”(快捷键通常是 Ctrl + F5),或者直接点击工具栏上的运行按钮(绿色箭头图标)。对于控制台应用,运行后会在一个新的命令提示符窗口中输出相应的结果,如刚才修改后的文本内容 “Welcome to C# Programming!”。如果是 Windows 窗体应用,运行后会展示窗体界面。

调试
- 设置断点 :在代码编辑区的行号处单击,添加一个断点(红色圆点标识)。当程序运行到该行代码时,会暂停执行,方便检查变量值、程序流程等。
- 启动调试 :点击 “调试” 菜单,选择 “开始调试”(快捷键 F5),程序会在到达断点处暂停。此时,可以通过鼠标悬停在变量上查看变量的当前值,或者使用 “监视” 窗口(在调试菜单中找到 “窗口”->“监视” 打开)添加变量进行跟踪观察。

- 单步执行 :在调试暂停状态下,使用 “步进”(F10)和 “步过”(F11)等功能进行单步执行代码,查看每一步代码执行后的状态变化,便于排查程序中的逻辑错误。例如,F10 是逐行执行代码,而 F11 可以进入函数内部执行。

2. C#基础语法
2.1 数据类型
数据类型
C# 是一种强类型语言
变量必须先声明类型才能使用。
C# 的数据类型分为值类型和引用类型。
值类型
- 整型:包括
sbyte
、byte
、short
、ushort
、int
、uint
、long
、ulong
。例如,int
是最常用的 32 位有符号整数类型。 - 浮点型:
float
(单精度,32 位)、double
(双精度,64 位)。例如,科学计算中常用double
以获得更高精度。 - 小数型:
decimal
,用于金融等领域,精度高,128 位。 - 布尔型:
bool
,只有true
和false
两个值。 - 字符型:
char
,用于表示 Unicode 字符,占 16 位。
引用类型
- 字符串型:
string
,用于表示文本,是不可变的字符序列。 - 数组型:如
int[]
,存储一组同类型数据,数组本身是对象。 - 类、接口、委托:用户自定义的复杂数据结构。
2.2 变量
变量是存储数据的容器,声明时需指定类型和名称
变量的名称一般使用表示具体含义的英文单词来表示
int age = 20; // 声明整型变量并初始化
float height = 1.75; // 声明浮点类型变量并初始化
double weight = 65.5; // 声明浮点类型变量并初始化
bool isStudent = true; // 声明布尔类型变量并初始化
char grade = 'A'; //声明字符类型的变量
string name = "Isaac Newton"; //声明字符串类型的变量
// 创建一个整型数组,用于存储距离
int[] distances = new int[5]; // 创建一个长度为5的数组
// 初始化数组元素
distances[0] = 10; // 第一个距离
distances[1] = 20; // 第二个距离
distances[2] = 30; // 第三个距离
distances[3] = 40; // 第四个距离
distances[4] = 50; // 第五个距离
注意:变量可以在声明的时候不初始化,但是在使用之前一定要初始化!
int number; // 定义了一个变量
Console.WriteLine(number); // 错误:使用了未初始化的变量
number = 2.0
Console.WriteLine(number); // 没问题:变量已经被初始化
float pi = 3.14 // 定义了一个变量,同时进行了初始化
Console.WriteLine(pi); // 没问题:变量在被定义的同时就进行了初始化
2.3 运算符
算术运算符
+
:加法,如3 + 5
得 8。-
:减法,如10 - 4
得 6。*
:乘法,如6 * 7
得 42。/
:除法,整数相除结果为整数(舍去小数),浮点数相除结果为浮点数。%
:取模,求余数,如10 % 3
得 1。
int a = 10, b = 3;
Console.WriteLine(a + b); // 输出 13
Console.WriteLine(a - b); // 输出 7
Console.WriteLine(a * b); // 输出 30
Console.WriteLine(a / b); // 输出 3(整数除法)
Console.WriteLine(a % b); // 输出 1
关系运算符
用于比较两个值的大小关系,结果为布尔值。
==
:等于,如5 == 5
为true
。!=
:不等于,如5 != 3
为true
。>
:大于。<
:小于。>=
:大于等于。<=
:小于等于。
int x = 8, y = 5;
Console.WriteLine(x > y); // 输出 True
Console.WriteLine(x == y); // 输出 False
逻辑运算符
用于组合多个布尔表达式。
&&
:逻辑与,当且仅当两边都为真时结果为真。||
:逻辑或,只要有一边为真结果就为真。!
:逻辑非,取反。
bool p = True, q = False;
Console.WriteLine(p && q); // 输出 False
Console.WriteLine(p || q); // 输出 True
Console.WriteLine(!p); // 输出 False
位运算符
对数据的二进制位进行操作。
&
:按位与,两位都为 1 时结果位为 1。|
:按位或,只要有一位为 1 结果位就为 1。^
:按位异或,两位不同结果位为 1。~
:按位取反,将每一位取反。<<
:左移,将二进制位向左移指定位数,右边补 0。>>
:右移,将二进制位向右移,左边补符号位。
int m = 5; // 二进制 101
int n = 3; // 二进制 011
Console.WriteLine(m & n); // 输出 1(101 & 011 = 001)
Console.WriteLine(m | n); // 输出 7(101 | 011 = 111)
Console.WriteLine(m ^ n); // 输出 6(101 ^ 011 = 110)
Console.WriteLine(~m); // 输出 -6(按位取反加 1 为补码)
Console.WriteLine(m << 1); // 输出 10(101 左移一位为 1010)
2.4 分支与循环
2.4.1 分支结构
if 语句
根据条件是否成立执行不同代码块。
int score = 85;
if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score >= 80)
{
Console.WriteLine("良好");
}
else if (score >= 70)
{
Console.WriteLine("中等");
}
else if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("不及格");
}
switch 语句
适用于多分支且条件为简单等于判断的情况。
string day = "Monday";
switch (day)
{
case "Monday":
Console.WriteLine("今天是周一");
break;
case "Tuesday":
Console.WriteLine("今天是周二");
break;
case "Wednesday":
Console.WriteLine("今天是周三");
break;
default:
Console.WriteLine("其他日子");
break;
}
2.4.2 循环结构
for 循环
重复执行代码块,次数通常已知。
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
// 输出 1 到 5
while 循环
先判断条件,条件为真时执行循环体。
int count = 1;
while (count <= 3)
{
Console.WriteLine("循环次数:" + count);
count++;
}
do…while 循环
先执行循环体,再判断条件。
int num = 10;
do
{
Console.WriteLine(num);
num--;
} while (num > 0);
// 输出 10 到 1
2.5 break 和 continue 关键字
break
用于终止最近的循环或 switch 语句,跳出整个结构。
for (int i = 1; i <= 10; i++)
{
if (i == 5)
{
break; // 当 i 为 5 时终止循环
}
Console.WriteLine(i);
}
// 输出 1、2、3、4
continue
跳过当前循环的剩余代码,直接开始下一次循环。
for (int i = 1; i <= 5; i++)
{
if (i % 2 == 0)
{
continue; // 跳过偶数的输出
}
Console.WriteLine(i);
}
// 输出 1、3、5
2.6 项目实战
2.6.1 猜数字小游戏
项目目标
通过随机生成一个数字,让用户输入猜测的数字,程序判断用户输入的数字与随机生成的数字的大小关系,直到用户猜中为止。
涉及知识点
- 变量的声明与使用
- 随机数生成
- 条件判断
- 循环结构
- 用户输入输出
实现代码
Random random = new Random(); // 创建随机数生成器
int targetNumber = random.Next(1, 101); // 生成1到100之间的随机数
int userGuess; // 定义用于保存用户输入的猜测的变量
int attemptCount = 0; // 定义用于记录用户猜测次数的变量
Console.WriteLine("欢迎来到猜数字游戏!"); // 输出欢迎信息
Console.WriteLine("我已经想好了一个1到100之间的数字,你能猜出来吗?");// 输出游戏目的
while (true) // 无限循环,直到用户猜对为止
{
Console.Write("请输入你的猜测:"); // 输出提示信息
string input = Console.ReadLine(); // 读取用户输入
if (int.TryParse(input, out userGuess)) // 尝试将用户输入转换为整数
{
attemptCount++; // 记录用户猜测次数
if (userGuess == targetNumber) // 如果用户输入与目标数字相同
{
Console.WriteLine($"恭喜你,猜对了!这个数字是 {targetNumber}。");
Console.WriteLine($"你一共猜了 {attemptCount} 次。");
break; // 跳出循环
}
else if (userGuess < targetNumber) // 如果用户输入小于目标数字
{
Console.WriteLine("太小了,再试一次!");
}
else // 如果用户输入大于目标数字
{
Console.WriteLine("太大了,再试一次!");
}
}
else // 如果用户输入不是整数
{
Console.WriteLine("请输入有效的数字!");
}
}
Console.WriteLine("游戏结束,谢谢参与!"); // 输出游戏结束信息
项目说明
- 使用
Random
类生成一个 1 到 100 的随机整数作为目标数字。 - 通过
while
循环不断接收用户输入。 - 使用
int.TryParse
方法安全地将用户输入的字符串转换为整数,避免输入非数字导致程序崩溃。 - 根据用户输入的数字与目标数字的大小关系,给出相应提示。
- 当用户猜中数字时,退出循环并显示猜的次数。
2.6.2 九九乘法表
项目目标
输出一个格式化的九九乘法表,展示 1 到 9 的乘法运算结果。
涉及知识点
- 循环结构(嵌套循环)
- 条件判断
- 字符串格式化输出
实现代码
Console.WriteLine("九九乘法表:");
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write($"{j}×{i}={i * j}\t");
}
Console.WriteLine();
}
项目说明
- 外层
for
循环控制乘法表的行数,从 1 到 9。 - 内层
for
循环控制每行的列数,列数与当前行数相等。 - 使用字符串插值(
$
)格式化输出乘法表达式和结果。 - 每行输出完成后,使用
Console.WriteLine()
换行。
2.6.3 猜拳游戏
项目目标
模拟一个简单的猜拳游戏,用户与计算机进行猜拳,统计胜负次数。
实现代码
Random random = new Random(); // 创建随机数生成器
int userChoice, computerChoice; // 用户选择和电脑选择
int userWins = 0, computerWins = 0, draws = 0; // 记录用户、电脑、平局的次数
string[] choices = { "石头", "剪刀", "布" }; // 添加选项数组
Console.WriteLine("欢迎来到猜拳游戏!");
Console.WriteLine("规则:1=石头,2=剪刀,3=布");
while (true) // 循环
{
Console.Write("请输入你的选择(1-3),输入0结束游戏:"); // 提示信息
string input = Console.ReadLine(); // 读取用户输入
if (int.TryParse(input, out userChoice)) // 尝试转换为整数
{
if (userChoice == 0) // 输入0结束游戏
{
break; // 跳出循环,结束游戏
}
else if (userChoice < 1 || userChoice > 3) // 输入不在1-3之间
{
Console.WriteLine("请输入1-3之间的数字!"); // 提示信息
continue; //跳过下面的代码,继续游戏
}
computerChoice = random.Next(1, 4); // 生成1到3的随机数
// 输出用户和电脑的选择
Console.WriteLine($"你出了:{choices[userChoice - 1]},电脑出了:{choices[computerChoice - 1]}");
// 判断胜负
if (userChoice == computerChoice) // 平局
{
Console.WriteLine("平局!");
draws++; // 记录平局次数
}
else if ((userChoice == 1 && computerChoice == 2) ||
(userChoice == 2 && computerChoice == 3) ||
(userChoice == 3 && computerChoice == 1)) // 判断玩家是否胜利
{
Console.WriteLine("你赢了!");
userWins++;
}
else // 玩家输了
{
Console.WriteLine("电脑赢了!");
}
}
else // 输入不是整数
{
Console.WriteLine("请输入有效的数字!");
}
}
// 输出游戏结果
Console.WriteLine("\n游戏结束,统计结果:");
Console.WriteLine($"你赢了 {userWins} 次,电脑赢了 {computerWins} 次,平局 {draws} 次");
项目说明
- 使用
Random
类生成计算机的猜拳选择(1-3,分别代表石头、剪刀、布)。 - 用户通过输入数字选择自己的猜拳动作。
- 根据用户和计算机的选择判断胜负,规则为:石头胜剪刀,剪刀胜布,布胜石头。
- 使用
while
循环持续游戏,直到用户输入 0 结束。 - 统计并输出用户的胜次、电脑的胜次和平局次数。
2.7 购物清单管理
项目目标
使用数组和控制台输入输出,实现一个简单的购物清单管理系统。
涉及知识点
- 数组的声明与使用
- 循环结构(
while
循环) - 条件判断(
if
语句) - 变量的声明与使用
- 用户输入输出
实现代码
string[] items = new string[5]; // 存储购物清单中的商品名称
decimal[] prices = new decimal[5]; // 存储商品价格
int count = 0; // 当前购物清单中商品的数量
// 打印提示信息
Console.WriteLine("欢迎使用购物清单管理系统!");
Console.WriteLine("请输入以下操作的数字:");
Console.WriteLine("1. 添加商品");
Console.WriteLine("2. 显示所有商品");
Console.WriteLine("3. 退出程序");
// 循环处理用户输入
while (true)
{
Console.Write("\n请选择操作:");
string choice = Console.ReadLine(); // 读取用户输入
if (choice == "1")
{
// 添加商品
if (count < 5)
{
Console.Write("请输入商品名称:");
items[count] = Console.ReadLine();
Console.Write("请输入商品价格:");
string priceInput = Console.ReadLine();
decimal price;
// 尝试将输入的字符串转换为decimal
if (decimal.TryParse(priceInput, out price))
{
prices[count] = price;
count++;
Console.WriteLine("商品添加成功!");
}
else
{
Console.WriteLine("输入的价格无效,必须输入数字!");
}
}
else
{
Console.WriteLine("购物清单已满,无法添加更多商品!");
}
}
else if (choice == "2") // 显示所有商品
{
if (count > 0)
{
Console.WriteLine("\n购物清单:");
decimal total = 0;
for (int i = 0; i < count; i++)
{
Console.WriteLine($"{i + 1}. {items[i]} - 价格:{prices[i]}");
total += prices[i];
}
Console.WriteLine($"总商品数:{count},总价:{total}");
}
else
{
Console.WriteLine("购物清单为空!");
}
}
else if (choice == "3")
{
// 退出程序
Console.WriteLine("感谢使用购物清单管理系统!");
break;
}
else
{
Console.WriteLine("无效的操作,请重新选择!");
}
}
项目说明
- 数组存储:使用两个数组
items
和prices
存储商品名称和价格,count
记录当前商品数量。 - 主循环:通过
while (true)
循环持续显示菜单,根据用户输入执行不同操作。 - 添加商品:检查购物清单是否已满,输入商品信息并验证价格是否有效,有效则添加商品。
- 显示商品:遍历数组输出商品信息,计算并显示总商品数和总价。
- 退出程序:输出感谢信息并退出循环。
- 输入验证:对用户输入进行验证,确保操作和价格输入有效。
2.8 作业
作业目标
- 巩固 C# 基础语法知识,包括数据类型、变量、运算符、分支和循环结构。
- 提高编程实践能力,学会将理论知识应用于实际问题解决。
- 培养代码规范和注释习惯,提高代码可读性。
作业内容
项目:学生成绩统计与分析
需求描述
编写一个 C# 程序,实现以下功能:
- 输入 5 位学生的姓名和对应的成绩(成绩范围 0-100)。
- 计算并输出所有学生成绩的总分、平均分。
- 找出成绩最高的学生和成绩最低的学生,输出他们的姓名和成绩。
- 根据成绩划分等级:
- 90 分及以上为 A 级
- 80-89 分为 B 级
- 70-79 分为 C 级
- 60-69 分为 D 级
- 60 分以下为 E 级
- 统计每个等级的学生人数,并输出统计结果。
提示
- 使用数组或列表存储学生姓名和成绩。
- 运用循环结构完成输入和计算。
- 使用条件判断完成等级划分。
- 注意代码的规范性和可读性,添加必要的注释。
输出示例
请输入第 1 位学生的姓名:张三
请输入张三的成绩:85
请输入第 2 位学生的姓名:李四
请输入李四的成绩:92
请输入第 3 位学生的姓名:王五
请输入王五的成绩:78
请输入第 4 位学生的姓名:赵六
请输入赵六的成绩:65
请输入第 5 位学生的姓名:钱七
请输入钱七的成绩:88
成绩统计结果:
总分:408
平均分:81.6
最高分:92,学生姓名:李四
最低分:65,学生姓名:赵六
成绩等级分布:
A 级:1 人
B 级:2 人
C 级:1 人
D 级:1 人
E 级:0 人
作业提交要求
- 提交完整的 C# 源代码文件。
- 在代码中添加详细注释,说明每个部分的功能和实现逻辑。
- 输出结果应与示例格式一致,确保程序正确运行。
评论 (0)
暂无评论,来发表第一条评论吧!