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\t",a[i][j]); //%2d是打印出的每个字符占俩个格
        }
        printf("\n");
    }
 */
/*
//练习 : 讲一个二维数组的行和列交换,存储到另一个数组
    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("\n");
    }

// 练习: 定义一个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 \n",c);
    for (int i = 0; i < 3; i ++)
    {
        for (int j = 0; j < 4; j ++)
        {
            if (c == a[i][j])
            {
                printf("第%d行第%d列 \n",i,j);
            }
        }
    }
    printf("\n\n\n");
    
*/
/*
#pragma mark  ---------字符串数组---------
    1. 字符数组: 数组元素是字符的数组,一维数组
    2. 字符串数组: 数据元素是 字符串 的数组,二维数组.字符串本身也是字符组
    定义字符串数组,赋值时有些不同
 
    char name[3][30] = {"pengqifeng","caijingping","zhangdonghui"};
//    访问某个字符串, 数组名[第一维下标]
   
    for (int i = 0; i < 3; i ++)
    {
        printf("%s\n",name[i]);
    }
    
//   访问某个字符 数组名[第一维下标][第二维下标]
    for (int i = 0; i < 3; i ++)
    {
        for (int j = 0; j < 30; j ++)
        {
            printf("%c ",name[i][j]);
        }
        printf("\n");
    }

// 练习 : 创建一个字符串数组(内容是你周围人的姓名),输出最长字符串的长度
    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 \n",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从标准输入设备读取字符串,以回车结束读取,使用‘\0‘结尾,回车符‘\n‘被舍弃没有遗留在缓冲区.
//    可以用来输入带空格的字符串
//    可以无限读取,不会判断上限,因此使用gets不安全,可能造成溢出

printf("请输入字符串");
    gets(a);   //读取
    printf("%s\n",a);
    //scanf(%s\n,a);以空格或回车符结束读取,空格或是回车符会遗留在缓冲区
    //不能直接输入带空格的字符串
    //scanf("%[^\n]",argc); %[]输入字符集
    //[^\n]表示除了‘\n‘之外的字符都接收,即可以接收空格,这个可以用来输入带空格的字符串.
    printf("请输入字符串");
    scanf("%[^\n]",a);
    printf("%s\n",a);
    //从控制台输入字符串
   //字符串数组存储多个字符串
    char names[6][30] = {};
    printf("请输入字符串: \n");
    for (int i = 0; i < 6; i ++)
    {
        scanf("%s",names[i]); //循环输入字符串
        getchar();
        
    }
    printf("您输入字符串为: \n");
    for (int i = 0; i < 6; i ++)
    {
        printf("%s\n",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\n",i,j,k,ages[i][j][k]);
                }
            }
        }
    
    //    多维数组访问元素,数组名[下标][下标]....
    //    多维数组 元素个数 = 各位数个数 乘积
    //    多为数组占用内存 = 元素个数 乘以 单个元素所占空间

时间: 2025-01-16 18:43:06

C 入门 第五节 多维数组 字符串数组的相关文章

C语言--二维数组,字符串数组,多维数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // int a[2][3]={ // {1,2,3}, // {4,5,6} // }; // int a[2][3]={1,2,3,4,5,6}; // //打印单个元素 // printf("%d",a[1][1]); // //元素没赋全,默认为0 // int b[2][3]={{1,2,3},{4}}; // /

二维数组 字符串数组

字符串数组元素访问:? 1.访问某个字符串:数组名[第?一维下标]? 2.访问某个字符 :数组名[第?一维下标][第?二维下标] 3.多维数组占?用内存 = 元素个数 乘以 单个元素所占空间 创建?一个字符串数组(内容是你周围?一圈?人的姓名),对字符串 (英?文)从?小到?大排序. char name[3][20] = {"chexianpeng" , "liuhuaixuan" , "liyunxiao"}; for (int j = 0;

linux入门-第五节:Linux的用户及用户组管理

[认识/etc/passwd和/etc/shadow] /etc/passwd由':'分割成7个字段,每个字段的具体含义是: 1)用户名(如第一行中的root就是用户名),代表用户账号的字符串.用户名字符可以是大小写字母.数字.减号(不能出现在首位).点以及下划线,其他字符不合法.虽然用户名中可以出现点,但不建议使用,尤其是首位为点时,另外减号也不建议使用,因为容易造成混淆. 2)存放的就是该账号的口令,为什么是'x'呢?早期的unix系统口令确实是存放在这里,但基于安全因素,后来就将其存放到/

逐行读写字符串数组到文本txt文件

C语言方式 将字符串数组写入到txt文件中 有五个文件名存储在字符串数组中,欲将其逐行写入到txt文件中保存到磁盘上. 利用fprintf对文件进行格式化输出 void Filewrite() { FILE *fp; char * name[] = {"filen1", "file2", "file3", "file4", "file4"}; fp = fopen("E://test.txt&qu

Swift入门(五)——数组(Array)

集合 集合的定义 Swift中提供了两种数据结构用于存放数据的集合,分别是数组(Array)和字典(Dictionary).他们的主要区别在于数组中的元素由下标确定,而字典中的数据的值由数据的键(Key)决定.以下我们认为集合就是数组或字典. 集合的可变性 我们可以定义一个集合常量或者集合变量.一旦定义为常量,就意味着集合的长度.内容和顺序都不能再修改了.比如,定义为常量的数组,不能再向其中添加新的元素. 数组的创建 由于swift中变量的创建遵循" var 变量名:变量类型 "的语法

第五节 VMware View 6.0 菜鸟入门 域控制器的安装和配置

第五节 VMware View 6.0 菜鸟入门 域控制器的安装和配置 一.安装域服务 二.创建OU 三.创建用户和组 一.安装域服务 在第四节中的dc 虚拟机中安装域服务 第一步:打开dc虚拟机的控制台,进入全屏模式 第二步:修改计算机名称,并且重启计算机 第三步:设置dc 虚拟机的ip和DNS  192.168.253.11   dns :127.0.0.1 第四步:打开"运行"输入"dcpromo" 第五步:安装域服务 完成安装,重启计算机 二.创建OU 第一

火云开发课堂 - 《Shader从入门到精通》系列 第五节:在Shader中将纹理色与颜色值混合

<Shader从入门到精通>系列在线课程 第五节:在Shader中将纹理色与颜色值混合 视频地址:http://edu.csdn.net/course/detail/1441/22669?auto_start=1 交流论坛:http://www.firestonegames.com/bbs/forum.php 工程下载地址:请成为正式学员获取工程 课程截图:   版权声明:本文为博主原创文章,未经博主允许不得转载.

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同

C语言高速入门系列(五)

C语言高速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的优点:利用指针能够表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;能够像汇编语言一样直接处理内存单元地址;能够动态地进行内存空间 分配,C语言指针是重点,同