标签:rem 动作 作用域 删除元素 中标 相互 程序 height tac
使用标准化的图形方案,分析某个功能的实现步骤
	流程图的形状
		

	流程控制语句
		if  判断
		switch 选择
		循环
			while
			do while
			for
			foreach
	代码格式:
if (条件1)
{
	代码1
}
else if (条件2)
{
	代码2
}
else
{
	代码n
}
	示例
		

	可以简单理解为,耨个变量在定义时所在的大括号。在大括号内,该变量有效,大括号外无效
	在某个位置定义变量的时候,变量名不得与作用域覆盖该位置的变量名相同
实现代码:
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("欢迎来到XX银行,您可以在这里进行定期存款,获得的收益将按照以下规则进行计算:\n1.存款期1年以内,按照4%的年利率计算利息\n2.存款期2-5年,按照4.8%的年利率计算利息\n3.存款期5年以上(不含5年),按照5.2%的年利率计算利息\n4.若存款金额超过50万(含50万),存款到期后,还会获得10%的收益\n");
            Console.Write("请输入的存款金额(万元):");
            decimal amount = decimal.Parse(Console.ReadLine());
            Console.Write("请输入您的存款期限(年):");
            int year = int.Parse(Console.ReadLine());
            //总收益=利息收益+额外收益
            //利息收益=本金*利率*年限
            decimal rate;  //定义利率为rate
            if (year == 1)
            {
                rate = 0.04m;
            }
            else if (year >= 2 && year <= 5)
            {
                rate = 0.048m;
            }
            else
            {
                rate = 0.052m;
            }
            decimal ratemoney=amount*rate*year*10000;      //定义利息收益为ratemoney
            decimal extramoney = 0;   //定义额外收益为extamoney
            if (amount >= 50)
            {
                extramoney = ratemoney * 0.1m;
            }
            decimal all = ratemoney + extramoney;  //定义总收益为all
            Console.WriteLine("恭喜您,存款成功。"+year+"年到期后,您将获得"+ all +"元的收益。");
            Console.ReadLine();
        }
    }
	每一个switch选择都可以转换成if结构,但if结构不一定能转换为switch
	代码格式:
switch(变量或表达式)
{
	case 值1;
	代码1
	break;
	case 值2;
	代码2
	break;
	default:
	代码n
	break;
}
		switch仅支持以下类型的比较:
string、char、bool、枚举、整数
(byte、sbyte、short、vshort、
int、vint、long、vlong)
	举例
		

	代码格式:
while(循环条件)
{
	循环体
}
循环条件:可以是:值,变量,表达式;必须是bool类型
循环体:可以是任意功能,任意数量的代码
	举例
		
 
	代码格式:
do
{
	循环体
}
while(循环条件);
	举例
		
 
	代码格式
for(表达式1;循环条件;表达式2)
{
	循环体
}
表达式1:可以是任何代码,一定会执行,且只会执行一次
循环条件:可以是值。变量、表达式,必须是bool类型
表达式2:可以是任何代码,在循环体执行后执行
	举例

		
	拓展
		region指令 
书写方式
#region 描述内容
//代码
#endregion
当代码数量非常多的时候,可以将代码折叠起来
region和endregion必须成对书写,
和注释内容一样,region指令和endregion指令都不会参与编译。
也就是说,在编译生成的exe文件中,是不存在这样的指令的,它只存在于源代码中,方便阅读。
		控制台清屏
书写方式
Console.Clear(); //当程序运行到这条语句时,控制台当前的内容会被清空
			举例
 
实现代码
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("九九乘法表:");
            for (int i = 1; i <= 9; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write(i+"*"+j+"="+i*j+"\t");
                    
                }
                Console.WriteLine();
            }
                Console.WriteLine();
        }
    }
	break;
		switch  立即结束switch选择
		循环    立即结束循环
	continue;
		循环 立即结束当次循环,进入下一次循环
	根据需求,在一组数据中,找到需要的数据
	查找问题的解决方案:简单查找
	举例
		

第五章   数组与集合
		
5-01 数组
示例①:
int[ ] numbers=new int[5];
numbers[0]=3;
numbers[1]=-2;
numbers[3]=numbers[0]*+numbers[1];
Console,WriteLine(numbers[3]);
Console,WriteLine(numbers.Length);
示例②:
string[ ] strs=new string[3];
strs[0]="a";
strs[1]="b";
strs[2]="c";
Console.Write(strs,Length);
简化→ →
string[ ]strs={"a","b","c"};
Console.Write(strs.Length);
	C#的数组类型
		数组
			能存放任意多个同类型的数据
				数组的索引(下标)是一个int类型的数字,索引(下标)从0开始,依次为数组中每一个数组项编号
		字符串类型
		字符类型
		布尔类型
		数字类型
		只能存放一个数据
	数组的代码书写
eg:
int [ ] number=new int[s];
		数组的声明与赋值
			声明:数据类型[ ]变量名;(数据类型是数据数据项的类型)
			赋值:变量名=new 数据类型[长度];(
数据类型必须和声明的数据类型完全一致
[长度]表示数组的长度
)
			合并书写:数据类型[ ]变量名=new 数据类型[长度];
		
数据项的读取与修改
			读取: 变量名[索引]  (
从指定数组中,通过编号取出某一个数组项的值。返回类型与数组项相同
)
			修改 变量名[索引]=值;
	
读取数组长度: 变量名.Length
		返回类型:int
		使用数组的初始化器,可以在数组创建时,对其每一项赋值
	
数组项的默认值
一个数组创建后,它每一个数组项的值,为数组项类型的默认值
		数字类型,默认值为0
		bool类型,默认值为false
		char类型,默认值为\0
		string类型。默认值为null
	一个数组在创建后,它的长度固定不变
	代码示例:
int[ ]numbers=new int[3];
numbers[0]=3;
numbers=new int[2];
Console.WriteLine(numbers[0]);
	适合使用数组的场景
		保存100以内所有的质数
		保存太阳系中所有已知行星的质量
		保存标准扑克牌中的所有牌面数据
		保存一个星期的所有期
		其他定长的数据场景
	不适合使用数组的场景
		保存一个班的学生信息
		保存一年中所有日期
		保存斗地主游戏中某玩家的手牌数据
		保存游戏中某玩家的游戏信息
		其他不定长的数据场景
	是指从数组的第一项开始,依次取完数组的所有项。要实现数组的遍历,可以使用循环
	循环变量从0开始,依次取到数组的最大下标(数组长度-1)
	举例
		

		
实现代码
 class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入数组的长度:");
            int n = int.Parse(Console.ReadLine());
            int[] nums = new int[n];
            //数组的长度为n
            for (int i = 0; i < n; i++)
            {
                Console.Write("请输入数组第" + (i + 1) + "项的值:");
                nums[i] = int.Parse(Console.ReadLine());
            }
            Console.Clear();
            //执行到此步骤时清屏
            Console.WriteLine("您输入的数字排序后如下:");
            for (int i = 0; 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;
                     }
                 }
    
            }
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums[i]);
                if (i < nums.Length - 1)
                {
                    Console.Write(" ");
                }
                if (i == nums.Length - 1)
                {
                    Console.WriteLine(" ");
                }
            }
            //按从小到大的顺序排列
            Console.WriteLine("其中,以下数字为奇数:");
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] % 2 != 0)
                {
                    Console.Write(nums[i]);
                }
                if (i < n)
                {
                    Console.Write(" ");
                }
                if (i == nums.Length - 1)
                {
                    Console.WriteLine(" ");
                }
            }
            //算出奇数
            Console.Write("以下数字是质数:");
            for (int i = 0; i < nums.Length; i++)
            { 
               
                for (int j = 2; j < nums[i]; j++)
                {
                    bool isFind = false;
                    if (nums[i] % j == 0)
                    {
                        isFind = true;
                        
                    }
                    if (!isFind)
                    {
                        Console.Write(nums[i]);
                    }
                    if (i < n)
                    {
                        Console.Write(" ");
                    }
                    break;
                    
                    
                 }
                //算出质数
            }
                Console.ReadLine();
        }
    }
实现代码
Console.Write("请输入数组的长度:");
            int n = int.Parse(Console.ReadLine());
            int[] nums = new int[n];
            //数组的长度为n
            for (int i = 0; i < n; i++)
            {
                Console.Write("请输入数组第" + (i + 1) + "项的值:");
                nums[i] = int.Parse(Console.ReadLine());
            }
            Console.Clear();
            //执行到此步骤时清屏
            Console.WriteLine("您输入的数字排序后如下:");
            for (int i = 0; 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;
                    }
}
            }
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write(nums[i]);
                if (i < nums.Length - 1)
                {
                    Console.Write(" ");
                }
                if (i == nums.Length - 1)
                {
                    Console.WriteLine(" ");
                }
            }
            //按从小到大的顺序排列
            Console.WriteLine("其中,以下数字为奇数:");
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i] % 2 != 0)
                {
                    Console.Write(nums[i]);
                }
                if (i < n)
                {
                    Console.Write(" ");
                }
                if (i == nums.Length - 1)
                {
                    Console.WriteLine(" ");
                }
            }
            //算出奇数
            Console.Write("以下数字是质数:");
            for (int i = 0; i < nums.Length; i++)
            {
                for (int j = 2; j < nums[i]; j++)
                {
                    bool isFind = false;
                    if (nums[i] % j == 0)
                    {
                        isFind = true;
                    }
                    if (!isFind)
                    {
                        Console.Write(nums[i]);
                    }
                    if (i < n)
                    {
                        Console.Write(" ");
                    }
                    break;
                }
                //算出质数
            }
Console.ReadLine();
	数组
		定长(用于保存固定数量的数据)
		占用内存少
		遍历速度快
	集合
		不定长(保存的数据数量,可以在程序的执行过程中,不断的发生变化)
		占用内存多
		遍历速度慢
	C#语言支持的集合类型:LIst、Queue、Stack、LinkedList、HashSet、其他..
	
以上,用于储存多个同类型的数据
在功能上,数组能实现的所有功能,集合都能实现
反之,集合能实现的所有功能,数组难以实现
List集合
		创建
			定义:List<数据类型>变量名;
			赋值:变量名=new List<数据类型>();
			初始化器:变量名=new List<数据类型>{元素1;元素2,...,元素n};
		操作
			添加元素:变量名.Add(要添加的数据);
			插入元素:变量名.Insert(索引,要插入的数据);
			删除元素:变量名.RemoveAt(索引);变量名.Remove(数据);
			修改元素:变量名[索引]=值;
			获取元素数量:变量名.Count
	只能用于遍历数组或集合
	代码格式:
foreach(数据类型 变量 in 数组或集合 )
{
	循环体
}
※数据类型是变量的类型
数组或集合与其每一项的类型相同
	从数组或集合中,依次取出每一项的数据,每取出一项数据,就把数据赋值给循环变量。每一次赋值后,运行依次循环体。
	代码示例

		 
	※注意:foreach循环也叫只读循环,在循环体中,不能更改集合或数组
实现代码
List<int> nums = new List<int>();
            while(true)
            {
                #region 输出集合内容
                Console.WriteLine("集合中现有的内容如下:");
                Console.WriteLine("================================================");
                if (nums.Count == 0)
                {
                    Console.WriteLine("集合中没有元素");
                }
                else     //遍历输出集合内容
                {
                    foreach (int item in nums)
                    {
                       
                        Console.Write(item+"\t");
                    }
                }
                Console.WriteLine();
                Console.WriteLine("================================================");
                #endregion
                #region   提示菜单,并获取用户输入的菜单选项
                Console.WriteLine("1.添加数据");
                Console.WriteLine("2.删除数据");
                Console.WriteLine("3.修改数据");
                Console.WriteLine("4.升序排序");
                Console.WriteLine("0.退出程序");
                Console.Write("请选择(0-4):");
                int a=int .Parse (Console .ReadLine ());
                #endregion
                #region  根据用户输入的不同,做不同的处理
                if (a == 0)
                {
                    break;
                }
                else if (a == 1)
                {
                    Console.Write("请输入要添加的数据:");
                    int data = int.Parse(Console .ReadLine ());
                    nums.Add(data);
                }
                else if (a == 2)  //删除数据
                {
                    Console.Write("请输入要删除的下标(0-"+(nums.Count-1)+"):");
                    int b = int.Parse(Console .ReadLine ());
                    if (b < 0 && b > (nums.Count - 1))
                    {
                        Console.WriteLine("输入错误,请重新输入。按回车键继续..");
                        Console.ReadLine();
                    }
              
                    else
                    {
                        nums.RemoveAt(b);
                    }
                }
                else if (a == 3)  //修改数据
                {
                    Console.WriteLine("请输入要删除的下标(0-"+(nums.Count-1)+"):");
                    int xia = int.Parse(Console .ReadLine ());
                    Console.Write("请输入新的数据:");
                    int newdata = int.Parse(Console .ReadLine ());
                    if (xia < 0 && xia > (nums.Count - 1))  //下标不在范围之内
                    {
                        Console.WriteLine("输入错误,请重新输入。按回车键继续..");
                        Console.ReadLine();
                    }
                  
                    else
                    {
                        nums[xia] = newdata;
                    }
}
                else if (a == 4)  //升序排序
                {
                    for (int j = 0; j < (nums.Count - 1); j++)
                    {
                        for (int k = j + 1; k < nums.Count; k++)
                        {
                            if (nums[j] > nums[k])
                            {
                                int temp = nums[j];
                                nums[j] = nums[k];
                                nums[k] = temp;
                            }
                        }
                    }
                }
                #endregion
Console.Clear();
	函数:具有独立功能,并能通过名称重复使用的代码。使用函数可以减少重复代码,并使代码简洁易读。
	函数调用:调用函数,就是使用函数,通过函数名去执行函数体   
当程序运行到调用函数的语句中,会执行该函数的函数体。
 ※函数在调用前必须先声明
	函数调用的语法:  函数名();
	函数的声明:函数的声明必须在类中,指给一段代码取名称
	函数调用的语法:static void 函数名( )
{
	//函数体
}
		示例

	作用域
		作用域:一个变量,仅在它所定义的大括号中有效。不同作用域中的变量,拥有独立的内存空间。当作用域结束时,该变量的数据会从内存中移除
		函数中的作用域
			·   不同的函数之间,变量相互独立,互不干扰
			·   每一次对函数的调用,都是独立运行
	 标识符
		在代码中,需要自行命名的位置。包括:变量名、函数名、类名、接口名、委托名、其他 ,并且必须符合标识符命名的规范
		C#语言中标识符的命名规范
			标识符:必须由数字、字母、下划线组成,并且不能以数字开头。若不满足该要求,则出现编译错误
			具体标识符的其他要求
				变量名 首字母小写
				函数名 首字母大写
※驼峰命名法
望文知义
	参数:要完成一个动作,需要知道的额外条件
	声明带参数的函数:
static  void 函数名(参数列表)
{
	//注释内容
}
	参数列表书写语法:数据类型 参数名,数据类型,参数名,...
	声明带参数函数的示例
		
	函数声明时使用的参数,叫做形参;函数调用时使用的参数,叫做形参
	调用语法:
函数名{实参列表}
	实参列表中每个实参的书写语法:
值 或变量 或表达式
多个实参之间使用逗号分隔,实参的数量和类型必须和形参完全对应
	总结
		函数去完成一件事时,如果需要额外的条件,就必须声明参数
		声明参数时,必须指定每个形参的类型和名称
		调用函数时,实参的数量和类型和名称
		实参和形参相互独立
	返回值:事情做完的返回结果
	函数声明的语法:
static 返回类型 函数名(形参列表)
{
	//函数体
}
	返回类型:函数完成后,产生的结果的类型
(void   是一种特殊的返回类型,表示:无返回类型)
	return 关键字
		用于在函数体中返回结果
		使用语法: return 值 或变量 或表达式;
	  return;  //仅能写在返回类型为void的函数中
		当代吗运行到return语句时:
立即结束函数
返回return关键字后面的值、变量或表达式的结果
		示例:  static bool IsOdd(int n)
{  
  if (n%2!=0 )
    {
		return true;
     }
     {
		return false;
      }
}
	总结
		如果一个函数完成后需要产生一个结果,该函数就有返回值
		在声明一个带返回值的函数时,必须指明返回值的类型
		函数仅能有一个返回类型
		如果一个函数不需要返回,那么它的返回类型是void
		使用return关键字来返回结果
		返回的结果必须和声明的返回类型匹配
		代码运行到return语句,会立即结束函数,然后返回return后面的结果
	函数调用语法:  函数名(实参列表)
		函数调用是一个表达式
(返回类型与函数声明的返回类型一致)
函数声明:
//将两个数相加的结果返回
static int Add(int a ,int b,)
{
	return a+b;
}
函数调用:
Add(3,5)  //该表达式返回int类型
//将3和5相加的结果,保存到变量a中
int a=Add(3,5);
Console.WriteLine(3,5);

		
	总结
		函数是指一个独立的功能
		完成功能需要的额外条件,就是函数的参数
		完成功能后产生的结果,就是函数的返回值
		函数分为声明和调用
		声明的完整语法:  static 返回类型 函数名 ()形参列表 {函数体}
		调用的完整语法:函数名(实参列表)  //该表达式的类型为函数的返回类型
	函数签名,是一个函数的函数名、参数列表、返回类型的统称
根据它实现函数调用,根据它实现函数体
	函数名   →代表函数的功能
	参数列表  →函数为完成它的功能,需要的额外信息
	返回类型  →函数完成功能后,产生的结果的类型
                  如果不需要产生结果,则返回类型为void
	函数签名示例
		//从指定的链接地址下载文件,保存到指定的路径
static void DownLoadFile(string fileURL,string savePath)
		//根据提供的年和月,得到这个月的天数
static int GetDaysOfMonth(int year,int month)
		//将提供的字符串,颠倒顺序后得到颠倒后的字符串
static string ReverseString(string str)
	函数调用者的视角:对于函数调用者,仅需要知道函数签名即可
函数实现者的视角:对于函数调用者,仅需要知道函数签名即可
	编写正确的函数签名
		仔细阅读需求,理解需求的含义
		为函数取一个贴合需求含义的函数名
		仔细考虑,该函数是否需要参数,需要哪些参数
		仔细考虑,该函数是否需要返回类型
	总结
		函数签名,是函数、参数列表、返回类型的统称
		函数签名能够完整的阐述函数功能
		无论是调用函数还是实现函数,仅需要知道函数签名即可
		在编写函数时,必须保证函数签名与需求相符
	单行注释
	多行注释
(以上,通常写到函数体外,用于描述函数体外的代码)
	文档注释
(通常写在函数体内,用于描述函数体内的代码)
		如:
	函数重载(overload):是指多个函数可以使用同一个函数名,只要它们的参数列表不同(参数的数量不同或参数的类型不同)
	函数重载示例
		static void Test(int a,int b)
		static void Test(int a,int b,int c)
(参数数量不同,可以完成重载)
	重载的作用:函数重载,可以将意义相近的函数,命名为相同的名称,从而降低了调用的难度
	调用重载函数:和普通调用函数完全一样,计算机会根据传递的实参类型,匹配最合适的重载
	总结
		函数重载是指多个函数使用同一个名称
		重载的条件是参数的数量或类型不同
		重载的作用是降低调用难度
		当调用重载的函数时,计算机会根据实参自动匹配
	调用函数:在一个函数体中,都可以调用函数
只要代码运行到调用函数的语句,就会去执行调用的函数体
	应用案例
		
	总结
		在任何一个函数体中,都可以调用函数
		在编写函数体时,可以充分利用已有的函数完成功能从而降低开发难度
	递归,是指一个函数,直接或间接的调用自身
	应用案例
		
	总结
		递归,是指一个函数,直接或间接的调用自身
		递归必须有终止条件,否则,将会出现无限递归
		无限递归会耗尽内存,导致程序崩溃,必须避免
标签:rem 动作 作用域 删除元素 中标 相互 程序 height tac
原文地址:http://www.cnblogs.com/touchone/p/7400442.html