人类思维--计算机逻辑思维
逻辑思维--代码实现写书法:
描红——临摹——碑贴——自成一体——草复习:
数组:一维,二维,多维一维:豆角。连续,同一类型。定义:数据类型[] 数组名=new 数据类型[长度]{.,.,.,.};赋值:数组名[下标] = 值取值:数组名[下标]灵活运用:与for循环的结合应用。1.求最大值,最小值。2.求总和,平均。3.随机(生成下标)抽值。数组的应用:
(一).冒泡排序。1.冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。2.趟数=n-1;次数=n-趟数。3.里层循环使用if比较相临的两个数的大小,进行数值交换。作业:
1.先把冒泡排序写一遍。int[] a = new int[8] { 9, 12, 7, 5, 15, 2, 1, 8 }; //冒泡排序。 for(int i=1;i<=a.Length-1;i++) //趟数 { for (int j = 1; j <= a.Length - i; j++)//次数 { if(a[j-1] > a[j]) { int t = a[j - 1]; a[j - 1] = a[j]; a[j] = t; } } }//显示
for(int k=0;k<a.Length;k++) { Console.WriteLine(a[k]); }2.使用冒泡排序,做青歌赛的打分程序。要求去掉两个最高,两个最低分,求平均得分。int[] a = new int[10] { 10, 12, 6, 9, 5, 4, 3, 17, 1, 15 }; int i, j, temp = 0, sum = 0; double avg = 0.0; for (i = 1; i < a.Length; i++) { for (j = 1; j <= a.Length - i; j++) { if (a[j - 1] < a[j]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; } } } Console.WriteLine("去掉两个最高分,去掉两个最低分后分别得:"); for (i = 2; i <= a.Length - 3; i++) { Console.Write(a[i] + "分\t"); sum += a[i]; } Console.WriteLine(); avg = 1.0 * sum / (a.Length - 4); Console.WriteLine("得分总和为" + sum + "分。\t"); Console.WriteLine("平均分为" + avg + "分。\t");
(二).折半查找。
前提:数组必须是有序的。思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间(mid)的下标。1.求中间下标:mid = (top+bottom)/22.上限下标下移:top = mid+1. 假设数组是升序排列。3.下限下标上移:bottom = mid-1;4.循环条件是:bottom>=top static void Main(string[] args) { int[] a = new int[] { 3, 5, 7, 9, 11, 13, 14, 18 };Console.Write("请输入要找的数:");
int find = Convert.ToInt32(Console.ReadLine());int top, bottom, mid; //上限下标,下限下标,中间下标
top = 0; bottom = a.Length - 1; while(bottom>=top) //只要下限下标还在上限下标的下面,就循环,否则没找到就结束。 { //算中间下标 mid = (top + bottom) / 2; //取中间的值 int n = a[mid]; if(n < find) { top = mid + 1; //调整上限的下标 } else if(n>find) { bottom = mid - 1;// 调整下限的下标。 } else { Console.WriteLine("找到了,在第" + mid + "个元素上"); break; } } }二维数组:
表格的模型。定义: 数据类型[,] 数组名 = new 数组类型[维度长度,维度长度]; int[,] a = new int[3,4]; int[,] a = new int[3, 4] { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 0, 9, 8 } };赋值: 数组名[下标,下标] = 值; a[0,0] = 5; a[2,3] = 10;取值: 数组名[下标,下标];应用:1.输入学生的学号语文数学成绩int[,] a = new int[3, 4];
//输入 for(int i=0;i<3;i++) { //自动生成学号 a[i, 0] = i+1; //语文成绩 Console.Write("语文:"); a[i, 1] = Convert.ToInt32(Console.ReadLine()); //数学成绩 Console.Write("数学:"); a[i, 2] = Convert.ToInt32(Console.ReadLine()); //计算总分 a[i, 3] = a[i, 1] + a[i, 2]; } //显示 Console.WriteLine("学号\t语文\t数学\t总分"); for(int i=0;i<3;i++) { for(int j=0;j<4;j++) { Console.Write(a[i, j] + "\t"); } Console.WriteLine(); } 2.推箱子int[,] map = new int[10, 10]
{ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,1,0,0,0,1}, {1,8,2,0,0,1,0,0,0,1}, {1,0,0,0,0,1,1,1,0,1}, {1,0,0,0,0,0,0,1,0,1}, {1,0,0,0,1,0,0,1,0,1}, {1,0,0,0,1,0,0,0,0,1}, {1,1,1,1,1,0,0,0,0,1}, {1,0,0,0,0,0,0,0,9,1}, {1,1,1,1,1,1,1,1,1,1} };// //把地图显示出来。for (int i = 0; i < 10; i++)
{ for (int j = 0; j < 10; j++) { if (map[i, j] == 1) { Console.Write("■"); } else if (map[i, j] == 0) { Console.Write(" "); } else if (map[i, j] == 2) { Console.Write("□"); } else if (map[i, j] == 9) { Console.Write("★"); } else if (map[i, j] == 8) { Console.Write("♀"); } } Console.WriteLine(); }