多维数组

本文详细介绍了二维数组的各种操作,包括初始化、赋值、查找最大值及其位置、行列转置等,并通过具体示例展示了如何实现这些功能。

#import <Foundation/Foundation.h>

#define kWork 5

int main(int argc, const char * argv[])

{

#if kWork == 1

    //二维数组

    //定义数组 : 数据类型 数组名[行数][列数] = 初值(多个元素赋初值要加大括号)

    //列数必须指定

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

    //给二维数组中的元素赋值

    /*

    //给第一行元素赋值

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

        a[0][i] = i + 1;

    }

    //给第二行元素赋值

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

        a[1][i] = i + 1 + 5;

    }

    //给第三行元素赋值

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

        a[2][i] = i + 1 + 5 * 2;

    }

    //给第四行元素赋值

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

        a[3][i] = i + 1 + 5 * 3;

    }

    //给第五行元素赋值

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

        a[4][i] = i + 1 + 5 * 4;

    }

     */

    //一次性赋值

    //外层循环控制行数, 内层循环控制列数

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

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

            a[i][j] = j + 1 + 5 * i;

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

        }

        printf("\n");

    }

    //行列交换, 存放到另外一个数组中

    printf("交换行列后的数组为:\n");

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

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

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

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

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

        }

        printf("\n");

    }

#elif kWork == 2

    //2 一个34列数组, 找出最大值, 并输出所在行和列

    int c[3][4] = {0};

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

    int row = 0, column = 0;//row记录行数, column记录列数

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

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

            c[i][j] = arc4random() % 6 + 20;

            printf("%-2d ", c[i][j]);

        }

        printf("\n");

    }//给数组元素赋值

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

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

            if (max < c[i][j]) {

                max = c[i][j];//存储最大值

                row = i;//记录最大值行数

                column = j;//记录最大值列数

            }

        }

    }//遍历数组元素,找出其中的最大值,记录最大值的行数和列数

    //将所有的最大值的行与列输出

    printf("最大值的行数与列数为:\n");

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

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

            if (max == c[i][j]) {

                printf("%d %d\n", i + 1, j + 1);

            }

        }

    }

    printf("max = %d\n", max);

#elif kWork == 3

    //二维数组定义时, 行数可以省略, 但是第二维必须要指定, 列数必须要给, 列数是换行的标准

    //并且第一维下标与第二维下标都必须是常量或者常量表达式

    int a[][3] = {1, 2, 3, 4, 5, 6, 7};

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

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

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

        }

        printf("\n");

    }

#elif kWork == 4

    //字符串数组, 存放字符串的数组叫做字符串数组, 只不过字符串是存储在一维的字符数组中, 所以本质上是一个二维的字符数组

    char str[4][10] = {"Frank", "Duke", "iPhoneo", "vaercly"};

    unsigned long maxLength = 0;

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

        if (maxLength < strlen(str[i])) {

            maxLength = strlen(str[i]);

        }

    }

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

        if (maxLength == strlen(str[i])) {

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

        }

    }//得到最长单词之后, 拿最长的单词长度与字符串的长度作比较, 若发现相同, 就立即输出该字符串

#elif kWork == 5

    //数组名代表数组的首地址, 是一个常量地址, 不可修改

//    char ad[10][20] = {"vaercly", "nokia", "chuizi", "iOS", "iPhone", "iMac", "android", "windows", "blackberry", "xiaomi"};

    char ad[10][20] = {0};

    printf("请输入10个名字:\n");

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

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

    }

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

        for (int j = 0; j < 9 - i; j++) {

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

                //对字符串进行赋值操作, 要使用strcpy函数

                char temp[20] = {0};

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

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

                strcpy(ad[j], temp);

            }

        }

    }

    printf("排好后:\n");

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

        printf("%s ", ad[i]);

    }

    printf("\n");

#endif

    return 0;

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值