C#语言基础(数组)

 

c#语言中的快捷键

 

注意:

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;i<array.Length-1;i++) {
                if (array[i+1]>max)
                    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<month-1;i++) {
                num += daysOfMonth[i];
            }
            num += day;
            Console.WriteLine(year+"年"+month+"月"+day+"日是第{0}天",num);
        }
        

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:
       /// <summary>
        /// 购买彩票
        /// </summary>
        /// <returns>所有球的号码的数组ticket</returns>
        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;//返回中奖等级
        }

彩票小游戏运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值