注意:
1、二进制无法精确表示1/10,就像十进制无法精确表示1/3。对于精度较高的场合会导致代码的缺陷,可以使用decimal代替。
调试:查看各个变量的取值,找到程序的错误
1、在可能出错的行处加断点
2、按F5 启动调试
3、按F11 逐语句执行
4、shift+F5 停止调试
标准化输出格式
Console.WriteLine("金额为:{0:c}",10); Console.WriteLine("{0:d2}",5);//05 Console.WriteLine("{0:f1}",1.26);//1.3 根据精度四舍五入 Console.WriteLine("{0:p}", 0.1);// 10.00% Console.WriteLine("{0:p1}", 0.1);// 10.0% Console.WriteLine("{0:p0}", 0.1);// 10% //空字符 char c1='\0'; //隐式转换:小范围到大范围的自动转换 比如 byte---->int byte b1 = 10; int i1 = b1; //显示转换:大范围到小范围的需要强制类型转换。 比如int---->byte int i2 = 10; byte b2 = (byte)i2; byte b=1; b+=3; b=(byte)(b+3);//相加就认为是int类型了
//递归 必须要有出口 //优势:将复杂问题简单化 //阶层的计算 private static int getFactorial(int num) { if (num == 1) return 1; return num * getFactorial(num - 1); } //计算参数为8的结果 //1-2+3-4+5-6..... private static int funNum(int num) { if (num == 1) return 1; if (num % 2 == 0) return funNum(num - 1)-num;//类似于:7-8 else return funNum(num - 1)+num;//类似于:2+3 }
数组的定义:
数据类型[] 数组名;--------> int[] a;
初始化数组:
数组名 = new 数据类型[元素总数]; --------------> a=new int[3];
//返回结果为一个数组 private static float[] scoreArray() { //数组 Console.WriteLine("请输入学生总人数:"); int count = int.Parse(Console.ReadLine()); //申明一个数组,并且为数组分配空间 float[] score = new float[count]; for (int i = 0; i < score.Length;) { Console.WriteLine("请输入第{0}个学生成绩:", i + 1); float sc = float.Parse(Console.ReadLine()); if (sc >= 0 && sc <= 100) score[i++] = sc; //成绩塞进来,才加1 else Console.WriteLine("成绩有误"); } return score; } //利用刚写的方法,该方法返回的是一个数组类型 float[] array = scoreArray(); findMax(array); //定义查找数组元素最大值的方法float[] private static float findMax(float[] array) { float max = array[0]; for (int i=0;imax) max = array[i+1]; } Console.WriteLine(max); return max; } //数组的其他写法 初始化+赋值 string[] arr = new string[2] { "a", "b" }; //判断年是否为闰年 private static bool isLeapYear(int year) { return year % 4 == 0 && year % 100 != 0 || year % 400 == 0; } //算某年某月某日是当年的第几天 //比如2017-3-5是2017年的第几天 private static void getAllDays(int year,int month,int day) { //将一年中每月的天数都存到数组中去 int[] daysOfMonth = new int[] { 31,28,31,30,31,30,31,31,30,31,30,31}; //判断是否为闰年 如果是闰年,那么2月的天数为29天 if (isLeapYear(year)) daysOfMonth[1] = 29; int num = 0; //month-1:表示过完了month-1月才能将天数加上 //因为当month=1时,则为一年的开始月 for (int i=0;i foreach
/* foreach(元素类型 变量名 in 数组名称) { 变量名 即数组每个元素 }*/ int[] array0 = new int[] { 1, 2, 3, 4, 5 }; foreach (var item in array0) { Console.WriteLine(item);// 1,2,3,4,5 将数组的元素遍历了一次 }var
//推断类型:根据所赋数据,推断类型 //适用性:数据类型名称较长 var v1 = 1; //int var v2 = "1";//string var v3 = '1';//char var v4 = true;//bool var v5 = 1.0;//double(没后缀默认为double) 数组特点
//父类引用指向子类对象 向上转型 Array arr1 = new int[2]; Array arr2= new double[2]; Array arr3= new string[2]; int[] array0 = new int[] { 1, 2, 3, 4, 5 }; int[] brr =(int[]) array0.Clone();//将array0这个数组克隆给数组brr //判断数组中是否有指定元素 bool result= Array.IndexOf(array0, 2)>=0;//存在指定元素则返回1,否则返回 -1 Array.IndexOf(array0, 2);//表示获取指定元素2在数组array0中的下标 Array.IndexOf(array0, 2)>=0;//表示判断指定元素2是否存在于数组array0中
判断一个元素是否在一个数组中存在时使用 Array.IndexOf()这个方法
买彩票小游戏(数组的练习)
static void Main(string[] args){ //玩一局彩票游戏 int[] myTicket = buyTicket();//自己先买一支彩票 int[] randomTicket = createRandomTicket();//随机生成一期中奖的号码 //查看自己购买的彩票号码 Console.WriteLine("我买的彩票为:"); foreach (var myNum in myTicket) Console.Write(myNum + "\t"); Console.WriteLine(); //查看中奖的彩票号码 Console.WriteLine("中奖的彩票为:"); foreach (var ranNum in randomTicket) Console.Write(ranNum + "\t"); Console.WriteLine(); //比对中奖的等级 Console.WriteLine("中奖的等级为:{0}", ticketEquals(myTicket, randomTicket)); } method1: ////// 购买彩票 /// ///所有球的号码的数组ticket private static int[] buyTicket() { int[] ticket = new int[7]; //6个红球 for (int i = 0; i < 6; ) { Console.WriteLine("请输入第{0}个红球号码:",i+1); int redNumber = int.Parse(Console.ReadLine()); //在将输入的红色球号码存入到数组之前需要满足以下条件: //1.输入的红球号码不能重复 //2.输入的红球号码在1-33之间 if (redNumber <1 || redNumber > 33) Console.WriteLine("购买的号码超过范围"); else if (Array.IndexOf(ticket, redNumber)>=0) Console.WriteLine("号码已经存在"); else ticket[i++] = redNumber;//以上条件都满足则该号码才能存入到数组ticket中 } //第7个蓝球 while (true) { Console.WriteLine("请输入蓝球号码:"); int blueNumber = int.Parse(Console.ReadLine()); if (blueNumber < 1 || blueNumber > 16) Console.WriteLine("购买的号码超过范围"); else { ticket[ticket.Length - 1] = blueNumber;//先将红球装入数组中,最后放蓝球 break;//将最后一个数据填入数组之后,即结束则跳出整个while循环 } } Array.Sort(ticket,0,6);//将数组前6位进行排序 return ticket; } method2: //创建一个随机的彩票数组 //先写一个静态的随机方法,方便调用 static Random random = new Random(); private static int[] createRandomTicket() { int[] ticket = new int[7]; //随机生成6个红球 for (int i = 0; i < 6;) { int redNumber=random.Next(1, 34);//随机产生1-33之间的一个数 并 给红球 //存在不相同的色号 则将该色号存入数组内 if (Array.IndexOf(ticket, redNumber) < 0) ticket[i++] = redNumber; } //随机生成一个蓝球 ticket[ticket.Length - 1] = random.Next(1, 17); //红球号码排序 从ticket的第1个数据开始,将前6个数据进行排序 Array.Sort(ticket, 0, 6); return ticket; } method3: //两个数组相互比较 private static int ticketEquals(int[] thisTicket,int[] randomTicket) { //计算红球和蓝球的中奖数量 //蓝球的中奖数量 int blueCount = thisTicket[thisTicket.Length - 1] == randomTicket[randomTicket.Length - 1] ? 1 : 0; //红球的中奖数量 判断我的第的号码在不在随机的中奖号码中 int redCount = 0; for (int i = 0; i < thisTicket.Length-1; i++) { //将thisTicket数组中的元素从0开始与randomTicket数组中的元素进行6次搜素对比 if (Array.IndexOf(randomTicket, thisTicket[i], 0, 6) >= 0) redCount++; } //查看中奖情况 int level;//设置中奖等级 if (blueCount + redCount == 7) level = 1; else if (redCount == 6) level = 2; else if (blueCount + redCount == 6) level = 3; else if (redCount + blueCount == 5) level = 4; else if (redCount + blueCount == 4) level = 5; else if (blueCount == 1) level = 6; else level = 0; return level;//返回中奖等级 }彩票小游戏运行结果