[萌新]3月份C#练习记录

KirisameRenko
KirisameRenko 3月21日
  • 在其它设备中阅读本文章

检测输入是否合法

       int x;
        Console.WriteLine("请输入整数");
        while (true)//用于检测输入的值是否符合要求
        {
            try//若try中有一行代码出现错误则try中剩下的代码都不会执行了
            {
                x = Convert.ToInt32(Console.ReadLine());
                break;//若成功输入则直接结束while循环
            }
            catch
            {
                Console.WriteLine("请输入整数");
            }
        }
        Console.WriteLine("x = {0}",x);
        Console.ReadKey();

阶乘计算

namespace thetest
{
    class Program
    {
        //阶乘
       
        static long f(long n,long temp)//阶乘递归函数,自己想的
        {
            if (n == 0)
            {
                return temp;
            }
            temp *= n;
            if (n == 1)
            {
                return temp;
            }

            return f(n-1,temp);//增加第二个参数是为了能够使第二次调用自己时能够存储上一次函数的temp结果
        }
        //阶乘函数
        static int Factorial(int n)//搜的
        {
            if (n == 1 | n == 0)
                return 1;
            return n * Factorial(n - 1);
            /*
             * 没想到的原因,到return n*Factorial(n-1);语句时,调用Factorial(n-1)时
             * 实际Factorial(n)还并未结束
             * 仍停留在 “return n * Factorial(n - 1);”语句中
             */
        }
        static void Main(string[] args)
        {
            //Console.Write("输入n的值:");
            //long n = Convert.ToInt64(Console.ReadLine());
            //long kekka;
            //kekka = f(n,1);
            //Console.WriteLine("{1}的阶乘为 ={1}! =  {0}",kekka,n);
            //Console.ReadKey();
            Console.Write("输入n的值:");
            int n = Convert.ToInt32(Console.ReadLine());
            int temp = Factorial(n);
            Console.WriteLine("{1}的阶乘为 ={1}! =  {0}",temp, n);
            Console.ReadKey();

        }
    }
}

递归认识

    namespace 递归_
{
    class Program
    {
        static int f(int n)//函数调用自身称为递归
        {
            if (n == 0)//函数终止的条件
                return 2;
            if (n == 1)
                return 3;

            return f(n - 1) + f(n - 2);
        }
        static void Main(string[] args)
        {
            int res = f(40);
            Console.WriteLine(res);
            int res2 = f(2);
            Console.WriteLine(res2);

            Console.ReadKey();
        }
    }
}

委托的简单使用

    namespace 委托的使用
{
    /*定义一个委托跟函数差不多,区别在于
    1.定义委托需要加上 delegate 关键字
    2.委托的定义不需要函数体
    */
    public delegate double keisann(double x, double y);
    class Program
    {
        static double pluss(double x, double y)
        {
            return x * y;
        }
        static double unpluss(double x, double y)
        {
            return x / y;
        }
        static void Main(string[] args)
        {
            keisann de;//利用我们定义的委托类型声明了一个新的变量
            de = pluss;//当给一个委托的变量赋值的时候,函数返回值跟参数列表必须一样,否则无法赋值
            Console.WriteLine("{0} ",de(2.24,44.7));

            de = unpluss;
            Console.WriteLine("{0}", de(13214.24, 44.7));

            Console.ReadKey();

        }
 }

选择排序与函数的使用

排序功能 8 到 36 行
主函数 37 到 62 行

namespace Selection_sort
{
    class Program
    {
        /*
         * 调用函数 实现选择排序
         */
        static int[] Getdata(int[] array) //获取数组进行比较
        {
            int min;
            int kawari;
            for (int i = 0; i < array.Length - 1 ; ++i)
            {
                min = i;
                /*仔细啊仔细,记得把变量名搞的明显一点别再搞i,i_2,i_3了
                * ++i_2写成++i 这东西要不是现在代码比较短,不然以后写长了鬼才找得出来啊
                */
                for (int i_2 = i; i_2 < array.Length; ++i_2)
                {                                           
                    if (array[min] > array[i_2])
                    {
                        //查找最小值位置
                        min = i_2;
                        Console.Write(min);
                        Console.Write(" ");
                    }                                                                                                           
                }
                if (min != i)//赋值
                {
                    kawari = array[i];
                    array[i] = array[min];
                    array[min] = kawari;                                    
                }
            }
            return array;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("输入要排序的数字的个数");//获取数组长度
            int len = Convert.ToInt32(Console.ReadLine());//
            int[] array = new int[len];//

            Console.WriteLine("请输入要排序的数字的数据");//通过for循环获取数据
            for (int i = 0; i < array.Length; ++i)
            {
                Console.Write("数据【{0}】 = ",i+1);                
                array[i] = Convert.ToInt32(Console.ReadLine());
            }

            int[] getarray = Getdata(array);//输出处理完成后的数组     

            Console.WriteLine();
            Console.WriteLine("整理后的数据为:");
            int count = 1;

            foreach (int temp in getarray)
            {
                Console.WriteLine("数据【{0}】 = {1}", count,temp);
                ++count;
            }
            Console.ReadKey();
        }
    }
}

结构体函数使用

namespace struct_hanshu

{

struct CName
{
    public string FirstName;
    public string LastName;

    public string GetName()
    {
        return FirstName +" "+ LastName;
    }
}
class Program
{
    static void Main(string[] args)
    {
        CName yourname;
        yourname.FirstName = "Kirisame";
        yourname.LastName = "Marisa";
        //Console.WriteLine("Your name is "+yourname.FirstName+" "+yourname.LastName);
        Console.WriteLine("Your name is "+yourname.GetName());//结构函数的调用
        Console.ReadKey();
    }
}

}

参数数组 与 数组参数

namespace canshushuzu
{
    //建立一个参数不确定的函数  参数数组
    //参数数组 并非 数组参数
    
    class Program
    {
        static int Sum(int[] array)
        {
            int sum = 0;
            for (int i = 0; i < array.Length; ++i)
                sum += array[i];
            return sum;
        }
        /*
          有参数数组的函数与上述函数的区别在于函数的调用上
         */
        static int Sums(params int[] array)
        {
            int sum = 0;
            for (int i = 0; i < array.Length; ++i)
                sum += array[i];
            return sum;
        }
        static void Main(string[] args)
        {
            int sum = Sum(new int[]{21,213,43,231,536,3432,322});//数组参数需要自己构造数组
            Console.WriteLine("sum = {0}",sum);
            int sum2 = Sums(214,213,5321,321,532,213,5321);//含参数数组的函数的调用
            Console.WriteLine("sum2 = {0}", sum2);
            Console.ReadKey();

            //额外,函数的重载,当函数功能相同但参数不同时使用
            //调用函数靠实参的不同来识别函数

        }
    }
}

计算一个数的因子个数

static int[] GetD(int number)// 返回值为数组

{
    int count = 0;//计数,有多少个因子
    for (int i = 1; i <= number; ++i)
    {
        if (number % i == 0)
            count++;                                    
    }
    int[] array = new int[count];
    int seki = 0;//定位
    for (int i = 1; i <= number;++i)
    {
        if (number % i == 0)
        {
            array[seki] = i;//赋值
            seki++;
        }
    }
    return array;
}
static void Main(string[] args)
{
    int number = Convert.ToInt32(Console.ReadLine());
    int[] array = GetD(number);//可以直接接受来次该函数所返回的数组

    foreach (int s in array)//依次将数组array的值赋给 零时 s ,对输出数组来说非常便利
    {
        Console.Write("{0} ", s);
    }
    Console.WriteLine();

    if (array.Length == 2)//额外
        Console.WriteLine("number = {0} 为质数",number);
    Console.ReadKey();

}
    GiriNeko
    GiriNeko  2020-03-30, 23:07

    哇,是大佬