专栏导航
← 上一篇:存放数据的地方 - 数组与集合
数学运算与逻辑判断 - 运算符与条件语句
- 专栏导航
程序不仅是存储数据,更重要的是对数据进行处理和判断。这一周,我们学习如何进行数学运算和逻辑判断,让你的程序"聪明"起来。
算术运算符
算术运算符用于进行数学计算。
基本算术运算符
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 5 + 3 |
8 |
- |
减法 | 5 - 3 |
2 |
* |
乘法 | 5 * 3 |
15 |
/ |
除法 | 10 / 3 |
3.333... |
% |
取余(模) | 10 % 3 |
1 |
取余运算符(%)
取余运算符返回除法的余数。
csharp
Console.WriteLine(10 % 3); // 输出:1 (10 ÷ 3 = 3 余 1)
Console.WriteLine(10 % 2); // 输出:0 (10 是偶数)
Console.WriteLine(11 % 2); // 输出:1 (11 是奇数)
应用场景: 判断奇偶数、循环计数等
csharp
// 判断一个数是否为偶数
int number = 10;
bool isEven = (number % 2 == 0); // true
整数除法与浮点数除法
csharp
// 整数除法(两个都是整数)
int a = 10;
int b = 3;
Console.WriteLine(a / b); // 输出:3 (整数除法,舍弃小数)
// 浮点数除法(至少有一个浮点数)
double c = 10.0;
double d = 3;
Console.WriteLine(c / d); // 输出:3.333...
运算符优先级
csharp
// 先乘除,后加减
int result1 = 2 + 3 * 4; // 14 (3*4=12, 12+2=14)
// 使用括号改变优先级
int result2 = (2 + 3) * 4; // 20 (2+3=5, 5*4=20)
优先级(从高到低):
()括号*,/,%+,-
比较运算符
比较运算符用于比较两个值,结果为 true 或 false。
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
true |
!= |
不等于 | 5 != 3 |
true |
< |
小于 | 5 < 3 |
false |
> |
大于 | 5 > 3 |
true |
<= |
小于等于 | 5 <= 5 |
true |
>= |
大于等于 | 5 >= 3 |
true |
使用示例
csharp
int age = 18;
bool isAdult = age >= 18; // true
bool isChild = age < 12; // false
bool canDrive = age >= 18; // true
注意:区分 = 和 ==
csharp
int a = 5; // 赋值运算符,把 5 赋值给 a
bool b = (5 == 5); // 比较运算符,判断 5 是否等于 5,结果 true
逻辑运算符
逻辑运算符用于组合多个条件判断。
| 运算符 | 名称 | 说明 | 示例 |
|---|---|---|---|
&& |
逻辑与(AND) | 两个条件都为 true,结果才为 true | age >= 18 && hasLicense |
| ` | ` | 逻辑或(OR) | |
! |
逻辑非(NOT) | 取反,true 变 false,false 变 true | !isStudent |
逻辑与(&&)
只有当两个条件都为 true 时,结果才为 true。
csharp
int age = 25;
bool hasLicense = true;
bool canDrive = age >= 18 && hasLicense; // true
// 如果年龄不够
int age2 = 16;
bool canDrive2 = age2 >= 18 && hasLicense; // false
// 如果没有驾照
int age3 = 25;
bool hasLicense3 = false;
bool canDrive3 = age3 >= 18 && hasLicense3; // false
真值表:
true && true = true
true && false = false
false && true = false
false && false = false
逻辑或(||)
只要有一个条件为 true,结果就为 true。
csharp
bool isWeekend = false;
bool isHoliday = true;
bool canRest = isWeekend || isHoliday; // true
真值表:
true || true = true
true || false = true
false || true = true
false || false = false
逻辑非(!)
将 true 变为 false,false 变为 true。
csharp
bool isStudent = true;
bool isNotStudent = !isStudent; // false
bool isAdult = false;
bool isNotAdult = !isAdult; // true
组合使用
csharp
// 年龄在 18 到 30 之间
int age = 25;
bool isYoungAdult = age >= 18 && age <= 30; // true
// 周末或假期可以休息
bool isWeekend = true;
bool isHoliday = false;
bool canRest = isWeekend || isHoliday; // true
// 不是学生或已经毕业
bool isStudent = false;
bool hasGraduated = false;
bool isNotStudentOrGraduated = !isStudent || hasGraduated; // true
if 条件语句
条件语句让程序能够根据不同情况执行不同的代码。
基本语法
csharp
if (条件)
{
// 条件为 true 时执行的代码
}
示例
csharp
int age = 18;
if (age >= 18)
{
Console.WriteLine("你已经是成年人了!");
}
if-else 语句
csharp
if (条件)
{
// 条件为 true 时执行
}
else
{
// 条件为 false 时执行
}
示例:
csharp
int age = 16;
if (age >= 18)
{
Console.WriteLine("成年人");
}
else
{
Console.WriteLine("未成年人");
}
if-else if-else 语句
当有多个条件时使用:
csharp
int score = 85;
if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score >= 80)
{
Console.WriteLine("良好");
}
else if (score >= 60)
{
Console.WriteLine("及格");
}
else
{
Console.WriteLine("不及格");
}
// 输出:良好
执行逻辑:
- 从上到下依次判断条件
- 遇到第一个
true的条件,执行对应代码块 - 执行完后,跳过剩余所有
else if - 如果所有条件都为
false,执行else代码块
三元运算符(?:)
三元运算符是 if-else 的简写形式,适用于简单条件判断。
基本语法
csharp
条件 ? 值1 : 值2
如果条件为 true,返回值1;如果为 false,返回值2。
示例对比
使用 if-else:
csharp
int age = 20;
string message;
if (age >= 18)
{
message = "成年人";
}
else
{
message = "未成年人";
}
使用三元运算符:
csharp
int age = 20;
string message = age >= 18 ? "成年人" : "未成年人";
一行代码完成相同的逻辑!
更多示例
csharp
// 判断奇偶数
int number = 7;
string type = number % 2 == 0 ? "偶数" : "奇数";
// 比较大小
int a = 5, b = 10;
int max = a > b ? a : b; // max = 10
// 计算绝对值
int x = -5;
int abs = x >= 0 ? x : -x; // abs = 5
// 嵌套使用(不推荐,可读性差)
int score = 85;
string grade = score >= 90 ? "优秀" : score >= 80 ? "良好" : "及格";
何时使用三元运算符
✅ 适合使用: 简单的条件赋值
csharp
string status = isLoggedIn ? "已登录" : "未登录";
❌ 不适合使用: 复杂逻辑或需要多行代码
csharp
// 不要这样写
string result = condition ? VeryLongMethod1() : VeryLongMethod2();
实践:成绩等级判断
csharp
using System;
namespace Week3Practice
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入你的成绩(0-100):");
string input = Console.ReadLine();
int score = int.Parse(input);
// 使用 if-else if-else 判断等级
if (score >= 90 && score <= 100)
{
Console.WriteLine("成绩等级:优秀");
}
else if (score >= 80)
{
Console.WriteLine("成绩等级:良好");
}
else if (score >= 60)
{
Console.WriteLine("成绩等级:及格");
}
else if (score >= 0)
{
Console.WriteLine("成绩等级:不及格");
}
else
{
Console.WriteLine("输入错误!");
}
// 使用三元运算符简化判断
bool isPass = score >= 60;
string passMessage = isPass ? "恭喜,你通过了考试!" : "很遗憾,你未通过考试。";
Console.WriteLine(passMessage);
}
}
}
运行示例
请输入你的成绩(0-100):
85
成绩等级:良好
恭喜,你通过了考试!
实践:简单计算器(使用 if-else)
csharp
using System;
namespace Week3Practice
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("===== 简单计算器 =====");
Console.Write("请输入第一个数字:");
double num1 = double.Parse(Console.ReadLine());
Console.Write("请输入运算符(+、-、*、/):");
string op = Console.ReadLine();
Console.Write("请输入第二个数字:");
double num2 = double.Parse(Console.ReadLine());
double result = 0;
bool isValid = true;
// 使用 if-else if 判断运算符
if (op == "+")
{
result = num1 + num2;
}
else if (op == "-")
{
result = num1 - num2;
}
else if (op == "*")
{
result = num1 * num2;
}
else if (op == "/")
{
if (num2 != 0) // 避免除以零
{
result = num1 / num2;
}
else
{
Console.WriteLine("错误:除数不能为零!");
isValid = false;
}
}
else
{
Console.WriteLine("错误:不支持的运算符!");
isValid = false;
}
if (isValid)
{
Console.WriteLine($"结果:{num1} {op} {num2} = {result}");
}
}
}
}
运行示例
===== 简单计算器 =====
请输入第一个数字:10
请输入运算符(+、-、*、/):*
请输入第二个数字:5
结果:10 * 5 = 50
switch 语句
当需要根据同一个变量进行多重选择时,switch 语句比 if-else if 更清晰简洁。
基本语法
csharp
switch (表达式)
{
case 值1:
// 当表达式等于 值1 时执行
break;
case 值2:
// 当表达式等于 值2 时执行
break;
default:
// 当所有 case 都不匹配时执行
break;
}
示例:判断星期
csharp
int dayOfWeek = 3; // 假设 1=周一, 2=周二, ..., 7=周日
switch (dayOfWeek)
{
case 1:
Console.WriteLine("周一");
break;
case 2:
Console.WriteLine("周二");
break;
case 3:
Console.WriteLine("周三");
break;
case 4:
Console.WriteLine("周四");
break;
case 5:
Console.WriteLine("周五");
break;
case 6:
Console.WriteLine("周六");
break;
case 7:
Console.WriteLine("周日");
break;
default:
Console.WriteLine("无效的星期");
break;
}
switch vs if-else if
使用 if-else if:
csharp
string op = "+";
double result = 0;
if (op == "+")
result = num1 + num2;
else if (op == "-")
result = num1 - num2;
else if (op == "*")
result = num1 * num2;
else if (op == "/")
result = num1 / num2;
使用 switch:
csharp
string op = "+";
double result = 0;
switch (op)
{
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
}
when 条件(C# 7.0+)
可以在 case 中添加额外条件:
csharp
int score = 85;
switch (score)
{
case int s when s >= 90:
Console.WriteLine("优秀");
break;
case int s when s >= 80:
Console.WriteLine("良好");
break;
case int s when s >= 60:
Console.WriteLine("及格");
break;
default:
Console.WriteLine("不及格");
break;
}
多个 case 共用代码
csharp
int month = 7;
switch (month)
{
case 1:
case 2:
case 3:
Console.WriteLine("春季");
break;
case 4:
case 5:
case 6:
Console.WriteLine("夏季");
break;
case 7:
case 8:
case 9:
Console.WriteLine("秋季");
break;
case 10:
case 11:
case 12:
Console.WriteLine("冬季");
break;
default:
Console.WriteLine("无效的月份");
break;
}
字符串匹配
csharp
string role = "admin";
switch (role)
{
case "admin":
Console.WriteLine("管理员权限");
break;
case "user":
Console.WriteLine("普通用户权限");
break;
case "guest":
Console.WriteLine("访客权限");
break;
default:
Console.WriteLine("未知角色");
break;
}
必须使用 break 或 return
每个 case 必须以 break、return、throw 或 goto 结束,避免代码"穿透"到下一个 case。
csharp
int num = 2;
switch (num)
{
case 1:
Console.WriteLine("一");
break; // 必须有 break
case 2:
Console.WriteLine("二");
break;
// 如果忘记 break,编译器会报错
}
返回值的 switch 表达式(C# 8.0+)
简洁写法(switch 表达式):
csharp
string op = "+";
double result = op switch
{
"+" => num1 + num2,
"-" => num1 - num2,
"*" => num1 * num2,
"/" => num1 / num2,
_ => 0 // _ 表示 default
};
这比传统 switch 更简洁!
带 when 条件的 switch 表达式:
csharp
int score = 85;
string grade = score switch
{
int s when s >= 90 => "优秀",
int s when s >= 80 => "良好",
int s when s >= 60 => "及格",
_ => "不及格"
};
何时使用 switch
✅ 适合使用 switch:
- 根据同一个变量的不同值执行不同操作
- case 比较多(超过 3 个)
- 需要清晰的代码结构
❌ 不适合使用 switch:
- 条件涉及多个变量
- 需要复杂的逻辑判断(如范围判断)
实践:改进的计算器(使用 switch)
csharp
using System;
namespace Week3Practice
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("===== 简单计算器 =====");
Console.Write("请输入第一个数字:");
double num1 = double.Parse(Console.ReadLine());
Console.Write("请输入运算符(+、-、*、/):");
string op = Console.ReadLine();
Console.Write("请输入第二个数字:");
double num2 = double.Parse(Console.ReadLine());
double result = 0;
bool isValid = true;
// 使用 switch 判断运算符(更清晰)
switch (op)
{
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
if (num2 != 0)
{
result = num1 / num2;
}
else
{
Console.WriteLine("错误:除数不能为零!");
isValid = false;
}
break;
default:
Console.WriteLine("错误:不支持的运算符!");
isValid = false;
break;
}
if (isValid)
{
Console.WriteLine($"结果:{num1} {op} {num2} = {result}");
}
}
}
}
运行示例
===== 简单计算器 =====
请输入第一个数字:10
请输入运算符(+、-、*、/):*
请输入第二个数字:5
结果:10 * 5 = 50
实践:月份判断(使用 switch)
csharp
using System;
namespace Week3Practice
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("===== 月份季节判断 =====");
Console.Write("请输入月份(1-12):");
int month = int.Parse(Console.ReadLine());
string season = month switch
{
int m when m >= 3 && m <= 5 => "春季",
int m when m >= 6 && m <= 8 => "夏季",
int m when m >= 9 && m <= 11 => "秋季",
12 or 1 or 2 => "冬季", // 多值匹配(C# 9.0+)
_ => "无效的月份"
};
Console.WriteLine($"{month}月属于{season}");
}
}
}
运行示例
===== 月份季节判断 =====
请输入月份(1-12):7
7月属于夏季
本章总结
- ✅ 掌握了算术运算符:
+,-,*,/,% - ✅ 学会了比较运算符:
==,!=,<,>,<=,>= - ✅ 理解了逻辑运算符:
&&,||,! - ✅ 掌握了 if-else 条件语句
- ✅ 学会了 switch 语句进行多重选择
- ✅ 掌握了三元运算符简化代码
- ✅ 实践了成绩判断和简单计算器