栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

从零开始 学习C/C++的第七天 二维数组

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从零开始 学习C/C++的第七天 二维数组

二维数组 11.3

二维数组:

    一维数组可以看成把变量排成一排,通过编号访问

    二维数组相当于把变量排成一个矩阵,通过行号和列号访问

    定义:

        类型    数组名[行数][列数];

        int arr[3][5];

        [0,0],[0,1],[0,2],[0,3],[0,4]

        [1,0],[1,1],[1,2],[1,3],[1,4]

        [2,0],[2,1],[2,2],[2,3],[2,4]

    使用:  数组名[行下标][列下标];

        行下标: 0~行数-1

        列下标: 0~列数-1

    遍历:

        一般需要与双层for循环配合,外层循环负责遍历行,内层循环负责遍历列

            for (int i=0;i<行数;i++)

            {

                for (int j=0;j<列数;j++)

                {

                    printf ("%d",arr[i][j]);

                }

                printf ("n");

            }

    初始化:

        类型 数组名[行数][列数] = {{第一行},{第二行},{第三行},...};

    练习1:定义一个5*5二维数组并初始化,找出最大值的坐标

    注意:物理上没有所谓的多维数组,所有的多维数组都是用一维数组模拟的

    练习2:定义一个5*5二维数组并初始化,找出最小值的坐标,计算出该位置周围的和

 变长数组:

    定义数组时,使用变量作为数组的长度,这种叫做变长数组

    int arr[num];

    由于编译期间变长数组的长度还不确定,只有当运行到数组的定义语句时,它的长度才真正的确定下来,而且确定后不能改变

    优点:可以根据实际情况确定数组的长度,从而达到节约内存的目的

    缺点:不能使用初始化语法,只能循环赋值

     for (int i=0;i

    {

        arr[i] = 0;

    }

    注意:无论什么数组,一旦数组的长度确定后,本次运行过程中都不能发生变化

    练习3:

        输入两个正整数N,M(1<=N<=6,1<=M<=6),定义二维数组arr[N][M],输入各个成员的数值,然后统计各个成员之和,非零的个数,所有成员的平均值,大于平均值的成员合数

获取键盘键值:

    需要使用getch.h头文件中的getch函数

    1.在window中把getch.h文件放入共享文件夹中

    2.在终端上进入共享文件夹目录,或者getch.h所在的目录

    3.复制头文件到C标准库中: sudo cp getch.h /usr/include

    4.给头文件加读权限:sudo chmod 644 /usr/include/getch.h //修改getch.h的权限,不然其他用户无权限使用

    上:183   下:184   右:185   左:186   enter:10

走迷宫:

    1.定义二维数组作为地图

        char map[15][15] = {{1,1,1,1,1,1,1,1,1},...}

    2.定义变量记录角色的位置

    3.获取游戏开始时间

    4.进入死循环

        a.清理屏幕,使用system函数 system("clear")

        b.显示地图(遍历二维数组)

        c.获取方向键并处理 getch

            如果前方是路

                1.把新位置赋值2

                2.把旧位置赋值0

                3.更新角色的坐标

        d.判断是否到达出口

            如果是:

                获取游戏结束的时间,计算出总用时

                结束程序

#include
#include
#include //自己定义的头文件,用来接收键盘的上下左右键

int main(int argc,const char* argv[])
{
    char map[10][10]={
        {1,1,1,1,1,1,1,1,1,1},
        {1,2,1,0,0,0,0,0,0,1},
        {1,0,1,0,1,1,1,1,0,1},
        {1,0,1,0,1,3,0,1,0,0},
        {1,0,1,0,1,1,0,1,0,1},
        {1,0,1,0,1,1,0,1,0,1},
        {1,0,1,0,0,0,0,1,0,1},
        {1,0,1,1,1,1,1,1,0,1},
        {1,0,0,0,0,0,0,0,0,1},
        {1,1,1,1,1,1,1,1,1,1}
        };

    int x = 1,y = 1,num=0;
    int t=time(NULL);
    for (;;)
    {
        system("clear");
        for (int i=0;i<10;i++)
        {
            for (int j=0;j<10;j++)
            {
                switch (map[i][j])
                {
                    case 0:printf("  ");break;
                    case 1:printf(" #");break;
                    case 2:printf(" @");break;
                    case 3:printf(" X");break;
                    case 5:printf(" @");break;
                }
            }
            printf ("n");
        }
        if (map[x][y] == 5)
        {    
            printf ("game over!n");
            printf ("通关共用%d秒n",t = time(NULL)-t);
            return 0;
        }
    
    //    获取方向键
    switch(get_keyboard())
    {
        case 183:
            {
                if(map[x-1][y] != 1)
                {
                    map[x-1][y] += 2;
                    map[x][y] -= 2;
                    x = x-1;
                }
            }break;
        case 184:
            {
                if(map[x+1][y] != 1)
                {
                    map[x+1][y] += 2;
                    map[x][y] -= 2;
                    x = x+1;
                }
            }break;
        case 186:
            {
                if(map[x][y-1] != 1)
                {
                    map[x][y-1] += 2;
                    map[x][y] -= 2;
                    y = y-1;
                }
            }break;
        case 185:
            {
                if(map[x][y+1] != 1)
                {
                    map[x][y+1] += 2;
                    map[x][y] -= 2;
                    y = y+1;
                }
            }break;
    }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号