❶ 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、这里做一个实例,随意的输入两行长数列,然后点击左侧选中这两行数列。