当前位置:首页 » 存储配置 » 二维数组存储矩阵

二维数组存储矩阵

发布时间: 2022-05-12 07:44:43

1. c语言问题:c语言中二维数组在内存中怎样存储

严格意义上说不存在二维数组,只是数组里的每个元素是一个一维数组,而内存是一段连续的空间,根据你申请一个变量的顺序按地址从低到高排,所以二维数组不可能像一个矩阵那样在内存中排列,这就涉及到它是按行依次往下排,还是按列往下排,而在c++中是按行,既 int a[2][2]
a[0][0]
a[0][1]
a[1][0]
a[1][1]

2. java如何输入二维矩阵并存储到二维数组中

最不严谨的写法(但是可用)下列方法可以不需知道二维数组的宽度和长度,但是不能直接保存,而是输入完成之后才能保存,如果需要更完善的方法,则先输入宽度与长度,然后再输入字符,可实现:

publicstaticvoidmain(String[]args)throwsException{
Scannerscanner=newScanner(System.in);
ArrayList<String>list=newArrayList<>();
intmaxCol=0;
while(true){
Stringline=scanner.nextLine();
if(line.equals(""))
break;
intl=line.length();
if(maxCol<l){
maxCol=l;
}
list.add(line);
}
scanner.close();
char[][]chars=newchar[list.size()][maxCol];
inti=0;
for(Stringline:list){
chars[i++]=line.toCharArray();
}
System.out.println("Printyourinput:");
for(char[]aChar:chars){
System.out.println(newString(aChar));
}
}

输入:

***@*

*@@*@

*@**@

@@@*@

@@**@

@@@@@

如果想结束,最后一行,输入一个空格" ",然后回车结束。

3. C++定义一个二维数组,存储3*3矩阵

一维数组 int a[3];
二维数组 int a[3][3];
三维数组 int a[3][3][3];

4. c语言中二维数组在内存中是按什么优先存放的

C语言中
二维数组是按行优先存储的
即 在内存中存一个二维数组时 先把数组中第一行的数组元素存完 再接着存下一行的 直到存完。
ps:定义一个二维数组 如 int a[m][n] 该数组为m行 n列的矩阵,在内存中 这样顺序存的:
a[0][0] a[0][1] ... a[0][n-1] a[1][0] a[1][1]...
不知道是不是帮到你的忙了
望采纳

5. 帮忙用数据结构做下此程序,假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。谢谢。。。

public class P1{
private int[][] a=null;
private int rownum=0,colnum=0;
//存储每行中最小的那个数的行和列,如"1,2"---第一行,第二列
private int[] rows=null;
//存储每列中最大的那个数的行和列,如"1,2"---第一行,第二列
private int[] cols=null;
private int num=0;
P1(int[][] a,int row,int col){
this.a = a;
this.rownum=row;
this.colnum=col;
rows = new int[row];
cols = new int[col];
}

public void setMinRow(){
int min;
int minIndex;
for(int r=0;r<rownum;r++){
min = a[r][0];
minIndex=0;
for(int c=0;c<colnum;c++){
if(a[r][c]<min){
min = a[r][c];
minIndex=c;
}
}
rows[r]=minIndex;

}
}

public void setMaxCol(){
int max;
int maxIndex;
for(int c=0;c<colnum;c++){
max = a[0][c];
maxIndex=0;
for(int r=0;r<rownum;r++){
if(a[r][c]>max){
max = a[r][c];
maxIndex=r;
}
}
cols[c]=maxIndex;
}
}

public void getSaddleNUm(){
setMinRow();
setMaxCol();
for(int r=0;r<rownum;r++){
if(r==cols[rows[r]]){
num++;
System.out.println("第"+num+"个马鞍点是行"+r+"列"+rows[r]+":"+a[r][rows[r]]);
}
}
}

public void print(){
for(int r=0;r<rownum;r++){
for(int c=0;c<colnum;c++){
System.out.print(a[r][c]+" ");
}
System.out.println("");
System.out.println("-----------");
}
}

public static void main(String[] args){
//存放矩阵的数值
int[][] a1 = {{1,5,9,10,2},{7,5,6,3,2},{11,7,9,0,12},{6,9,13,10,21},{11,4,13,40,32},{21,16,91,100,42}};
//第一个参数为存放矩阵的数组,第二个参数为矩阵行数,第三个为矩阵列数
P1 p = new P1(a1,6,5);
p.getSaddleNUm();
p.print();
System.out.println("矩阵拥有的马鞍点数为:"+p.num);
}
}

6. 编写程序,用二维数组存储矩阵元素,从键盘输入数据,将矩阵转置后按行输出

#include <stdio.h>
int main(void)
{
int a[4][4],i,j,t;
printf("请输入矩阵:\n");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

printf("输入的矩阵是:\n");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}

printf("\n转置后的矩阵是:\n");
for(i=0;i<4;i++)
for(j=0;j<i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}

for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
return 0;
}

7. 用java定义一个二维数组,用于存储1个3*3矩阵的元素值,求出该矩阵对角线元素之和并输出结果

importjava.util.Scanner;
classMain
{
publicstaticvoidmain(String[]args)
{
double[][]matrix=newdouble[3][3];
doublesum=0;
Scannerscanner=newScanner(System.in);
System.out.println("请输入1个3X3矩阵:");
for(inti=0;i<3;i++)
{
for(intj=0;i<3;j++)
{
matrix[i][j]=scanner.nextDouble();
if(i==j)
{
sum+=matrix[i][j];
}
}
}
System.out.println("对角线之和为:"+sum);
}
}

8. 急!!!!!在线等!C语言 定义一个二维数组来存放一个矩阵,然后将矩阵转置输出

/*
程式功能:
矩阵转置
(transportation)
*//*输入:m×n矩阵a
*//*输出:矩阵b,b=at
*/#include
void
main()
{
int
i,
j,
m=5,
n=5;
int
b[6][6],
a[6][6];
printf("请依序输入二维阵列a(5x5)的元素内容(可以5个一行,可以空格或回车隔开):
\n");
for
(i
=
1;
i
<=
5;
i++)
{
for
(j
=
1;
j
<=
5;
j++)
{
scanf("%d",
&a[i][j]);
}
}
printf("\n\n原始:\n");
for(i
=
1;
i
<=
m;
i
++)
{
for(j
=
1;
j
<=n;
j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n转置后:\n");
for
(i
=
1;
i
<=
m;
i++)
{
for
(j
=
1;
j
<=
n;
j++)
{
b[i][j]
=
a[j][i];
/*作转置的动作*/
printf("%4d
",
b[i][j]);
/*输出转置后的结果*/
}
printf("\n");
}}

9. 用C++:定义两个二维数组用于存放矩阵

第一题
#include<iostream>
usingnamespacestd;

intmain()
{
constintrow=5;
constintcol=5;
intval=1;
inta[row][col]={0};

for(inti=0;i!=row;++i)
{
for(intj=0;j<i;++j)
{
a[i][j]=val;
}
for(intj=i;j<col;++j)
{
a[i][j]=val;
++val;
}
val=1;
}

for(inti=0;i!=row;++i)
{
for(intj=0;j!=col;++j)
{
cout<<a[i][j]<<"";
}
cout<<" ";
}

system("pause");

}

第二题

#include<iostream>
usingnamespacestd;

intmain()
{

constintrow=6;
constintcol=5;
intval[row][col]={{1001,90,80,85,0},
{1002,70,75,80,0},
{1003,65,70,75,0},
{1004,56,78,97,0},
{1005,80,90,70,0}};
for(inti=0;i<row-1;++i)
{
for(intj=1;j<col-1;++j)
{
val[i][col-1]+=val[i][j];
}
}

for(intj=1;j<col-1;++j)
{
for(inti=0;i<row-1;++i)
{
val[row-1][j]+=val[i][j];
}
}

for(inti=0;i<row;i++)
{
for(intj=0;j<col;j++)
{
cout<<val[i][j]<<" ";
}
cout<<endl;
}
system("pause");
}

10. 用java声明Matrix类表示矩阵,使用二维数组存储矩阵元素,实现以下方法:

public class Matrix {
private static String matrix_A;
private int mx[][], m, n;
public Matrix(int r, int c) {
m = r;
n = c;
mx = new int[m][n];
iniMatrix();
}
public Matrix() {
m = 3;
n = 3;
mx = new int[3][3];
iniMatrix();
}
public void iniMatrix()// 随机取数
{
int i, j;
for (i = 0; i <= m - 1; i++)
for (j = 0; j <= n - 1; j++)
mx[i][j] = (int) (Math.random() * 100);
}
public void tranMatrix()// 转置矩阵
{
int i, j, t;
int mt[][] = new int[m][n];
for (i = 0; i <= m - 1; i++)
for (j = 0; j <= n - 1; j++)
mt[i][j] = mx[i][j];
t = m;
m = n;
n = t;
mx = new int[m][n];
for (i = 0; i <= m - 1; i++)
for (j = 0; j <= n - 1; j++)
mx[i][j] = mt[j][i];
}
public void printMatrix()// 输出矩阵所有值
{
int i, j;
for (i = 0; i <= m - 1; i++) {
for (j = 0; j <= n - 1; j++)
System.out.print(" " + mx[i][j]);
System.out.println();
}
}
//判断一个矩阵是否为上三角矩阵
public boolean isUpperTriangularMatrix() {
int i, j = 0;
int c = this.mx[1][0];

for(i=1; i<this.mx.length; i++)
for(j=0; j<i; j++)
if(this.mx[i][j] != c)
break;
if(i>=this.mx.length)
return true;
return false;
}
public void addMatrix(Matrix b)// 矩阵相加
{
int i, j;
for (i = 0; i <= m - 1; i++)
for (j = 0; j <= n - 1; j++)
mx[i][j] = mx[i][j] + b.mx[i][j];
}
public static void main(String args[]) {
Matrix ma = new Matrix(4, 3);
Matrix mb = new Matrix(4, 3);
System.out.println("The matrix_A:");
ma.printMatrix();
System.out.println("The matrix_B:");
mb.printMatrix();
if(ma.isUpperTriangularMatrix())
System.out.println("上三角矩阵:\n" + ma.isUpperTriangularMatrix());
System.out.println("Matrix_A + Matrix_B:");
ma.addMatrix(mb);
ma.printMatrix();
System.out.println("Transpose Matrix_A:");
mb.tranMatrix();
mb.printMatrix();
System.out.println("Transpose Matrix_A+Matrix_B:");
mb.tranMatrix();
mb.printMatrix();
}
}

热点内容
安卓手机如何使用印象笔记剪影 发布:2024-11-16 12:32:18 浏览:177
电脑服务器在哪里输入 发布:2024-11-16 12:27:22 浏览:263
魅族16th如何设置热点密码 发布:2024-11-16 12:22:15 浏览:396
浙江密码文件柜哪里有 发布:2024-11-16 12:20:34 浏览:953
c语言逆序输出整数 发布:2024-11-16 12:20:31 浏览:797
蓝桥杯c语言 发布:2024-11-16 12:20:24 浏览:398
安卓阵营哪个手机外放好 发布:2024-11-16 12:16:02 浏览:651
国外云服务器免费 发布:2024-11-16 12:13:49 浏览:554
苏宁茅台脚本 发布:2024-11-16 12:12:18 浏览:252
访问乞丐 发布:2024-11-16 12:07:19 浏览:436