C#網路應用編程基礎練習題與答案(二)

來源:互聯網
上載者:User
編程|網路

  1. C#支援的資料類型有那些?與C++相比有哪些特點?

  【解答】

  C#支援的資料類型有:

  (1) 實值型別

  包括:簡單類型、結構類型、枚舉類型。其中,簡單類型又分為:整型、布爾型、字元型、浮點型、小數型。

  (2) 參考型別

  包括:物件類型、類類型、介面、中繼資料、字串類型、數組。

  與C++相比,C#的主要特點有:

  1) C#語言自C/C++演變而來。但是,它是完全按照物件導向的思想來設計的,並保證了類型的安全性。

  2) C#簡化了C++在類、名稱空間、方法重載和異常處理等方面的使用。摒棄了C++的複雜性,使它更易用、更少出錯。

  3) C#減少了C++的一些特性,不再有宏、多重繼承。特別對企業開發人員來說,上述功能只會產生更多的麻煩而不是效益。

  4) C#採用嚴格的型別安全、版本控制、垃圾收集(garbage collect)等等。所有的這些功能的目標都是瞄準了開發面向組件的軟體開發。

  5) C#中不再有“::”、“.”、和“->”操作符,僅使用單個操作符“.”。

  6) C#使用統一的類型系統,摒棄了C++多變的類型系統。

  7) 在C#中,不能在類的外部定義全域函數、變數或者是常量等。所有的東西都必須封裝在類中,包括執行個體成員或靜態成員。從而使C#代碼更加易讀且有助於減少潛在的命名衝突。

  8) 在C#中,不能使用沒有初始化的變數。從而避免了由於使用不經初始化的變數而導致的計算結果錯誤。

  2. C#語言中,實值型別和參考型別有何不同?

  【解答】

  實值型別和參考型別的區別在於,實值型別的變數直接存放實際的資料,而參考型別的變數存放的則是資料的地址,即對象的引用。

  實值型別變數直接把變數的值儲存在堆棧中,參考型別的變數把實際資料的地址儲存在堆棧中,而實際資料則儲存在堆中。注意,堆和堆棧是兩個不同的概念,在記憶體中的儲存位置也不相同,堆一般用於儲存可變長度的資料,如字串類型;而堆棧則用於儲存固定長度的資料,如整數型別的資料int(每個int變數佔用四個位元組)。由資料存放區的位置可以得知,當把一個值變數賦給另一個值變數時,會在堆棧中儲存兩個完全相同的值;而把一個引用變數賦給另一個引用變數,則會在堆棧中儲存對同一個堆位置的兩個引用,即在堆棧中儲存的是同一個堆的地址。在進行資料操作時,對於實值型別,由於每個變數都有自己的值,因此對一個變數的操作不會影響到其它變數;對於參考型別的變數,對一個變數的資料進行操作就是對這個變數在堆中的資料進行操作,如果兩個參考型別的變數引用同一個對象,實際含義就是它們在堆棧中儲存的堆的地址相同,因此對一個變數的操作就會影響到引用同一個對象的另一個變數。

  3. 結構和類的區別是什麼?

  【解答】

  1) 結構是一個實值型別,儲存在棧上,而類是一個參考型別,儲存在受管制的堆上。

  2) 對結構中的資料進行操作比對類或對象中的資料進行操作速度要快。

  3) 一般用結構儲存多種類型的資料,當建立一個很多類或對象共用的小型對象時,使用結構效率更高。

  4. C#中的數群組類型有何特點?

  【解答】

  1) 數組一般用於儲存同一種類型的資料,包括Object類型。

  2) 數組是一種參考型別,而不是實值型別。

  3) C#中除了可以有一維數組、多維陣列外,還有交錯型數組。

  5. C#中不同整型之間進行轉換的原則是什麼?

  【解答】

  在整型之間進行轉換時,小範圍類型可以隱式轉換為大範圍類型,但大範圍類型轉換為小範圍類型時需要使用顯式轉換。

  6. 簡述裝箱和拆箱的過程。

  【解答】

  裝箱是將實值型別隱式地轉換為object類型或者轉換為由該實值型別實現了的介面類型。裝箱一個數值會為其分配一個對象執行個體,並把該數值拷貝到新對象中。拆箱是顯式地把object類型轉換成實值型別,或者把實值型別實現了的介面類型轉換成該實值型別。

  7. 下列寫法哪些是錯誤的?為什麼?

  1) if (nMyValue1=5) i=1;

  2) if(nMyValue2==1)i=1;

  3) int[] myInt={1,2,3};

  foreach(int test in myInt)

  {

  test++;

  Console.WriteLine(temp);

  }

  4) int[] myInt1={1,2,3};

  foreach(int test in myInt1)

  {

  Console>WriteLine(test);

  }

  【解答】

  1) 錯誤。if中的條件運算式結果不是布爾型。

  2) 正確。

  3) 錯誤一:temp沒有定義。

  錯誤二:在foreach塊內,test作為枚舉成員是唯讀,不能使用test++修改其值。

  4) 錯誤。Console後應該是點,而不應該是大於符號。

  8. 錯誤和異常有什麼區別,為什麼要進行異常處理,用於異常處理的語句有哪些?

  【解答】

  錯誤是指在執行代碼過程中發生的事件,它中斷或幹擾代碼的正常流程並建立異常對象。當錯誤中斷流程時,該程式將嘗試尋找例外處理常式(一段告訴程式如何對錯誤做出響應的代碼),以協助程式恢複流程。換句話說,錯誤是一個事件,而異常是該事件建立的對象。

  當使用短語“產生異常”時,表示存在問題的方法發生錯誤,並建立異常對象(包含該錯誤的資訊及發生的時間和位置)來響應該錯誤。導致出現錯誤和隨後異常的因素包括使用者錯誤、資源失敗和編程邏輯失敗。這些錯誤與代碼實現特定任務的方法有關,而與該任務的目的無關。

  如果不進行異常處理,即不對錯誤做出響應,程式的健壯性就會大打折扣,甚至無法保證正常運行,所以必須要進行異常處理。

  用於異常處理的語句有:try-catch語句、try-catch-finally語句、throw語句。

  9. 編寫一個控制台應用程式,輸出1到5的平方值,要求:

  1) 用for語句實現。

  2) 用while語句實現。

  3) 用do-while語句實現。

  【解答】

  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace outputSquareValue
  {
  class Program
  {
  static void Main()
  {
  //用for語句實現
  for (int i = 1; i <= 5; i++)
  {
  Console.WriteLine("{0}的平方值為{1}", i, i * i);
  }
  //用while語句實現
  int j = 0;
  while (j++ < 5)
  {
  Console.WriteLine("{0}的平方值為{1}", j, j * j);
  }
  //用do-while語句實現
  int k = 1;
  do
  {
  Console.WriteLine("{0}的平方值為{1}", k, k * k);
  } while (k++ < 5);
  Console.ReadLine();
  }
  }
  }

  10. 編寫一個控制台應用程式,要求使用者輸入5個大寫字母,如果使用者輸入的資訊不滿足要求,提示協助資訊並要求重新輸入。

  【解答】

  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace inputCapitalLetter
  {
  class Program
  {
  static void Main()
  {
  bool ok = false;
  while (ok == false)
  {
  Console.Write("請輸入5個大寫字母:");
  string str = Console.ReadLine();
  if (str.Length != 5)
  {
  Console.WriteLine("你輸入的字元個數不是5個,請重新輸入。");
  }
  else
  {
  ok = true;
  for (int i = 0; i < 5; i++)
  {
  char c = str[i];
  if (c < 'A' || c > 'Z')
  {
  Console.WriteLine("第{0}個字元“{1}”不是大寫字母,請重新輸入。", i + 1, c);
  ok = false;
  break;
  }
  }
  }
  }
  }
  }
  }

  11. 編寫一個控制台應用程式,要求完成下列功能。

  1) 接收一個整數n。

  2) 如果接收的值n為正數,輸出1到n間的全部整數。

  3) 如果接收的值為負值,用break或者return退出程式。

  4) 轉到(1)繼續接收下一個整數。

  【解答】

  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace testOutput
  {
  class Program
  {
  static void Main()
  {
  while (true)
  {
  Console.Write("請輸入一個整數(負值結束):");
  string str = Console.ReadLine();
  try
  {
  int i = Int32.Parse(str);
  if (i < 0) break;
  for (int j = 1; j <= i; j++) Console.WriteLine(j);
  }
  catch
  {
  Console.WriteLine("你輸入的不是數字或超出整數的表示範圍,請重新輸入");
  }
  }
  }
  }
  }

  12. 編寫一個控制台應用程式,求1000之內的所有“完數”。所謂“完數”是指一個數恰好等於它的所有因子之和。例如,6是完數,因為6=1+2+3。

  【解答】

  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace completeNumber
  {
  class Program
  {
  static void Main(string[] args)
  {
  for (int i = 2; i <= 1000; i++)
  {
  int s = 1;
  string str = "1";
  for (int j = 2; j <= (int)Math.Sqrt(i); j++)
  {
  if (j * (i / j) == i)
  {
  if (j != i / j)
  {
  s += j + i / j;
  str += string.Format("+{0}+{1}", j, i / j);
  }
  else
  {
  s += j;
  str += string.Format("+{0}", j);
  }
  }
  }
  if (s == i) Console.WriteLine("{0}={1}", i, str);
  }
  Console.ReadLine();
  }
  }
  }



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。