C#总结2-2

第四章程序流程

4.01流程图
1流程图:使用标准化的图性方案,分析某个功能的实习步骤。
2.根据功能画出流程图,根据流程图实现代码的编写。将功能分析和代码书写分离,更加专注,便于解决复杂的问题。
3.
4.02if判断
1.其中(条件1)(条件2)为bool类型,(代码1)(代码2)(代码N)可重复任意次数。
2.if判断的功能是对流程控制语句,除此还有,switch表选择,循环语句。
3.三目运算符就是简化版的if判断。
4.判断一个是是零,正奇数,正偶数,负奇数还是正偶数
4.03变量的作用域
1.变量的作用域,可以简单的理解为,某个变量在定义时所在的大括号。在括号内,该变量有效,大括号外无效。
Boxing
Date
在某个位置定义变量的时候,变量名不得与作用域覆盖该位置的变量名相同
4.04收益计算器
4.05switch选择
1.其中break必须书写,(值1),(值2)必须是具体的值不能是变量或表达式,并且能够与(变量或表达式)进行比较。
2.switch可以转换成if判断,而if判断不一定能转换成switch,switch仅支持以下类型:string,char,枚举,整数(不能用double类型),bool,等。
3.
4.06while循环
1.循环条件可以是值,变量,表达式,返回类型必须是bool类型。循环体可以是任意功能,任意数量的代码。
2.循环:重复做一件事。循环语句有while,do while,for,foreach。
4.07 dowhile循环
Reading
2.注意变量的作用域。
4.08for循环
1.表达式2也可以是任意代码,在循环体执行后执行。
4.09打印九九乘法表
4.10break和continue
1.break
1.switch 立即结束switch的选择
2.循环立即结束循环(结束当前循环)。

2.continue 只作用于循环,表示立即结束当前循环,进入下一循环。

4.11查找问题
1.根据需求,在一组数据中找到需要的数据。
2.简单查找:在样本中,依次寻找目标数据,一定会使用循环。
3.循环一定是从样本的第一个数据开始,在达到样本最后一个数据后结束,循环体中一定包括一个判断,改判断用于判断当前的数据,是否目标数据。
第五章

5.01数组
1.字符串类型,数字类型 ,bool(布尔)类型;只能存放一个数据。而数组能够存放任意多个同类型的数据。
2.数组的索引或者下标,是一个int类型的数字,从数字0开始递增。
3.数组的声明和赋值
a.声明:数据类型[] 变量名;
b.变量名=new 数据类型[长度];(其中[长度]int类型表示数组的长度。也可以进行合并声明,变量名和数据类型必须一致。
4.数组项的读取与修改
a.读取:变量名[索引];从指定数组中通过编号取出某一数组项的值,其中[索引]为数组项的编号,不能超过最大下标。
b.修改:变量名[索引]=值;
5.数组项创建后,它没一个数组项的值,为数组项类型的默认值。如;数字类型默认值为0;char类型默认值为\0(空字符);bool类型默认值为flase;string类型默认值为null(表示空)。
6.数组初始化器:变量名=new 数据类型[长度]{元素1,元素2,.......元素n};
5.02数组的定长性
1.一个数组在创建后,它的长度固定不变。
2.如int[] numbers=new int[3]l;
numbers[0]=3;
numbers=new int[2];重建一个长度为2的数组。
Console.Writeline(number[0]);输出为0。
3.数组适用于数据数量固定的场景如;保存100以内的质数。
5.03数组的遍历
1.数组的遍历指从数组的第一项开始,依次取完该数组的所有项。
2.循环变量从0开始,依次取到数组最大的下标(数组的长度-1)。在循环体中,使用循环变量作为下标,即可取出数组每一项的值。
3.
5.04交换排序
1.交换排序:可以看出,不管nums的长度是多少,都可以使用这样的代码格式:
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
}
因此,只要解决了注释部分的问题,整个排序就完成了!
那如何把i-(nums.Length-1)范围内的最小数字提到位置i呢?
在这个问题上,交换排序使用以下方式完成:
1. 将位置i和位置i+1进行比较,如果比i+1大,则交换
2. 将位置i和位置i+2进行比较,如果比i+2大,则交换
3. ……
4. 将位置i和位置nums.Length-1进行比较,如果比nums.Length-1大,则交换
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[i] > nums[j])
{
//交换
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}

2.冒泡排序可以看出,不管nums的长度是多少,都可以使用这样的代码格式:
for (int i = nums.Length - 1; i > 0; i--)
{
//在 0-i 范围内,将该范围内最大的数字沉到i
}
因此,只要解决了注释部分的问题,整个排序就完成了!
那如何把0-i范围内的最大数字沉到位置i呢?
在这个问题上,冒泡排序使用以下方式完成:
1. 将位置0和位置1进行比较,如果前者比后者大,则交换
2. 将位置1和位置2进行比较,如果前者比后者大,则交换
3. ……
4. 将位置i-1和位置i进行比较,如果前者比后者大,则交换
for (int i = nums.Length - 1; i > 0; i--)
{
//在 0-i 范围内,将该范围内最大的数字沉到i
for (int j = 0; j < i; j++)
{
if (nums[j] > nums[j+1])
{
//交换
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}

3.选择排序选择排序的总体思路和交换排序的总体思路相似,都是将某个范围内的最小数提到该范围内的第一位,它的代码结构跟交换排序也是完全相同的:
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
}
知识在实现注释部分产生了差异,选择排序的思路是:
1. 首先找到 i - (nums.Length-1) 范围内的最小数所在的下标,假设找到的下标保存到变量index中
2. 然后将nums[i]和nums[index]的值交换
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
//1. 首先找到 i - (nums.Length-1) 范围内的最小数所在的下标
int index = i; //先假设最小数的下标是i
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[j] < nums[index])
{
//发现了更小的数
index = j;//记录下标
}
}
//2. 然后将nums[i]和nums[index]的值交换
int temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
}

5.05数组分析器
5.06集合
1.数组和集合都用于存储多个同类型的数据。数组:1.定长2.占用内存少,遍历速度快。集合:1.不定长,保存的数据数量可以在程序的执行过程中不断发生变化。2.占用内存多,遍历速度慢。
2.在功能上数字能实现的所有功能,集合都能实现,反之,集合能实现的某些功能,数组难以实现。
3.c#语言支持的集合类型如:List(最常见的集合类型),Queve,stack,hashset。
4.
5.07foreach循环
1.foreach,循环只能用于遍历数组和集合。

5.01数组
1.字符串类型,数字类型 ,bool(布尔)类型;只能存放一个数据。而数组能够存放任意多个同类型的数据。
2.数组的索引或者下标,是一个int类型的数字,从数字0开始递增。
3.数组的声明和赋值
a.声明:数据类型[] 变量名;
b.变量名=new 数据类型[长度];(其中[长度]int类型表示数组的长度。也可以进行合并声明,变量名和数据类型必须一致。
4.数组项的读取与修改
a.读取:变量名[索引];从指定数组中通过编号取出某一数组项的值,其中[索引]为数组项的编号,不能超过最大下标。
b.修改:变量名[索引]=值;
5.数组项创建后,它没一个数组项的值,为数组项类型的默认值。如;数字类型默认值为0;char类型默认值为\0(空字符);bool类型默认值为flase;string类型默认值为null(表示空)。
6.数组初始化器:变量名=new 数据类型[长度]{元素1,元素2,.......元素n};
5.02数组的定长性
1.一个数组在创建后,它的长度固定不变。
2.如int[] numbers=new int[3]l;
numbers[0]=3;
numbers=new int[2];重建一个长度为2的数组。
Console.Writeline(number[0]);输出为0。
3.数组适用于数据数量固定的场景如;保存100以内的质数。
5.03数组的遍历
1.数组的遍历指从数组的第一项开始,依次取完该数组的所有项。
2.循环变量从0开始,依次取到数组最大的下标(数组的长度-1)。在循环体中,使用循环变量作为下标,即可取出数组每一项的值。
3.
5.04交换排序
1.交换排序:可以看出,不管nums的长度是多少,都可以使用这样的代码格式:
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
}
因此,只要解决了注释部分的问题,整个排序就完成了!
那如何把i-(nums.Length-1)范围内的最小数字提到位置i呢?
在这个问题上,交换排序使用以下方式完成:
1. 将位置i和位置i+1进行比较,如果比i+1大,则交换
2. 将位置i和位置i+2进行比较,如果比i+2大,则交换
3. ……
4. 将位置i和位置nums.Length-1进行比较,如果比nums.Length-1大,则交换
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[i] > nums[j])
{
//交换
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}

2.冒泡排序可以看出,不管nums的长度是多少,都可以使用这样的代码格式:
for (int i = nums.Length - 1; i > 0; i--)
{
//在 0-i 范围内,将该范围内最大的数字沉到i
}
因此,只要解决了注释部分的问题,整个排序就完成了!
那如何把0-i范围内的最大数字沉到位置i呢?
在这个问题上,冒泡排序使用以下方式完成:
1. 将位置0和位置1进行比较,如果前者比后者大,则交换
2. 将位置1和位置2进行比较,如果前者比后者大,则交换
3. ……
4. 将位置i-1和位置i进行比较,如果前者比后者大,则交换
for (int i = nums.Length - 1; i > 0; i--)
{
//在 0-i 范围内,将该范围内最大的数字沉到i
for (int j = 0; j < i; j++)
{
if (nums[j] > nums[j+1])
{
//交换
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}

3.选择排序选择排序的总体思路和交换排序的总体思路相似,都是将某个范围内的最小数提到该范围内的第一位,它的代码结构跟交换排序也是完全相同的:
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
}
知识在实现注释部分产生了差异,选择排序的思路是:
1. 首先找到 i - (nums.Length-1) 范围内的最小数所在的下标,假设找到的下标保存到变量index中
2. 然后将nums[i]和nums[index]的值交换
for (int i = 0; i < nums.Length - 1; i++)
{
//在 i-(nums.Length-1) 范围内,将该范围内最小的数字提到i
//1. 首先找到 i - (nums.Length-1) 范围内的最小数所在的下标
int index = i; //先假设最小数的下标是i
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[j] < nums[index])
{
//发现了更小的数
index = j;//记录下标
}
}
//2. 然后将nums[i]和nums[index]的值交换
int temp = nums[i];
nums[i] = nums[index];
nums[index] = temp;
}

5.05数组分析器
5.06集合
1.数组和集合都用于存储多个同类型的数据。数组:1.定长2.占用内存少,遍历速度快。集合:1.不定长,保存的数据数量可以在程序的执行过程中不断发生变化。2.占用内存多,遍历速度慢。
2.在功能上数字能实现的所有功能,集合都能实现,反之,集合能实现的某些功能,数组难以实现。
3.c#语言支持的集合类型如:List(最常见的集合类型),Queve,stack,hashset。
4.
5.07foreach循环
1.foreach,循环只能用于遍历数组和集合。
第7章函数

7.01认识函数
1.重复的代码有以下缺点:1.效率低2.成本高3.易错4.难以维修。5.难以阅读。
2.函数具有独立的功能,并能通过名称重复使用的代码
3.函数使用称为函数的调用,在调用前必须先声明
5.函数声明的语法:static void 函数名(){//函数体(任意功能,任意数量的代码)}
6.当程序运行到调用函数的语句时,会执行该函数的函数体。函数调用的语法:函数名();。
7.02函数的作用域和标识符
1.一个变量,仅在它所定义的大括号有效。
2.不同的作用域中的变量,拥有独立的内存空间
3.当作用域结束时,该数量的数据会从内存中移除。
4.不同的函数之间,变量相互独立,互不干扰,每一次对函数的调用,都是独立运行。
5.函数名的命名首字母要大写,驼峰命名法,做到望文知意。如:GetPrime。
7.03声明带参数的函数
1.参数,要完成一件事需要知道的额外条件。参数列表书写语法:
数据类型 参数名,数据类型 参数名,........。
2.在函数体中,可以将参数当做已经声明的变量来使用。
3.参数的作用域,仅在函数体中有效。
4.声明函数时,参数必须包括数据类型和参数名。
7.04调用带参数的函数
1.函数声明语法:
public static void 函数名(形参列表){//注释内容}
形参列表中每个形参书写语法:数据类型 参数名,数据类型 参数名,........。
2.函数调用语法:函数名(实参列表)
实参列表中每个实参的书写语法:值或变量或表达式其中不能标注类型。
3.实参的数量和类型必须和形参完全对应(与变量名无关)。
4.当调用带参数的函数时,会将实参的数据传递(赋值)给形参。
子主题 5
子主题 6
7.05声明带返回值的函数
1.函数:做一件事;参数:做一件需要的额外条件;返回值:事情做完后产生的结果。
2.函数声明的语法:static 返回类型 函数名(形参列表){//函数体}
函数完成后产生的结果类型(void是一种特殊的返回类型,表示无返回类型)
3.return关键字
用于函数体中返回结果,使用语法:return 值或变量或表达式;
当代码运行到return语句时:1.立即结束函数2.返回return关键字后面的值,变量或表达式的结果。

7.06调用带返回值的函数
1.函数调用语法:函数名(实参列表);
函数调用是一个表达式,返回类型与函数声明的返回类型一致,函数是指一个独立的功能。
2.主函数需要保存调用函数的结果。

7.07函数签名
1.函数签名是一个函数的函数名,参数列表,返回类型的统称。
2.函数名能代表函数的功能(Add表示相加,IsPrime判断是不是质数)。
3.参数列表:函数为完成它的功能,需要的额外信息。
4.返回类型:函数完成功能后,产生的结果类型,如果不需要产生结果返回类型为void。函数签名,是函数体中实现的目标。
7.08文档注释
1.代码的注释有单行注释,多行注释,文档注释。
2.单行注释和多行注释通常写在函数体内,用于描述函数体内的代码。
文档注释通常写到函数体外的代码。VS中3个斜杠表示///。
7.09函数的重载
1.函数重载(overload)是指多个函数可以使用同一函数名,只需要它们的参数列表不同(参数的数量不同或参数类型不同)。
2.重载的作用:函数重载,可以将意义相近的函数,命名为相同的名称,从而降低了调用的难度。
4.调用重载的函数和调用普通函数完全一样。计算机会根据传递的实参类型,匹配最合适的重载。
7.10函数的相互调用
1.在任何一个函数体中,都可以调用函数
2.在编写函数体中,可以充分利用自己有的函数完成功能从而降低难度
7.11递归
1.递归是指一个函数,直接或间接的调用自身。
2.递归必须有终止条件,否则会出现无限递归。无限递归会导致内存崩溃,必须避免。
3.斐波拉契数列

时间: 2024-11-03 01:29:49