3.15课·········out传值(传址)

public void Hs(out int a, out int b)
{
a = 4;
b = 6;
a = b++;//a=6,b=b+1=7//b先赋值给a,然后b+1
b = ++a;//a=a+1=7,b=7//a先加1,然后赋值给b
}

static void Main(string[] args)

{
int a = 0;
int b = 1;
Program hanshu = new Program();
hanshu.Hs(out a, out b);

Console.WriteLine("a=" + a+" ,b="+b);

Console.ReadLine();

//out相当于return返回值
//拿过来变量名的时候,里面默认为空值

out...可以返回多个值
//传值,只将这个变量的值给拿走,不返还,除非return赋值。
//将a的值传入函数,无论这个值在函数中如何变化,不会影响main中的a

//传址,将这个变量的值拿走运算,完成后还是得返还回来(不用return,用out)
//将a的值传入函数,函数中这个值如何变化,main中的a也会跟着变化
//相当于:函数中的这个值,是main中这个a的快捷方式

题目:求解一元二次方程ax^2+bx+c=0的根的情况及结果

函数部分:

/// <summary>
        /// 求解一元二次方程ax^2+bx+c=0的根的情况及结果
        /// </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)
        {
            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=");
            for (; ; )//循环输入,直至有解
            {
                double a = double.Parse(Console.ReadLine());
                if (a == 0)
                {
                    Console.WriteLine("此方程不是一元二次方程!");
                    Console.Write("请重新输入a=");
                }
                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("此方程没有实数根!");
                        Console.Write("请重新输入a=");
                    }
                    else//de>=0
                    {
                        Program pp = new Program();
                        pp.Fangcheng(a, b, c, out x1, out x2);

                        if (x1 == x2)
                        {
                            Console.WriteLine("x1=x2=" + x1);
                            break;
                        }
                        else
                        {
                            Console.WriteLine("x1=" + x1);
                            Console.WriteLine("x2=" + x2);
                            break;
                        }
                    }
                }            }

题目:擂台比武(猜拳)

函数部分:

 /// <summary>
       /// 擂台比武,随机出招,看谁赢
       /// </summary>
       /// <param name="x"></param>
       /// <param name="d"></param>
       /// <param name="p"></param>
       /// <param name="pc"></param>
        public void  Caiquan(int x,out string d,out int p,out int pc)
        {
             p = 0;  pc = 0;
            Random ran = new Random();
            int y = ran.Next(1, 4);//1,2,3随机一个数
            switch (y)
            {
                case 1:
                    Console.WriteLine("看招,王麻子剪刀!");
                    break;
                case 2:
                    Console.WriteLine("吕布在此,谁敢放肆!");
                    break;
                case 3:
                    Console.WriteLine("我是石头他爸郭涛!");
                    break;
            }
            if (x - y == -1 || x - y == 2)
            {
                p++;
                pc--;
                d = "你赢了!气死我了,你等着,我还会回来的!";

            }
            else if (x - y == 1 || x - y == -2)
            {
                p--;
                pc++;
                d = "你输了!哼哼,赶紧跪地求饶吧!"; 

            }
            else
            {
               d= "小样,有两下子,竟然能挡住我的龟波气功!";
            }
        }

程序部分:

 int p = 0; int pc = 0; string d; int sum = 0; int sum1 = 0;
           Console.WriteLine("剪子=1,布=2,石头=3");
           Console.WriteLine("擂台比武");
           int i = 1;
           for (; ; )
           {
               Console.Write("ROUND" + i + ",READY?GO:");
               int x = int.Parse(Console.ReadLine());
               if (x < 1 || x > 3)
               {
                   Console.WriteLine("你是在逗我开心吗!");
               }
               else
               {
                   Program s = new Program();
                   s.Caiquan(x, out d, out p, out pc);
                   Console.WriteLine(d);
                   sum += p;
                   sum1 += pc;
                   Console.WriteLine(sum + ":" + sum1);
               }
               i++;
           }

题目:输入三个整数,xyz,最终以从大到小的方式输出.利用条件运算符

函数部分

 /// <summary>
         /// 输入三个整数,xyz,最终以从小到大的方式输出。利用条件运算符。
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="z"></param>
         public void Bt(out int x,out int y,out int z)
         {
             Console.Write("x=");
              x = int.Parse(Console.ReadLine());
             Console.Write("y=");
              y = int.Parse(Console.ReadLine());
             Console.Write("z=");
              z = int.Parse(Console.ReadLine());
             int x1 = (x < y) ? (x) : (y);
             int y1 = (x < y) ? (y) : (x);
             int x2 = (x1 < z) ? (x1) : (z);
             int z1 = (x1 <z) ? (z) : (x1);
             int y2 = (y1 < z1) ? (y1) : (z1);
             int z2 = (y1 < z1) ? (z1) : (y1);
             x = x2;
             y = y2;
             z = z2;
         }

程序部分

int x, y, z;
            Program n = new Program();
            n.Bt(out x,out y,out z);
            Console.WriteLine(x+"<"+y+"<"+z);

题目: 输入三个整数,xyz,最终以从大到小的方式输出.利用中间变量

函数部分

/// <summary>
        /// 输入三个整数,xyz,最终以从大到小的方式输出.利用中间变量
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="z"></param>
        /// <param name="x1"></param>
        /// <param name="y1"></param>
        /// <param name="z1"></param>
        public void PaiXu( int x, int y, int z,out int x1,out int y1,out int z1)
        {
            int a;
            if (x < y)
            {
                a = x;
                x = y;
                y = a; //x,y调换//x>y
            }
            if (x < z)
            {
                a = x;
                x = z;
                z = a;//x,z调换,此时x最大
            }
            if (y < z)
            {
                a = y;
                y = z;
                z = a;//y>z
            }
            x1 = x;
            y1 = y;
            z1 = z;
        }

程序部分

  int x1, y1, z1;
            Console.Write("请输入第一个整数x=");
            int x = int.Parse(Console.ReadLine());
            Console.Write("请输入第二个整数y=");
            int y = int.Parse(Console.ReadLine());
            Console.Write("请输入第三个整数z=");
            int z = int.Parse(Console.ReadLine());
            Program t = new Program();
            t.PaiXu(  x,  y,  z,out x1,out y1,out z1);
            Console.WriteLine(z1 + " " + y1 + " " + x1);//从小到大排列
 
时间: 2024-10-29 03:39:23

3.15课·········out传值(传址)的相关文章

JS 传值 传址

在JS中,有两种不同的方式可以操作数据的值,这两种技术分别叫做 传值 和 传址. 传值:在赋值过程中,首先对值进行了一份拷贝,而后将这份拷贝存储到一个变量.对象属性或数组元素中.拷贝的值和原始的值是完全独立.互不影响的.当一份数据通过值传递给一个函数,实际上被传递的不是数据本身,而是数据的一份拷贝.因此,如果函数修改了这个值,影响到的只是数据的那份拷贝,而并不影响数据本身. 传址:在赋值过程中,变量实际上存储的是数据的地址(对数据的引用),而不是原始数据或者是数据的拷贝.如果值通过一个地址发生了

Python 函数参数引用(传值/传址)/copy/deepcopy

精简版: 传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如果是列表,字典则传址: copy使用场景:列表或字典,且内部元素为数字,字符串或元组 deepcopy使用场景:列表或字典,且内部元素包含列表或字典 完整版: 1.传值和传址的区别 传值就是传入一个参数的值,传址就是传入一个参数的地址,也就是内存的地址(相当于指针).他们的区别是如果函数里

2016年10月19日--传值、传址、结构体

传值---传址 传值:将变量名中存放的值进行传输 private void 传值(int a) { a += 10; } static void Main(string[] args) { //实例化 初始化 这个类 Program hs = new Program(); int a = 0; hs.传值(a);//a不变 } 格式 传址:将这个变量名直接传输过去,若在另一边有赋值情况,这边的值会发生变化 private void 传址(int a, out int b) { b = a + 1

JS 基础知识2 传值和传址

要知道传址跟传址,首先我们先了解下数据值的操作. 1复制:可以把它赋值给一个新的变量 2传递:可以将他传递给一个函数或者方法 3比较:可以与另外一个值比较,判断是否相等 简要介绍下传值: 当一个数据是通过值被操作的,那么关系到的是数据的值,在赋值的过程中,是对实际值进行了COPY,储存在一个变量或者属性或数组中,copy的值与原数据是相互独立的. 当数据通过值传递给一个函数时,数据的一份传递给这个函数,如果函数体修改了这个值,只在函数体受影响,函数外的原数据不受影响. 当一个数据通过值和另外一个

(转)java 中的 传值 与 传址

在一些面试企业的过程当中 ,很多人看重于基础的考核.其中,传值与传地址 就是一种基础能力考核的关键,这里我总结了 5种很典型的例子 ,最后做了一个总结 首先是8种基本数据类型 下面用 int 类型 做例子 属于传值 public static void method1(int i) { i= i+10; System.out.println("在方法内的值"+i); } public static void main(String[] args) { int i =5; method1

php传值与传址的区别

PHP中传值和传址的区别, 十分的简单, 看字面的意思大概就知道是什么意思了, 下面通过简单的实例看一下两者的区别. 1 $a = 5; 2 function show(&$b) { 3 $b += 10; 4 echo "函数内部:" . $b . "<hr>";//结果: 15 5 } 6 show($a); 7 echo "函数外部:" . $a . "<hr>";//结果: 15 总结:

C语言的传值与传址调用

传值调用并不能改变两个变量的值,而传址能. 为什么,因为,传值调用,仅仅是在函数内,调换参数的值. 而地址所指向的值,改变的不仅仅是函数内,函数外也改变. 请看代码: 这里还要注意:通常我们不会返回局部变量的地址. 1 #include <stdio.h> 2 3 void swap_value(int x,int y) 4 { 5 int temp; 6 temp = x; 7 x = y; 8 y = temp; 9 printf("传值函数内的输出 %d %d \n"

传值、传址、结构体

传值是只传递这个变量的值,传值是传递这个变量的地址. out传址 public void hanshu1(int a , out int b) { b = a + 10; } int a = 5; int rr; hanshu.hanshu1(a,out rr); Console.WriteLine(rr); 以上使用out传址 打印出来的值是15 但如果需要函数返回多个值时,可以用减号拼接起来,返回后用split分割开 public string Fanhui(string name , st

C# 函数的传值与传址(转)

http://www.cnblogs.com/mdnx/archive/2012/09/04/2671060.html using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { /* 先来了解一下什么是实参, 什么是形参. 所谓形参其实也就是说函数定义的时候所带的参数. 比如 static