问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一道C++编程问题,速求~

发布网友 发布时间:2023-08-11 13:21

我来回答

2个回答

热心网友 时间:2024-10-19 02:20

差不多就完了,自己再改下吧
#include<stdio.h>
#define MAXSIZE 100 /* 非零元个数的最大值 */
typedef struct triple
{
int i,j; /* 行下标,列下标 */
int e; /* 非零元素值 */
}triple;
typedef struct tsmatrix
{
triple data[MAXSIZE+1]; /* 非零元三元组表,data[0]未用 */
int mu,nu,tu; /* 矩阵的行数、列数和非零元个数 */
/* 各列第一个非零元的位置表rpos[0]未用 */
}rlsmatrix;

createsmatrix(rlsmatrix *M)
{ /* 创建稀疏矩阵M */
int e,i,m,n;
M->data[0].i=0; /* 为以下比较顺序做准备 */
printf("请输入矩阵的行数,列数,和非零元素的个数:");
scanf("%d",&M->mu);scanf("%d",&M->nu);scanf("%d",&M->tu);
for(i=1;i<=M->tu;i++)
{
printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,M->mu,M->nu);
scanf("%d",&m);scanf("%d",&n);scanf("%d",&e);
if(m<1||m>M->mu||n<1||n>M->nu) /*行或列超出范围 */
{printf("行或列超出范围");getch();exit();}
if(m<M->data[i-1].i||m==M->data[i-1].i&&n<=M->data[i-1].j) /*行或列的顺序有错*/
{printf("行或列的顺序有错");getch();exit();}
M->data[i].i=m;
M->data[i].j=n;
M->data[i].e=e;
}
}
/* 求矩阵的快速转置 */
void transposesmatrix(rlsmatrix M,rlsmatrix *T)
{ /* cpos存放每列的第一个非零元素的地址,temp中间变量 */
int i,m,*cpos,*temp,k=0;
T->mu=M.nu;
T->nu=M.mu;
T->tu=M.tu;
cpos=(int *)malloc(M.mu*sizeof(int));
if(cpos==NULL)exit();
temp=(int *)malloc(M.mu*sizeof(int));
if(temp==NULL)exit();
/* 对cpos对初始化,初值为0 */
*(cpos+1)=0;
for(i=1;i<=M.nu;i++)
{
for(m=1;m<=M.tu;m++)
{
if(M.data[m].j==i)
k++;
}
temp[i]=k;
if(i==1&&k!=0)
*(cpos+i)=1;/* 为cpos赋值 */
if(i>1)
*(cpos+i)=*(temp+i-1)+1;
}
free(temp);
for(i=1;i<=M.tu;i++)/* 进行转置 */
{T->data[*(cpos+M.data[i].j)].i=M.data[i].j;
T->data[*(cpos+M.data[i].j)].j=M.data[i].i;
T->data[*(cpos+M.data[i].j)].e=M.data[i].e;
(*(cpos+M.data[i].j))++;}
free(cpos);
}

multsmatrix(rlsmatrix M,rlsmatrix N,rlsmatrix *T)
{
int i,j,Qn=0;
int *Qe;
if(M.nu!=N.mu)
{printf("两矩阵无法相乘");getch();exit();}
T->mu=M.mu;
T->nu=N.nu;
Qe=(int *)malloc(M.mu*N.nu*sizeof(int)); /* Qe为矩阵Q的临时数组*/
for(i=1;i<=M.mu*N.nu;i++)
*(Qe+i)=0;/* 矩阵Q的第i行j列的元素值存于*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)中,初值为0 */
for(i=1;i<=M.tu;i++) /* 结果累加到Qe */
for(j=1;j<=N.tu;j++)
if(M.data[i].j==N.data[j].i)
*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)+=M.data[i].e*N.data[j].e;
for(i=1;i<=M.mu;i++) /*Qe矩阵中,因为M的每一行和N的每一列相乘都是T的一个元素,不管它是零或非零 */
for(j=1;j<=N.nu;j++) /*当M的第一行和N的第一列相乘则得T的第一个元素;当M的第一行和N的第二列相乘则得T的第二个元素;…… */
if(*(Qe+(i-1)*N.nu+j)!=0) /*……当M的第i行和N的第j列相乘则得T的第p个元素;根据归纳法得p=(i-1)*N的列数+j */
{
Qn++;//非零元个数加一
T->data[Qn].e=*(Qe+(i-1)*N.nu+j);
T->data[Qn].i=i;
T->data[Qn].j=j;
}
free(Qe);
T->tu=Qn;
return ;
}

void printmatrix(rlsmatrix M)//输出
{
int i,m=1,n,k;
printf("矩阵的简化模式是:\n");
for(i=1;i<=M.tu;i++)
printf("%d,%d,%d\n",M.data[i].i,M.data[i].j,M.data[i].e);
printf("矩阵的行数是:%d\n",M.mu);
printf("矩阵的列数是:%d\n",M.nu);
printf("矩阵中非零元素个数是:%d\n",M.tu);
printf("矩阵的完整模式的:\n");
for(n=1;n<=M.mu;n++)
{
printf("|");
for(k=1;k<=M.nu;k++)
{
if(M.data[m].i==n&&M.data[m].j==k)
{printf("%3d",M.data[m].e);
m++;}
else
printf(" 0");
}
printf(" |\n");
}
return;
}

void main()
{
rlsmatrix M,N,T,K;
printf("请为矩阵M赋值!\n");
createsmatrix(&M);
printmatrix(M);
printf("请为矩阵N赋值!\n");
createsmatrix(&N);
printmatrix(N);getch();
printf("矩阵M*N得矩阵T!\n");
multsmatrix(M,N,&T);
printmatrix(T);
getch();
printf("对矩阵T进行转置!");getch();
transposesmatrix(T,&K);
printf("转置后的矩阵是\n");
printmatrix(K);
getch();
}

热心网友 时间:2024-10-19 02:21

这么猛啊。直接上网问啊,呵呵。你是几班的

热心网友 时间:2024-10-19 02:21

差不多就完了,自己再改下吧
#include<stdio.h>
#define MAXSIZE 100 /* 非零元个数的最大值 */
typedef struct triple
{
int i,j; /* 行下标,列下标 */
int e; /* 非零元素值 */
}triple;
typedef struct tsmatrix
{
triple data[MAXSIZE+1]; /* 非零元三元组表,data[0]未用 */
int mu,nu,tu; /* 矩阵的行数、列数和非零元个数 */
/* 各列第一个非零元的位置表rpos[0]未用 */
}rlsmatrix;

createsmatrix(rlsmatrix *M)
{ /* 创建稀疏矩阵M */
int e,i,m,n;
M->data[0].i=0; /* 为以下比较顺序做准备 */
printf("请输入矩阵的行数,列数,和非零元素的个数:");
scanf("%d",&M->mu);scanf("%d",&M->nu);scanf("%d",&M->tu);
for(i=1;i<=M->tu;i++)
{
printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,M->mu,M->nu);
scanf("%d",&m);scanf("%d",&n);scanf("%d",&e);
if(m<1||m>M->mu||n<1||n>M->nu) /*行或列超出范围 */
{printf("行或列超出范围");getch();exit();}
if(m<M->data[i-1].i||m==M->data[i-1].i&&n<=M->data[i-1].j) /*行或列的顺序有错*/
{printf("行或列的顺序有错");getch();exit();}
M->data[i].i=m;
M->data[i].j=n;
M->data[i].e=e;
}
}
/* 求矩阵的快速转置 */
void transposesmatrix(rlsmatrix M,rlsmatrix *T)
{ /* cpos存放每列的第一个非零元素的地址,temp中间变量 */
int i,m,*cpos,*temp,k=0;
T->mu=M.nu;
T->nu=M.mu;
T->tu=M.tu;
cpos=(int *)malloc(M.mu*sizeof(int));
if(cpos==NULL)exit();
temp=(int *)malloc(M.mu*sizeof(int));
if(temp==NULL)exit();
/* 对cpos对初始化,初值为0 */
*(cpos+1)=0;
for(i=1;i<=M.nu;i++)
{
for(m=1;m<=M.tu;m++)
{
if(M.data[m].j==i)
k++;
}
temp[i]=k;
if(i==1&&k!=0)
*(cpos+i)=1;/* 为cpos赋值 */
if(i>1)
*(cpos+i)=*(temp+i-1)+1;
}
free(temp);
for(i=1;i<=M.tu;i++)/* 进行转置 */
{T->data[*(cpos+M.data[i].j)].i=M.data[i].j;
T->data[*(cpos+M.data[i].j)].j=M.data[i].i;
T->data[*(cpos+M.data[i].j)].e=M.data[i].e;
(*(cpos+M.data[i].j))++;}
free(cpos);
}

multsmatrix(rlsmatrix M,rlsmatrix N,rlsmatrix *T)
{
int i,j,Qn=0;
int *Qe;
if(M.nu!=N.mu)
{printf("两矩阵无法相乘");getch();exit();}
T->mu=M.mu;
T->nu=N.nu;
Qe=(int *)malloc(M.mu*N.nu*sizeof(int)); /* Qe为矩阵Q的临时数组*/
for(i=1;i<=M.mu*N.nu;i++)
*(Qe+i)=0;/* 矩阵Q的第i行j列的元素值存于*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)中,初值为0 */
for(i=1;i<=M.tu;i++) /* 结果累加到Qe */
for(j=1;j<=N.tu;j++)
if(M.data[i].j==N.data[j].i)
*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)+=M.data[i].e*N.data[j].e;
for(i=1;i<=M.mu;i++) /*Qe矩阵中,因为M的每一行和N的每一列相乘都是T的一个元素,不管它是零或非零 */
for(j=1;j<=N.nu;j++) /*当M的第一行和N的第一列相乘则得T的第一个元素;当M的第一行和N的第二列相乘则得T的第二个元素;…… */
if(*(Qe+(i-1)*N.nu+j)!=0) /*……当M的第i行和N的第j列相乘则得T的第p个元素;根据归纳法得p=(i-1)*N的列数+j */
{
Qn++;//非零元个数加一
T->data[Qn].e=*(Qe+(i-1)*N.nu+j);
T->data[Qn].i=i;
T->data[Qn].j=j;
}
free(Qe);
T->tu=Qn;
return ;
}

void printmatrix(rlsmatrix M)//输出
{
int i,m=1,n,k;
printf("矩阵的简化模式是:\n");
for(i=1;i<=M.tu;i++)
printf("%d,%d,%d\n",M.data[i].i,M.data[i].j,M.data[i].e);
printf("矩阵的行数是:%d\n",M.mu);
printf("矩阵的列数是:%d\n",M.nu);
printf("矩阵中非零元素个数是:%d\n",M.tu);
printf("矩阵的完整模式的:\n");
for(n=1;n<=M.mu;n++)
{
printf("|");
for(k=1;k<=M.nu;k++)
{
if(M.data[m].i==n&&M.data[m].j==k)
{printf("%3d",M.data[m].e);
m++;}
else
printf(" 0");
}
printf(" |\n");
}
return;
}

void main()
{
rlsmatrix M,N,T,K;
printf("请为矩阵M赋值!\n");
createsmatrix(&M);
printmatrix(M);
printf("请为矩阵N赋值!\n");
createsmatrix(&N);
printmatrix(N);getch();
printf("矩阵M*N得矩阵T!\n");
multsmatrix(M,N,&T);
printmatrix(T);
getch();
printf("对矩阵T进行转置!");getch();
transposesmatrix(T,&K);
printf("转置后的矩阵是\n");
printmatrix(K);
getch();
}

热心网友 时间:2024-10-19 02:21

这么猛啊。直接上网问啊,呵呵。你是几班的

热心网友 时间:2024-10-19 02:21

差不多就完了,自己再改下吧
#include<stdio.h>
#define MAXSIZE 100 /* 非零元个数的最大值 */
typedef struct triple
{
int i,j; /* 行下标,列下标 */
int e; /* 非零元素值 */
}triple;
typedef struct tsmatrix
{
triple data[MAXSIZE+1]; /* 非零元三元组表,data[0]未用 */
int mu,nu,tu; /* 矩阵的行数、列数和非零元个数 */
/* 各列第一个非零元的位置表rpos[0]未用 */
}rlsmatrix;

createsmatrix(rlsmatrix *M)
{ /* 创建稀疏矩阵M */
int e,i,m,n;
M->data[0].i=0; /* 为以下比较顺序做准备 */
printf("请输入矩阵的行数,列数,和非零元素的个数:");
scanf("%d",&M->mu);scanf("%d",&M->nu);scanf("%d",&M->tu);
for(i=1;i<=M->tu;i++)
{
printf("请按行序顺序输入第%d个非零元素所在的行(1~%d),列(1~%d),元素值:",i,M->mu,M->nu);
scanf("%d",&m);scanf("%d",&n);scanf("%d",&e);
if(m<1||m>M->mu||n<1||n>M->nu) /*行或列超出范围 */
{printf("行或列超出范围");getch();exit();}
if(m<M->data[i-1].i||m==M->data[i-1].i&&n<=M->data[i-1].j) /*行或列的顺序有错*/
{printf("行或列的顺序有错");getch();exit();}
M->data[i].i=m;
M->data[i].j=n;
M->data[i].e=e;
}
}
/* 求矩阵的快速转置 */
void transposesmatrix(rlsmatrix M,rlsmatrix *T)
{ /* cpos存放每列的第一个非零元素的地址,temp中间变量 */
int i,m,*cpos,*temp,k=0;
T->mu=M.nu;
T->nu=M.mu;
T->tu=M.tu;
cpos=(int *)malloc(M.mu*sizeof(int));
if(cpos==NULL)exit();
temp=(int *)malloc(M.mu*sizeof(int));
if(temp==NULL)exit();
/* 对cpos对初始化,初值为0 */
*(cpos+1)=0;
for(i=1;i<=M.nu;i++)
{
for(m=1;m<=M.tu;m++)
{
if(M.data[m].j==i)
k++;
}
temp[i]=k;
if(i==1&&k!=0)
*(cpos+i)=1;/* 为cpos赋值 */
if(i>1)
*(cpos+i)=*(temp+i-1)+1;
}
free(temp);
for(i=1;i<=M.tu;i++)/* 进行转置 */
{T->data[*(cpos+M.data[i].j)].i=M.data[i].j;
T->data[*(cpos+M.data[i].j)].j=M.data[i].i;
T->data[*(cpos+M.data[i].j)].e=M.data[i].e;
(*(cpos+M.data[i].j))++;}
free(cpos);
}

multsmatrix(rlsmatrix M,rlsmatrix N,rlsmatrix *T)
{
int i,j,Qn=0;
int *Qe;
if(M.nu!=N.mu)
{printf("两矩阵无法相乘");getch();exit();}
T->mu=M.mu;
T->nu=N.nu;
Qe=(int *)malloc(M.mu*N.nu*sizeof(int)); /* Qe为矩阵Q的临时数组*/
for(i=1;i<=M.mu*N.nu;i++)
*(Qe+i)=0;/* 矩阵Q的第i行j列的元素值存于*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)中,初值为0 */
for(i=1;i<=M.tu;i++) /* 结果累加到Qe */
for(j=1;j<=N.tu;j++)
if(M.data[i].j==N.data[j].i)
*(Qe+(M.data[i].i-1)*N.nu+N.data[j].j)+=M.data[i].e*N.data[j].e;
for(i=1;i<=M.mu;i++) /*Qe矩阵中,因为M的每一行和N的每一列相乘都是T的一个元素,不管它是零或非零 */
for(j=1;j<=N.nu;j++) /*当M的第一行和N的第一列相乘则得T的第一个元素;当M的第一行和N的第二列相乘则得T的第二个元素;…… */
if(*(Qe+(i-1)*N.nu+j)!=0) /*……当M的第i行和N的第j列相乘则得T的第p个元素;根据归纳法得p=(i-1)*N的列数+j */
{
Qn++;//非零元个数加一
T->data[Qn].e=*(Qe+(i-1)*N.nu+j);
T->data[Qn].i=i;
T->data[Qn].j=j;
}
free(Qe);
T->tu=Qn;
return ;
}

void printmatrix(rlsmatrix M)//输出
{
int i,m=1,n,k;
printf("矩阵的简化模式是:\n");
for(i=1;i<=M.tu;i++)
printf("%d,%d,%d\n",M.data[i].i,M.data[i].j,M.data[i].e);
printf("矩阵的行数是:%d\n",M.mu);
printf("矩阵的列数是:%d\n",M.nu);
printf("矩阵中非零元素个数是:%d\n",M.tu);
printf("矩阵的完整模式的:\n");
for(n=1;n<=M.mu;n++)
{
printf("|");
for(k=1;k<=M.nu;k++)
{
if(M.data[m].i==n&&M.data[m].j==k)
{printf("%3d",M.data[m].e);
m++;}
else
printf(" 0");
}
printf(" |\n");
}
return;
}

void main()
{
rlsmatrix M,N,T,K;
printf("请为矩阵M赋值!\n");
createsmatrix(&M);
printmatrix(M);
printf("请为矩阵N赋值!\n");
createsmatrix(&N);
printmatrix(N);getch();
printf("矩阵M*N得矩阵T!\n");
multsmatrix(M,N,&T);
printmatrix(T);
getch();
printf("对矩阵T进行转置!");getch();
transposesmatrix(T,&K);
printf("转置后的矩阵是\n");
printmatrix(K);
getch();
}

热心网友 时间:2024-10-19 02:21

这么猛啊。直接上网问啊,呵呵。你是几班的
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 mu编辑器代码和pycharm通用吗? 滚筒洗衣机水位测量方法 鸡西到柴河的6252次列车九月3号从鸡西几点开 6252开头的身份证是哪里的 6252开头是什么银行贷记卡 青岛哪有费列罗巧克力酱的? 断桥铝窗立柱是圆形还是方形 断桥铝窗立柱是圆形还是方形好 阴历1980年3月23日08点出生的人是什么命?(拜求具体完整的命理分析) 【庚白】的意思是什么?【庚白】是什么意思? 一般程序免考怎么申请 ...我看过很多神话故事有女娲补天,后羿射日其中我最/喜欢后羿射日... Dnf武器幻化 半场多少分钟 用无线领带麦克风需不需要耳机 离婚协议书怎么写,爷爷今年72岁,孙子今年六岁,多少年后?爷爷的年龄是孙... 投票悖论的介绍 求动漫!!!求动漫!!! 手机屏幕一直闪是内屏坏了吗 梦见一锅荷包鸡蛋有俩个小鸡 在“星辰大海”中捕捉暗物质的猎手 ...有COM,4-16欧姆70V100V&quot;四个螺丝口有4条喇叭线不知道怎么接线... 楚江新材历年股票走势?楚江新材近五年财务分析?楚江新材的价值多少钱... 恒而达2021年股价能涨多少? 医师定考不考有什么影响 助理医师需要定期考核吗? 钢铁之躯创建兵种怎么招募不到人 钢铁之躯如何快速提升荣誉 17岁真的有真爱么? 17岁有真爱吗 excel2016怎样自动保存 首都机场 到柏书胡同 开关电源红绿灯交替闪烁是怎么回事? 最佳1、主动性降额 - 信用卡额度降低了是怎么回事? 梦见别人给我送液化汽 女人切除子官后对人有什么危害 京东代收货款多久到账 &#xFEFF;呼庚呼癸什么意思?出处是哪里? EXCEL如何自动填充选定区域的和? 查航班到达时间怎么查