二维数组练习题

本文通过一系列的编程练习题介绍了二维数组在Java中的应用,包括计算3*3矩阵对角线元素之和,交换二维数组行元素,清除数组边界值,左下三角清0,对角线清0,寻找每行最大值,以及数组的最大值和最小值求解。适合Java初学者提升二维数组操作技能。

1、什么是二维数组以及二维数组的写法

public class ArrayDemo01 {
    public static void main(String[] args) {
        /*
        二维数组:即数组的嵌套,数组里面的元素又是一个数组
         */

        //声明二维数组,数据类型[][] 数组名; 或者 数据类型 数组名[][];
        //声明一个int类型的二维数组
        int[][] nums;
        //声明一个String类型的二维数组
        String[][] strs;

        //分配空间(告诉你这个数组里可以存储多少个元素):   数组名 = new 数据类型[数组长度][数组长度];  或者 数组名 = new 数据类型[数组长度][];
        //注意:二维数组在分配空间的时候,第一个数组长度必须要写,告诉你这个二维数组里有多少个元素,第二数组长度可以写,可以不写,不过写了,表示这个二维数组里的里面的元素(一维数组)的长度,如果没有写,这个二维数组里面的元素(一维数组)长度可以不一样
        //给nums数组分配空,这个数组可以存储3个元素,里面的元素长度都相同,都为5
        nums = new int[3][5];
        //给strs数组分配空间,这个数组可以存储5个元素,里面的元素长度不相同
        strs = new String[5][];

        //赋值:数组名[下标][下标] = 数据;
        //给nums数组里的第一个元素(一维数组)下标为0的元素赋值为9
        nums[0][0] = 9;

        nums[2][4] = 84;
        // nums[2][5] = 99;//ArrayIndexOutOfBoundsException
        // System.out.println(nums[2][5]);

        //操作数据:数组名[下标][下标];

    }
}
public class ArrayDemo02 {
    public static void main(String[] args) {
        // 二维数组的声明和分配空间合并写
        //数据类型[][] 数组名=new 数据类型[数组长度][数组长度];  或者  数据类型[][] 数组名=new 数据类型[数组长度][];

        int[][] nums = new int[5][3];
        int[][] nums2 = new int[3][];
        String[][] strs = new String[6][5];
        String[][] strs2 = new String[8][];

        //二维数组的声明、分配空间、赋值合并写
        //数据类型[][] 数组名 = new 数据类型[][]{
  
  {数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}};   注意:new后面的两个[][]里都不能写数组长度
        char[][] chars = new char[][]{
  
  {'a','b','c'},{'c','d'},{'m'}};

        //二维数组的声明、分配空间、赋值合并的简写方式
        //数据类型[][] 数组名 = {
  
  {数据1,数据2,...,数据n},{数据1,数据2,...,数据n},....,{数据1,数据2,...,数据n}};
        double[][] nums3 = {
  
  {2.5,5.5},{11.5,55.5},{99.9,88.8},{70.5,50}};

    }
}

2、求一个3*3矩阵对角线元素之和

<提示>程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

import java.util.Scanner;

public class Subject02 {
    public static void main(String[] args) {
        
        //声明一个二维数组
        int[][] num=new int[3][3];
        //声明Scanner类
        Scanner sc=new Scanner(System.in);
        for (int i=0;i< num.length;i++){
            for (int j=0;j<num[i].length;j++){
                System.out.println("请输入第"+(i+1)+"行第"+(j+1)+"个数据");
                num[i][j]=sc.nextInt();
            }
            System.out.println();
        }
        System.out.println("这个矩阵大致形状为:");
        int sum=0;
        for (int i=0;i<num.length;i++){
            for (int j=0;j<num[i].length;j++){
                if (i==j){
                    sum+=num[i][j];
                }
                System.out.print(num[i][j]+" ");
            }
            System.out.println();
        }
        System.out.println("对角线之和为:"+sum);
    }
}

3、定义一个44列的二维数组,逐个从键盘输入值,然后将第1<

以下是一些不同类型的C语言二维数组练习题及其代码示例: ### 查找元素 在一个已赋初值的二维数组中查找用户输入的数,找到则返回行列位置,没找到则给出提示。 ```c #include <stdio.h> int main() { int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int t; printf("要查找的数:"); scanf("%d", &t); int i, j, f = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (arr[i][j] == t) { printf("找到 %d,位于第 %d 行,第 %d 列\n", t, i + 1, j + 1); f = 1; break; } } if (f) break; } if (!f) printf("未找到 %d\n", t); return 0; } ``` ### 计算元素总和 先让用户输入二维数组的元素,然后计算该二维数组所有元素的和。 ```c #include <stdio.h> #define ROW 3 #define COLUMN 3 int calculateSum(int arr[ROW][COLUMN]) { int sum = 0; for (int i = 0; i < ROW; i++) { for (int j = 0; j < COLUMN; j++) { sum += arr[i][j]; } } return sum; } int main() { int arr[ROW][COLUMN]; printf("请输入二维数组的元素:\n"); for (int i = 0; i < ROW; i++) { for (int j = 0; j < COLUMN; j++) { scanf("%d", &arr[i][j]); } } int sum = calculateSum(arr); printf("二维数组所有元素的和为:%d\n", sum); return 0; } ``` ### 数组转置 将一个二维数组进行转置操作。 ```c #include <stdio.h> #define N 4 int main() { int num = 1; int arr[N][N] = { 0 }; int i = 0; int j = 0; // 初始化数组 for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { arr[i][j] = num++; printf("%d\t", arr[i][j]); } printf("\n"); } // 转置 for (i = 0; i < N; i++) { for (j = i + 1; j < N; j++) { int temp = arr[i][j]; arr[i][j] = arr[j][i]; arr[j][i] = temp; } } printf("置换后:\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%d\t", arr[i][j]); } printf("\n"); } return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值