1.枚举和常量
(1) 常量 语法:const 类型 变量名=变量值; 如:const int pi=3.14;
在定义时赋值,在其他地方不允许赋值。
(2) 枚举
让我们定义一种枚举类型并且在定义这种类型时我们要指定这个类型的所有值。
语法: enum 自己起的类型名称{值1,值1,值3…..值n}
注:枚举的定义一般和类定义在同一个级别,这样,在同一个命名空间下的所有的类就都可以使用这个枚举了(方法中/类中也可以)。
举例演示: enum Gender{男,女}
在main函数中调用 Gender sex=Gender.男;
switch(sex)
{
case Gender.男:
Console.WriteLine(“男性”);
break;
case Gender.女:
Console.WriteLine(“女性”);
break;
}
枚举的作用:1) 限制用户不能随意赋值,只能在定义枚举时的列举的值中选择。
2) 不需要死记每一个值是什么,只需要选择相应的值。
注:1) 定义枚举时,值不能是int类型。
2) 枚举类型的变量都可以强制转换成一个int类型。
3) 枚举的值在定义时是有一个默认编号的,编号从0开始。
如何把一个字符串转换为枚举类型:
(自己定义的枚举类型)(Enum.Parse(typeof(自枚),”待转换的字符串”));
- 结构体
(1) 为什么要用结构?
1) 比如我们上课讲的为了存储一个人的信息,要声明一组变量,当我们要存储几个人的信息时,就要申明n组变量,非常麻烦。
2) 存储一个人信息的这几个变量之间没有关系,容易记乱。
语法: 访问修饰符 struct 结构名
{
定义结构成员;
}
定义好一个结构后,就可以直接声明相应的变量了,声明好变量后,通过变量名.成员名
- 数组
1) 数组可以帮我们一次声明多个相同类型的变量,这些变量在内存中是连续存储的。
2) 数组声明语法: 数据类型[] 数组名=new 数据类型[数组长度];
例如:int[] score=new int[5];
注解:声明了一个数组,数组名叫score。通俗点说就是声明了一个数组,里面包含5个int类型的变量,数组名叫score,里面的5个int类型的变量叫做:数组的元素。
3) 如何访问数组:通过下标(索引)来访问数组。 数组名[下标];
4) int类型数组一旦声明,里面的每个元素被初始化为0。
5) 通过数组名.Length,可以得到数组的长度。
6) Console.clear(); 清空屏幕上面的信息
- 冒泡排序
让数组中的元素两两比较(第i个与第i+1个比较),经过n(i-1)编两两比较,数组中的元素能够按照我们预期的规律排序,要从大到小排序,我们进行两两比较的时候用“<“。
例如:
int[] scores = { 23, 45, 67, 67, 87, 9, 8, 89 };
for (int i = 0; i < scores.Length - 1; i++)
{
for (int j = 0; j < scores.Length - 1 - i; j++)
{
if (scores[j] < scores[j + 1])
{
int temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
for(int i=0;i<scores.Length;i++)
{
Console.WriteLine(scores[i]);
}
Console.ReadKey();
- 方法(函数)介绍
(1) 方法就是将一堆代码进行重用的一种机制,方法就是一段代码,这段代码可能有输入的值(参数),可能会返回值,一个方法就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给他它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫做参数,返回的执行结果就叫返回值。
(2) Console.ReadLine();就是一个有返回结果的函数。
Console.WriteLine(“Hello”);就是一个有执行参数的函数,只有告诉WriteLine()被执行的数据它才知道如何执行,
int i=Convert.ToInt32(“22”); 则是一个既有参数又有返回值的函数。
(3) 有了方法(函数)写代码就像拼积木,C#中的各种各样的技术其实就是通过for,if等这些基础的语法将不同的方法按照一定的逻辑组织起来。
(4) 功能:用来复用代码的,当我们在一个程序中反复的写了同样的代码,那一般情况下,我们可以把需要重复写的代码定义在一个方法中,用的时候只需要调用就OK了。
方法定义的语法: [访问修饰符] [static] 返回值类型 方法名([参数])
{
方法体;
}
注:1) 方法一般要定义在类中
2) 如果方法没有返回值,则返回值类型为void。
3) 如果方法没有参数,也不能省略()。
(5) 命名规则 :方法名开头大写,参数名开头小写,参数名、变量名要有意义。
(6) 方法的调用,对于静态方法,如果在同一个类中,直接写名字调用就行了。
(7) return 可以立即退出方法。
- 变量的作用域(变量的生命周期)
(1) 在方法中定义的变量称为局部变量,其作用域从定义开始,到其所在的大括号结束。
(2) 在一个方法中想要访问另一个方法中的变量,怎么办?
两种解决方法,参数和返回值。
(3) 在方法名后面的括号内定义变量,叫做定义这个方法的参数。这里定义的变量用于接收调用者传过来的信息。
注:如果一个方法中一旦有参数,那么调用者就必须传参数, 并且传参数的个数和对应位置上的类型必须一致。
- 返回值
(1) 当调用者想访问我们方法中的变量时,就可以通过返回值返回。例如:
string s=Console.ReadLine(); int i=Convert.ToInt32(“22”);
(2) 为什么方法前面能够定义一个变量收到方法的值,是因为在方法中使用了返回值,或者说是只要在方法中有了返回值,那么在调用方法中,前面就应该用一个变量来接收方法的返回值。
注:一个方法中只能有一个返回值。
(3) 一旦一个方法有返回值,那么在这个方法值中就必须通过return语句返回一个值,并且这个值要与返回值类型是相同的。
语法: return 值;
注意:一个变量一旦定义在方法外,类的里面。就叫做类的字段。这个变量可以被本类的所有方法所访问,但是要注意:静态方法只能访问静态字段。
- 方法的重载
(1) 什么叫方法重载?
一般在同一个类中,方法名相同并且方法参数的个数不同的或者对应位置上的类型不同,才能构成方法的重载。
注:方法重载和返回值没有关系。
- 方法的out参数和ref参数
(1) 通过参数来返回值。
static voidMain(string[] args)
{
int number;
int result=Test(out number);
Console.WriteLine(“number={0} result={1}”,number,result);
Console.ReadKey();
}
public static int Test(out int a)
{
a=20;
return a;
}
如上代码,实现步骤为:
1) 在方法的参数类型前加out,那么传参数的时候,也必须在number前加out。表明这个参数不是传入的,而是用来传出值的。
2) 如果参数是以out的形式传入的,那么在传入前可以不付初值。
3) 在方法中对于由out修饰的的参数,必须赋值,并且必须在使用前赋值。
举例: string s=”123”; int re;
if(int.TryParse(s,out re)==true)
{
Console.WriteLine(“能够转换成功”+re);
}
else
{
Console.WriteLine(“转换失败!”);
}
举例:myTryParse的实现 写一个MyTryParse方法,要求用户输入一个字符串,如果这个字符串能转换为int类型,则方法返回true,并且转换后的int类型数据通过方法的参数传输,如果字符串不能转换为int类型,则方法返回false,那么out传出的参数将没有意义,在方法中随意赋3个值就行?
static voidMain(string[] args)
{
string s = "123sds";
int re;
if (IntTryParse(s, out re))
{
Console.WriteLine("成¨¦功|!ê?" + re);
}
else
{
Console.WriteLine("失º¡ì败㨹!ê?");
}
Console.ReadKey();
}
static bool IntTryParse(string s, out int result)
{
result = 0;
try
{
result = Convert.ToInt32(s);
return true;
}
catch
{
return false;
}
}
(2) ref参数
1) out用于传出值,在方法中必须对out修饰的参数进行赋初值。
2) ref可以理解成双向的,既可以传入也可以传出。
3) 再传参数的过程中,如果参数有out或者ref修饰的话,那么改变方法中的参数变量的值,调用者方法中的值也会相应改变。
举例演示:数组参数返回值。
static voidMain(string[] args)
{
int[] nums = { 1, 3, 2, 5, 4, 6 };
int max, min, sum;
sum = compute(nums, out max, out min);
Console.WriteLine("数组的和为:{0} 最大值是{1} 最小值是{2}", sum, max, min);
Console.ReadKey();
}
static int compute(int[] numbers, out int max, out int min)
{
int sum = 0;
max = numbers[0];
min = numbers[0];
for (int i = 0; i < numbers.Length; i++)
{
sum += numbers[i];
if (numbers[i] > max)
{
max = numbers[i];
}
if (numbers[i] < min)
{
min = numbers[i];
}
}
return sum;
}