C语言整理-5

二维数组

⼆维数组:有两个下标的数组。

定义:类型数组名[常量表达式1] [常量表达式2] = {值1,值2...};

用普通的话来说,就是,二维数组的第一个[ ]表示行,第二个[ ]表示列。

Ø  数组的第一种定义方式:

//    //定义二维数组第一种方式(不直观,不能直接看出第一行是在哪里开始结束)

//    int array[2][3] = {1,2,3,4,5,6};

数组第二种定义方式:

 

    //定义二维数组第二种方式(直观)

   

    //花括号{},可以区分行{123}为一行,{456}为一行

//    int array[2][3] = {{1,2,3},{4,5,6}};

//   

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

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

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

//        }

//        printf("\n");

//    }

数组第三种定义方式:(注意:定义二维数组时,可以省略行数,但是一定不能省略列数。元素个数不,会动补0

    //第三种:可以省略行,但是一定不能省略列

//    int array[][] = {1,2,3,4,5,6};//报错

//    int array[][] = {{1,2,3},{4,5,6}};//错误的

//    int array[2][] = {1,2,3,4,5,6};//只给行,报错

   

//    int array[][3] = {1,2,4,5,6};//只给列,正确

//    //打印

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

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

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

//        }

//            printf("\n");

//    }

//    //打印结果: 124

//    //           560自动补0

//    int array1[][3] = {{1,2},{3,4},{5,6}};

//   

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

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

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

//        }

//        printf("\n");

//    }

//    //打印

//    //120

//    //340

//    //560

 

 

一些练习:

定义一个三行两列的维维数组

    //练习

    //定义一个三行两列的维维数组

//    int array[3][2] = {{75,60},{62,90},{60,50}};

//

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

//        for (int j = 0 ; j < 2; j++) {

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

//        }

//        printf("\n");

//    }

//    //打印结果

//    //500  450

//    //62   90

//    //66   50

//    //求和

//    int total = 0;

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

//        for (int j = 0 ; j < 2; j ++) {

//            total += array[i][j];

//        }

//    }

//    printf("我们组的总体重为:%d",total);

将一个数组的行和列交换,放在另外一个新的数组中去:

    //将⼀个⼆维数组的⾏和列交换,存储到另外⼀个数组中去。

   

//    int arr1[2][3] = {{1,2,3 },{4,5,6}};

//    int arr2[3][2] = {0};

//   

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

//        for (int j = 0 ; j < 2;  j++ ) {

//            arr2[i][j] = arr1[j][i];

//           

//            printf("%d\t",arr2[i][j]);

//        }

//        printf("\n");

//    }

 

关键点:主要是搞清楚规律。这里的规律就是原来的数组的行和列调换位置,就可以得到新的数组。for循环,可以用后面数组来循环,也可以用前面的数组来循环。

 

定义一个3行4列的数组,找出数组的最大的元素,打印出来,并打印所在的行和列。

    //34列的数组,找出最大值,输出所在行列。

//    int arr[3][4] = {{1,2,3,4322},{5,6,777,8},{99,10,11,12222}};

//    //记录最大值和行列

//    int x = 0; //

//    int y = 0;  //

//    int max = 0; //最大值

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

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

//            if (arr[i][j] > max) {

//                max = arr[i][j];

//                x = i;

//                y = j;

//            }

//        }

//    }

//    printf("最大值为:%d",max);

//    printf("\n最大的数在第 %d行,第 %d",x,y);

与普通的找最大值一个样子。

21、字符串数组

字符串数组本质上是一个二维数组

1、访问某个字符串:数组名[行号]

2、访问某个字符:数组名[行号][列号]

定义方式:

    //字符串数组

//    char arr1[3][10] = {"iPhone","Android","Windows"};

//   

////    printf("%c",arr1[0][0]);//输出:i

//   

////    printf("%s",arr1[2]);//只给行号就行。

//   

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

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

//    }

//    //打印结果:iPhone

//                Android

//                Windows

打印字符串数组时,直接在for里给出行数,就可以了。不用两个for。

一些练习:

创建一个字符串数组(内容是你周围一圈人的姓名),输出最长的字符串长度。

    //练习

   

    //创建一个字符串数组(内容是你周围一圈人的姓名),输出最长的字符串长度。

//    unsigned long length[20] = {0};

//    unsigned long max  = 0;

//    int x = 0;

//    char names[6][20] = {"nongdahai","qinxiaoqiang","sunqing","qinwei","lvlifeng","liuxiaoqing"};

//    for (int i = 0 ; i < 6; i ++) {

//        length[i] = strlen(names[i]);

//    }

//    for (int i = 0; i < 20 ; i ++) {

//        if(max < length[i]){

//            max = length[i];

//            x = i;

//        }

//    }

//    printf("%d\n",x);

//    printf("%lu\n",max);

//    printf("%s\n",names[x]);

 

 

 

字符串数组从小到大排序

    //字符串数组从小到大排序

//    char names[6][20] = {"nongdahai","qinxiaoqiang","sunqing","qinwei","lvlifeng","liuxiaoqing"};

//   

//    for (int i = 0 ; i < 6 -1 ; i ++) {

//        for (int j = 0; j < 6 -(i+1); j++) {

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

//                char temp[20] = {0};

//                strcpy(temp, names[j]);

//                strcpy(names[j], names[j+1]);

//                strcpy(names[j+1], temp);

//               

//            }

//        }

//       

//    }

//    for (int i = 0 ; i < 6 ; i ++) {

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

//    }

//    //liuxiaoqing

//    //lvlifeng

//    //nongdahai

//    //qinwei

//    //qinxiaoqiang

//    //sunqing

22、三维数组

    //三维数组

    //2层,3行,4

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

    //右左法则

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值