天天看點

C#基礎-045 練習題

/*
          1、求出1—100内的所有質數的和。(質數:隻能被1和本身整除(),1不是質數也不是合數)
         */
        public static void Task01()
        {
            int sum = ;
            for (int i = ; i < ; i++)
            {
                if (IsPrime(i))
                {
                    //Console.WriteLine(i);
                    sum += i;
                }
            }
            Console.WriteLine("1—100内的所有質數的和為{0}", sum);
            //Console.ReadKey();
        }
        static bool IsPrime(int r)
        {
            for (int i = ; i <= r / ; i++)
            {
                if (r % i == )
                {
                    return false;
                }
            }
            return true;
        }
           
/*  2、列印圖形,例如傳入2 
          輸出
          AA
          BBBB
          傳入4 輸出
          AA
          BBBB
          CCCCCC
          DDDDDDDD
         */
        public static void Task02()
        {
            Console.WriteLine("請輸入要列印的行數");
            int lines = int.Parse(Console.ReadLine());
            for (int i = ; i <= lines; i++)
            {
                for (int j = ; j <  * i; j++)
                {
                    Console.Write((char)('A' + i - ));
                }
                Console.WriteLine();
            }
        }
           
/*  3、寫一個方法把字元串中的大寫字母轉換成小寫,小寫字母轉化成大寫。
         */
        public static void Task03()
        {
            string str = "sffsDdssgCHHJHVJHVJHDDSDFGdg";
            Console.WriteLine("大小寫翻轉後為{0}", Conversion(str));
        }
        static string Conversion(string str)
        {
            char word;
            string words = string.Empty;
            for (int i = ; i < str.Length; i++)
            {
                word = str[i];
                if (word >= 'A' && word < 'Z')
                {

                    words += char.ToLower(word);
                }
                else if (word >= 'a' && word < 'z')
                {

                    words += char.ToUpper(word); ;
                }
            }
            return words;
        }
           
/* 4、合并數組 把兩個數組中索引相同的元素進行相加
           例如:
                arr1 = {1,2,3,4,5,6}
                arr2 = {2,3,4,5,6,7,8}
           合并後 {3,5,7,9,11,13,8}
          【注意兩個數組的長度不确定  第一個數組的長度可能大于第二個數組的長度】
       */
        public static void Task04()
        {
            Random ran = new Random();
            Console.WriteLine("第一個随機數組:");
            int[] numberArr1 = new int[ran.Next(, )];
            for (int i = ; i < numberArr1.Length; i++)
            {
                int a = ran.Next(, );
                if (!(IsContains(a, numberArr1)))
                {
                    numberArr1[i] = a;
                }
            }
            Show(numberArr1);

            Console.WriteLine("第二個随機數組:");
            int[] numberArr2 = new int[ran.Next(, )];
            for (int i = ; i < numberArr2.Length; i++)
            {
                int b = ran.Next(, );
                if (!(IsContains(b, numberArr2)))
                {
                    numberArr2[i] = b;
                }
            }
            Show(numberArr2);

            int bigLength = ;
            int smallLength = ;
            if (numberArr1.Length > numberArr2.Length)
            {
                smallLength = numberArr2.Length;
                bigLength = numberArr1.Length;
            }
            else
            {
                bigLength = numberArr2.Length;
                smallLength = numberArr1.Length;
            }

            int[] resultArr = new int[bigLength];
            for (int i = ; i < smallLength; i++)
            {
                resultArr[i] = numberArr1[i] + numberArr2[i];
            }
            for (int i = smallLength; i < bigLength; i++)
            {
                if (numberArr1.Length > numberArr2.Length)
                {
                    resultArr[i] = numberArr1[i];
                }
                else
                {
                    resultArr[i] = numberArr2[i];
                }
            }

            Console.WriteLine("合并後的結果為:");
            Show(resultArr);
        }
        static bool IsContains(int number, int[] arr)
        {
            for (int i = ; i < arr.Length; i++)
            {
                if (arr[i] == number)
                {
                    return true;
                }
            }
            return false;
        }
        static void Show(int[] arr)
        {
            for (int i = ; i < arr.Length; i++)
            {
                Console.Write("{0}  ", arr[i]);
            }
            Console.WriteLine();
        }
           
/*
        5、根據規律寫方法
        1 1 2 3 5 8 13 21。。。
        傳入6
        傳回13

        傳入7
        傳回21
        */
        public static void Task05()
        {
            Console.WriteLine("請輸入一個大于二的整數,Enter鍵得到相應的斐波那契數");
            int num = int.Parse(Console.ReadLine());
            Console.WriteLine(FabniceNumber(num));
        }
        static int FabniceNumber(int num)
        {
            int[] number = new int[num + ];
            number[] = ;
            number[] = ;
            for (int i = ; i < num + ; i++)
            {
                number[i] = number[i - ] + number[i - ];
            }
            return number[num];
        }
           
/*
        6、列印楊輝三角
                     1
                    1 1
                   1 2 1 
                  1 3 3 1
                 1 4 6 4 1
               1 5 10 10 5 1
        */
        public static void Task06()
        {
            Console.WriteLine("請輸入需要列印的楊輝三角的行數");
            int num = int.Parse(Console.ReadLine());
            int[,] arr = new int[num, num];
            for (int i = ; i < num; i++)
            {
                for (int j = ; j < num - i; j++)
                {
                    Console.Write("    ");
                }
                for (int j = ; j <= i; j++)
                {
                    //第一種方法
                    //if (j == 0 || j == i)
                    //{
                    //    arr[i, j] = 1;
                    //}
                    //else
                    //{
                    //    arr[i, j] = arr[i - 1, j] + arr[i - 1, j - 1];
                    //}
                    //方法二:三目運算
                    arr[i, j] = j ==  || j == i ?  : arr[i - , j] + arr[i - , j - ];
                    Console.Write(arr[i, j].ToString() + "      ");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
           
/*
        7、統計字元串中的數字字元,大寫字母,小寫字母的個數  【注 out】
       */
        public static void Task07()
        {
            string str = "afH856";
            int numberCount = ;
            int bigWordsCount = ;
            int smallWordsCount = ;
            Count(str, out bigWordsCount, out smallWordsCount,out numberCount);
            //方法1
            //for (int i = 0; i < str.Length; i++)
            //{
            //    if (str[i] >= 'A' && str[i] < 'Z')
            //    {
            //        bigWordsCount++;
            //    }
            //    else if (str[i] >= 'a' && str[i] < 'z')
            //    {
            //        smallWordsCount++;
            //    }
            //    else if ( str[i] >= '0' && str[i] <= '9')
            //    {
            //        numberCount++;
            //    }
            //}
            Console.WriteLine("{0}中有大寫字母{1}個,小寫字母{2}個,數字{3}個", str, bigWordsCount, smallWordsCount, numberCount);
        }
        //方法二
        static void Count(string str, out int bigWordsCount, out int smallWordsCount ,out int numberCount)
        {
            numberCount = ;
            bigWordsCount = ;
            smallWordsCount = ;
            for (int i = ; i < str.Length; i++)
            {
                if (str[i] >= 'A' && str[i] < 'Z')
                {
                    bigWordsCount++;
                }
                else if (str[i] >= 'a' && str[i] < 'z')
                {
                    smallWordsCount++;
                }
                else if (str[i] >= '0' && str[i] <= '9')
                {
                    numberCount++;
                }
            }
        }
           
/*
        8、編寫一個學生類:
           學生類包括:
           字段:名字、年齡、所屬省份、所屬市
           測試:
           1産生5個學生對象。字段值通過構造器自定義即可。
           2根據省份輸出學員中該省份的所有學生資訊。
           3根據所屬市輸出學員中該市的所有學生資訊。
       */

        public static void Task08()
        {
            Student[] stu = new Student[];
            stu[] = new Student("小明", , "河南省", "鄭州");
            stu[] = new Student("小紅", , "河北省", "石家莊");
            stu[] = new Student("小張", , "河南省", "開封");
            stu[] = new Student("小李", , "山東省", "濟南");
            stu[] = new Student("小宋", , "山東省", "聊城");
            Console.WriteLine("-----------------------------");
            ProvinceShow(stu, "山東省");
            ProvinceShow(stu, "河北省");
            ProvinceShow(stu, "河南省");
            Console.WriteLine("-----------------------------");
            CityShow(stu, "開封");
            CityShow(stu, "濟南 ");
            CityShow(stu, "石家莊");

        }
        static void ProvinceShow(Student[] arr, string province)
        {
            for (int i = ; i < arr.Length; i++)
            {
                if (province == arr[i].Province)
                {
                    arr[i].Show();
                }
            }
        }
        static void CityShow(Student[] arr, string city)
        {
            for (int i = ; i < arr.Length; i++)
            {
                if (city == arr[i].City)
                {
                    arr[i].Show();
                }
            }
        }
           
/*
        9、編寫一個立體幾何類SolidGeometry,裡面有一個求體積GetVolume的方法,有一個求兩個立體幾何距離的方法
           編寫一個Sphere類,字段包含:半徑,x坐标,y坐标,z坐标
           1.求一個球體的體積
           2.判斷兩個球是否相離
       */
        public static void Task09()
        {
            Sphere s = new Sphere(, , , );
            s.GetVolume(s.Radius);
            Sphere q = new Sphere(, , , );
            s.GetInfo(s, q);
        }
           
/*
        10.建立一個玩家類,
           字段:類型、名稱、生命值、魔法值、攻擊力、生存狀态
           初始化:生命值、魔法值、攻擊力的初值分别為800、100、50;
           玩家類有一個攻擊方法:
           public void Attack(Player player)。
           測試要求:
           1.産生兩個玩家對象:野蠻人和魔法師(用類型區分)
           2.野蠻人每次攻擊造成的傷害在[攻擊力-10] 到[攻擊力+10]之間(這個傷害值是一個随機值),
           3.野蠻人在攻擊時有25%的幾率産生1次暴擊,每次暴擊産生的傷害是原來的3倍;
           4.魔法師每次攻擊造成的傷害在攻擊力的80%~100%之間(也是一個随機數),魔法師每次攻擊消耗18點魔法,它會額外減少對方12%的生命值。
           5.讓兩個對象進行PK,就是你打我一下,我打你一下,直到有一方死亡為止;野蠻人先攻擊。
       */
        public static void Task10()
        {
            Player player = new Player("亞瑟", "野蠻人", , , , "正常");
            Player enemy = new Player("虞姬", "法師", , , , "正常");
            Random random = new Random();
            int count = ;
            while (true)
            {
                Console.WriteLine("------------第{0}回合---------------", count);
                player.PlayerAttack(enemy, random.Next(, ));
                enemy.ToString1();
                if (enemy._Hp <= )
                {
                    Console.WriteLine("虞姬犧牲了");
                    break;
                }
                else
                {
                    Console.WriteLine("虞姬還有{0}血", enemy._Hp);
                }
                Console.WriteLine("***************");
                enemy.EnemyAttack(player);
                player.ToString2();
                if (player._Hp <= )
                {
                    Console.WriteLine("亞瑟玩完了");
                    break;
                }
                else
                {
                    Console.WriteLine("亞瑟還有{0}血", player._Hp);
                }
                count++;
                Console.WriteLine();
                Console.WriteLine();
            }