数学运算与逻辑判断 - 运算符与条件语句

专栏导航

← 上一篇:存放数据的地方 - 数组与集合

← 第一篇:编程世界初探
专栏目录

数学运算与逻辑判断 - 运算符与条件语句

程序不仅是存储数据,更重要的是对数据进行处理和判断。这一周,我们学习如何进行数学运算和逻辑判断,让你的程序"聪明"起来。

算术运算符

算术运算符用于进行数学计算。

基本算术运算符

运算符 名称 示例 结果
+ 加法 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)

优先级(从高到低):

  1. () 括号
  2. *, /, %
  3. +, -

比较运算符

比较运算符用于比较两个值,结果为 truefalse

运算符 名称 示例 结果
== 等于 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 变为 falsefalse 变为 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("不及格");
}

// 输出:良好

执行逻辑:

  1. 从上到下依次判断条件
  2. 遇到第一个 true 的条件,执行对应代码块
  3. 执行完后,跳过剩余所有 else if
  4. 如果所有条件都为 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 必须以 breakreturnthrowgoto 结束,避免代码"穿透"到下一个 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 语句进行多重选择
  • ✅ 掌握了三元运算符简化代码
  • ✅ 实践了成绩判断和简单计算器
相关推荐
许泽宇的技术分享2 小时前
当 AI Agent 遇上 .NET:一场关于智能体架构的技术探险
人工智能·架构·.net
一个帅气昵称啊5 小时前
基于 .NET 的 AI 流式输出实现AgentFramework+SignalR
人工智能·.net
呆萌哈士奇18 小时前
告别 throw exception!为什么 Result<T> 才是业务逻辑的正确选择
c#·.net
喵叔哟2 天前
66.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--自动记账
微服务·架构·.net
故事不长丨3 天前
C#log4net详解:从入门到精通,配置、实战与框架对比
c#·.net·wpf·log4net·日志·winform·日志系统
bjzhang753 天前
OneAuthCenter——一款基于 .NET打造的企业级 OAuth 2.0 / OpenID Connect 认证中心
.net·认证中心
步步为营DotNet3 天前
深度解析.NET 中Nullable<T>:灵活处理可能为空值的类型
java·前端·.net
csdn_aspnet3 天前
.NET 10 中的 ASP.NET Core:Blazor、API 和 OpenAPI 的重大更新
后端·asp.net·.net·.net10
weixin_421994784 天前
认识数据 - 变量与数据类型
c#·.net·.netcore