//矩阵三元组之矩阵相加 相乘
站在用户的角度思考问题,与客户深入沟通,找到兴宁网站设计与兴宁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖兴宁地区。
#include iostream
using namespace std;
typedef int Elemtype;
#define MAXSIZE 12500 //最大非零元素
typedef struct Triple
{
Elemtype value;
int row,col;
}Triple;
typedef struct TSMatrix
{
Triple data[MAXSIZE+1];
int mu,nu,tu;
}TSMatrix;
TSMatrix T;
void InputMatrix(TSMatrix T) //输入t个非零元素
{
cout"请输入稀疏矩阵的信息,(行,列,非零元素个数)"endl;
cinT.muT.nuT.tu;
int i;
cout"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"endl;
for(i=1;i=T.tu;++i)
{
cinT.data[i].rowT.data[i].colT.data[i].value;
}
}
void Output(TSMatrix T)
{
cout"矩阵的三元组表示(ROW=)"T.mu" COL="T.nu"非零个数="T.tuendl;
int i;
for(i=1;i=T.tu;++i)
{
cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;
}
}
void TransposeSMatrix(TSMatrix M,TSMatrix T) //矩阵的转置
{
T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;
int i,j,k=1;
for(i=1;i=M.nu;++i)
{
for(j=1;j=M.tu;++j)
if(M.data[j].col==i)
{
T.data[k].row=i;
T.data[k].col=M.data[j].row;
T.data[k].value=M.data[j].value;
++k;
}
}
}
void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q) //矩阵相加
{
int index_a,index_b,i=1,j=1,k=1;
Q.mu=M.mu; Q.nu=M.nu;
while (i=M.tuj=T.tu)
{
index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;
index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;
if(index_aindex_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_aindex_b)
{
Q.data[k]=T.data[j];
j++;
k++;
}
else if(index_a==index_b)
{
if((M.data[i].value+T.data[j].value)!=0)
{
Q.data[k]=M.data[i];
Q.data[k].value=M.data[i].value+T.data[j].value;
k++;
}
++i;
++j;
}
}
//复制剩余元素
for(;i=M.tu;++i)
{
Q.data[k]=M.data[i];
k++;
}
for(;j=T.tu;++j)
Q.data[k++]=T.data[j];
Q.tu=k-1;
}
void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q) //相乘
{
if(M.nu!=T.mu)
{
cerr"两矩阵相乘不合法"endl;
return ;
}
int *rowSize=new int[T.mu+1]; //存放每行非零元素的个数
int *rowStart=new int[T.mu+2]; //矩阵每行在三元组开始位置
int *temp=new int[T.nu+1]; //存放结果矩阵中每行的计算结果
int i,Current,k,ROWM,COLM,COLB;
for(i=1;i=T.mu;i++) rowSize[i]=0;
for(i=1;i=T.tu;++i) rowSize[T.data[i].row]++;
rowStart[1]=1;
for(i=2;i=T.mu+1;i++)
rowStart[i]=rowStart[i-1]+rowSize[i-1];
Current=1; k=1;
while (Current=M.tu)
{
ROWM=M.data[Current].row; //当前三元组数据中元素的行号
for(i=1;i=T.nu;++i) temp[i]=0;
while (Current=M.tuROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];irowStart[COLM+1];i++) //对应T矩阵中每行的个数
{
COLB=T.data[i].col;
temp[COLB]+=(M.data[Current].value)*(T.data[i].value);
}
Current++;
}
for(i=1;i=T.nu;i++)
{
if(temp[i]!=0)
{
Q.data[k].row=ROWM;
Q.data[k].col=i;
Q.data[k].value=temp[i];
}
k++;
}
}
Q.mu=M.mu;Q.nu=T.nu;
Q.tu=k-1;
}
int main()
{
TSMatrix T,M,Q,S;
InputMatrix(M);
InputMatrix(T);
cout"两矩阵相乘"endl;
Multiply(M,T,Q);
Output(Q);
cout"两矩阵相加"endl;
AddMastrix(M,M,S);
Output(S);
system("pause");
return 0;
}
#includestdio.h
int main()
{
int n;
scanf("%d", n);
for (int i = 1; i = n; i++)
{
printf("%d %d %d %d %d\n", i, i * 2, i * 3, i * 4, i * 5);
}
return 0;
}
1 方案
可以使用双重for循环来打印矩阵存储的字符
2 代码
#includestdio.h
void print_arr(int arr[3][3], int row, int col){
for (int i = 0; i row; i++){
for (int j = 0; j col; j++)
printf("%c ", arr[i][j]);
puts("");
}
}
int main(){
int arr[3][3] = {
',', ',', ',',
',', ',', ',',
',', ',', ',',
};
print_arr(arr, 3, 3);
getchar();
return 0;
}
3 运行结果
#includestdio.h
void main()
{
int a[2][3];
int i,j;
printf("输入一个2*3整型数组\n");
for(i=0;i2;i++)
for(j=0;j3;j++)
scanf("%d",a[i][j]);
printf("\n输出一个2*3整型数组\n");
for(i=0;i2;i++)
{
for(j=0;j3;j++)
printf("%d ",a[i][j]);
printf("\n");
}
}
扩展资料:
注意事项
c语言的输入输出可用标准库里面的输入输出函数,即scanf和printf。
输入输出二维数组的例子:
#includestdio.h
int main()
{
int M = 5 , N = 5;
int array[M][N]; //定义一个5x5的int数组
printf("输入:");
for(int i = 0 ; i M ; i++){
for(int j = 0 ; j N ; j++){
scanf("%d",array[i][j]);
}
}
printf("输出:");
for(int i = 0 ; i M ; i++){
for(int j = 0 ; j N ; j++){
printf("%d ",array[i][j]);
}
}
return 0;
}
#include stdio.h
#define N 3
int array[N][N];
void transition(int array[][3])
{
int i,j,temp;
for(i=0;iN;i++)
for(j=i+1;jN;j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
int main(void)
{
void transition(int array[][3]);
int i,j;
printf("请输入数据\n");
for(i=0;iN;i++)
for(j=0;jN;j++)
scanf("%d",array[i][j]);
printf("\n");
transition(array);
printf("调换数据如下\n");
for(i=0;iN;i++)
{
for(j=0;jN;j++)
printf("%5d",array[i][j]);
printf("\n");
}
return 0;
}
~~~~~~
我写的代码,你自己参考吧,很简单的
#includestdio.h
#define M 3
#define N 3
void Create_matrix(int matrix[M][N], int m, int n) {
int i,j;
printf("开始输入矩阵内容(%d行%d列)\n",m,n);
for(i=0;im;i++) {
printf("输入第%d行的%d个元素:",i+1,n);
for(j=0;jn;j++)
scanf("%d",matrix[i][j]);
}
}
void Print_matrix(int matrix[M][N], int m, int n) {
int i,j;
for(i=0;im;i++) {
for(j=0;jn;j++)
printf("%d\t",matrix[i][j]);
printf("\n");
}
}
void Print_matrix_diagonal(int matrix[M][N], int m, int n) {
int i,j;
for(i=0;im;i++) {
for(j=0;jn;j++)
if (i==j||i+j==M-1)
printf("%d\t",matrix[i][j]);
else
printf(" \t");
printf("\n");
}
}
int main(void) {
int matrix[M][N];
Create_matrix(matrix, M, N);
printf ("======================================================\n\n");
printf ("您输入的矩阵为:\n");
Print_matrix(matrix, M, N);
printf ("对角线元素为:\n");
Print_matrix_diagonal(matrix, M, N);
return 0;
}
执行结果