08. 阿宝陪你学C#【运算符、表达式和语句】:面馆后厨的神奇工具、食材魔法与工作指南

阿宝陪你学C#【运算符、表达式和语句】:面馆后厨的神奇工具、食材魔法与工作指南

嘿哟!各位编程小侠客们!我是你们的好朋友 —— 功夫熊猫阿宝!咱们在 C# 编程的江湖里一路闯荡,从类的奥秘学到跳转语句的灵活运用,是不是超有意思?今天,阿宝我要带你们深入探索 C# 世界里超重要的一块领地 —— 运算符、表达式和语句!这就好比面馆后厨里的神奇工具、食材魔法组合和详细工作指南,掌握了它们,你就能在编程世界里大显身手,做出超棒的 “代码美食”!快搬好小板凳,精彩内容马上开始!

一、表达式:食材的奇妙魔法组合

表达式就像是面馆后厨里,把各种食材组合成美味料理的魔法!在 C# 里,表达式由操作数(也就是数据,相当于食材)和运算符(相当于工具)组成,通过它们的组合,能得到一个新的结果。比如把面条、酱料、配菜组合在一起,就能变成一碗香喷喷的面!

1.1 字面量:最基础的 “现成食材”

字面量就是那些直接写在代码里的固定值,就像面馆后厨里已经切好、配好的现成食材,一眼就能看出它是什么。

  • 数值字面量:像103.14这样的数字,10可以表示 10 碗面条,3.14可以表示调料的比例系数。
int noodleCount = 20; // 20就是一个整数数值字面量
double soupTemperature = 100.0; // 100.0是一个浮点数数值字面量
  • 字符串字面量:用双引号引起来的文字,比如"阿宝的功夫面馆",可以用来记录面馆的名字。
string shopName = "阿宝的功夫面馆";
  • 布尔字面量:只有两个值,truefalse,就像面馆的营业状态,要么是开门营业(true),要么是关门休息(false)。
bool isOpen = true;
  • 字符字面量:用单引号引起来的单个字符,比如'辣',可以表示面条的口味特点。
char flavor = '辣';

1.2 求值顺序:魔法组合的先后规则

表达式的求值顺序就像面馆师傅做菜时,添加食材的先后顺序,顺序错了,做出来的味道可就不对啦!在 C# 里,求值顺序遵循一定的规则,和数学里的运算顺序有点像。

  • 先乘除后加减:和数学一样,先计算乘法和除法,再计算加法和减法。比如2 + 3 * 4,会先计算3 * 4 = 12,再计算2 + 12 = 14
  • 括号优先:如果表达式里有括号,就先计算括号里的内容。比如(2 + 3) * 4,会先计算括号里的2 + 3 = 5,再计算5 * 4 = 20
  • 从左到右:对于同一优先级的运算符,比如连续的加法和减法,或者乘法和除法,就按照从左到右的顺序计算。比如10 - 3 + 2,先计算10 - 3 = 7,再计算7 + 2 = 9

二、运算符:后厨里的神奇工具

运算符就是 C# 后厨里各种各样的神奇工具,用它们可以对数据进行各种操作,就像师傅用铲子、勺子、刀具做出美味的面条!

2.1 算术运算符:计算食材数量的好帮手

算术运算符用于进行基本的数学运算,在面馆里计算食材用量、价格等都靠它!

  • 加法(+:把两个数相加,比如计算两种面条的总销量。
int noodleTypeASold = 30;
int noodleTypeBSold = 25;
int totalSold = noodleTypeASold + noodleTypeBSold; // totalSold的值是55
  • 减法(-:计算剩余数量,比如卖出一些面条后,还剩多少食材。
int originalIngredientAmount = 100;
int usedIngredientAmount = 60;
int remainingIngredientAmount = originalIngredientAmount - usedIngredientAmount; // remainingIngredientAmount的值是40
  • 乘法(*:计算批量需求,比如要做 10 碗面,每碗需要 2 个鸡蛋,一共需要多少鸡蛋。
int eggsPerNoodle = 2;
int totalNoodles = 10;
int totalEggsNeeded = eggsPerNoodle * totalNoodles; // totalEggsNeeded的值是20
  • 除法(/:计算平均值或分配数量,但要注意整数相除结果是整数。
int totalIncome = 100;
int employeeCount = 5;
int incomePerEmployee = totalIncome / employeeCount; // incomePerEmployee的值是20
  • 取余(%:算出除法后的余数,比如 17 个碗,每 3 个装一箱,还剩几个碗。
int bowlCount = 17;
int boxCapacity = 3;
int remainingBowls = bowlCount % boxCapacity; // remainingBowls的值是2

2.2 关系运算符:判断条件的小能手

关系运算符用来比较两个值之间的关系,结果只有truefalse,就像师傅判断食材是否新鲜。

  • 大于(>:比如判断面条的库存数量是否大于某个值。
int noodleStock = 8;
bool isStockHigh = noodleStock > 5; // isStockHigh的值是true
  • 小于(<:判断顾客等待时间是否小于规定时间。
int waitingTime = 10;
bool isTimeShort = waitingTime < 15; // isTimeShort的值是true
  • 大于等于(>=:判断顾客消费金额是否达到优惠标准。
decimal consumptionAmount = 80;
bool isEligibleForDiscount = consumptionAmount >= 50; // isEligibleForDiscount的值是true
  • 小于等于(<=:判断剩余食材是否足够做一定数量的面条。
int remainingIngredients = 20;
bool isEnough = remainingIngredients <= 25; // isEnough的值是true
  • 等于(==:判断两个订单是否是同一个顾客。
string customerId1 = "123";
string customerId2 = "123";
bool isSameCustomer = customerId1 == customerId2; // isSameCustomer的值是true
  • 不等于(!=:判断两种面条的口味是否不同。
string flavor1 = "麻辣";
string flavor2 = "清汤";
bool isDifferentFlavor = flavor1!= flavor2; // isDifferentFlavor的值是true

2.3 逻辑运算符:处理复杂条件的大绝招

当需要同时判断多个条件时,逻辑运算符就派上用场啦!

  • 逻辑与(&&:只有两边条件都为true,结果才是true,就像顾客既要求加辣又要求加香菜,师傅才按这个要求做。
bool hasSpicy = true;
bool hasCoriander = true;
bool shouldMakeSpecialNoodle = hasSpicy && hasCoriander; // shouldMakeSpecialNoodle的值是true
  • 逻辑或(||:只要有一个条件为true,结果就是true,比如顾客要么要鸡蛋要么要火腿,师傅都得满足。
bool wantEgg = false;
bool wantHam = true;
bool shouldAddTopping = wantEgg || wantHam; // shouldAddTopping的值是true
  • 逻辑非(!:把条件结果取反,truefalsefalsetrue,比如顾客说 “不要葱花”。
bool isWithOnion = false;
bool isWithoutOnion =!isWithOnion; // isWithoutOnion的值是true

2.4 条件运算符:简洁的 “二选一” 工具

条件运算符(? :)是if-else的简洁版,语法是条件表达式? 表达式1 : 表达式2,如果条件为true,取表达式 1 的值,否则取表达式 2 的值。

int age = 18;
string result = age >= 18? "成年人" : "未成年人"; // result的值是"成年人"

2.5 位运算符:处理二进制的 “微观工具”

位运算符用于处理二进制数据,就像师傅在微观层面处理食材结构,一般在对性能要求极高或处理底层数据时使用,比如&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移)、>>(右移) ,这部分比较复杂,等你成为编程高手再深入研究!

2.6 typeof运算符:查看数据类型的 “放大镜”

typeof运算符可以获取变量或类型的类型信息,就像师傅用放大镜查看食材标签。

int num = 10;
Type type = typeof(int); // type获取到的是int类型信息

2.7 其他运算符

  • 赋值运算符(=:把右边的值赋给左边的变量,比如int a = 5; 。还有复合赋值运算符,如+=-=等,a += 3;相当于a = a + 3;
  • 自增(++)和自减(--)运算符:让变量值自动加 1 或减 1,int b = 5; b++;b的值变成 6 。

2.8 运算符重载:定制专属工具

运算符重载就像面馆师傅把普通的厨具进行改造,让它们有更适合自己的特殊功能。在 C# 中,我们可以对一些运算符进行重载,让它们在自定义的类上有特定的行为。比如,我们自定义一个Noodle类,通过运算符重载,让+号实现合并两碗面条的功能 。不过这是比较高级的用法,需要对类和运算符有深入理解才行!

三、语句:后厨的工作指南

语句就是 C# 后厨里详细的工作指南,它告诉计算机一步一步该做什么,就像师傅按照指南先烧水、再下面、最后加料!

3.1 语句的概念

语句是构成程序的基本单元,每一条语句都是一个完整的操作指令,计算机按照语句的顺序依次执行,就像师傅按照做菜步骤一步步操作。

3.2 表达式语句

表达式语句是由表达式加上分号组成的,它可以执行一些简单的操作,比如赋值、自增等。

int score = 90; // 赋值表达式语句
count++; // 自增表达式语句

3.3 控制流语句:灵活调整工作流程

控制流语句能根据不同情况,灵活调整程序的执行流程,就像师傅根据顾客要求调整做菜方式。

  • ifif...else语句:根据条件判断执行不同代码块,比如根据顾客是否是会员,提供不同优惠。
bool isMember = true;
if (isMember)
{
   Console.WriteLine("给会员打8折!");
}
else
{
   Console.WriteLine("没有优惠哦");
}

另外还有if...else if...else语句,和if...else语句类似用法。

  • whiledo...while语句while先判断条件再执行操作,do...while先执行一次操作再判断条件,比如煮面时,根据面条是否煮熟决定是否继续煮。
bool isNoodleCooked = false;
while (!isNoodleCooked)
{
   // 煮面操作
   CheckNoodleStatus(); // 假设这个方法检查面条是否煮熟
   isNoodleCooked = IsNoodleCooked(); // 假设这个方法返回是否煮熟的结果
}

bool isSoupBoiled;
do
{
   // 煮汤操作
   isSoupBoiled = CheckSoupStatus(); // 假设这个方法检查汤是否煮开
} while (!isSoupBoiled);
  • for语句:常用于循环执行固定次数的操作,比如煮 10 碗面。
for (int i = 1; i <= 10; i++)
{
   Console.WriteLine($"正在煮第 {i} 碗面");
}
  • foreach语句:方便遍历集合中的元素,比如遍历顾客订单列表。
List<string> orderList = new List<string> { "牛肉面", "炸酱面", "西红柿鸡蛋面" };
foreach (string order in orderList)
{
   Console.WriteLine($"处理订单:{order}");
}
  • switch语句:根据不同的值选择执行不同分支,比如根据顾客点餐选择制作不同面条。
string customerOrder = "牛肉面";
switch (customerOrder)
{
   case "牛肉面":
       Console.WriteLine("开始制作牛肉面");
       break;
   case "炸酱面":
       Console.WriteLine("开始制作炸酱面");
       break;
   default:
       Console.WriteLine("您点的菜品暂时没有哦");
       break;
}
  • break语句:用于跳出循环或switch语句,比如煮面时发现食材不够,紧急停止。
for (int i = 1; i <= 100; i++)
{
   Console.WriteLine($"正在煮第 {i} 碗面");
   if (IsIngredientRunningLow()) // 假设这个方法判断食材是否不足
   {
       Console.WriteLine("食材不足,停止煮面!");
       break;
   }
}
  • continue语句:跳过本次循环剩余代码,进入下一次循环,比如给面加调料时,跳过有问题的面。
for (int i = 1; i <= 10; i++)
{
   if (IsNoodleProblematic(i)) // 假设这个方法判断第i碗面是否有问题
   {
       Console.WriteLine($"第 {i} 碗面有问题,跳过!");
       continue;
   }

   Console.WriteLine($"给第 {i} 碗面加调料");
}
  • goto语句:让程序跳转到指定标签位置,但要谨慎使用,容易让代码混乱。
int count = 0;
StartCounting:
   Console.WriteLine($"当前计数:{count}");
   count++;
   if (count < 5)
   {
       goto StartCounting;
   }

3.4 其他语句

  • using语句:就像面馆师傅用完工具后,及时归还整理,using语句用于自动释放资源,比如文件、数据库连接等。
using (StreamReader reader = new StreamReader("order.txt"))
{
   string line;
   while ((line = reader.ReadLine())!= null)
   {
       Console.WriteLine(line);
   }
}
  • 标签语句:可以为语句定义一个标签,配合goto语句使用,不过不建议过度使用。
LoopStart:
   Console.WriteLine("开始循环");
   // 一些操作
   if (ConditionMet()) // 假设这个方法判断条件是否满足
   {
       goto LoopStart;
   }

四、总结:成为后厨的全能大师

到这里,C# 里的运算符、表达式和语句就全部介绍完啦!从神奇的工具运算符,到奇妙的食材组合表达式,再到详细的工作指南语句,每一个知识点都像是面馆后厨里不可或缺的一部分!

掌握了这些内容,你在编程江湖里就能自由驰骋,不管是处理数据、判断条件,还是控制程序流程,都能轻松应对!要是在学习过程中遇到任何问题,别犹豫,赶紧来阿宝的面馆,咱们边吃着热气腾腾的面条,边把问题解决掉!相信不久后,你就能成为编程后厨里的全能大师!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿蒙Armon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值