第八节 ref和out 运用,方法调用,阶乘和递归

View Code
案例1:税后工资

     static void Main(string[] args)
        {
            float c = 0.1f;//税率

            Console.Write("请输入税收前工资:");
           float pay=float.Parse(Console.ReadLine());

            float b = Getpay(pay,c);//税后工资
            Console.WriteLine("请输入税后工资:{0}", b);
            Console.ReadKey();


        }
        /// <summary>
        /// 计算工资
        /// </summary>
        /// <param name="pay"></param>税收前工资
        /// <param name="c"></param>税率
        /// <returns></returns>
       
        static float Getpay(float pay,float c)
        { 
        //税后工资
            float b = 0;
            if (pay <= 1600)
            {
                b = pay;
            }
            else
            {
                b = (pay - 1600) * (1 - c) + 1600;
            }

            return b;


        }

 

————————————————————————————————————————————————————————

案例2:ref的运用

 static void Main(string[] args)
        {
            /*对int类型进行传参是传值的方式
            *传值会将实参的值复制一份给形参,那么对行参的修改无法影响实参的变化
            *我们可以使用ref关键字(传引用),这样的实参和形参实际上使用的是同一个变量
            *那么对形参的修改会影响到实参,所以下列能够做到互相的效果*/


            int num1 = 10;
            int num2 = 5;
            Console.WriteLine("交换前两个数是{0},{1}",num1,num2);

            // Swap(num1,num2);//值传递不会改变
           Swap(ref num1, ref num2);
             Console.WriteLine("交换后两个数是{0},{1}",num1,num2);
             Console.ReadKey();

        }

        static void Swap(ref int num1,ref int num2)//加上ref 值才能引用
        {
            int temp;
            temp=num1;
            num1=num2;
            num2=temp;
        
        }

——————————————————————————————————————————————————————

案例3 out关键字的运用

 static void Main(string[] args)
        {
            /*如果希望一个方法有多个返回值,那么我们可以使用out关键字
             * out关键字实际上是传引用的方式,你对out定义的关键字的
             * 形参做了更改,是会影响到实参的,所以以下的传递out的变量i
             * 能够得到对形参更改后的值,其实out和ref关键字效果是一样的
             * 都是传引用,但是out关键字通常用于多个返回值。而ref关键字通常是
             * 实参传递给形参能够影响到实参的变化的情况下使用
             * 注意使用ref关键字传递的实参,须赋值所传递的变量
             * 使用out不需要赋值(因为常用于多个返回)
             * eee*/
            int i;
            int t = TestMethod(out i);
            Console.WriteLine(t);
            Console.WriteLine(i);
            Console.ReadKey();
        }

        static int TestMethod(out int num)
        {
            num = 10;
            return 20;
        
        }

 

——————————————————————————————————————————————————————

案例4  圆的半径

static void Main(string[] args)
        {
            Console.Write("请输入圆的半径:");
            double radius = double.Parse(Console.ReadLine());
            double c;
            double s=caclCircle(radius,out c);

            Console.WriteLine("周长:{0}", c);
            Console.WriteLine("面积:{0}", s);
            Console.ReadKey();

        }
        /// <summary>
        /// 计算圆的面积和周长
        /// </summary>
        /// <returns></returns>
        static double caclCircle(double r,out double c)
        { 
            
            //求圆的面积和周长,因为该函数需要返回两个值所以使用out关键字

            c = 2 * Math.PI * r;//周长
            double s = Math.PI * r * r;//面积
            return s;


        }

————————————————————————————————————————————————————————

案例5 方法调用

static void Main(string[] args)
        {
            //方法调用,最简单的方法
            
           p();
           Console.ReadKey();
            
        }

        static void p()
        {
            int pay;

            float a = 0.1f;//C# 默认是double,加个f编译器就知道是float的类型。
            float b;
            Console.Write("请输入工资:");
            pay = int.Parse(Console.ReadLine());
         

            if (pay < 1600)

                b = pay;

            else

                b = (pay - 1600) * (1-a) + 1600;

            Console.WriteLine("交税收后的工资:{0}",b);
        }

————————————————————————————————————————————————————————

案例6  阶乘

static void Main(string[] args)
        {
            Console.Write("请输入要阶乘的数:");
            double a = double.Parse(Console.ReadLine());

            double r = jc(a);

            Console.Write(r);
          
            Console.ReadKey();

        }
        static double jc(double n)
        {

            double result=1;
            for (int i = 1; i <= n; i++) //result=1,result *=n,n--
            {

                result = result * i;
                
            }
            return result;


            //if (n == 1)
            //{
            //    return 1;
            //}
            //else
            //{
    
            //        return n * jc(n - 1);
  
            //}


        }


——————————————————————————————————————————————————————

案例 7 调用前后值的变化

static void Main(string[] args)
        {
            Console.WriteLine("请数入两个数:");
            double num1 = double.Parse(Console.ReadLine());
            double num2=double.Parse(Console.ReadLine());

            Console.WriteLine("方法调用前两个数的值是:{0},{1}", num1, num2);

            cd( num1,ref num2);

            Console.WriteLine("方法调用后两个数的值是:{0},{1}",num1,num2);
            Console.ReadKey();
        }

        static void  cd( double num1,ref double num2)
        {
            Console.WriteLine("刚进入两个数的值是:{0},{1}", num1, num2);
            
            num1 = num1 + 1;
            num2 = num2 + 1;

            
            Console.WriteLine("离开前两个数的值是:{0},{1}", num1, num2);
        
        
        }

 

——————————————————————————————————————————————————————

案例8 最大值和索引

static void Main(string[] args)
        {
            
            int[] aaa ={ 3, 2, 4, 9, 8 };
            int sy;//
            int zd=ddd(aaa,out  sy);//
           

            Console.Write("最大{0}索引{1}",zd,sy);
            Console.ReadKey();

        }

        static int ddd(int[] aaa,out int sy)
        {
            int max = 0;
                for (int i = 1; i < aaa.Length-1; i++)
                {
                    if (aaa[i]> aaa[max])
                    {
                        max = i;
                    }
                }
                sy = max + 1;
               return aaa[max];

      }

————————————————————————————————————————————————————-

案例9 递归!

 static void Main(string[] args)
        {
            Console.WriteLine("输出1,1,2,3,5,8......递归");
            int n = int.Parse(Console.ReadLine());
            int m = aaa(n);
            Console.WriteLine(m);
            Console.ReadKey();
 
                  

        }

        public static int aaa(int i)
        {

            if (i == 0)
                return 0;
            else if (i == 1)
                return 1;

            else
                return aaa(i - 1) + aaa(i - 2);
        
        
        }

 

posted @ 2012-06-20 10:27  ComBat  阅读(177)  评论(0编辑  收藏  举报