zoukankan      html  css  js  c++  java
  • C 入门 第五节 多维数组 字符串数组


    #pragma mark  ----------二维数组----------
    int main(int argc, const char * argv[]) {
    /*
        1 . 二维数组的本质:将数组作为数组元素的数组,称为数组的数组
        2 . 类如:管理一个班4个学生的年龄,将一维数组作为数组元素,存储到另一个数组中
        int age[4] = {12,13,14,15};
        12,13,14,15
        21,22,23,24
        31,32,33,34
        3 . 为了形象化理解二维数组,通常将二维数组写成行和列的排列形式.
        二维数组通常被称为:m*n数组,或 m行n列
        m 二维数组中包含多少个一维数组,是第一维,表示第几行
        n 一维数组包含多少个元素,是第二维,表示第几列
        5 . 二维数组常称为矩阵.矩阵:纵横排列的数据表格.
        定义二维数组
        类型  数组名[行数][列数] = {值}
        1 . 行和列使用常量表达式
        2 . 行数可以省略,列数不可以省
        3 . 设置初始值,使用{{},{},{}};形式
        4 . 每一行元素不足,会自动补齐

        1 . 定义一个二维数组,存储3个班级学生的年龄,每班的学生都是5人
        int age[3][5] = {{12,13,14,15,16},{21,22,23,24,25},{31,32,33,34,35}};
        2 . 定义二维数组形式2,省略行数
        a[][3] = {{1,2,3}{1,2,3,4,5}};
        3 . 定义二维数组形式3,不推荐,不容易看出每一行的开始和结束
        int a[][3] = {1,2,3,4,5};
        访问二维数组的元素
        访问单个元素 必须指定俩个下标,下标1代表所在的行,下标2代表所在列;
        注意越界问题
        printf("%d",a[1][0]);
        printf("%d",a[1][2]);
        修改二维数组元素
        a[0][1] = 6;
        printf("%d",a[0][1]);

        //遍历二维数组,需要使用俩层循环,第一层循环控制第几行,第二层循环控制第几列
        int a[2][3] = {{1,21,3},{4,5}};
        for (int i = 0; i < 2; i ++)
        {
            for (int j = 0; j < 3; j ++)
            {
                printf("%2d ",a[i][j]); //%2d是打印出的每个字符占俩个格
            }
            printf(" ");
        }
     */
    /*
    //练习 : 讲一个二维数组的行和列交换,存储到另一个数组
        int arr[2][3] = {{1,2,3},{4,5}};
        int brr[3][2] = {0};
        for (int i = 0; i < 3; i ++)
        {
            for (int j = 0; j < 2; j ++)
            {
                //printf("%d ",arr[i][j]);
                brr[i][j] = arr[j][i];
                printf("%d ",brr[i][j]);

            }
            printf(" ");
        }

     
    // 练习: 定义一个3行4列的数组,找出数组的最大元素,打印出来,并打印所在的行和列
        int a[3][4] = {{5,45,566,58},{4,15,65,456},{21,47,5,566,}};
        int c = 0;
        for (int i = 0; i < 3; i ++)
        {
            for (int j = 0; j < 4; j ++)
            {
                if (c < a[i][j])
                {
                    c = a[i][j];
                    
                }
            }
        }
        printf("%d ",c);
        for (int i = 0; i < 3; i ++)
        {
            for (int j = 0; j < 4; j ++)
            {
                if (c == a[i][j])
                {
                    printf("第%d行第%d列 ",i,j);
                }
            }
        }
        printf(" ");
        
    */
    /*
    #pragma mark  ---------字符串数组---------
        1. 字符数组: 数组元素是字符的数组,一维数组
        2. 字符串数组: 数据元素是 字符串 的数组,二维数组.字符串本身也是字符组
        定义字符串数组,赋值时有些不同
     
        char name[3][30] = {"pengqifeng","caijingping","zhangdonghui"};
    //    访问某个字符串, 数组名[第一维下标]
       
        for (int i = 0; i < 3; i ++)
        {
            printf("%s ",name[i]);
        }
        
    //   访问某个字符 数组名[第一维下标][第二维下标]
        for (int i = 0; i < 3; i ++)
        {
            for (int j = 0; j < 30; j ++)
            {
                printf("%c ",name[i][j]);
            }
            printf(" ");
        }

        
    // 练习 : 创建一个字符串数组(内容是你周围人的姓名),输出最长字符串的长度
        char a[4][50] = {"asdf","gadf","qwerejir","asdfxcv"};
        int c = 0;
        for (int i = 0; i < 4; i ++)
        {
            int d = (int)strlen(a[i]);
            if (c < d)
            {
                c = d;
            }
        }
        
        printf("%d ",c);
     
     
    // 练习 : 创建⼀一个字符串数组(内容是你周围⼀一圈人的姓名),对字符串 (英文)从⼩到大排序。
        char a[3][30] = {"lvyao","gaolei","gaojinghong"};
        for (int i = 0; i < 2; i ++)
        {
            for (int j = 0; j < 2 - i; j ++)
            {
                
                if (strcmp(a[j], a[j + 1]) > 0)        //按ACCII碼排列
    //          if (strlen(a[j]) < strlen(a[j + 1]))   //按字符串长度排列
                {
                    char b[30]= {0};
                    strcpy(b, a[j]);
                    strcpy(a[j], a[j + 1]);
                    strcpy(a[j + 1], b);
                }
            }
        }
        for (int i = 0; i < 3; i ++)
        {

            printf("%s ",a[i]);
        
            
        }

    //    从控制台输入字符串
    //    字符数组存储字符串
        char a[100] = {0};
    //    gets从标准输入设备读取字符串,以回车结束读取,使用''结尾,回车符' '被舍弃没有遗留在缓冲区.
    //    可以用来输入带空格的字符串
    //    可以无限读取,不会判断上限,因此使用gets不安全,可能造成溢出

        printf("请输入字符串");
        gets(a);   //读取
        printf("%s ",a);
        //scanf(%s ,a);以空格或回车符结束读取,空格或是回车符会遗留在缓冲区
        //不能直接输入带空格的字符串
        //scanf("%[^ ]",argc); %[]输入字符集
        //[^ ]表示除了' '之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串.
        printf("请输入字符串");
        scanf("%[^ ]",a);
        printf("%s ",a);
        //从控制台输入字符串
       //字符串数组存储多个字符串
        char names[6][30] = {};
        printf("请输入字符串: ");
        for (int i = 0; i < 6; i ++)
        {
            scanf("%s",names[i]); //循环输入字符串
            getchar();
            
        }
        printf("您输入字符串为: ");
        for (int i = 0; i < 6; i ++)
        {
            printf("%s ",names[i]);
        }
     */
    #pragma mark ------多维数组 ------
    //    多维数组;数组下标在2个以上
    //    三维数组;立体的 层,行,列
    //    定义三维数组 类型 数组名[层][行][列]
    //    int a[2][3][4] = [0];
    //    遍历三维数组  需要三层循环
        int ages[2][3][4] = {{{1,2,3,4},{4,5,6,7},{7,8,9,10}},{{12,13,14,15},{15,16,17,18},{21,22,23,24}}};
            
            for (int i = 0; i < 2; i++) {
                for (int j = 0; j < 3; j++) {
                    for (int k = 0; k < 4; k++) {
                        printf("ages[%d][%d][%d] = %d ",i,j,k,ages[i][j][k]);
                    }
                }
            }
        
        //    多维数组访问元素,数组名[下标][下标]....
        //    多维数组 元素个数 = 各位数个数 乘积
        //    多为数组占用内存 = 元素个数 乘以 单个元素所占空间
        

  • 相关阅读:
    Mysql执行顺序
    读取资源文件ResourceUtils
    军规(一)
    Spring声明式事务@Transactional 详解,事务隔离级别和传播行为
    linux crontab
    es _cat API
    elastic search 常用查询
    elastic search 重要的系统配置
    cerebro 配置
    Ubuntu18.04 搭建zookeeper单机版集群
  • 原文地址:https://www.cnblogs.com/wangshuai-1129/p/5079066.html
Copyright © 2011-2022 走看看