C语言第五讲(ArrayPro二维与多维数组)

来源:互联网 发布:七彩虹淘宝旗舰店 编辑:程序博客网 时间:2024/05/17 05:10

一: 1.一维数组(举个例子:相当于一串羊肉串)

上节已经学过  int a[5]={1, 2, 3, 4, 5};​

2.二维数组​(好几串羊肉串)

1)定义: 数据类型  数组名[行数][列数] = {值1, 值2, 值3,......};

 int b[2][3] = {1, 2, 3, 4, 5, 6};​

二维数组的元素个数 = 行数 * 列数​

2)定义的其他形式

    省略行数,由赋值的个数和列数决定

    int array2[][3] = {1, 2, 3, 4, 5};

    注:   二维数组的列数不能够省略

    int array3[2][]={1, 2, 3, 4};//error

    int array4[][]={1, 2, 3};//error

3)      二维数组元素的访问

    格式

    数组名[行标][列标]

    行标和列标从0开始

4)遍历数组    例:int array[3][2] = {1, 2, 4, 5, 3, 6};

   // 遍历数组,并打印每个元素

   for (int i=0; i<3; i++) {// 控制行数

       for (int j =0; j<2; j++) {//控制列数

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

        }

       printf("\n");

   }

5)元素赋值

    array[1][0] = 100;

给大家一道例题:将一个二维数组的行和列交换,存储到另外一个数组中去

    int a[3][5] = {0};

    //每个元素的取值方式范围[40,60];

    for (int i=0; i<3; i++) {

        for (int j=0; j<5; j++) {

           a[i][j]=arc4random()%(60-40+1)+40;

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

        }

        printf("\n");

    }

    int b[5][3]={0};

    for (int i=0 ; i<5; i++) {

        for (int j =0; j<3; j++) {

            

            b[j][i]=a[j][i];

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

        }

        printf("\n");

    }

3.字符数组:数组中的元素类型是char

     char string[7]={'i', 'p', 'h', 'o' ,'n', 'e'};

   字符串:字符数组又叫字符串

    char string1[7]="iphone";


    字符串数组:数组中的元素是字符串,字符串又叫字符数组,所以数组中的元素是一个数组,数组嵌套数组,所以字符串数组是一个二维数组

例:

 char strings[3][7]={"apple","nokia","xiaomi"};

    char strings1[3][7]={{'a','p','p','l','e'},{'n','o','k','i','a'},{'x','i','a','o','m','i'}};

    printf("%c\n",strings[0][2]);

     打印strings数组

   //1).

    for (int i=0; i<3; i++) {

        for (int j=0; j<7; j++) {

            printf("%c ",strings[i][j]);        }

        printf("\n");

    }

然后改进一下,如下

    //2).

    

    

    for (int i=0; i<3; i++) {

        for (int j=0; j<7; j++) {

          if (strings[i][j]!='\0') {

              printf("%c ",strings[i][j]);


           }else{

                break;

            }

                    }

        printf("\n");

    }

上面两种是打印字符,第三种是直接打印字符串,如下

    //3).

    for (int i=0; i<3; i++) {

        printf("%s\n",strings[i]);

  }

改进后,如下

    //4).

    for (int i=0; i<3; i++) {

            for (int j=0; j<7&&strings[i][j]!='\0'; j++) {

                printf("%c ",strings[i][j]);

            }

            printf("\n");

        }


    输入字符:

       scanf("%c",&c);

     输入字符串  

  char str[10]={0};

   scanf("%s",str)

    注:输入字符串,不需要加&    

    //输入字符串数组

    char strs[3][10]={0};

    for (int i=0;i<3; i++) {

        scanf("%s",strs[i]);

    }

   例: //使用字符串组存周围学生姓名

    char str[3][20]={0};

    printf("请输入你的名字:");  

  for (int i=0; i<3; i++) {

        scanf("%s",str[i]);

           }

    

    for (int i=0; i<3; i++) {

    

         printf("%s\n",str[i]);

     }

    


​下面来一到经典例题:

姓名按a-z 进行排序​

    char nams[5][20]={"xiaoming","hanmeimei","liuneng","zhaosi","zhangsanfeng"};

    for (int i=0; i<<span se-mark="1">5-1; i++) {

        for (int j=0; j<<span se-mark="1">5-1-i; j++) {

            //            //字符串又叫字符数组,数组是不能够直接参与运算的,字符串比较使用strcmp

            if(strcmp(nams[j], nams[j+1])>0){

                //                //交换两个变量的值,使用第三个变量,第三个变量的类型有交换的变量的类型决定;交换的两个字符串,所以第三个变量也应该是一个字符串

                char temp[20]={0};

                //                //字符串又叫字符数组,数组是不能直接参与运算的,字符串赋值使用strcpy

                strcpy(temp, nams[j]);

                strcpy(nams[j],nams[j+1]);

                strcpy( nams[j+1],temp);

            }

        }

    }

    for (int i=0; i<<span se-mark="1">5; i++) {

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

4.字符串数组char strings[i][j]

    i:字符串的个数

    j:字符串的长度

    

    strings[i]: 获取字符串

    strings[i][j]:获取字符

    

    注:一般,把字符串数组中的元素(字符串)看成一个整体使用,比如输入,输出,冒泡排序等等

    

    5.多维数组

    

    数据类型 数组名[维度1][维度2][维度3][...]={值1,值2,值3,...};

    [层数][行数][列数]

    int array[2][4][3]={0};

例:   1:       遍历多维数组,随机赋值[10,20]

    for (int i=0; i<2; i++) {

       for (int j=0; j<4; j++) {

            for (int k=0; k<3; k++) {

                array[i][j][k]=arc4random()%(20-10+1)+10;

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

            }

            printf("\n");

        }

      printf("\n");

    }

   

    

例  2    :随机生成一个三维数组,编程求深度的平均值,保存在一个二维数组中(相当于一个模仿从上面看)

    int a[2][3][4]={0};

    for (int i=0; i<2; i++) {

       for (int j=0; j<3; j++) {

            for (int k=0; k<4; k++) {              

  a[i][j][k]=arc4random()!+10;

            }

       }

   }

    for (int i=0; i<2; i++) {

       for (int j=0; j<3; j++) {

            for (int k=0; k<4; k++) {

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

            }printf("\n");

        }

    }

0 0
原创粉丝点击