Day08

作者: 喝酸奶要舔盖__ | 来源:发表于2018-09-06 10:47 被阅读0次

二维数组

  • 二维数组格式
    /*
     * 二维数组
     *
     * 格式: 数组类型 数组名称[二位数组中一维数组的个数][一维数组中元素的个数]
     *
     * 数组类型: 一维数组中存储数据的类型
     * 注意点: 二维数组也是一个数组,只是二维数组中每个元素是一维数组
     *
     */
    int score[2][2] = {{50, 80},{60, 70}};
    printf("score[0][0] = %i\n", score[0][0]); //50
  • 二维数组初始化
int main()
{
    //1. 定义同时初始化
    int nums[2][2] = {{1,3},{5,7}};
    //2. 先定义后初始化
    int nums1[2][2];
    nums1[0][0] = 888;
    nums1[0][1] = 22;
    nums1[1][0] = 33;
    nums1[1][1] = 44;


    //3. 特殊方式
    // 如果在定义的同时初始化,那么二维数组的个数可以省略
    int num3[][2] = {{1,3},{5,7}};
    //如果定义的同时初始化,那么初始化中每个一维数组的{}也可以省略,会依次从前面往后面存入
  • 二维数组的遍历
    /*
     * 二维数组的遍历
     *
     */

    int score[2][3] = {{50,60,70},{26,48,37}};
    //遍历数组
    for(int i = 0; i< 2; i++){
        for(int j = 0; j < 3; j++){
            printf("score[%i][%i] = %i\n", i,j,score[i][j]);
        }
    }
  • 二维数组内存存储细节


 /*
     * 二维数组存储细节
     */

    char chs[2][3] = {{'a','b','c'},{'e','f','g'}};
    //chs[0]和chs[1]都代表的是数据的地址
    printf("%p\n", chs); //0028FBEA
    printf("%p\n", &chs); //0028FBEA
    printf("%p\n", &chs[0]);//0028FBEA
    printf("%p\n", &chs[1]);
    printf("%p\n", &chs[0][0]);//0028FBEA
  • 二维数组与函数
    注意点: 主要是看函数的参数是基本数据类型还是数组,基本数据类型就不会改变实参,数组就会改变实参
  • 二维数组练习题
#include <stdio.h>

char input();
char lowerCase(char ch);
void printMap(char map[6][6], int row, int col);
void move(char map[6][6],char ch);
//定义全部变量
//小人当前位置
int currentRow = 1; //行
int currnetCol = 1; //列

//小人结束的位置
int endRow = 1;
int endCol = 5;
int main()
{
    /*
     * 需求: 要求用户输入w a s d控制小人走出迷宫
     w 向上走
     s 向下走
     a 向左走
     d 向右走

     ######
     #R #
     # ## #
     #  # #
     ##   #
     ######


     补充:
     1.以后翻转函数, 一定要编写说明的注释
     2.封装函数的时候, 一定要遵守单一原则
     什么是单一原则?
     一个函数只做一件事情
     */


    //1. 定义一个二维数组保存地图
    char map[6][6] = {
        {'#','#','#','#','#','#'},
        {'#','R',' ','#',' ',' '},
        {'#',' ','#','#',' ','#'},
        {'#',' ',' ','#',' ','#'},
        {'#','#',' ',' ',' ','#'},
        {'#','#','#','#','#','#'},

    };
    // 计算数组的长度
    int row = sizeof(map)/sizeof(map[1]);

    int col = sizeof(map[1]);
    while(currentRow != endRow || currnetCol != endCol){
        //2. 接收用户的指令,考虑用户输入大写字母的情况
        char ch = input();
        //3. 让小人根据指令运动
        move(map,ch);
        //4. 打印地图
        printMap(map,row,col);
    }
    printf("恭喜您已经通关");


    return 0;
}



/**
   接收用户输入的指令
 * @brief input
 * @param ch
 * @return
 */
char input(){
    printf("请输入w,s,a,d控制小人行走\n");
    char ch;
    scanf("%c", &ch);
    setbuf(stdin,NULL); //清除缓冲区
    lowerCase(ch);
}



/**大写字母转小写字母
 * @brief lowerCase
 * @param ch
 * @return
 */
char lowerCase(char ch){
    if(ch >='a' && ch <='z'){
        return ch;

    }else if(ch >='A' && ch <='Z'){
        return ch + ('a' - 'A');
    }else {
        return printf("输入内容不合法,请重新输入\n");
    }
}
/**
 * @brief move 移动小人
 * @param ch
 */
void move(char map[6][6],char ch){
    switch (ch) {
    //向上走
    case 'w':
        if(map[currentRow - 1][currnetCol] != '#'){
            map[currentRow][currnetCol] = ' ';
            currentRow--;
            map[currentRow][currnetCol] = 'R';
        }
        break;
    //向下走
    case 's':
        if(map[currentRow + 1][currnetCol] != '#'){
            map[currentRow][currnetCol] = ' ';
            currentRow++;
            map[currentRow][currnetCol] = 'R';
        }

        break;
        //向左走
    case 'a':
        if(map[currentRow][currnetCol - 1] != '#'){
            map[currentRow][currnetCol] = ' ';
            currnetCol--;
            map[currentRow][currnetCol] = 'R';
        }
        break;
        //向右走
    case 'd':
        if(map[currentRow][currnetCol + 1] != '#'){
            map[currentRow][currnetCol] = ' ';
            currnetCol++;
            map[currentRow][currnetCol] = 'R';
        }
        break;
    }
}



/**
 * @brief printMap 打印地图函数
 * @param ch
 * @param row
 * @param col
 */
void printMap(char map[6][6], int row, int col){
    // 在Windows中清空上一次输出的内容
    system("cls");
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            printf("%c",map[i][j]);
        }
        printf("\n");
    }
}

相关文章

  • 20160818

    《把时间当作朋友》Day08

  • 8.synchronized 和 volatile 的区别

    /** * 每天一个知识点day08 TODO synchronized 和 volatile 的区别 * 被sy...

  • 2019-05-03java第八天

    day08【String类、static关键字、Arrays类、Math类】 今日内容 String类 stati...

  • 自律给我自由—Day008

    【叶子姑娘的自律100天挑战 Day08】 2019.01.22 Day8/100 【早起】第11天早起 【阅读】...

  • Java面向对象,继承,this,super,重写,final

    day08笔记【Java面向对象,继承,this,super,重写,final】 1_面向对象(代码块的概述和分类...

  • 晨起阅读 Day08:《冯唐成事心法》02章

    阅读日记-Day08:2021.01.19 周二 阅读时间:05:40-06:30阅读内容:《冯唐成事心法》第二...

  • day08

    A今天学了什么 1.公共样式的提取 2.CSS2d转化 3.过渡 B今天学到了什么 1.公共样式的提取 2.CSS...

  • day08

    类型信息 本章将讨论java是如何让我们在运行时识别对象和类的信息的.主要有两种方式:一种是"传统的"RTTI,它...

  • Day08

    二维数组 二维数组格式 二维数组初始化 二维数组的遍历 二维数组内存存储细节 二维数组与函数注意点: 主要是看函数...

  • Day08

    回顾与计划。昨天看群里情歌哥的一篇文章《我正在坚持的九个习惯》感觉不错。里面的第八个习惯是 统计与计划。 "每天睡...

网友评论

      本文标题:Day08

      本文链接:https://www.haomeiwen.com/subject/zjbtgftx.html