【学习ios之路:C语言】二维.三维数组.字符串数组的应用

一.二维数组

     int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};//定义了一个3行4列的二维数组.
     printf("%ld\n", sizeof(a));//48存储空间大小为48.
   通过双下标访问二维数组中的元素,先访问行,再访问列.

  注:二维数组定义时,可以不指定第⼀维的长度,但必须给定第二维。例如:int a[][3] = {1 , 2 , 3 , 4 , 5};

 例子:

<span style="font-size:14px;"><span style="font-size:14px;">
  
   int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    for (int i = 0; i < 3; i++) {
        //外层循环控制行数;
        for (int j = 0; j < 4; j++) {
            //内层循环控制列数
            printf("%4d ", a[i][j]); //输出二维数组的元素
        }
        printf("\n");
    }



</span></span>

2.定义一个二维数组,4行3列,元素取值范围为[20,40] 求所有元素的和.
<span style="font-size:14px;"><span style="font-size:14px;">

    int n[4][3] = {0};
      int  sum = 0;
      for (int i = 0; i < 4; i++) {
        for (int  j = 0; j < 3; j++) {
            n[i][j] = arc4random() % ( 40 - 20 + 1) + 20;
            sum  += n[i][j];
        }
    }
    printf("%d\n", sum);



</span></span>
 3.输出每一行元素的和.
   
<span style="font-size:14px;"><span style="font-size:14px;">
  
    int n[4][3] = {0};
    int  sum = 0;
    for (int i = 0; i < 4; i++) {
        for (int  j = 0; j < 3; j++) {
            n[i][j] = arc4random() % ( 40 - 20 + 1) + 20;
            sum  += n[i][j];
            printf("%d ", n[i][j]);
        }
        printf("sum = %d \n", sum);
        sum = 0;
    }



</span></span>
 4.输出每一列元素的和.
<span style="font-size:14px;"><span style="font-size:14px;">

  
    int m[4][3] = {0};//定义二维数组
    for (int i = 0 ; i < 4; i++) {
        for (int j = 0; j < 3; j++) {
            m[i][j] = arc4random() % (20 - 10 + 1 ) + 10; //随机值范围 10 - 20
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }
     //每一列的和
    int sum = 0 ;
    for (int i = 0; i < 3; i++) { //列
        for (int j = 0; j < 4; j++) { //行
            sum += m[j][i]; //m[j][i] //对应4行3列
        }
        printf("sum = %d ", sum);
        sum  = 0;
    }



</span></span>
3、找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息。3行4列的二维数组,取值范围20 - 40
代码如下:
<span style="font-size:14px;"><span style="font-size:14px;">
 
     //方法1:
    //定义一个二维数组
    int a[3][4] = {0};
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            a[i][j] = arc4random() % (40 - 20 + 1) + 20;//随机取出几个范围在20-40的数.
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    //定义最大最小值
    int max = 0, min = 1000;
    int m[3] = {0};//定义用来存储最大值的一位数组.
    int n[4] = {0};//定义用来存储最小值的一位数组.
    //求最大值,并把最大值保存在一维数组m中.
    for (int i = 0; i < 3; i++) {
        for ( int j = 0; j < 4; j++) {
            if (max < a[i][j]) {
                max = a[i][j];
            }
        }
        m[i] = max;
        printf("max = %d ", max);
        max = 0; //没遍历一次,max赋值为0
    }
    //求最小值,并把最小是保存在一维数组m中
    for (int i = 0 ; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            if (min > a[i][j]) {
                min = a[i][j];
            }
        }
        n[i] = min;
        printf("max = %d" , min);
        min = 10000; //初始化
    }
    for (int i = 0 ; i < 3 ; i++) {
        for (int j = 0; j < 4; j++) {
            if (a[i][j] == m[i] && a[i][j] == n[j] ) {
                printf("第%d行第%d列存在鞍点是:%d\n", i, j,a[i][j]);
            }else {
                printf("没有鞍点!");
            }
    }



</span></span>
方法2:
<span style="font-size:14px;"><span style="font-size:14px;">
 
    
    int a[3][4] = {0};
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            a[i][j] = 1;//arc4random() % (40 - 20 + 1) + 20;
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    //遍历数组中的每个元素,验证每个元素是否是鞍点.
    int count = 0; //用来记录鞍点的个数
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            //首先假定该数是该行中最大的
            BOOL isMax = YES;
            //验证该数是否是该行中最大的
            for (int column = 0; column < 4; column++) {
                if (a[i][column] > a[i][j]) {
                    isMax = NO; //如果不是最大的, 将isMax标识为NO.
                    break; //结束当前循环
                }
            }
            
            if (isMax == NO) {
                //如果为NO,说明不是该行中最大的,已经不满足鞍点的条件了.
                continue; //直接进入下一循环
            }
            //先假设是该列中最小的.
            BOOL isMin = YES;
            //验证该数是否是该列中最小的.
            for (int row = 0; row < 3; row++) {
                if (a[row][j] < a[i][j]) {
                    isMin = NO;
                    break;
                }
            }
            if (isMin == NO) {
                continue;
            }
            count++;
            printf("row:%d,column:%d = %d\n", i + 1, j + 1, a[i][j]);
        }
    }
    if (count == 0) {
        printf("没有鞍点");
    }




</span></span>







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值