❶ Java問題,從鍵盤輸入一個M*N的矩陣,並對這個矩陣進行轉置操作,就是將aij 與 aji 內容互轉(檢查問題)
修改後的Java程序:
packagecom.homework.fourdays;
importjava.util.Scanner;
publicclasspage81_question02{
publicstaticvoidmain(String[]args){
Scannerin=newScanner(System.in);
intm,n;
inti,j;
System.out.println("請輸入矩陣M*N中的M值");
m=in.nextInt();
System.out.println("請輸入矩陣M*N中的N值");
n=in.nextInt();
int[][]a=newint[m][n]; //存儲轉置前的矩陣
int[][]b=newint[n][m]; //存儲轉置後的矩陣
System.out.println("請輸入"+m+"*"+n+"矩陣中的所有元素");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
a[i][j]=in.nextInt();
}
}
//矩陣轉置
for(i=0;i<m;i++){
for(j=0;j<n;j++){
b[j][i]=a[i][j];
}
}
System.out.println("轉置前");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
System.out.printf("%6d",a[i][j]);
}
System.out.println();
}
System.out.println("轉置後");
for(i=0;i<n;i++){
for(j=0;j<m;j++){
System.out.printf("%6d",b[i][j]);
}
System.out.println();
}
}
}
運行測試:
請輸入矩陣M*N中的M值
2
請輸入矩陣M*N中的N值
3
請輸入2*3矩陣中的所有元素
123
456
轉置前
123
456
轉置後
14
25
36
❷ 編寫用「三元組表」存儲稀疏矩陣,進行矩陣處理的程序。實現(1)矩陣轉置 (2)矩陣相加
矩陣加減注意格式
#include <stdio.h>
#define maxsize 20
typedef int data;
typedef struct
{
int i,j;
data v;
}mat;
typedef struct
{
int m,n,t;
mat dtt[maxsize+1];
}matrix;
matrix a,b,c;
void transmat(matrix a,matrix *b)
{
int p,q,col;
b->m=a.n;
b->n=a.m;
b->t=a.t;
if(a.t!=0)
{
q=1;
for(col=1;col<=a.n;col++)
for(p=1;p<=a.t;p++)
if(a.dtt[p].j==col)
{
b->dtt[q].j=a.dtt[p].i;
b->dtt[q].i=a.dtt[p].j;
b->dtt[q].v=a.dtt[p].v;
q++;
}
}
}
void creat(matrix *x)
{
printf("\nn,m,t=?");
scanf("%d,%d,%d",&x->n,&x->m,&x->t);
for(int i=1;i<=x->t;i++)
{
printf("\ni,j,v=?");
scanf("%d,%d,%d",&x->dtt[i].i,&x->dtt[i].j,&x->dtt[i].v);
}
}
void mout(matrix x)
{
printf("\nn,m,t=");
printf("%d,%d,%d\n",x.n,x.m,x.t);
for(int i=1;i<=x.t;i++)
{
printf("\ni,j,v=");
printf("%d,%d,%d\n",x.dtt[i].i,x.dtt[i].j,x.dtt[i].v);
}
}
void jiajian(matrix x,matrix y,matrix *b)
{
int t;
printf("\n1加");
printf("\n2減\n\n");
scanf("%d",&t);
if(t==1)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=y.dtt[z].v+x.dtt[j].v;
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
else if(t==2)
{
int s=0,j=1,z=1;
b->m=x.m;
b->n=x.n;
for(int i=1;i<=b->n;i++)
{
for(;j<=x.t,z<=y.t;)
{
if(x.dtt[j].i!=i&&y.dtt[z].i!=i)
{
break;
}
else if(x.dtt[j].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(y.dtt[z].i!=i)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
else if(x.dtt[j].j>y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=-y.dtt[z].v;
z++;
}
else if(x.dtt[j].j==y.dtt[z].j)
{
if(x.dtt[j].v-y.dtt[z].v!=0)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=y.dtt[z].j;
b->dtt[s].v=x.dtt[j].v-y.dtt[z].v;
}
z++;
j++;
}
else if(x.dtt[j].j<y.dtt[z].j)
{
s++;
b->dtt[s].i=i;
b->dtt[s].j=x.dtt[j].j;
b->dtt[s].v=x.dtt[j].v;
j++;
}
}
}
b->t=s;
}
}
int main(int argc, char *argv[])
{
printf("1創建\n");
printf("2轉置\n");
printf("3矩陣加減\n");
printf("4退出\n");
printf("\n\n\n");
int t;
while(~scanf("%d",&t))
{
if(t==1)
{
creat(&a);
}
else if(t==2)
{
transmat(a,&b);
mout(b);
}
else if(t==3)
{
creat(&c);
jiajian(a,c,&b);
mout(b);
}
else if(t==4)
break;
printf("\n\n\n");
printf("1創建\n");
printf("2轉置\n");
printf("3矩陣加減\n");
printf("4退出\n");
printf("\n\n\n");
}
return 0;
}
❸ c語言 矩陣的存儲和轉置 實現
運用二維數組儲存,
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i][j]);
}
}
轉置
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i<j)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
}
}
❹ 矩陣怎麼進行轉置操作
【矩陣轉置操作】設A為m×n階矩陣(即m行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j),定義A的轉置為這樣一個n×m階矩陣B,滿足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),記A'=B。(有些書記為AT=B,這里T為A的上標)直觀來看,將A的所有元素繞著一條從第1行第1列元素出發的右下方45度的射線作鏡面反轉,即得到A的轉置。
【矩陣】英文:Matrix,本意是子宮、控制中心的母體、孕育生命的地方。在數學上,矩陣是指縱橫排列的二維數據表格,最早來自於方程組的系數及常數所構成的方陣。這一概念由19世紀英國數學家凱利首先提出。矩陣概念在生產實踐中也有許多應用,比如矩陣圖法以及保護個人帳號的矩陣卡系統(由深圳網域提出)等等。「矩陣」的本意也常被應用,比如監控系統中負責對前端視頻源與控制線切換控制的模擬設備也叫矩陣。
❺ 利用稀疏矩陣的順序存儲實現稀疏矩陣的加、減、乘、轉置等簡單運算。 這是課題要求,求大佬用c語言。
內容
假設兩個稀疏矩陣A和B,他們均為m行n列,要求表寫求矩陣的加法即:C=A+B的演算法(C矩陣存儲A與B相加的結果)
分析
利用一維數組來存儲,一維數組順序存放非零元素的行號、列號和數值,行號-1表示結束,然後進行矩陣加法運算時依次掃描矩陣A和B的行列值,並以行優先。當行列相同的時候,將第三個元素的值相加和以及行列號三個元素存入結果數組C中;不相同時,將A或B的三個元素直接存入結果數組中。
代碼
// fanchen.cpp : 定義控制台應用程序的入口點。 // #include "stdafx.h" #include<iostream> using namespace std; #define LINE 10 struct Node{ //行號 int row; //列號 int line; //數據 int data; }; //初始化數組 int init(Node array[]) { int row,line,data; int index = 0; while(cin>>row){ if(row == -1){ break; } cin>>line>>data; array[index].data=data; array[index].line = line; array[index].row = row; index++; } return index; } //列印數組 void printArray(Node array[],int len) { for(int i = 0;i < len;i++){ cout<<array[i].row<<" "<<array[i].line<<" "<<array[i].data<<endl; } } int calc(Node a
❻ 用十字鏈表存儲結稀疏矩陣,並進行矩陣的轉置。 要C的,c++的我看不懂。。。。~
這個吧 功能比你要的還多:http://wenku..com/view/3d744dd950e2524de5187e68.html
建立稀疏矩陣A 的十字鏈表首先輸入的信息是:m(A 的行數),n(A 的列數),r(非零項的數目),緊跟著輸入的是r 個形如(i,j,aij)的三元組。
演算法的設計思想是:首先建立每行(每列)只有頭結點的空鏈表,並建立起這些頭結點拉成的循環鏈表;然後每輸入一個三元組(i,j,aij),則將其結點按其列號的大小插入到第i 個行鏈表中去,同時也按其行號的大小將該結點插入到第j 個列鏈表中去。在演算法中將利用一個輔助數組MNode *hd[s+1]; 其中s=max(m , n) , hd [i]指向第i 行(第i 列)鏈表的頭結點。這樣做可以在建立鏈表時隨機的訪問任何一行(列),為建表帶來方便。
演算法如下:
MLink CreatMLink( ) /* 返回十字鏈表的頭指針*/
{
MLink H;
Mnode *p,*q,*hd[s+1];
int i,j,m,n,t;
datatype v;
scanf(「%d,%,%d」,&m,&n,&t);
H=malloc(sizeof(MNode)); /*申請總頭結點*/
H->row=m; H->col=n;
hd[0]=H;
for(i=1; i<S; i++)
{ p=malloc(sizeof(MNode)); /*申請第i 個頭結點*/
p->row=0; p->col=0;
p->right=p; p->down=p;
hd[i]=p;
hd[i-1]->v_next.next=p;
}
hd[S]->v_next.next=H; /*將頭結點們形成循環鏈表*/
for (k=1;k<=t;k++)
{ scanf (「%d,%d,%d」,&i,&j,&v); /*輸入一個三元組,設值為int*/
p=malloc(sizeof(MNode));
p->row=i ; p->col=j; p->v_next.v=v
/*以下是將*p 插入到第i 行鏈表中去,且按列號有序*/
q=hd[i];
while ( q->right!=hd[i] && (q->right->col)<j ) /*按列號找位置*/
q=q->right;
p->right=q->right; /*插入*/
q->right=p;
/*以下是將*p 插入到第j 行鏈表中去,且按行號有序*/
q=hd[i];
while ( q->down!=hd[j] && (q->down->row)<i ) /*按行號找位置*/
q=q->down;
p-> down =q-> down; /*插入*/
q-> down =p;
} /*for k*/
return H;
} /* CreatMLink */
❼ c語言編寫一個程序,實現一個3×4矩陣轉置。
思路:定了兩個二維數組分別存儲轉置前後的矩陣,接著for循環依次轉置即可。
//參考代碼
#include<stdio.h>
intmain()
{
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},b[4][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
printf("%2d",b[i][j]);
printf(" ");
}
return0;
}
/*
運行結果:
159
2610
3711
4812
*/
❽ 誰看看我哪裡錯了這道題 1. 建立一個矩陣類Array,存儲一個n×n矩陣並能完成矩陣轉置運算。要求如下: (1
#include <iostream>
using namespace std;
int main( )
{
int arry[4][4],count=1;
bool isFind=false;
int x;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
cout<<"請輸入arry["<<i<<"]["<<j<<"]的值:";
cin>>arry[i][j];
}
cout<<"請輸入您要查找的數字:";
cin>>x;
for(i=0;i<4;i++)
for(int j=0;j<4;j++)
{
if(x==arry[i][j])
{
cout<<"您所要查找的數的第"<<count++<<"個位置為:"<<"arry["<<i<<"]["<<j<<"]"<<endl;
isFind=true;
}
}
if(isFind==false)
cout<<"對不起,你所要查找的數字不在數組中"<<endl;
return 0;
}
另外,虛機團上產品團購,超級便宜
❾ Excel中矩陣如何轉置
1、這里做一個實例,隨意的輸入兩行長數列,然後點擊左側選中這兩行數列。