C#面向对象
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