一.二维数组
二维数组:
一维数组----豆角
二维数组----表格
定义:
1.一维数组:
数据类型[] 数组变量名 = new 数据类型[数组长度];
数据类型[] 数组变量名 = new 数据类型[数组长度]{1,2,3....};
2.二维数组:
数据类型[,] 数组变量名 = new 数据类型[行数,列数];
int[,] a = new int[3,4];
赋值:
a[行下标,列下标] = 值 下标都是从0开始的
取值:
a[行下标,列下标]
题目:一个班6个人,从键盘输入每个学号语文,数学,外语成绩(不需输入学号)。输出:学生成绩表(包括每个人的总分),每科的平均分。
附加1:试着,把不及格的用红字显示。
附加2:试着按照总分排序,显示名次出来。
代码:
1 static void Main(string[] args) 2 { 3 //输入6个学生的语文,数学,英语成绩,输出总分和名次 4 int[,] a=new int[6,5]; 5 //输入 6 for (int i = 0; i <6; i++) 7 { 8 Console.Write("请输入第{0}个学生的语文成绩:",i+1); 9 int yw = Convert.ToInt32(Console.ReadLine()); 10 Console.Write("请输入第{0}个学生的数学成绩:", i+1); 11 int sx = Convert.ToInt32(Console.ReadLine()); 12 Console.Write("请输入第{0}个学生的英语成绩:", i + 1); 13 int yy = Convert.ToInt32(Console.ReadLine()); 14 15 a[i, 0] = i + 1;//学号 16 a[i, 1] = yw; 17 a[i, 2] = sx; 18 a[i, 3] = yy; 19 a[i, 4] = yw + sx + yy; 20 21 } 22 23 //排序 24 for (int i = 0; i <6; i++) 25 { 26 for (int j = i; j <5; j++) 27 { 28 if (a[i,4]<a[j+1,4]) 29 { 30 int txh = a[j + 1, 0]; 31 a[j + 1, 0] = a[i, 0]; 32 a[i, 0] = txh; 33 34 int tyw = a[j + 1, 1]; 35 a[j + 1, 1] = a[i, 1]; 36 a[i, 1] = tyw; 37 38 int tsx = a[j + 1, 2]; 39 a[j + 1, 2] = a[i, 2]; 40 a[i, 2] = tsx; 41 42 int tyy = a[j + 1, 3]; 43 a[j + 1, 3] = a[i, 3]; 44 a[i, 3] = tyy; 45 46 int tzf = a[j + 1, 4]; 47 a[j + 1, 4] = a[i, 4]; 48 a[i, 4] = tzf; 49 } 50 } 51 } 52 Console.Clear(); 53 //输出 54 Console.WriteLine("学号\t语文\t数学\t英语\t总分\t名次"); 55 for (int i = 0; i < 6; i++) 56 { 57 Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}",a[i,0],a[i,1],a[i,2],a[i,3],a[i,4],i+1); 58 } 59 int sum1 = 0, sum2 = 0, sum3 = 0; 60 for (int i = 0; i < 6; i++) 61 { 62 63 sum1 += a[i, 1]; 64 65 sum2 += a[i, 2]; 66 67 sum3 += a[i, 3]; 68 69 70 } 71 Console.WriteLine("平均分:{0}\t{1}\t{2}",sum1/6,sum2/6,sum3/6); 72 73 }
二.锯齿数据,数组的数组。
定义:
第一步:定义大数组
数据类型[][] a = new 数据类型[行数][];
第二步:定义小数组
数据类型[] a1 = new 数据类型[列数];
数据类型[] a2 = new 数据类型[列数];
......
第三步:把小数组放到大数组中
a[0] = a1;
a[1] = a2;
....
举例:
1 static void Main(string[] args) 2 { 3 //锯齿数组 4 int[][] a = new int[3][]; 5 int[] a1 = new int[] {3,4,5,6,7}; 6 int[] a2 = new int[] {1,2,3}; 7 int[] a3 = new int[] {7,8,9,10}; 8 9 a[0] = a1; 10 a[1] = a2; 11 a[2] = a3; 12 13 //显示 14 for (int i = 0; i <a.Length; i++)//a.length=3 15 { 16 for (int j = 0; j <a[i].Length; j++) 17 { 18 Console.Write(a[i][j]+"\t"); 19 } 20 Console.Write("\n"); 21 } 22 23 }
注意:
int[,] a = new int [3][4]; //错
int[][] a = new int[3,4]; //错
int[][] a = new int[3][4]; //错
int[,] c = new int[3,4]; //对,这是二维数组
c.length==12
三.集合:
一、ArrayList 链表,没有长度限制,可以随时向时添加或删除元素。
需要在前面加上:using System.Collections;
定义:
ArrayList a = new ArrayList();
操作:
a.Add(数据):添加
a.Insert(索引号,数据):插入
a.RemoveAt(索引号):删除
a.Count 集合中元素的个数
取值:
a[下标]
取出来的值需要进行强制转换。
举例:
1 static void Main000(string[] args) 2 { 3 ArrayList a = new ArrayList(); 4 a.Add(10); 5 a.Add(20); 6 a.Add(25); 7 8 a.Insert(1, 15); 9 10 a.RemoveAt(2); 11 12 a[1] = (int)a[1] + 10; 13 14 15 for (int i = 0; i < a.Count; i++) 16 { 17 Console.WriteLine(a[i]); 18 } 19 }
运行结果:
二、List<类型> 链表,,没有长度限制,可以随时向时添加或删除元素。只能放指定类型的数据,取出来也不用强制转换。
定义
List<类型> 变量名 = new List<类型>();
List<int> a = new List<int>();
操作:
a.Add(数据):添加
a.Insert(索引号,数据):插入
a.RemoveAt(索引号):删除
a.Count 集合中元素的个数
a.Sort(); 排序
a.Reverse();反转
取值
a[索引号]
举例
1 static void Main(string[] args) 2 { 3 List<int> a = new List<int>(); 4 a.Add(5); 5 a.Add(10); 6 a.Add(20); 7 8 a.Insert(2,15); 9 a.RemoveAt(1); 10 11 a.Sort(); 12 a.Reverse(); 13 14 for (int i = 0; i < a.Count; i++) 15 { 16 Console.WriteLine(a[i]); 17 } 18 19 }
运行结果:
三、Dictionary<key,value>字典或哈希表
定义
Dictionary<int,string> a = new Dictionary<int,string>();
操作:
a.Add(键值,数据);
a.Remove(键值);
a.Count;
取值:
a[键值]
举例:
1 static void Main(string[] args) 2 { 3 Dictionary<int, string> a = new Dictionary<int, string>(); 4 a.Add(101,"haha"); 5 a.Add(103,"hehe"); 6 a.Add(105,"xixi"); 7 a.Add(107,"哈哈"); 8 9 a.Remove(103); 10 a[105] = "不许笑"; 11 foreach (KeyValuePair<int,string>p in a) 12 { 13 Console.WriteLine(p.Value); 14 } 15 }
运行结果:
四、栈,队列 知道就行了
栈:先进后出,不能随机取其中任意一个值。
Stack<数据类型> a = new Stack<数据类型>();
a.Push(值);
数据类型 变量名 = a.Pop();
举例:
1 static void Main(string[] args) 2 { 3 Stack<int> a = new Stack<int>(); 4 5 //向集合里推入元素 6 a.Push(10); 7 a.Push(20); 8 a.Push(30); 9 a.Push(40); 10 //将元素一个个弹出集合,因为stack 没有索引,所以遵循先进后出原则 11 Console.WriteLine(a.Pop()); 12 Console.WriteLine(a.Pop()); 13 Console.WriteLine(a.Pop()); 14 Console.WriteLine(a.Pop()); 15 16 }
运行结果:
队列:先进先出,不能随机取其中任意一个值。
Queue<int> a = new Queue<int>();
a.Enqueue(值);
数据类型 变量 = a.Dequeue();
举例:
1 static void Main(string[] args) 2 { 3 Queue<int> a = new Queue<int>(); 4 5 //进入队列 6 a.Enqueue(10); 7 a.Enqueue(20); 8 a.Enqueue(30); 9 a.Enqueue(40); 10 11 //出队列,先进先出 12 Console.WriteLine(a.Dequeue()); 13 Console.WriteLine(a.Dequeue()); 14 Console.WriteLine(a.Dequeue()); 15 Console.WriteLine(a.Dequeue()); 16 }
运行结果:
2016.4.23