传值,只将这个变量的值给拿走,不返还,除非return赋值。
将a的值传入函数,无论这个值在函数中如何变化,不会影响main中的a
out传址,将这个变量的值拿走运算,完成后好是得返还回来(不用return)
将a的值传入函数,函数中这个值如何变化,main中的a也会跟着变化
相当于:函数中的这个值,是main中这个a的快捷方式
练习
一元二次方程求解
方法一
/// <summary> /// 一元二次方程求解。传址 /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="c"></param> /// <param name="x1"></param> /// <param name="x2"></param> public void fangcheng(double a, double b, double c,out double x1,out double x2) { x1=(-b+Math.Sqrt(b*b-4*a*c))/(2*a); x2=(-b+Math.Sqrt(b*b-4*a*c))/(2*a); }
static void Main(string[] args) { //一元二次方程 Console.WriteLine("求方程ax*x+bx+c=0的解"); Console.Write("a="); double a = double.Parse(Console.ReadLine()); Console.Write("b="); double b = double.Parse(Console.ReadLine()); Console.Write("c="); double c = double.Parse(Console.ReadLine()); double jie = b * b - 4 * a * c; if (a == 0) { Console.WriteLine("不是一元二次方程"); } else { if (jie >= 0) { double x1; double x2; Program fangcheng = new Program(); fangcheng.fangcheng(a,b,c,out x1,out x2); if (x1 == x2) { Console.WriteLine("x1=x2="+x1); } else { Console.WriteLine("x1="+x1); Console.WriteLine("x2="+x2); } } else { Console.WriteLine("该方程无解"); } } }
方法二
public void Fangcheng(double a, double b, double c, out double x1, out double x2) { double de = b * b - 4 * a * c; if (de > 0) { Console.WriteLine("此方程有两个不相同的实数根!"); x1 = (-b + Math.Sqrt(de)) / (a * 2); x2 = (-b - Math.Sqrt(de)) / (a * 2); } else//de==0 { Console.WriteLine("此方程有两个相同的实数根!"); x1 = (-b + Math.Sqrt(de)) / (a * 2); x2 = x1; } }
static void Main(string[] args) { double x1; double x2; Console.WriteLine("求解一元二次方程ax^2+bx+c=0的根的情况及结果:"); Console.Write("请输入a="); double a = double.Parse(Console.ReadLine()); if (a == 0) { Console.WriteLine("此方程不是一元二次方程!"); } else { Console.Write("请输入b="); double b = double.Parse(Console.ReadLine()); Console.Write("请输入c="); double c = double.Parse(Console.ReadLine()); double de = b * b - 4 * a * c; if (de < 0) { Console.WriteLine("此方程没有实数根!"); } else//de>=0 { Program pp = new Program(); pp.Fangcheng(a, b, c, out x1, out x2); if (x1 == x2) { Console.WriteLine("x1=x2=" + x1); } else { Console.WriteLine("x1=" + x1); Console.WriteLine("x2=" + x2); } } } }