C#筆試題(二)

一、問答題

61.下面這段代碼輸出什麼?爲什麼?

答案註釋:

int i=5; 
int j=5; 
if (Object.ReferenceEquals(i,j)) 
Console.WriteLine("Equal"); 
else 
Console.WriteLine("Not Equal"); 

不相等,因爲比較的是對像

62.什麼叫做SQL注入,如何防止?請舉例說明。 
答案註釋:利用sql語言漏洞獲得合法身份登陸系統。如身份驗證的程序設計成: 
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale(); 
if(obj!=null) 
  { 
    //通過驗證 
  } 
這段代碼容易被sql注入。如用戶在t_name中隨便輸入,在t_pwd中輸入1' and 1='1  就可以進入系統了。

63.什麼是反射? 
答案註釋:動態獲取程序集信息

 

64.常用關鍵字

答案註釋: abstract 可以和類、方法、屬性、索引器及事件一起使用, 
  標識一個可以擴展但不能被實體化的、必須被實現的類或方法。 
  as 一個轉換操作符,如果轉換失敗,就返回null 
  base 用於訪問被派生類或構造中的同名成員隱藏的基類成員。 
  catch 定義一個代碼塊,在特定類型異常拋出時,執行塊內代碼。 
  參見tryfinally 
  checked 既是操作符又是語句。 
  確保編譯器運行時,檢查整數類型操作或轉換時出現的溢出。 
  const 標識一個可在編譯時計算出來的變量值,即一經指派不可修改的值。 
  delegate 指定一個聲明爲一種委託類型。委託把方法封裝爲可調用實體, 
  能在委託實體中調用。 
  enum 表示一個已命名常量羣集的值類型。 
  event 允許一個類或對象提供通知的成員,他必須是委託類型。 
  explicit 一個定義用戶自定義轉換操作符的操作符, 
  通常用來將內建類型轉換爲用戶定義類型或反向操作。 
  必須再轉換時調用顯示轉換操作符。 
  extern 標識一個將在外部(通常不是c#語言)實現的方法。 
  finally 定義一個代碼塊,在程序控制離開try代碼快後執行。參見trycatch 
  fixed 在一個代碼塊執行時,在固定內存位置爲一個變量指派一個指針。 
  foreach 用於遍歷一個羣集的元素。 
  goto 一個跳轉語句,將程序執行重定向到一個標籤語句。 
  implicit 一個操作符,定義一個用戶定義的轉換操作符。 
  通常用來將預定義類型轉換爲用戶定義類型或反向操作。 
  隱式轉換操作符必須在轉換時使用。 
  interface 將一個聲明指定爲接口類型,即實現類或構造必須遵循的合同。 
  internal 一個訪問修飾符。 
  namespace 定義一個邏輯組的類型和命名空間。 
  operator 用來聲明或多載一個操作符。 
  out 標識一個參數值會受影響的參數,但在傳入方法時, 
  該參數無需先初始化。 
  params 聲明一個參數數組。如果使用,必須修改指定的最後一個參數。 
  允許可選參數。 
  readonly 標識一個變量的值在初始化後不可修改。 
  ref 標識一個參數值可能會受影響的參數。 
  sealed 防止類型被派生,防止方法和property被覆載。 
  sizeof 一個操作符,以byte爲單位返回一個值類型的長度。 
  stackalloc 返回在堆上分配的一個內存塊的指針。 
  struct struct是一種值類型,可以聲明常量、字段、方法、property 
  索引器、操作符、構造器和內嵌類型。 
  throw 拋出一個異常。 
  try 異常處理代碼塊的組成部分之一。try代碼塊包括可能會 
  拋出異常的代碼。參閱catchfinally關鍵字。 
  typeof 一個操作符,返回傳入參數的類型。 
  unchecked 禁止溢出檢查。 
  unsafe 標註包含指針操作的代碼塊、方法或類。 
  using 當用於命名空間時,using關鍵字允許訪問該命名空間中的類型, 
  而無需指定其全名。也用於定義finalization操作的範圍。 
  virtual 一個方法修飾符,標識可被覆載的方法。 
  volatile 標識一個可被操作系統、某些硬件設備或併發線程修改的attribute

 

65.public static const int A=1;這段代碼有錯誤麼?是什麼? 
答案註釋:    const成員都是static所以應該去掉static

66.float f=-123.567F; 
答案註釋:    int i=(int)f; 
    i的值現在是_____?

   123

 

67.利用operator聲明且僅聲明瞭==,有什麼錯誤麼
答案註釋:要同時修改EqualeGetHash() ? 重載了"==" 就必須重載 "!="

68.Asp.net中所有的自定義用戶控件都必須繼承自________?

答案註釋:System.Web.UI.UserControl

 

69..Net中所有可序列化的類都被標記爲_____?

 答案註釋:[serializable]

.下面的代碼中有什麼錯誤嗎?_______ 
答案註釋:

    using System; 
    class A 
    { 
          public virtual void F(){ 
              Console.WriteLine("A.F"); 
          } 
      } 
      abstract class B:A 
      { 
          public abstract override void F(); 
      }

abstract override 是不可以一起修飾

71.當類T只聲明瞭私有實例構造函數時,則在T的程序文本外部,______(可以 or 不可以)從
   派生出新的類,____(可以 or 不可以)直接創建T的任何實例。

答案註釋:

不可以,不可以

 

72...Net中,類System.Web.UI.Page 可以被繼承麼? 
答案註釋:

可以

 

73.c#實現約瑟夫環問題

答案註釋:

public static int[] Joseph(int total, int start, int alter){

           int j, k = 0;

        int[] count = new int[total];

        int[] s = new int[total];

        for (int i = 1; i < total + 1; i++){

             s[i - 1] = i;

        }

        for (int i = total; i >= 2; i--){

             start = (start + alter - 1) % i;

             if (start == 0){

                 start = i;

              }

             count[k] = s[start - 1];

             k++;

             for (j = start; j < i; j++){

                  s[j - 1] = s[j];

             }

         }

         count[k] = s[1];

         return count;

    }

74.abc+cba = 1333,其中a,b,c均爲一位數,編程求出滿足條件的a,b,c所有組合

答案註釋:

for (int a = 1; a < 10; a++){

       for (int b = 1; b < 10; b++){

              for (int c = 1; c < 10; c++) {

                 if (100 * a + 10 * b + c + 100 * c + 10 * b + a == 1333)

                 {

                  Console.WriteLine(a.ToString() + b.ToString() + c.ToString());

                 }

              }

       }

   }

75.100元買100支筆,其中鋼筆3/支,圓珠筆2/支,鉛筆05/支,求幾種組合

答案註釋:

for (int a = 1; a < 100/3; a++){

      for (int b = 1; b < 100/2; b++{

             for (int c = 1; c < 100/0.5; c++){

               if ((a+b+c == 100) && (3*a + 2*b + 0.5*c == 100)) {

      Console.WriteLine(a.ToString() + "--" + b.ToString() + "--" + c.ToString());

               }

            }

       }

  }

76.倒置數組a的元素到b

答案註釋:

int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

int[] b = Reversel(a);

public static int[] Reversel(int[] a)

{

    int[] b = new int[a.Length];

    for (int i = 0; i < a.Length; i++)

    {

        b[i] = a[a.Length - 1 - i];

    }

    return b;

}

77.倒置數組a裏的元素

答案註釋:

int[] c = ReverselSelf(a);

public static int[] ReverselSelf(int[] a)

{

    int temp = 0;

    for (int i = 0; i < a.Length / 2; i++)

    {

        temp = a[i];

        a[i] = a[a.Length - 1 - i];

        a[a.Length - 1 - i] = temp;

    }

    return a;

}

78.設計一個函數,在數組的第i個下標前插入一個數據元素,並保持數組元素的連續性

答案註釋:

int[] a = { 0,1,2,3,4,5,6,7,8,9};

int[] b = InsertItem(a,5,11);

public static int[] InsertItem(int[] a, int i, int item)

{

    int[] a1 = new int[i + 1];

    int[] a2 = new int[a.Length - i];

 

    for (int j = 0; j < a.Length; j ++ )

    {

        if (j < i)

        {

            a1[j] = a[j];

        }

        else

        {

            a2[j - i] = a[j];

        }

    }

    a1[i] = item;

    int[] b = new int[a.Length + 1];

    a1.CopyTo(b,0);

    a2.CopyTo(b, i + 1);

    return b;

}

79.設計一個函數,刪除數組第i個下標的數據元素,並保持數組元素的連續性

答案註釋:

int[] a = { 0,1,2,3,4,5,6,7,8,9};

int[] c = DeleteItem(a,5);

public static int[] DeleteItem(int[] a, int i)

{

    int[] c = new int[a.Length - 1];

    for (int j = 0; j < a.Length; j ++ )

    {

        if (j < i)

        {

            c[j] = a[j];

        }

        else if (j == i) { continue; }

        else if (j > i)

        {

            c[j - 1] = a[j];

        }

    }

    return c;

}

 

 由“.net筆試題庫”收集整理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章