• c#(6)——数组的应用和二维数组


    人类思维--计算机逻辑思维
    逻辑思维--代码实现

    写书法:
    描红——临摹——碑贴——自成一体——草

    复习:
    数组:一维,二维,多维
    一维:豆角。连续,同一类型。
    定义:数据类型[] 数组名=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] + "分 ");
    sum += a[i];
    }
    Console.WriteLine();
    avg = 1.0 * sum / (a.Length - 4);
    Console.WriteLine("得分总和为" + sum + "分。 ");
    Console.WriteLine("平均分为" + avg + "分。 ");

    (二).折半查找。
    前提:数组必须是有序的。
    思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间(mid)的下标。
    1.求中间下标:mid = (top+bottom)/2
    2.上限下标下移: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("学号 语文 数学 总分");
    for(int i=0;i<3;i++)
    {
    for(int j=0;j<4;j++)
    {
    Console.Write(a[i, j] + " ");
    }
    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();
    }

  • 相关阅读:
    QStringLiteral(源代码里有一个通过构造函数产生的从const char*到QString的隐式转换,QStringLiteral字符串可以放在代码的任何地方,编译期直接生成utf16字符串,速度很快,体积变大)
    utf8格式源代码中的字符串,默认都会当作char来处理,除非用L""符号来修饰
    Qt Installer Framework的学习
    发布Qt Quick桌面应用程序的方法
    先对数组排序,在进行折半查找(C++)
    7个高效习惯
    人活着是靠精神(几个例子都是我自己发现的)
    VC++对象布局的奥秘:虚函数、多继承、虚拟继承
    delphi数字签名验证及能够获取数字签名文件信息(利用wintrust.dll的导出函数,翻译一下)
    算法系列之二十:计算中国农历(二)
  • 原文地址:https://www.cnblogs.com/Claires/p/4190971.html
Copyright © 2020-2023  润新知