至第十二课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// 整数变量演示
int sanaYears = 2015;
Console.WriteLine("锁那出道年:" + sanaYears);
// 非整数变量演示
double sanaRating = 9.9;
decimal sanaPrice = 350.5m;//m
Console.WriteLine("锁那评分:" + sanaRating + "。锁那专辑价格 "+sanaPrice+" 元。");
// 计算演示
int num1=17;
int num2=5;
// 加法
int sumResult = num1 + num2;
// 余数
int modResult = num1 % num2;
// 除以,强制 num1 为 double
double divisionResult = (double)num1 / num2;
// 结果
Console.WriteLine("sum:" + sumResult + " mod:" + modResult + " div:" + divisionResult);
// 复合赋值运算符
string singerName = "锁那";
sanaYears += 10;// 2025
// 锁那 Hush...
singerName += " Hush a by little girl";
Console.WriteLine("10年后:"+sanaYears +"名字:"+ singerName);

/* 递增与递减 及 复合赋值 */
// **声明与初始化**:变量 a 初始为 10,b 待赋值
int a = 10, b;
// **后缀递增 (a++)**:先使用 a 的旧值 (10) 赋值给 b,再将 a 加 1。
b = a++;
// 运行后:a = 11, b = 10
Console.WriteLine(a); // 输出 11
Console.WriteLine(b); // 输出 10
// **前缀递减 (--a)**:先将 a 减 1 (a 变为 10),再使用 a 的新值 (10) 赋值给 b。
b = --a;
// 运行后:a = 10, b = 10
Console.WriteLine(a); // 输出 10
Console.WriteLine(b); // 输出 10
// **复合赋值 (b += 2)**:等同于 b = b + 2,将 b 的值 (10) 增加 2。
b += 2;
// 运行后:a = 10, b = 12
Console.WriteLine(a); // 输出 10
Console.WriteLine(b); // 输出 12
Console.ReadKey();

/* 关系运算符和布尔值 */
// **数据初始化**:用于比较的整数变量
int currentYear = 2025;
int targetYear = 2030;
// **关系运算符 (<=)**:小于等于。关系运算符总是返回 **bool** 类型的结果。
bool isFuture = currentYear <= targetYear;
// **关系运算符 (==)**:判断是否相等,注意使用【双等号 ==】(比较) 而非【单等号 =】(赋值)。
bool isEqual = currentYear == targetYear;
// **输出拼接**:开头使用空字符串 "" 来强制将后面的数字变量转换为文本进行拼接,而不是相加。
Console.WriteLine("" + currentYear + targetYear);
// **输出布尔值**:布尔值 (True/False) 可以直接与字符串拼接输出。
Console.WriteLine("是否 isFuture: " + isFuture + " | 是否 isEqual: " + isEqual);
Console.ReadKey(); // 这个代码是让控制台暂停

/* 逻辑运算符 */
// **数据初始化**:用于演示逻辑判断的初始值
int temp = 25; // 温度
bool isRaining = true; // 是否下雨
// **逻辑与 (&&)**:要求所有条件都为 True,口诀【一假即假】。
// 判断条件:温度 < 20 (False) AND 下雨 (True)
bool needJacket = (temp < 20) && isRaining;
// **逻辑或 (||)**:只要有一个条件为 True,结果就是 True,口诀【一真即真】。
// 判断条件:温度 >= 30 (False) OR 下雨 (True)
bool isGoodDay = (temp >= 30) || isRaining;
// **逻辑非 (!)**:将布尔值结果取反。
// 判断条件:NOT(温度 >= 30) AND NOT(下雨)
bool isNotGoodDay = !(temp >= 30) && !isRaining;
// **输出结果**:将布尔判断的结果用拼接符 (+) 输出到控制台。
Console.WriteLine("需要外套:" + needJacket + "。好天气:" + isGoodDay + "。坏天气:" + isNotGoodDay);
Console.ReadKey();

第十三课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/* 第十三课:if-else 条件语句 */

// 声明变量并初始化数据
int currentScore = 75;

// **if 语句**:程序的第一个判断点。
// 核心知识点 1:if 后的 () 内必须是布尔表达式。
// 核心知识点 2:if/else if/else 后面**不能**加分号 (;)。
if (currentScore >= 90)
{
// 如果条件 (75 >= 90) 为 FALSE,则跳过此代码块。
Console.WriteLine("等级 A");
}
// **else if 语句**:当前一个 if/else if 为 FALSE 时,检查这个新条件。
else if (currentScore >= 60)
{
// 检查条件 (75 >= 60) 为 TRUE,程序执行此代码块。
// 执行完后,会跳过后面的所有 else 语句。
Console.WriteLine("等级 B");
}
// **else 语句**:如果以上所有条件都为 FALSE,则执行此默认代码块。
else
{
// 流程控制:由于上一个 else if 为 TRUE,此处代码会被跳过。
Console.WriteLine("等级 C");
}

// 暂停程序,等待用户按键退出
Console.ReadKey();

第十四课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* 第十四课:switch 语句 */
// **switch 关键字**:用于对一个变量的精确值进行多分支匹配。
string singerName = "锁那";// 歌手名称,作为 switch 的判断依据

switch (singerName) // switch 括号内是需要匹配的变量
{
// **case 关键字**:定义一个特定的匹配值。
// 核心规则:case 的值(如 "锁那")必须与 switch 变量的类型(string)一致。
case "锁那":
Console.WriteLine("你喜欢锁那。");
// **break 关键字**:必需!结束当前 case 的执行,跳出整个 switch 结构。
break;
// 第二个匹配项
case "鹿乃":
Console.WriteLine("你喜欢鹿乃。");
break;
// **default 关键字**:可选。如果所有 case 都不匹配,则执行 default。
default:
Console.WriteLine("不知道你喜欢谁。");
break;
}
// Console.ReadKey():暂停程序,让用户看到输出结果。
Console.ReadKey();

第十五课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* 第十五课:while 循环 */

// 1. 初始化 (Initialization):设置循环的起始值。
int sanakaYears = 2015;

// **while 关键字**:程序进入循环。
// 核心知识点:条件 (Condition),只要括号内的布尔表达式为 True,就执行循环体。
// **重要语法**:while 后面绝对不能加分号 (;),否则会造成死循环。
while (sanakaYears <= 2020)
{
// 循环体:需要重复执行的代码。
Console.WriteLine("sanakaYears: " + sanakaYears);

// 3. 迭代 (Iteration):修改控制变量,使其向结束条件靠近。
// 核心目的:防止死循环。
sanakaYears++;
}
// 当 sanakaYears 变为 2021 时,循环条件 (2021 <= 2020) 为 False,程序跳出循环。

第十六课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 第十六课:for 循环 */

// **for 关键字**:最常用于已知循环次数的结构。
// 括号内包含三个用分号 (;) 分隔的部分:
// 1. 初始化 (int j = 10):循环开始前只执行一次,定义并设置计数器。
// 2. 条件 (j >= 5):每次循环前检查,为 True 则继续。
// 3. 迭代 (j--):每次循环体执行完后执行,修改计数器(这里是倒数)。
for (int j = 10; j >= 5; j--)
{
/* 注意!j >= 5 条件必须是 True(符合)才会执行循环。
流程:j=10 (True) -> j=9 (True) -> ... -> j=5 (True) -> j=4 (False,跳出)
*/

// 循环体:重复执行的代码
Console.WriteLine("j 的值为:" + j);
}

// 循环结束后,程序会跳到这里继续执行。
Console.WriteLine("循环结束");
Console.ReadKey();

第十七课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* 第十七课:do-while 循环 */
// 知识点 1: 变量声明与初始化 (Variable Declaration and Initialization)
// 声明一个字符串类型(string)的变量 userInput,并将其初始化为 "继续"。
string userInput = "继续";

// 知识点 2: do-while 循环结构 (The 'do-while' Loop Structure)
// do-while 循环的特点是:无论条件是否成立,循环体 (do {} 块中的代码) 至少会执行一次。
do
{
// 知识点 3: 循环体内的代码执行
// 这行代码执行变量的赋值操作。
// 将 userInput 的值从 "继续" 更改为 "退出"。
// 由于 'do' 块会先执行,所以这个赋值操作在第一次循环时就会发生。
userInput = "退出"; // 赋值为退出

// 输出当前 userInput 变量的值。
Console.WriteLine("userInput = " + userInput);

// 循环体内的其他代码...

}
// 知识点 4: while 条件判断 (The 'while' Condition Check)
// 在执行完 'do' 块后,程序会检查这里的条件。
// - 表达式:检查 userInput 的值是否等于 "继续"。
// - 结果:第一次执行后 userInput 已经是 "退出",所以条件 ( "退出" == "继续" ) 为假 (false)。
// - 结论:循环将在第一次执行后立即终止。
while (userInput == "继续");

// 知识点 5: do-while 循环的特殊要求
// 注意:do-while 循环的 while() 语句后面必须加上分号 (;)。

// 知识点 6: Console.ReadKey()
// 暂停控制台应用程序的执行,等待用户按下任意键,以便观察输出结果。
Console.ReadKey();

// 预期输出结果:
// userInput = 退出


第十八课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// ------------------------------------------------
// 知识点:for 循环结构 (The 'for' Loop Structure)
// ------------------------------------------------
// for (初始化; 条件判断; 迭代语句)
// - i = 0: 循环变量 i 从 0 开始 (作业要求是从 1 开始)
// - i < 10: 只要 i 小于 10 (即 i=0 到 i=9),循环就继续执行。
// - i++: 每次循环结束后,i 自动加 1。
for (int i = 0; i < 10; i++)
{
// ------------------------------------------------
// 知识点:循环体内的代码
// ------------------------------------------------

// 输出当前 i 的值,用于追踪循环进度。
// 注意:如果 i=3, 6, 9 时,这行代码会先执行,然后才执行 continue 跳过后续代码。
Console.WriteLine("循环值:" + i);

// ------------------------------------------------
// 知识点:模运算 (%) 和 continue 关键字
// ------------------------------------------------
// i % 3 == 0: 模运算(取余数),判断 i 除以 3 的余数是否为 0。
// 作用:判断 i 是否是 3 的倍数 (i=0, 3, 6, 9)。
if (i % 3 == 0)
{
Console.WriteLine("跳过循环");
// continue: 立即停止当前这次循环的剩余代码,直接进入下一次迭代(即执行 i++)。
continue;
}

// ------------------------------------------------
// 知识点:break 关键字
// ------------------------------------------------
// i > 7: 判断 i 是否大于 7 (i=8, 9)。
if (i > 7)
{
Console.WriteLine("终止循环");
// break: 立即退出整个 for 循环结构,程序将跳转到 for 循环后的第一行代码。
break;
}

// Console.ReadKey(): 这是 C# 控制台程序中的一个输入函数,
// 功能:等待用户按下键盘上的一个键,让程序暂停。
// 作用:在这里是用来让循环“每步暂停”,方便观察每一步的执行效果。
Console.ReadKey();
}

// ------------------------------------------------
// 知识点:循环结束后的流程
// ------------------------------------------------
// break 执行后,程序会跳到这里继续执行。
// 如果循环是自然结束(i 达到 10),程序也会继续执行这里。
// Console.WriteLine("循环已跳出或完成。");

第二十课全部代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 创建一个数组,存放5个月的销售额数据
// decimal类型适合处理金钱,m表示这是decimal类型的数字
decimal[] monthlySales = { 7685.28m, 8637.54m, 9295.18m, 10037.04m, 12285.09m };

// 准备一个变量来存总销售额,刚开始是0
decimal annualTotal = 0;

// 用foreach循环遍历数组,sales会依次拿到每个月的销售额
// 第一次循环:sales = 7685.28m
// 第二次循环:sales = 8637.54m,以此类推...
foreach (decimal sales in monthlySales)
{
// 把当前月的销售额加到总销售额里
annualTotal += sales;

// 显示当前月的销售额,:C2表示货币格式(带¥符号和两位小数)
// monthlySales.Length是数组长度,这里始终是5个月
Console.WriteLine($"当月销售额:{sales:C2},月份数量:{monthlySales.Length}");
}

// 循环结束后,显示最终的总销售额
// annualTotal现在是所有月份加起来的总和
Console.WriteLine($"总的销售额:{annualTotal:C2},月份数量:{monthlySales.Length}");

// 暂停程序,等待用户按任意键继续
Console.ReadKey();