zoukankan      html  css  js  c++  java
  • 【修订版】C#/ASP.Net 面试题及答案(2)

    这些题目都来源于网络,参考之前的答案,针对每道题做了简单的分析,恳请大家批评指正。

    1. 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
    答:本题考察 递归的用法。

    递归计算
     1 /// <summary>
     2 /// 主函数
     3 /// </summary>
     4 /// <param name="args"></param>
     5 static void Main(string[] args)
     6 {
     7     Console.WriteLine(Foo(30));
     8     Console.ReadLine();
     9 }
    10 
    11 /// <summary>
    12 /// 计算1、1、2、3、5、8、13、21、34......数列的结果
    13 /// </summary>
    14 /// <param name="i"></param>
    15 /// <returns></returns>
    16 static int Foo(int i)
    17 {
    18     int j = 0;
    19 
    20     if (i <= 0)
    21     {
    22         j = 0;
    23     }
    24     else if (i > 0 && i <= 2)
    25     {
    26         j = 1;
    27     }
    28     else
    29     {
    30         j = Foo(i - 1+ Foo(i - 2);
    31     }
    32     return j;
    33 }

     

    2. C#中的委托是什么?
    答:委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值。

    委托是函数的封装,代表一"类"函数,它们都符合一定的签名:拥有相同的参数列表、返回值类型。同时,委托也可以看成是对函数的抽象,是函数的"类"。此时委托的实例代表一个具体的函数。

    委托实例
     1 public delegate void DoHit(string skill);   // 定义委托
     2 
     3 class Program
     4 {
     5     /// <summary>
     6     /// 山岭巨人的攻击方法
     7     /// </summary>
     8     /// <param name="skill"></param>
     9     private static void TinyHit(string skill)
    10     {
    11         Console.WriteLine("使用了技能:" + skill);
    12     }
    13     /// <summary>
    14     /// 巫妖的攻击方法
    15     /// </summary>
    16     /// <param name="skill"></param>
    17     private static void LichHit(string skill)
    18     {
    19         Console.WriteLine("使用了技能:" + skill);
    20     }
    21     /// <summary>
    22     /// 接收DoHit类型的方法作为参数
    23     /// </summary>
    24     /// <param name="skill"></param>
    25     /// <param name="MakeHiting"></param>
    26     private static void Hit(string skill, DoHit MakeHiting)
    27     {
    28         MakeHiting(skill);
    29     }
    30     /// <summary>
    31     /// 主函数
    32     /// </summary>
    33     /// <param name="args"></param>
    34     static void Main()
    35     {
    36         Hit("山崩", TinyHit);
    37         Hit("霜冻之星", LichHit);
    38         Console.ReadLine();
    39     }
    40 }

    这里也可以将方法绑定到委托上,主函数可以改写为如下形式

    方法绑定至委托
     1 /// <summary>
     2 /// 主函数
     3 /// </summary>
     4 /// <param name="args"></param>
     5 static void Main()
     6 {
     7     DoHit myDelegate;
     8     myDelegate = TinyHit;
     9     myDelegate("山崩");
    10     myDelegate += LichHit;
    11     myDelegate -= TinyHit;
    12     myDelegate("霜冻之星");
    13 
    14     Console.ReadLine();
    15 }

     

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 交换Easy
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法提高 多项式输出
    Java实现 蓝桥杯VIP 算法训练 矩阵乘方
    QT中给各控件增加背景图片(可缩放可旋转)的几种方法
    回调函数实现类似QT中信号机制
    std::string的Copy-on-Write:不如想象中美好(VC不使用这种方式,而使用对小字符串更友好的SSO实现)
  • 原文地址:https://www.cnblogs.com/temptation/p/2128007.html
Copyright © 2011-2022 走看看