用C语言编写一个矩阵运算的程序,高分!
矩阵三角化不知道是什么,其余的看下面代码:
bool addMat(int **mat1, int **mat2, int **matR, int row, int col)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
*((int*)matR+i*col+j) = *((int*)mat1+i*col+j) + *((int*)mat2+i*col+j);
}
}
return true;
}
bool subMat(int **mat1, int **mat2, int **matR, int row, int col)
{
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
{
*((int*)matR+i*col+j) = *((int*)mat1+i*col+j) - *((int*)mat2+i*col+j);
}
}
return true;
}
bool mulMat(int **mat1, int row1, int col1, int **mat2, int row2, int col2, int **matR)
{
if(col1 != row2)
{
return false;
}
int temp1;
for(int i = 0; i < row1; i++)
{
for(int j = 0; j < col2; j++)
{
temp1 = 0;
for(int k = 0; k < col1; k++)
{
temp1 += *((int*)mat1+i*col1+k) * *((int*)mat2+k*col2+j);
}
*((int*)matR+i*col2+j) = temp1;
}
}
return true;
}
#include
main()
{
int a[3][3],
for (i=0;i<3;i++)
{
s=a[i][0]+a[i][1]+a[0][2];
printf("第%d行的和是%d",i,s);
}
}
我没有c编程程序,没法调试啊,你自己试试,你要是有程序发一个给我啊,呵呵!!!434958125@qq。com
#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;
cin>>T.mu>>T.nu>>T.tu;
int i;
cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl;
for(i=1;i<=T.tu;++i)
{
cin>>T.data[i].row>>T.data[i].col>>T.data[i].value;
}
}
void Output(TSMatrix T)
{
cout<<"矩阵的三元组表示(ROW=)"<<T.mu<<" COL="<<T.nu<<"非零个数="<<T.tu<<endl;
int i;
for(i=1;i<=T.tu;++i)
{
cout<<"ROW(行):"<<T.data[i].row<<" COL(列):"<<T.data[i].col<<" Value(值)"<<T.data[i].value<<endl;
}
}
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.tu&&j<=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_a<index_b)
{
Q.data[k]=M.data[i];
i++;
k++;
}
else if(index_a>index_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.tu&&ROWM==M.data[Current].row)
{
COLM=M.data[Current].col; //当前元素的列号,方便与T矩阵的行号相乘
for(i=rowStart[COLM];i<rowStart[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;
}
等后半夜完事后给你写~~~~
如何用c语言定义数组和矩阵?
2、矩阵生成命令,“[]”表示空元素,“zeros(n,m)”生成n行m列0矩阵,“ones(n,m)”生成n行m列全1矩阵。具体例子如下图所示。3、数组(或矩阵)元素的引用,引用格式为“数组名(n,m)”,如定义“A=[1 2 3;4 5 6]”这一两行三列矩阵A,令b=A(2,3),表示b等于A矩阵第二行第三...
C语言中如何定义矩阵?
1、最简单的就是二维数组,比如存储全是整形的一个m*n的矩阵。然后可以定义int a[m][n]。输入或者输出可以用两层循环来完成,外层控制行m比如for(i=0;i<m;++i),内层控制列n比如for(j=0;j<n;++j);2、第二种方式就是压缩矩阵进行存储,如果学了数据结构应该比较好理解。结构体进行封装,...
如何用C语言编写矩阵运算的代码?
C语言示例代码如下:include<stdio.h> int main(){int i,sumX=0,sumY=0,sum=0;int num[5][5]= {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};for(i=0;i<5;i++){\/\/计算对角线 sumX+=num[i][i];sumY+=num[5-i][i...
C语言编程生成n×n的矩阵,并逆时针输出。举例如下:输入3输出987216345...
include <stdio.h>#include <stdlib.h>int main(){int n;printf("请输入矩阵大小:");scanf("%d",&n);int arr[n][n];int i=0,j=0,s=n*n;for(i=0;i<n;i++){for(j=0;j<n;j++){arr[i][j]=0;}}int direct=0;arr[0][0]=s--;i=0;j=0;while(s>0){if(direct=...
怎样用C语言写矩阵?
main(){ int i, j, a[4][4];for ( i = 1; i < 4; i++ ){ for ( j = 1; j < 4; j++ ){ scanf ("%d", &a[i][j]);} } \/\/这样就可以将一个3*3 的矩阵存在2维数组中了 for ( i = 1; i < 4; i++ ){ for ( j = 1; j < 4; j++ ){ printf ("...
c语言程序编写 输入一个4×3的整数矩阵,输出其中最大值,最小值和他们...
}if(arr[i][j]<min){\/\/当arr[i ][j]<min时,令min=arr[i][j],r2=i;c2=jmin=arr[i][j];r2=i;c2=j;printf("\\nThis is max: %2d, r: %2d , c: %2d",max,r1,c1);printf("\\nThis is min: %2d, r: %2d , c: %2d",min,r2,c2);printf("\\n\\n\\t");} ...
如何用c语言存储矩阵?
在C语言中,我们可以使用二维数组来存储矩阵。以下是一个简单的示例,展示如何声明和初始化一个3x3的矩阵:在这个例子中,我们创建了一个3x3的矩阵,并使用嵌套循环来初始化矩阵的每个元素。然后,我们再次使用嵌套循环来打印矩阵的每个元素的值。注意,二维数组在C语言中是按行存储的,所以我们可以使用两...
c语言输出一个5*6的矩阵怎么表示
用c语言编程输入下列矩阵,用C语言编程的一道题 在主函数内任意输入一个5X6的矩阵,编写一函数求出每一行的和放到一个一位数组中,输入此矩阵及其每一行的和...非凡运营笔记 转载 关注 0点赞·549人阅读 满意答案 pyqbl001 2014.06.29 采纳率:49% 等级:11 已帮助:5151人 ...
c语言矩阵怎么写?
define MAXR 10\/\/文件中矩阵最大行 define MAXC 10\/\/文件中矩阵最大列 define MS 3\/\/矩阵中元素字符串最大字符数(包含结束符号,不可小于实际内容)define MBUF 100\/\/文件中一行最大字符数,可设置大一点 char ***getMem(int r,int c,int len);\/\/动态申请一个三维数组 void freeMem(char ...
c语言编程 输入一个3*3的矩阵,打印该矩阵,并输出该矩阵的对角元素
i,j;printf("开始输入矩阵内容(%d行%d列)\\n",m,n);for(i=0;i<m;i++) {printf("输入第%d行的%d个元素:",i+1,n);for(j=0;j<n;j++)scanf("%d",&matrix[i][j]);}}void Print_matrix(int matrix[M][N], int m, int n) {int i,j;for(i=0;i<m;i++) {for(...
有夏哈西: //矩阵三元组之矩阵相加 相乘#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 ...
长武县15966494857: C语言编程:设计一个支持矩阵加减乘运算的程序.?
有夏哈西: #include <stdio.h> #include <malloc.h> int **jianli(int n,int m) { int **p; int i,j; printf("putin juzheng"); p=(int **)malloc(n*m*sizeof(int)); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",*(p+i)+j); return p; } int **plus(int **p1,int **p2,int n,int m) { int i,j; int **...
长武县15966494857: 帮忙用c语言设计一个支持矩阵加减乘运算的程序 - ?
有夏哈西: /****************************************************************************/ /*题目:矩阵加减乘演示*****/ /*作者:vc99 writed for c bar***/ /*日期:***/ /*简介:本演示引入第三个矩阵来保存运算结果,以达到连续运算的目的.***/ /******************************...
长武县15966494857: 编写矩阵运算程序 C 语言编写 - ?
有夏哈西: 估计没多少人高兴答这个题,c,int **c,下三角 就可解 线性方程式了,&tmp); for(j=0; for (j=0;j++){ a[j] = (int *) malloc(sizeof(int) * a_col);;j<!c[c_row-1]) { printf(" for(j=0;j++) for (i=0,c_col);j<n" a = (int **) malloc(sizeof(int *) * a_row); int **b;%d" ...
长武县15966494857: 用C语言设计一个程序:支持矩阵加减乘运算的程序 - ?
有夏哈西: 用数组存储数组 矩阵的加法、减法,相当于数组中元素分别相加相减 矩阵乘法,是用第1个矩阵的各行,分别与第2个矩阵的各列,元素一一相乘后相加,得到的和 作为结果矩阵的元素
长武县15966494857: C语言求助!谁帮我设计一个支持矩阵加减乘运算的程序 - ?
有夏哈西: # include <stdio.h> # define X 3 # define Y 3/**********输出数组*******/ void prt(int a[X][Y]) { int i,j; for(i=0;i<X;i++) { for(j=0;j<Y;j++) printf(" %5d",a[i][j]); printf("\n"); } }/************输入数组*********/ void inp(int a[X][Y]) { int i,j,t; for(i=0;i<Y;i++) for(j...
长武县15966494857: 设计一个支持矩阵加减乘运算的程序 - ?
有夏哈西: // 111.cpp : Defines the entry point for the console application. //#include "stdafx.h"/****************************************************************************/ /*题目:矩阵加减乘演示*****/ /*作者:vc99 writed for c bar***/ /*日期:2005.9.5***/ /*版本:...
长武县15966494857: 两个矩阵相加减的程序怎么编写?请C语言高手帮忙 - ?
有夏哈西: 矩阵的大小可以通过N,M来改变,数据自己也可以改为你想要的.程序如下:#define N 3 #define M 3 main() { int a[N][M]={1,2,3,4,5,6,7,8,9}, b[N][M]={9,8,7,6,5,4,3,2,1},c[N][M],d[N][M],i,j;for(i=0;i<N;i++)for(j=0;j<M;j++){c[i][j]=a[i][j]+b[i][j]; /*相加...
长武县15966494857: 求一个C语言编矩阵乘法运算的程序 - ?
有夏哈西: 展开全部#include "iostream.h" void MatrixChain(int *p,int n,int **m,int **s) { for(int i=1;i<=n;i++) m[i][i]=0; for(int r=2;r<=n;r++) for( i=1;i<=n-r+1;i++) { int j=i+r-1; m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]=i; for(int k=i+1;k{ int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]...
长武县15966494857: 设计一个支持矩阵加减乘运算的程序,用C编,先谢高手了,急用 - ?
有夏哈西: *#define N 4 void main(){ int a[N][N],b[N][N],e[N][N]={0}; printf("输入矩阵A:\n"); for (int i=0;i<N;i++) for (int j=0;j<N;j++) scanf("%d",&a[i][j]); printf("输入矩阵B:\n"); for (i=0;i<N;i++) for (int j=0;j<N;j++) scanf("%d",&b[i][j]); printf("矩阵...