C#基础-057 综合测试题

来源:互联网 发布:安捷伦数据采集仪软件 编辑:程序博客网 时间:2024/05/16 18:26
  /*1.(10分)编写方法,返回1001-2001之间有多少个合数以及所有素数之和。*/    class Task01    {        public static void CompositeNumberAndSumPrime(int startNum, int endNum, out int compositeNum, out int sumPrime)        {            sumPrime = 0;            compositeNum = 0;            if (startNum > 1)            {                for (int i = startNum; i <= endNum; i++)                {                    if (IsPrime(i))                    {                        Console.WriteLine(i);                        sumPrime += i;                    }                    else                    {                        compositeNum++;                    }                }            }        }        public static bool IsPrime(int number)        {            for (int i = 2; i <= Math.Sqrt(number); i++)            {                if (number%i==0)                {                    return false;                }            }            return true;        }    }
 /*2.(10分) 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...  编写方法,求出这个数列的前20项之和。*/    class Task02    {        public static double Sum(int number)        {            double sum = 0;            double[] fra = Fraction(number);            for (int i = 0; i < fra.Length; i++)            {                sum += fra[i];            }            return sum;        }        public static double[] Fraction(int num)        {            double[] ret = new double[num];            double[] numerator = new double[num];            double[] denominator = new double[num];            numerator[0] = 2;            numerator[1] = 3;            denominator[0] = 1;            denominator[1] = 2;            for (int i = 2; i < num; i++)            {                numerator[i] = numerator[i - 1] + numerator[i - 2];                denominator[i] = denominator[i - 1] + denominator[i - 2];                ret[i] = numerator[i] / denominator[i];            }            ret[0] = numerator[0] / denominator[0];            ret[1] = numerator[1] / denominator[1];            return ret;        }    }
   /// <summary>    /// 3.(10分)编写方法,接收参数n,当(n=4)显示如下图形          //A          //B B B          //C C C C C          //D D D D D D D    /// </summary>    class Task03    {       public static void Show(int lines)        {            for (int i = 1; i <= lines; i++)            {                for (int j = 0;j < 2*i-1; j++)                {                    Console.Write((char)('A'+i-1)+" ");                }                Console.WriteLine();            }        }    }
 /// <summary>    ///  4.(10分)编写方法,传入一行字符,分别统计出其中汉字、英文字母、空格、数字和其它字符的个数。【注:汉字编码范围('\u4e00' - '\u9fa5')】    /// </summary>    class Task04    {        public static void Count(char[] chArr, out int chineseNum, out int wordsNum, out int spaceNum, out int figureNum, out int otherNum)        {            chineseNum = 0;            wordsNum = 0;            spaceNum = 0;            figureNum = 0;            otherNum = 0;            for (int i = 0; i < chArr.Length; i++)            {                if (chArr[i]>='a'&&chArr[i]<='z'||chArr[i] >= 'A' && chArr[i] <= 'Z')                {                    wordsNum++;                }                else if (chArr[i]>= '\u4e00'&&chArr[i]<= '\u9fa5')                {                    chineseNum++;                }                else if (chArr[i]==' ')                {                    spaceNum++;                }                else if (chArr[i]>='0'&&chArr[i]<='9')                {                    figureNum++;                }                else                {                    otherNum++;                }            }        }    }
 /*5.(10分)编写方法,输入两个正整数m和n,求其最大公约数和最小公倍数 。*/    class Task05    {        public static int GongYueShu(int m, int n)        {            int gongyue, i;            gongyue = m; //gongyue存放最大公约数                    if (gongyue > n)            {                gongyue = n; //保证gongyue为m,n中的最小者                                 }            for (i = gongyue; i >= 1; i--)  //求最大公约数                        {                if ((m % i == 0) && (n % i == 0))                {                    break;                }            }            gongyue = i;            return gongyue;        }        public static int GongBeiShu(int m, int n)        {            int gongbei, j;            gongbei = m; //gongbei存放最小公倍数                        if (gongbei < n)            {                gongbei = n; //保证gongbei为m,n中的最大者                    }            for (j = gongbei; ; j++)  //求最小公倍数                    {                if ((j % m == 0) && (j % n == 0))                    break;            }            gongbei = j;            return gongbei;        }    }
  /*6. (10分)编写方法,参数为a和n,求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字,n表示一共几个数。例如2+22+222+2222+22222(此时a=2,n=5)。*/    class Task06    {        public static int Sum(char a,int n)        {            int sum = 0;            string[] number = new string[n];            string temp = string.Empty;            for (int i = 0; i < n; i++)            {                number[i]=temp.PadLeft(i+1,a);            }            foreach (var item in number)            {                sum += int.Parse(item);            }            return sum;        }    }
   /*7.(10分)编写方法,传入数组{3,5,2,3,4,1,2,2},该方法返回新的数组,且里面的元素为重复出现的元素,如{3,2}*/    class Task07    {        public static char[] Repeat(int[] arr)        {            string temp = string.Empty;            for (int i = 0; i < arr.Length - 1; i++)            {                if (temp.Contains(arr[i].ToString()) == false)                {                    for (int j = i+1; j < arr.Length; j++)                    {                        if (arr[i] == arr[j])                        {                            temp += arr[i];                            break;                        }                    }                }                else                {                    continue;                }            }            char[] retArr = temp.ToCharArray();            return retArr;        }    }
 /*8.(10分)利用递归方法求10的阶乘的一半*/    class Task08    {        public static double Factorial(double number)        {            if (number<=1)            {                return number/2;            }            else            {                return number * Factorial(number-1);            }        }    }
  /*9.(10分)编写方法,求满足方程 x + 2y + 0.5z + 5w=200(x,y,z都小于100,大于0)的所有可能存在的变量组(x=?,y=?,z=?,w=?)*/    class Task09    {       public static void VariableArr()        {            for (int x  = 1; x < 100; x++)            {                for (int y = 1; y < 100; y++)                {                    for (int z = 1; z < 100; z++)                    {                        for (int w = 1; w < 100; w++)                        {                            if (x+2*y+0.5*z+5*w == 200)                            {                                Console.WriteLine("x={0},y={1},z={2},w={3}",x,y,z,w);                            }                           }                    }                }            }        }    }
  /*10.(10分)编写方法,参数为一个字符串,返回所有"你好"的下标,如果不存在返回-1。*/    class Task10    {        public static string SearchStringIndex(string str)        {            string temp = string.Empty;            for (int i = 0; i < str.Length; i++)            {                if (str[i] == '你' && str[i + 1] == '好')                {                    temp += i+1 + " ";                }            }            if (temp != string.Empty)            {                return temp;            }            return "-1";        }    }
 static void Main(string[] args)        {            //Show(1);            //int compositeNum = 0;            //int sumPrime = 0;            //int startNumber = 2;            //int endNumber = 10;            //Task01.CompositeNumberAndSumPrime(startNumber,endNumber,out compositeNum,out sumPrime );            //Console.WriteLine("{0}~{1}之间有{2}个合数,所有素数和为:{3}",startNumber,endNumber,compositeNum,sumPrime);            //Show(2);            //int number = 20;            //Console.WriteLine("分数序列:2/1,3/2,5/3,8/5,13/8,21/13...的前{0}项和为:{1}",number, Task02.Sum(number));            //Show(3);            //Task03.Show(8);            //Show(4);            //int chineseNum = 0;            //int wordsNum = 0;            //int spaceNum = 0;            //int figureNum = 0;            //int otherNum = 0;            //char[] chArr = { 's','f','G','^',' ', ' ', ' ', ' ', '%','5','时','建'};            //Task04.Count(chArr,out chineseNum,out wordsNum,out spaceNum,out figureNum,out otherNum);            //Console.WriteLine("这行字符中有{0}个汉字,{1}个字母,{2}个空格,{3}个数字,{4}个其他字符",chineseNum,wordsNum,spaceNum,figureNum,otherNum);            //Show(5);            //int m, n;            //Console.WriteLine("请输入一个正数,按回车键结束!");            //m = int.Parse(Console.ReadLine());            //Console.WriteLine("请再输入一个正数,按回车键结束!");            //n = int.Parse(Console.ReadLine());            //Console.WriteLine("{0}和{1}的最大公约数是 {2}", m, n, Task05.GongYueShu(m, n));            //Console.WriteLine("{0}和{1}的最小公倍数是 {2}", m, n, Task05.GongBeiShu(m, n));            //Console.ReadKey();            //Show(6);            //Console.WriteLine(Task06.Sum('8', 3));            //Show(7);            //int[] arr = { 3,5,2,3,4,1,2,2,5,4,2,2,4,3 };            //char[]chArr= Task07.Repeat(arr);            //ShowChar(chArr);            //Show(8);            //Console.WriteLine(Task08.Factorial(10));            //Show(9);            //Task09.VariableArr();            Show(10);            string str = "asbda54你好不是撒娇吧asBJBL NIHAO好记不记得爱卡基本";            Console.WriteLine(Task10.SearchStringIndex(str));        }        static void Show(int number)        {            Console.WriteLine("*************第{0}题*****************",number);        }        static void ShowChar(char[]arr)        {            for (int i = 0; i < arr.Length; i++)            {                Console.Write(arr[i]+" ");            }            Console.WriteLine();        }
原创粉丝点击