二維數組存儲矩陣
嚴格意義上說不存在二維數組,只是數組里的每個元素是一個一維數組,而內存是一段連續的空間,根據你申請一個變數的順序按地址從低到高排,所以二維數組不可能像一個矩陣那樣在內存中排列,這就涉及到它是按行依次往下排,還是按列往下排,而在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();
}
}