首页 > 代码库 > C#基础知识篇(二)-----------C#笔记
C#基础知识篇(二)-----------C#笔记
1.关系运算符(比较运算符)
1.关系运算符有哪些?
- >,<
- ==,!=
- >=,<=
2.关系运算符的作用?
用于比较两个事物之间的关系。
3.什么叫关系表达式?
由关系运算符连接起来的式子叫关系表达式。
注意:所有的关系表达式最终都能计算成一个bool类型的值。
2.逻辑运算符
1.逻辑表达式有哪些?
逻辑与:&& ,逻辑或:|| ,逻辑非:!(又叫取反)
2.逻辑运算
语法:表达式1 逻辑运算符 表达式2
逻辑运算符连接的两个表达式,要最终能求解成一个bool类型的值(一般情况下都是关系表达式),所以整个逻辑运算的结果也是bool类型。
3.if结构
1.if结构的基本语法:
If(条件)
语句1;
执行过程:首先判断条件的结果,若结果为True则执行语句1,若为false则跳过语句1,执行后面的语句。
注意:if后面括号中的条件,要能计算成一个Bool类型的值,默认情况下if语句只能带一句话(和if有关的语句只有语句1)在If语句中如果想让if带多句话则用{}把if带的多句话组成语句块。
If(条件)
{
语句块;
}
2.if-else结构
语法:if(条件)
{
语句块1;
}
else
{
语句块2;
}
执行过程:如果if的条件为true则执行if带的语句块1,并且跳过else带的语句2。若条件为false则是跳过if带的语句块1,执行else带的语句块2。
3.if-else-if结构
语法:if(条件1)
{
语句块1;
}
else if(条件2)
{
语句块2;
}
……
else if(条件n)
{
语句块n;
}else
{
语句块n+1;
}
执行过程:在if-else-if语句中,只有当上一个条件不成立时,才会进入下一个if语句,并进行If语句后面的条件判断,一旦有一个if后面的条件为true则执行此if所带的语句块,语句块执行完成后程序跳出
if-else-if,if-else-if中如果所有条件都不成立,则执行最后的else(可有可无)。else与离得最近的if是一对。
4.Switch语句
1. 语法:
执行过程:首先计算表达式,然后根据计算结果与case后面的值匹配,如果有匹配项,则执行匹配项后面的语句,直到break结束跳出switch-case。如果所有的值都不匹配,那么有default的则执行default后面的语句。
直到break结束。如果没有default,则跳出switch-case什么都不执行。
注意:每一个case后面跟一个break;
5.while循环
1.语法:
while(循环条件)
{
循环体;
}
1. 执行过程:
1. 先判断循环条件,如果为true。则转向2,如果为false转向语句3
2. 执行循环体,执行完了转向1。
3. 跳出循环循环结束。
注意:在while循环中一定要有那么一句话来改变循环变量的值,使循环变量终有那么一个时候为false。(不然死循环)
6.do-while()循环
1. 语法:
do
{
//循环体
}while(循环条件);注意:这里一定要有分号。
2.执行过程:
1.执行循环体,执行完循环体转向2
2.判断条件是否成立,如果条件为true则转向1 为false则转向3.
3.跳出循环,循环结束。
3.while与do-while的区别:
如果条件一开始就为False,对于while循环,循环体一次都不会执行。对于do-while循环体执行一次。即:while先判断后执行,do-while先执行一次再判断。
7.for循环
1. 语法:
for(表达式1;表达式2;表达式3)
{
执行语句;(循环体)
}
2. 执行过程:
1. 计算表达式1转向2
2. 计算表达式2(循环条件)若为true转向3,false转向5
3. 执行循环体转向4
4. 执行表达式3转向2
5. 循环结束
一般情况下:
表达式1:用于定义循环变量和对循环变量赋初值
表达式2:循环条件
表达式3:用于改变循环条件的值
注意:一般情况下for循环用于已知次数的循环中。
8. foreach循环
a. 语法:
foreach(数据类型 变量名 in 数组/集合)
{
循环体;}
其中in关键字前面就是定义一个迭代变量,in后面就是实现了IEnumerable 或者 IEnumerable<T> 接口的对象
b. foreach遍历数组的简单原理:“in数组名”会将数组中的元素从第0个开始到最后一个遍历出来赋给迭代变量,所以迭代变量直接就是数组元素的值。
注意:迭代变量的数据类型必须要与数组中元素类型一致。
c. 执行过程:每次遍历的时候将当前遍历出来的数组元素拿出来赋给迭代变量,然后再执行循环体。
d. for循环和foreach循环的区别与联系:
1. 相同点:
都可以遍历数组中的元素。
2. 不同点:
1> for循环遍历出来的是数组元素的下标,foreach遍历出来的直接就数组元素。
2> for循环可以从指定下标开始遍历,而foreach只能从第0个开始直到最后一个结束。
3> 在for循环中可以更改遍历出来元素的值,而在foreach中不能更改遍历出来的值(迭代变量的值)。
4> for循环中可以得到当前遍历出来的值以外的值(即上一个值和下一个值,因为for是通过遍历索引来取值的)而foreach只能得到当前遍历出来的元素值。因为foreach是直接遍历数组中元素的值。
e. 什么情况下用foreach来遍历数组中的元素?
1. 从头开始遍历直到最后一个。
2. 只取值不改值
9.break,continue,goto跳转语句
1. break:
a.可以用于switch-case中,跳出switch。
b.用在循环中,用来立即跳出(终止)循环(跳出的是当前循环)。
2. continue
continue用于循环中,程序一旦执行到continue就立即结束本次循环直接进入下一次循环(for有点特殊,先对循环变量操作后在判断进行)。
3. goto
语法:
语句1;
goto lable;
语句2;
……..
语句n;
lable:;
Console.WriteLine(“我只执行了语句1其它的都跳过了!”);
Console.ReadKey();
文字叙述语法:先定义一个标签面后面加冒号(如:lable:),再goto标签名,程序将直接跳到标签名后面的语句继续执行。
10.三元表达式
1. 语法:
表达式1?表达式2:表达式3;
执行过程:首先计算表达式1(表达式1要最终能被计算成一个bool类型的值),若表达式1的值为true,则表达式2就作为整个三元表达式的值;若为false则表达式3就作为整个三元表达式的值。
注意:表达式2和表达式3的类型一定要相同或者相兼容。
11.数组
1. 数组作用:
数组可以一次帮我们声明多个相同类型的变量,这些变量在内存中是连续存储的。
a.一维数组
1.声明:数据类型[] 数组名称=new 数据类型[数组长度];
注意:数值型数组一旦声明,里面的每一个元素都被初始化0,(即赋默认值0)。引用型数组一旦声明,里面的元素都会被初始化为null。
2. 一维数组的访问:数组名[下标]。
3. 数组初始化器“{}“的用法:
a.Int[] number={1,3,9}//声明时赋值.
b.Int[] number=new int[3]{5,8,3}(注:初始化器里面的元素个数必须跟数组的长度相等,若不相等就会报错) 如下:
Int[] number=new int[5]{5,8,3}->错的!初始化器里面的元素个数是3数组长度是5,因3!=5所以报错。
c.Int[] number=new int[]{5,8,3}->对的。因为初始化器会自动帮我们判断数组长度,所以可以不写数组长度。
b.二维数组
二维数组: 是用来声明指定行指定列的1个表格结构.
a.语法:数据类型[,] 数组名称=new 数据类型[行数,列数]
如:int[,] arr = new int[3, 4];
当执行到这句话的时候,就表示声明了1个3行4列的1个表格结构数据。
b.元素个数:二维数组的元素个数=行数*列数;
c.为元素赋值:数组名[行数,列数]=值;
d.取值:与赋值相对应。1>即:数组名[行数,列数];
2>通过函数GetValue(行数,列数);
e.Length 属性的值代表数组中元素的个数,若是二维数组Length的值等于=行数*列数;
f.数组有个GetLength(参数)方法,传入0得到行数,传入1得到列数。(GetLength中参数的本质是维度,该方法即:得到指定维度的长度)
g.利用数组初始化器为二维数组赋值:
如:int[,] arr = { { 1, 1, 3, 5 }, { 4, 5, 6, 4 }, { 7, 8, 9, 6 } };
h. 数组的Rank属性可以得到数组的维度。
如:Console.WriteLine(arr.Rank);就会输出2
i.遍历:foreach最简单,直接遍历值。
如:使用for循环遍历二维数组
for(int i =0;i<arr.GetLength(0);i++)
{
for(int j = 0;j<arr.GetLength(1);j++)
{
arr[i,j]
}
}
C.交错数组
1.交错数组的本质是一个一维数组,只不过这个一维数组中的元素是一个数组类型。
2.交错数组的声明:
数据类型[][] 数组名称=new 数据类型[数组长度][](因为交错数组的元素类型是数组类型,为方便记忆我们可以把蓝色字体看成一个数组类型
这样就跟我们声明普通数组是一样的,差别就是把数组长度写在前面一个[]中)
如:int[][] num=new int[3][];
3.为交错数组赋值:
因为交错数组是一个一维数组并且这个一维数组的数据类型是数组类型,所以给交错数组赋值的时候我们应该给一个数组。即我们可把交错数
组看成是行数确定而每行的列数不确定。
用数据初始化器赋值:
int[][] arr = new int[3][] { new int[] { 12, 11, 11 }, new int[] { 1, 2, 3, 456, 1 }, new int[] { 12, 13, 14 } };
解释:红色字体这部分等价于:int[] arry= new int[] { 12, 11, 11 },我们依然赋值时赋的是数组,只是把数组名省略了。
4.遍历:
因为交错数组里面的元素是一个数组,所以我们在用foreach遍历的时候需要遍历两遍,因为第一遍遍历出来的元素依然是个数组,第二遍才是值;而for循
环在这里显得还简单些,因为本质是一维数组,第一次循环出来的元素是个数组,第二次循环把第一次循环的值(数组)当做第二个循环的数组即可。
d.数组中常用的函数
1>Array.Reverse(数组名);反转函数,将数组中所有元素的顺序倒过来(反过来。倒数第一个变第一个,第一个变倒数第一个)。只支持一维数组。
2>Array.Indexof(数组名,指定元素);求数组中指定元素的下标,如果没有则返回“-1”,若果有就返回该元素在数组中的下标。只支持一维数组。(该函数的返回类型是int)。
3>Contains()函数,语法:数组名.Contains(元素值);判断数组中是否包含某一元素。该函数的返回值类型是bool类型,包含为true,不包含为false。
注意:被检测的元素类型必须与数组中元素类型一致,并且此函数只支持一维数组。