標籤:
int定義的變數只能放整形資料,string定義的變數只能放字串資料,它們是內建資料類型;struct{},class(類)都是使用者定義的資料類型,可以放任意類型資料。用資料類型定義變數就像用模板規範的建立了一個變數,使其不能任意的儲存資料,比如int類型的變數無法儲存string類型的資料;所有的資料類型(int,string,struct出來的Student)就像各種各樣的模板,struct出來的Student是我們自己創造的資料類型模板。 class模板可以寫函數,因此比struct模板更進階,class定義的變數我們叫做對象。物件導向是一種思想,一種思路。在物件導向編程中,類是最小單位,是類與類之間相互互動。以class為模板建立出來的資料類型,我們叫做對象。變數的作用範圍:public(在項目所有地方都可以用),private只能在類的內部使用。不能用class建立的對象建立數組(struct可以),可以建立集合(Array)。每次建立對象需要用new開闢空間。struct可以自動開闢空間。object是所有資料類型的基類:就像生物對於所有動物、植物、微生物等等。小知識點:縮放代碼:#region endregion 藍塊:成員變數 紫塊:成員方法編程時,右擊函數名->轉到定義1.範例:通過struct數組儲存、處理學生資訊,按如下要求從控制台迴圈錄入10個同學的資訊跟成績(學號,姓名,C語言分數)使用結構體 ,在控制台列印本班的總分和平均分,並列印本班最高分、最低分的學生資訊,按成績高低列印本班成績冊並排出名次,要求使用結構體,自訂函數,數組來完成本題。複製代碼#region==學生課程題目== struct student { public string code; public string name; public decimal degree; } static void Main(string[] args) { Console.Write("請輸入人數:"); int n = int.Parse(Console.ReadLine().ToString()); decimal sumfen=0, avg=0, max=0, min=0; student[] sumstu = new student[n]; //根據所輸入人數進行迴圈錄入 for (int i = 0; i < n; i++) { Console.WriteLine("請輸入第"+(i+1)+"個學生的資訊"); Console.WriteLine("學號 姓名 c語言分數,以tab鍵分隔"); string s = Console.ReadLine(); string[] sarr = s.Split(new char[]{‘\t‘});//使用split按照分隔字元進行分隔 sumstu[i].code = sarr[0]; sumstu[i].name = sarr[1]; sumstu[i].degree = decimal.Parse(sarr[2]); sumfen += sumstu[i].degree; } Console.WriteLine("****************************************"); Console.WriteLine("總分:"+sumfen.ToString()); avg = sumfen / n; Console.WriteLine("平均分:"+avg.ToString()); //冒泡排序 for (int i = 0; i < n-1; i++) { for (int j = i+1; j < n; j++) { if (sumstu[i].degree < sumstu[j].degree) { Student zhong = new Student(); zhong = sumstu[i]; sumstu[i] = sumstu[j]; sumstu[j] = zhong; } } } Console.WriteLine("最高分:"+sumstu[0].degree.ToString()); Console.WriteLine("最低分:"+sumstu[n-1].degree.ToString()); Console.WriteLine("本班成績列表如下:"); Console.WriteLine("****************************************"); Console.WriteLine("名次 學號 姓名 成績"); for (int i = 1; i <= n; i++) { Console.WriteLine(i+"\t"+sumstu[i-1].code+"\t"+sumstu[i-1].name+"\t"+sumstu[i-1].degree); } Console.ReadLine(); }複製代碼 2.通過Array集合來處理學生資訊複製代碼class Program { //用Array來儲存十個學生資訊,(不如上題將結構體放在數組裡方便,只是練習一下Array的使用) //定義學生資訊結構體 public struct Student { public string sno; public string name; public int degree; } static void Main(string[] args) { //定義Student元素類型的Array,儲存10個學生資訊 Array myArr = Array.CreateInstance(typeof(Student), 10); for (int i = 0; i < myArr.Length; i++) { Student aaa; Console.WriteLine("請輸入第" + (i + 1) + "個學生的學號,姓名,成績"); aaa.sno = Console.ReadLine(); aaa.name = Console.ReadLine(); aaa.degree = Convert.ToInt32(Console.ReadLine()); myArr.SetValue(aaa, i); } //分割線 Console.WriteLine("********************************************************"); //求總分、平均分 int sum = 0; for (int i = 0; i < myArr.Length; i++) { object aaa;//定義一個對象來接收從Array中取出的元素 aaa = myArr.GetValue(i); Student b = (Student)aaa;//將取出的元素進行強制轉化 sum += b.degree; } Console.WriteLine("總分為" + sum + "平均分為" + sum / myArr.Length); Console.WriteLine("********************************************************"); //通過冒泡排序求最高分、最低分 int[] a = new int[10];//用數組來儲存元素的分數 for (int i = 1; i <= myArr.Length; i++)//冒泡排序,將Array中的元素按照分數的大小排序 { for (int j = 1; j <= myArr.Length - i; j++) { object aaa, bbb;//定義兩個對象來接收從Array中取出的元素 aaa = myArr.GetValue(j - 1); bbb = myArr.GetValue(j); Student aa = (Student)aaa;//將取出的元素進行強制轉化 Student bb = (Student)bbb; a[j - 1] = aa.degree;//通過比較相鄰兩個元素的分數的大小,判斷是否交換元素的位置 a[j] = bb.degree; if (a[j] > a[j - 1]) { myArr.SetValue(aa, j); myArr.SetValue(bb, j - 1); } } } object zg, zd; zg = myArr.GetValue(0); Student mm = (Student)zg; zd = myArr.GetValue(myArr.Length - 1); Student n = (Student)zd; Console.WriteLine("最高分為" + mm.degree + "姓名" + mm.name + "學號" + mm.sno + "最低分為" + n.degree + "姓名" + n.name + "學號" + n.sno); //分割線 Console.WriteLine("********************************************************"); //列印成績表 for (int i = 0; i < myArr.Length; i++) { object aaa; aaa = myArr.GetValue(i); Student b = (Student)aaa; Console.WriteLine("姓名" + b.name + "學號" + b.sno + "分數為" + b.degree); } } }複製代碼bb
C#物件導向