C#学习笔记 03.01
(学习视频来自bilibili的传智播客赵老师基础教学视频)
先来一个好玩的小例子
交换两个int,不用第三个变量。
int a =1;
int b =2;
a = a - b ; 此时 a = -1,b = 2;
b = a + b ; 此时 a = -1 ,b = 1 ;
a = b - a ; 此时 a =2 , b = 1;交换完成……
很有意思的是为什么会出现这种现象,奇怪的东西应该是从第一次相减开始混进来的。
换一个写法 :
x = a - b ;
b = x + b = ( a - b ) + b 也就是 b = a ;
a = b - x = ( a - b ) + b - ( a - b ) 也就是 a = b;
其实,当我们将两个数进行运算的时候,这个得到的数字就同时拥有了这两个数的信息,是不是很有意思?也可以试着把第一句的运算关系改一下,换成+。不过不建议换成乘除,毕竟乘除法面对0这个异类的时候,表现就不那么优秀了。
运算符 + +,- -
老实讲,我倒是不是很喜欢用这个,老老实实写个a=a+1不好么。。。
++放在变量名的前面,会先对变量进行+1,再参与其他运算;
而++放在变量名的后面,那么就会先进行运算,算完了再对变量+1;
也就是,不管++写在前面还是后面,都代表了 a = a+1;这样一个语句。
如果写成++a,那么就把这个语句写在++a出现的那一行代码的前面:
b = ++a + 1;也就是 a = a + 1;b = a + 1;
b = a++ + 1;也就是 b = a + 1;a = a + 1;
多写一行吧。。。咱不差这一行。。。。。。
因为会出现这么一个麻烦的事情,当你有一个连等的式子的时候,当然,一般也没这么别扭的请款。
b = a++ + 2 + ++a;
那么就会等价成这个样子:
b = a + 2;
a = a + 1;
a = a + 1;
b = b + a;
是不是有点绕?
这是因为一元运算符的运算优先级更高。
关系运算符
用来描述两个事物之间的关系,算出来的结果是 bool 类型。
<, >, >=, <=, ==, !=
前四个很好理解,==其实就是等于,但是一个等号被赋值占用了,所以用来判断是否相等的时候就用==了,而 != 就是不等于,这个符号在不同语言里面不太一样,需要记一下咱C#用的是这个。。。
逻辑运算符
与 或 非
&& || !
这个非是不是很熟悉,不等于里面那个!是不也很好0理解记住了。
与:同真为真,有假就假;
或:有真就真,都假才假;
非:加上就是反义词;
(小时候找反义词的时候有这个就好了)
其实 & | 这两个符号也能起到相同的效果,但是因为没加上结果确定了就自动停止的功能,所以从效率上讲不合适,所以就不用了。
注意:写这个时候因为式子有点长,所以都用括号括起来吧
又一个简单的例子
闰年的判定
Console.Writeline("请输入需要判断的年号");
string year = Console.ReadLine();
int yushu = Convert.Toint32(year) % 4; //排除输入错误请看上个笔记
if( yushu == 0 )
{ Console.WriteLine( year + "是个闰年");}
else
{ Console.WriteLine( year + "不是闰年");}
Console.ReadKey();
分支结构 + 选择结构
其实上面咱已经用了,就是 if(){} else{}
这就诞生了另一个很好玩的用法,当我们的判断条件不唯一的时候,比如:
输入一个数,属于小于 0,0 到 10,10 以上这三个区间的哪一个。
我们就可以
Console.Writeline("请输入需要判断的数字");
string num = Console.ReadLine();
if( num < 0 )
{ Console.WriteLine( num + "小于0");}
else if( num <= 10 )
{ Console.WriteLine( num + "在0到10");}
else
{ Console.WriteLine( num + "10以上");}
Console.ReadKey();
另外,还有个叫三元表达式的东西
表达式1 ?表达式2:表达式3;
如果表达式1 的结果是 true ,那么返回表达式2 ,否则 返回表达式3
其实就是 if else 针对一些赋值情况的一种简便写法。
选择结构
这个用来进行定值的判断,if那一串用来做区间的判断
switch(要判断的)
{
case 值 :要执行的代码;break;
default:要执行的代码;break;
}
来个例子,评价如果是A,就奖励100,B奖励50,C不奖励,D批评;
上代码(可运行):
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入评级");
string pingji = Console.ReadLine();//接收评级输入
switch (pingji)
{
case "A"://如果是A,就奖励100
Console.WriteLine("奖励100元");
break;
case "B":
Console.WriteLine("奖励50元");
break;
case "C":
Console.WriteLine("表现一般,没有奖励");
break;
case "D":
Console.WriteLine("表现太差了,这样不行");
break;
default:
Console.WriteLine("你这都输了写啥进来?");
break;
}
Console.ReadKey();
}
}
}
再补一个好玩的
这个东西还可以这么写:
如果A,B都奖励50元,不妨写成这样
case "A"://如果是A,就奖励50
case "B"://如果是A,就奖励50
Console.WriteLine("奖励50元");
break;
case "C":
Console.WriteLine("表现一般,没有奖励");
break;
case "D":
Console.WriteLine("表现太差了,这样不行");
break;
default:
Console.WriteLine("你这都输了写啥进来?");
break;
异常捕捉
try
{这里写可能会出现异常的代码}
catch
{这里写出现了异常怎么处理}
例子呢,可以看前面那个笔记。。。
又一个注意事项
我们的变量都有一个叫做作用域的东西,位于上层的变量可以在下层使用,但是下层的变量不能在上层使用,就像这样:
if(true)
{int a = 1;}
Console.WriteLine(a);
这样写的话就会出错,因为变量 a 作用于 if 下的这个代码块,在外面是访问不到他的。
我们在哪里定义的这个变量,这个变量就属于哪里,所以可以这样
int a;
if(true)
{ a = 1;}
Console.WriteLine(a);
这个样子的话就可以了