电子科大C语言实验10.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
10
积分
还剩页未读,继续阅读
关 键 词:电子科
语言
实验
10
资源描述:
#include#include#includetypedef struct
{
double ** mat;
int row;
int col;
}Matrix;
Matrix max;
int main()
{
void InitialMatrix(Matrix *T, int row,int col);//只分配空间不初始化;
void InitialMatrixZero(Matrix *T,int row, int col);//初始化为0
void InitialMatrixRand(Matrix *T,int row, int col);//初始化为50以内随机正整数
void InputMatrix(Matrix *T);//键盘输入矩阵
void DestroyMatrix(Matrix *T);// 释放矩阵空间
void PrintfMatrix(Matrix *T);//矩阵输出
int AddMatrix(Matrix *A,Matrix *B,Matrix *C); // 矩阵加
int MinusMatrix(Matrix *A,Matrix *B,Matrix *C); // 矩阵减
int MultiMatrix(Matrix *A,Matrix *B,Matrix *C); //矩阵乘法
double MeanMatrix(Matrix *T); //矩阵元素均值
int SubMatrix(Matrix *T1,Matrix *T2,int BeginRow,int BeginCol,int EndRow,int EndCol); //求T1的子矩阵T2;
srand((unsigned) time(NULL));//用时间做种
int n;
printf(" 矩阵函数测试,请选择功能,输入对应的数字:\n");
printf("***************************************************\n");
printf(" 1:输入一个矩阵,求矩阵均值;\n");
printf(" 2:产生一个随机数矩阵,求矩阵均值;\n");
printf(" 3:输入两个个矩阵,求矩阵和;\n");
printf(" 4:输入两个个矩阵,求矩阵差;\n");
printf(" 5:输入两个个矩阵,求矩阵积;\n");
printf(" 6:产生两个个随机数矩阵,求矩阵和;\n");
printf(" 7:产生两个个随机数矩阵,求矩阵差;\n");
printf(" 8:产生两个个随机数矩阵,求矩阵积;\n");
printf(" 9:求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;\n");
printf(" 0:结束!\n");
scanf("%d",&n);
if(n==0)
exit(0);
Matrix m,p,q;
printf("输入矩阵的行数\n");
scanf("%d",&m.row);
printf("输入矩阵的列数\n");
scanf("%d",&m.col);
InitialMatrix(&m,m.row,m.col);//分配内存空间
InitialMatrixZero(&m,m.row,m.col);//初始化为0
if(n>2&&n<10&&n!=5&&n!=8&&n!=9)//如果要用到三个矩阵为其余两个分配空间并初始化
{
p.row=m.row;
p.col=m.col;
q.row=m.row;
q.col=p.col;
InitialMatrix(&p,p.row,p.col);
InitialMatrixZero(&p,p.row,p.col);
InitialMatrix(&q,q.row,q.col);
InitialMatrixZero(&q,q.row,q.col);
}
if(n==5||n==8)//如果需要用到可以相乘的矩阵进行如下操作
{
p.row=m.col;
p.col=rand()%10;
q.row=m.row;
q.col=p.col;
InitialMatrix(&p,p.row,p.col);
InitialMatrixZero(&p,p.row,p.col);
InitialMatrix(&q,q.row,q.col);
InitialMatrixZero(&q,q.row,q.col);
}
switch(n)
{
case 1://输入一个矩阵,求矩阵均值;
{
InputMatrix(&m);
printf("%f\n",MeanMatrix(&m));
DestroyMatrix(&m);
break;
}
case 2://产生一个随机数矩阵,求矩阵均值;
{
InitialMatrixRand(&m,m.row,m.col);
printf("%f\n",MeanMatrix(&m));
DestroyMatrix(&m);
break;
}
case 3://输入两个个矩阵,求矩阵和;
printf("请输入矩阵一(%d*%d):\n",m.row,m.col);
InputMatrix(&m);
printf("请输入矩阵二(%d*%d):\n",m.row,m.col);
InputMatrix(&p);
AddMatrix(&m,&p,&q);
printf("矩阵的和为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&p);
DestroyMatrix(&q);
break;
case 4://输入两个个矩阵,求矩阵差;
printf("请输入矩阵一(%d*%d):\n",m.row,m.col);
InputMatrix(&m);
printf("请输入矩阵二(%d*%d):\n",m.row,m.col);
InputMatrix(&p);
MinusMatrix(&m,&p,&q);
printf("矩阵的差为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&q);
DestroyMatrix(&p);
break;
case 5://输入两个个矩阵,求矩阵积;
printf("请输入矩阵一(%d*%d):\n",m.row,m.col);
InputMatrix(&m);
printf("请输入矩阵二(%d*%d):\n",p.row,p.col);
InputMatrix(&p);
MultiMatrix(&m,&p,&q);
printf("矩阵的积为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&p);
DestroyMatrix(&q);
break;
case 6://产生两个个随机数矩阵,求矩阵和;
printf("随机矩阵1:\n");
InitialMatrixRand(&m,m.row,m.col);
printf("随机矩阵2:\n");
InitialMatrixRand(&p,p.row,p.col);
AddMatrix(&m,&p,&q);
printf("随机矩阵的和为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&p);
DestroyMatrix(&q);
break;
case 7://产生两个个随机数矩阵,求矩阵差;
printf("随机矩阵1:\n");
InitialMatrixRand(&m,m.row,m.col);
printf("随机矩阵2:\n");
InitialMatrixRand(&p,p.row,p.col);
MinusMatrix(&m,&p,&q);
printf("随机矩阵的差为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&p);
DestroyMatrix(&q);
break;
case 8://产生两个个随机数矩阵,求矩阵积;
printf("随机矩阵1:\n");
InitialMatrixRand(&m,m.row,m.col);
printf("随机矩阵2:\n");
InitialMatrixRand(&p,p.row,p.col);
MultiMatrix(&m,&p,&q);
printf("随机矩阵的积为:\n");
PrintfMatrix(&q);
DestroyMatrix(&m);
DestroyMatrix(&p);
DestroyMatrix(&q);
break;
case 9://求矩阵的子阵,如矩阵的2-4行,1-3列的子阵;
int a1,a2,b1,b2;
printf("请输入矩阵(%d*%d):\n",m.row,m.col);
InputMatrix(&m);
printf("请输入开始行和结束行\n");
scanf("%d %d",&a1,&a2);
printf("请输入开始列和结束列\n");
scanf("%d %d",&b1,&b2);
Matrix p;
p.row=a2-a1+1;
p.col=b2-b1+1;
InitialMatrix(&p,p.row,p.col);//分配空间
InitialMatrixZero(&p,p.row,p.col);//初始化
SubMatrix(&m,&p,a1,b1,a2,b2);
printf("该矩阵的%d-%d行,%d-%d列的子阵如下:\n",a1,a2,b1,b2);
PrintfMatrix(&p);
break;
}
return 0;
}
void InitialMatrix(Matrix *T, int row,int col) //只分配空间不初始化;
{
int i;
T->mat=(double**)malloc((row*col)*sizeof(double*));//为指针数组分配内存
for(i=0;irow;i++)
{
T->mat[i]=(double*)malloc(T->col*sizeof(double));//为数组中的数分配内存
}
}
void InitialMatrixZero(Matrix *T,int row, int col)//初始化为0
{
int i,j;
for(i=0;imat[i][j]=0;
}
}
}
void InitialMatrixRand(Matrix *T,int row, int col)//初始化为50以内随机正整数
{
int i,j;
for(i=0;imat[i][j]=rand()%51;//调用rand函数的随机数
printf("%7.2f",T->mat[i][j]);
}printf("\n");
}
}
void InputMatrix(Matrix *T)//键盘输入矩阵
{
int i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
scanf("%lf",&T->mat[i][j]);
}
}
}
void DestroyMatrix(Matrix *T)// 释放矩阵空间
{
int i;
for(i=0;irow;i++)
{
free(T->mat[i]);
}
free(T->mat);
}
void PrintfMatrix(Matrix *T)//矩阵输出
{
int i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
printf("%7.2f ",T->mat[i][j]);
}
printf("\n");//输出完一行之后换行
}
}
int AddMatrix(Matrix *A,Matrix *B,Matrix *C)// 矩阵加法
{
int i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
C->mat[i][j]=A->mat[i][j]+B->mat[i][j];
}
}
return 0;
}
int MinusMatrix(Matrix *A,Matrix *B,Matrix *C) // 矩阵减法
{
int i,j;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
C->mat[i][j]=(A->mat[i][j])-(B->mat[i][j]);
}
}
return 0;
}
int MultiMatrix(Matrix *A,Matrix *B,Matrix *C) //矩阵乘法
{
int i,j,k;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
for(k=0;kcol;k++)
{
C->mat[i][j]=(C->mat[i][j])+(A->mat[i][k])*(B->mat[k][j]);
}
}
}
return 0;
}
double MeanMatrix(Matrix *T) //矩阵元素均值
{
int i,j;
double sum=0.0,ave;
for(i=0;irow;i++)
{
for(j=0;jcol;j++)
{
sum=sum+T->mat[i][j];
}
}
ave=sum/(T->row*T->col);
return ave;
}
int SubMatrix(Matrix *T1,Matrix *T2,int BeginRow,int BeginCol,int EndRow,int EndCol)//求T1的子矩阵T2;
{
int i,j;
for(i=0;imat[i][j])=(T1->mat[i+BeginRow-1][j+BeginCol-1]);
}
}
return 0;
}
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:电子科大C语言实验10.doc
链接地址:https://www.renrendoc.com/p-44976855.html