• 笔试代码考查


    写出以下代码的输出结果

      class A
      {
        public A()
        {
          i = 3;
        }

        public int i;

        public int Calc(int j)
        {
          return i + j * j;
        }
      }
      class B : A
      {
        new public int i;
        new public int Calc(int j = 10)
        {
          if (j < 0)
          {
            return i + base.Calc(j);
          }
          return i + j;
        }

        public int? compare(int l, int n)
        {
          if (l > n)
          {
            return 1;
          }
          else if (l < n)
          {
            return -1;
          }
          else
          {
            return null;
          }
        }

      }

    static void Main(string[] args)
    {

      B b = new B() { i = 2 };        
      Console.WriteLine(b.i);        2
      Console.WriteLine(((A)b).i);      3
      Console.WriteLine(b.Calc());      12
      Console.WriteLine(b.Calc(1));      3
      Console.WriteLine(b.Calc(-1));      6
      Console.WriteLine(((A)b).Calc(3));    12

    }

    考点:考查继承类中new的第二种用法,new的三种用法分别是:第一种 创建对象、调用构造函数;第二种 是作为修饰符,显示隐藏继承于基类的继承成员;第三种 是用在泛型中添加类型的约束

    递归或冒泡排序

    //一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
    public static int foo(int n)
      {
        if (n < 0)
        {
          return 0;
        }
        else if (n <= 2)
        {
          return 1;
        }
        else
        {
          return foo(n - 1) + foo(n - 2);
        }
      }

    //冒泡排序

    public static void BubbleSort(int[] arr)
    {
      for (int i = 0; i < arr.Length-1; i++)
      {
        for (int j = i+1; j < arr.Length; j++)
        {
          if (arr[j] < arr[i])
          {
            arr[i] = arr[i] + arr[j];
            arr[j] = arr[i] - arr[j];
            arr[i] = arr[i] - arr[j];
          }
        }
      }
    }

    写法很多不写太多答案了,考查新手编码基础,逻辑性。注意算法的时间复杂度优化,O(n2)

    var b=new B();b.PrintFields();产生什么输出?

    class A
    {
      public A()
      {
        PrintFields();
      }

      public virtual void PrintFields()
      {
      }
    }

    class B : A
    {
      int x = 1;
      int y;

      public B()
      {
        y = -1;
      }

      public override void PrintFields()
      {
        Console.WriteLine("x={0},y={1}", x, y);
      }
    }

    答案:x=1,y=0

       x=1,y=-1

    考点:这道题就是考查类继承时执行的顺序,及继承类中override作用,在new B()时,先执行了int x = 1;int y;再执行B的构造函数,未进构造函数前会先是会先创建父类A对象构造函数,这时会执行PrintFields();方法,因为PrintFields方法为virtual 虚拟方法,在子类override 中重写的该方法,所以实际执行的为B中的PrintFields方法。为什么Y=0?这是因为调用的是父类方法,子类的中的Y还没初始化,默认值为0,这时候才会执行到B的构造函数,赋值了y = -1;,在b.PrintFields()时,自然就是x=1,y=-1了。

    下面的代码输出结果

    using System;

    class A

    {

    public static int X;

    static A(){

    X=B.Y+1;

    }

    }

    class B

    {

    public static int Y=A.X+1;

    static B(){}

    static void Main(){

    Console.WriteLine(“X={0},Y={1}“,A.X,B.Y);

    }

    }

    产生的输出结果是什么?

    x=1,y=2

    写出程序的输出结果

    class Class1 {

    private string str = "Class1.str";

    private int i = 0;

     static void StringConvert(string str) {

    str = "string being converted.";

     }

    static void StringConvert(Class1 c) {

    c.str = "string being converted.";

     }

    static void Add(int i) {

    i++;

    }

    static void AddWithRef(ref int i) {

    i++;

    }

    static void Main() {

    int i1 = 10;

     int i2 = 20;

     string str = "str";

    Class1 c = new Class1();

    Add(i1);

     AddWithRef(ref i2);

     Add(c.i);

     StringConvert(str);

    StringConvert(c);

     Console.WriteLine(i1);

     Console.WriteLine(i2);

     Console.WriteLine(c.i);

     Console.WriteLine(str);

     Console.WriteLine(c.str);

     }

    }

    答案:10  21  0  str  string being converted.

    考点:更改的是是局部变量的值。

    写出程序的输出结果

    public abstract class A

    {

    public A()

    {

    Console.WriteLine('A');

     }

    public virtual void Fun()

    {

    Console.WriteLine("A.Fun()");

    }

    }

    public class B: A

    {

    public B()

    {

    Console.WriteLine('B');

     }

    public new void Fun()

    {

    Console.WriteLine("B.Fun()");

    }

    public static void Main()

    {

    A a = new B();

    a.Fun();

    }

    }

    答案:A  B  A.Fun()

    考点:抽像类、虚方法、继承、显示隐藏

    A a = new B();创建B对象时先创建继承的A对象,先执行A构造函类,再执行B构造函数,输出A  B

    a.Fun();注意这个a是A的对象,虽然是以new B();创建,但声明的是A对象,执行Fun()时,会执行A的方法(new 是显式隐藏从基类继承的成员,但A类执行还是A的虚方法)

    写出程序的输出结果

     public class A

    {

    public virtual void Fun1(int i)

    {

    Console.WriteLine(i);

     }

    public void Fun2(A a)

    {

    a.Fun1(1);

     Fun1(5);

     }

    }

    public class B : A

    {

    public override void Fun1(int i)

    {

    base.Fun1 (i + 1);

     }

    public static void Main()

    {

    B b = new B();

    A a = new A();

    a.Fun2(b);

     b.Fun2(a);

    }

    }

    答案:2 5 1 6 

    考点:分清楚是哪个对象,调的是哪个方法,  a.Fun2(b)时,调的是A类的public void Fun2(A a),传的参数是b,此时A a实际是B的对象,a.Fun1(1)也就是B类里的Fun1(1),B类里代码是base.Fun1 (i + 1);又调的A类的Fun1(2),输出2,Fun1(5);是直接调的A类自己的,输出5, b.Fun2(a);同理,调的是B类继承的A类的public void Fun2(A a),传的参数是a,此时A a实际是A的对象,a.Fun1(1)也就是A类里的Fun1(1),输出1,Fun1(5);是直接调的B类复写的,输出6

  • 相关阅读:
    ORA-29516: Aurora assertion failure: Assertion failure at jol.c:11157
    ORA-03113: end-of-file on communication channel
    RMAN还原问题
    Linux Shell 小数比较
    fetch() without execute() [for Statement "SHOW VARIABLES LIKE 'wsrep_on'
    yum [Errno 12] Timeout on
    Virtual Box下配置Host-Only联网方式详解
    SPI协议详解
    心情
    南大西洋异常区
  • 原文地址:https://www.cnblogs.com/fantaohaoyou/p/9389781.html
Copyright © 2020-2023  润新知