C语言程序设计报告 矩阵运算
矩阵的运算程序(C语言版)
#include<stdio.h>#define M 20#define N 20float A[M][N];float B[M][N];float C[M][N];int i,j,m,n,p,q;float y=1.0;void main(){printf(" ###########################################\n");printf(" ##### 欢迎您使用矩阵函数包系统。
######\n");printf(" ##### 系统功能: ######\n");printf(" ##### 计算两个矩阵相加,相减; ######\n");printf(" ##### 数乘矩阵;矩阵转置;求逆 ######\n");printf(" ##### 矩阵 ######\n");printf(" ###########################################\n");printf("请选择您需要的运算,按回车键结束\n");printf("************************************************************* *****\n");printf("1,矩阵相加\n");printf("2,矩阵相减\n");printf("3,数乘矩阵\n");printf("4,矩阵转置\n");printf("5,逆矩阵 \n");printf("6,退出 \n");printf("************************************************************* *****\n");int x;scanf("%d",&x);switch (x){case 1:{printf("请输入矩阵A的行数和列数(用逗号隔开):");scanf("%d,%d",&i,&j);printf("请输入矩阵B的行数和列数(用逗号隔开):") ;scanf("%d,%d",&m,&n);if(i!=m||j!=n)printf("***对不起,您输入的两个矩阵不能相加,请重试.***\n");else printf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&B[p][q]);printf("输出矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}printf("矩阵A+矩阵B为:\n"); //计算两个矩阵相加for(p=0;p<i;p++)for(q=0;q<j;q++)C[p][q]=A[p][q]+B[p][q];for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",C[p][q]);if((q+1)%j==0)printf("\n");}};break;case 2:{printf("请输入矩阵A的行数和列数(用逗号隔开):");scanf("%d,%d",&i,&j);printf("请输入矩阵B的行数和列数(用逗号隔开):") ;scanf("%d,%d",&m,&n);if(i!=m||j!=n)printf("***对不起,您输入的两个矩阵不能相减,请重试.***\n"); else printf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&B[p][q]);printf("输出第矩阵B:\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}printf("矩阵A-矩阵B为:\n"); //计算两个矩阵相减for(p=0;p<i;p++)for(q=0;q<j;q++)C[p][q]=A[p][q]-B[p][q];for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",C[p][q]);if((q+1)%j==0)printf("\n");}};break;case 3:{float k;printf("请输入矩阵A的行数和列数(用逗号隔开):"); scanf("%d,%d",&i,&j);printf("请输入矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}printf("请输入一个实数:\n");scanf("%f",&k);for(p=0;p<i;p++) //数乘矩阵for(q=0;q<j;q++)B[p][q]=k*A[p][q];printf("输出k乘矩阵A的结果\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",B[p][q]);if((q+1)%j==0)printf("\n");}};break;case 4:{printf("请输入矩阵A的行数和列数(用逗号隔开):"); scanf("%d,%d",&i,&j);printf("请输入矩阵A:\n");for(p=0;p<i;p++)for(q=0;q<j;q++)scanf("%f",&A[p][q]);printf("输出矩阵A\n");for(p=0;p<i;p++)for(q=0;q<j;q++){printf("%10.2f",A[p][q]);if((q+1)%j==0)printf("\n");}for(p=0;p<i;p++) //转置for(q=0;q<j;q++)B[q][p]=A[p][q];printf("输出矩阵A的转置矩阵:\n");for(p=0;p<j;p++)for(q=0;q<i;q++){printf("%10.2f",B[p][q]);if((q+1)%i==0)printf("\n");}};break;case 5:float a[M][2*M];float b[N][2*N];float t,x;int k,T;printf("输入方阵的维数:\n"); //请输入方阵,即行和列相等的矩阵。
C语言程序设计报告 矩阵运算
C程序设计报告矩阵运算学院:地质与环境学院专业:资源勘查工程0901姓名:***学号:**********目录1.设计任务书1.1题目1.2设计要求1.3程序涉及的知识点2.功能设计2.1算法设计2.2部分模块流程图3.程序代码设计3.1源代码3.2运行结果4.运行结果5.程序设计总结6.致谢7.参考文献1设计任务书1.1 题目矩阵运算1.2 设计要求此程序为矩阵运算的相关程序,用来计算包括两矩阵的加、减、乘运算,求矩阵的转置矩阵、最大值元素、最小值元素及对角线元素之和等运算。
1.2 本系统涉及的知识点此程序涉及了老师讲授的多个知识点,包括:for、if、printf及scanf 等语句,顺序、选择、循环等结构。
2功能设计2.1 算法设计此程序需要实现的功能要求:利用for、if、printf及scanf 等语句来实现所需功能。
输入矩阵a和b的元素之后,依次计算:程序一:计算a+b矩阵;程序二:计算a-b矩阵;程序三:计算a*b矩阵;程序四:计算a的转置矩阵;程序五:计算a矩阵的最小值元素;程序六:计算a矩阵的最大值元素;程序七:计算a矩阵的主对角线元素之和;程序八:计算a矩阵的副对角线元素之和;程序九:计算a矩阵的上三角元素之和;程序九:计算a矩阵的下三角元素之和;2.2 部分模块流程图3 程序源代码3.1源代码#include"stdio.h"void main(){int a[3][3],b[3][3],c[3][3],int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0;printf("矩阵运算\n");printf("\n");printf("请输入a矩阵元素:\n");for(i=0;i<3;i++) /*通过二重循环给a矩阵的元素赋值*/ for(j=0;j<3;j++)scanf("%4d",&a[i][j]);printf("a矩阵:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",a[i][j]);printf("\n");}printf("\n");printf("请输入b矩阵元素:\n");for(i=0;i<3;i++) /*通过二重循环给b矩阵的元素赋值*/ for(j=0;j<3;j++)scanf("%4d",&b[i][j]);printf("b矩阵:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",b[i][j]);printf("\n");}printf("\n");printf("程序一:计算a+b矩阵\n"); /*计算a+b矩阵并输出*/ for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][j]+b[i][j];printf("%6d",c[i][j]);}printf("\n");}printf("\n");printf("程序二:计算a-b矩阵\n"); /*计算a-b矩阵并输出*/ for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][j]-b[i][j];printf("%6d",c[i][j]);}printf("\n");}printf("\n");printf("程序三:计算a*b矩阵\n"); /*计算a*b矩阵(c矩阵)并输出*/for(i=0;i<3;i++) /*最外层循环控制c矩阵的行数*/for(j=0;j<3;j++) /*次外层循环控制c矩阵的列数*/{for(k=s=0;k<3;k++) /*计算c矩阵的每个元素的值*/s+=a[i][k]*b[k][j];c[i][j]=s;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",c[i][j]);printf("\n");}printf("\n");printf("程序四:计算a的转置矩阵\n"); /*计算a的转置矩阵并输出*/for(i=0;i<3;i++)for(j=0;j<3;j++)c[j][i]=a[i][j];for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",c[i][j]);printf("\n");}printf("\n");printf("程序五:计算a矩阵的最小值元素\n"); /*计算a矩阵的最小值元素min并输出*/min=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]<min)min=a[i][j];printf("min=%d\n",min);printf("\n");printf("程序六:计算a矩阵的最大值元素\n"); /*计算a矩阵的最大值元素max并输出*/max=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]>max)max=a[i][j];printf("max=%d\n",max);printf("\n");printf("程序七:计算a矩阵的主对角线元素之和\n"); /*计算a矩阵的主对角线元素之和sum1并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i==j)sum1+=a[i][j];}printf("sum1=%d\n",sum1);printf("\n");printf("程序八:计算a矩阵的副对角线元素之和\n"); /*计算a矩阵的副对角线元素之和sum2并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i+j==2)sum2+=a[i][j];}printf("sum2=%d\n",sum2);printf("\n");printf("程序九:计算a矩阵的上三角元素之和\n"); /*计算a矩阵的上三角元素之和sum3并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i<j||i==j)sum3+=a[i][j];}printf("sum3=%d\n",sum3);printf("\n");printf("程序十:计算a矩阵的下三角元素之和\n"); /*计算a矩阵的下三角元素之和sum4并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i>j||i==j)sum4+=a[i][j];}printf("sum4=%d\n",sum4);printf("\n");printf("运算完毕!\n"); /*运算完毕*/ printf("\n");}4运行结果运行结果如图所示:5程序设计总结这次“矩阵运算”的程序设计不仅让我对C语言的熟悉程度上升到了另一个高度,更加熟练的运用C语言,而且在一定意义上对面向对象设计的理解更加深刻了,是我学习C语言的过程中一次进步。
矩阵运算 c语言编程
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> #include <string.h> void init(int *a,int m,int n) {//随机产生函数 srand(time(NULL)); int i,j;for(i=0;i<m;i++) { for(j=0;j<n;j++) *(a+i*n+j)=rand()%10+1; } } void input(int *a,int m,int n) {//用户输入函数 int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++)scanf("%d",a+i*n+j); } } void choose(int *a,int m,int n) {//是随机产生还是用户输入int i; printf("是想输入矩阵(输入0)还是随机产生(输入1):\n"); scanf("%d",&i); switch(i) { case 1:init(a,m,n); break; case 0:printf("请输入%d个数\n",m*n);input(a,m,n); break; default:printf("你的输入有误,请重新输入:\n"); break; } } void print(int *a,int m,int n) {//打印函数 int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++)printf("%4d",*(a+i*n+j)); printf("\n"); } } //矩阵关于y轴翻转 void juzheny(int *a,int *b,int m,int n) { int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) *(b+i*n+j)=*(a+i*n+n-j-1); } } //矩阵关于x轴翻转 void juzhenx(int *a,int *b,int m,int n) { int i,j;for(i=0;i<m;i++) { for(j=0;j<n;j++) *(b+i*n+j)=*(a+(m-i-1)*n+j); } } //顺时针旋转90°,逆时针旋转270° void juzhens(int *a,int *b,int m,int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) *(b+i*m+j)=*(a+(m-j-1)*n+i); } } //逆时针旋转90°,顺时针旋转270° void juzhenn(int *a,int *b,int m,int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) *(b+i*m+j)=*(a+j*n+(n-i-1)); } } // 顺/逆时针旋转180° void juzhens1(int *a,int *b,int m,int n) { int i,j; for(i=0;i<m;i++) { for(j=0;j<n;j++) *(b+i*n+j)=*(a+(m-i-1)*n+n-j-1); } } //矩阵转置 void juzhenzz(int *a,int *b,int m,int n) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) *(b+i*m+j)=*(a+j*n+i); } } //任意修改矩阵的元素值 void juzhenyz(int *a,int i,int j,int x,int m,int n) { *(a+i*n+j)=x; } void jiemian() { int i;for(i=0;i<80;i++) printf("*"); printf("\n"); printf(" "); } void menu() {//菜单界面初始化 int i; for(i=1;i<3;i++) printf("\n"); printf("\n关于一些矩阵方面的应用!\n");for(i=0;i<80;i++) printf("="); printf("\n0.查询矩阵中元素所在的行号和列号。
c语言课程设计矩阵运算
c语言课程设计矩阵运算一、教学目标本节课的教学目标是使学生掌握C语言实现矩阵运算的基本方法,包括矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法。
知识目标要求学生理解矩阵运算的数学原理,能够运用C语言实现矩阵的基本运算;技能目标要求学生熟练使用C语言进行矩阵运算的编程实践;情感态度价值观目标则是培养学生的逻辑思维能力,提高学生对计算机编程的兴趣。
二、教学内容本节课的教学内容主要包括矩阵运算的数学原理介绍、C语言实现矩阵运算的编程实践和代码调试。
教学大纲安排如下:1.引入矩阵的概念和矩阵运算的基本定义。
2.讲解矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法的数学原理。
3.引导学生运用C语言实现矩阵的基本运算。
4.通过编程实践和代码调试,使学生熟练掌握C语言实现矩阵运算的方法。
三、教学方法本节课采用讲授法、讨论法和实验法相结合的教学方法。
首先,通过讲授法向学生讲解矩阵运算的数学原理和C语言实现方法;其次,通过讨论法引导学生相互交流和讨论,提高他们对矩阵运算的理解;最后,通过实验法让学生动手实践,调试代码,提高他们的编程能力。
四、教学资源本节课的教学资源主要包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于为学生提供理论知识和编程技巧;多媒体资料用于辅助讲解和演示矩阵运算的原理和实现方法;实验设备则是学生进行编程实践和代码调试的必要工具。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度、提问和回答问题的积极性等;作业则是对学生掌握矩阵运算能力的考察,要求学生独立完成并提交;考试则是对学生综合运用C语言实现矩阵运算能力的评估,包括理论知识和编程实践。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本节课的教学安排如下:总共安排4个课时,第1课时介绍矩阵运算的数学原理,第2课时讲解C语言实现矩阵运算的方法,第3课时进行编程实践和代码调试,第4课时进行教学评估。
c课程设计矩阵运算
c 课程设计矩阵运算一、教学目标本节课的教学目标是让学生掌握矩阵的基本运算,包括矩阵的加法、减法、数乘以及矩阵的乘法。
通过学习,学生应能理解矩阵运算的定义和规则,并能运用这些运算解决实际问题。
此外,学生还应掌握矩阵运算的数学原理,提高逻辑思维和数学运算能力。
在情感态度价值观方面,学生应培养对数学学科的兴趣,增强自信心,培养团队合作精神。
二、教学内容本节课的教学内容主要包括矩阵的基本运算和数学原理。
首先,介绍矩阵的加法、减法、数乘和矩阵的乘法,通过举例说明这些运算的定义和规则。
然后,讲解矩阵运算的数学原理,包括线性方程组的解法、行列式的计算以及矩阵的逆矩阵。
最后,通过实际案例让学生运用矩阵运算解决实际问题,提高学生的应用能力。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。
首先,采用讲授法,清晰地讲解矩阵运算的定义和规则,以及数学原理。
其次,采用讨论法,让学生分组讨论矩阵运算的应用案例,培养学生的思考和表达能力。
此外,还采用案例分析法,让学生分析实际问题,运用矩阵运算解决问题。
最后,通过实验法,让学生动手实践,加深对矩阵运算的理解。
四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源。
首先,教材和相关参考书,为学生提供系统的学习资料。
其次,多媒体资料,如PPT、教学视频等,用于直观地展示矩阵运算的过程和应用案例。
此外,还将提供实验设备,如计算器、电脑等,让学生进行实际操作,提高实践能力。
通过丰富多样的教学资源,丰富学生的学习体验,提高学习效果。
五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。
评估方式包括平时表现、作业、考试等。
平时表现主要评估学生的课堂参与度、提问回答等,通过观察学生的表现来了解他们的学习状态。
作业方面,将布置适量的练习题,要求学生在规定时间内完成,通过批改作业了解学生对矩阵运算的理解和掌握程度。
考试方面,将设置期中考试和期末考试,考试内容涵盖本节课的全部知识点,通过考试来检验学生的学习成果。
矩阵运算——C语言实现
矩阵运算——C语言实现矩阵运算是线性代数中非常重要的一部分,它涉及到矩阵的加法、减法、乘法、转置等操作。
在C语言中,我们可以使用二维数组来表示和操作矩阵。
首先,我们需要定义一个表示矩阵的结构体,可以包含矩阵的行数、列数以及矩阵的元素值。
代码如下:```ctypedef structint rows; // 行数int cols; // 列数double **data; // 矩阵元素} Matrix;```在此结构体中,我们使用一个二维指针来表示矩阵的元素,其中每个指针指向一个一维数组,表示矩阵的一行。
接下来,我们可以实现一些常用的矩阵运算函数,比如矩阵的创建、销毁、加法、减法、乘法等。
1.矩阵的创建和销毁函数如下所示:```cMatrix *createMatrix(int rows, int cols)Matrix *matrix = (Matrix *)malloc(sizeof(Matrix));matrix->rows = rows;matrix->cols = cols;matrix->data = (double **)malloc(rows * sizeof(double *));for (int i = 0; i < rows; ++i)matrix->data[i] = (double *)malloc(cols * sizeof(double));}return matrix;void destroyMatrix(Matrix *matrix)for (int i = 0; i < matrix->rows; ++i)free(matrix->data[i]);}free(matrix->data);free(matrix);```这里我们使用了动态内存分配,先分配一维数组的内存,再分配二维数组的内存。
2.矩阵的加法和减法函数如下所示:```cMatrix *addMatrix(Matrix *matrix1, Matrix *matrix2)if (matrix1->rows != matrix2->rows , matrix1->cols != matrix2->cols)return NULL;}Matrix *result = createMatrix(matrix1->rows, matrix1->cols);for (int i = 0; i < matrix1->rows; ++i)for (int j = 0; j < matrix1->cols; ++j)result->data[i][j] = matrix1->data[i][j] + matrix2->data[i][j];}}return result;Matrix *subtractMatrix(Matrix *matrix1, Matrix *matrix2)if (matrix1->rows != matrix2->rows , matrix1->cols != matrix2->cols)return NULL;}Matrix *result = createMatrix(matrix1->rows, matrix1->cols);for (int i = 0; i < matrix1->rows; ++i)result->data[i][j] = matrix1->data[i][j] - matrix2->data[i][j];}}return result;```这里我们首先判断两个矩阵是否具有相同的行数和列数,如果不相同则无法进行加法或减法运算。
c语言实现矩阵的加减乘除求逆运算
#include〈stdio.h>#include〈stdlib。
h〉#define col 3#define row 3class matrix//类的定义{private:double m[col][row];//矩阵设置为私有的,public:matrix(){}//无参数的构造函数matrix(double a[col][row]);//有参数的构造函数matrix Add(matrix &b);//加法运算声明matrix Sub(matrix &b);//减法运算声明matrix Mul(matrix &b);//乘法运算声明matrix Div(matrix &b);//除法运算声明matrix Inverse();//求逆运算声明~matrix();//析构函数声明void display();//显示函数声明};matrix::matrix(double a[col][row])//构造函数的定义{int i,j;for(i=0;i<col;i++)for(j=0;j〈row;j++)m[i][j]=a[i][j];}matrix matrix::Add(matrix &b)//加法运算{int i,j;matrix*c=(matrix*)malloc(sizeof(matrix));for(i=0;i<col;i++)for(j=0;j<row;j++)c—〉m[i][j]=m[i][j]+b.m[i][j];return(*c);}matrix matrix::Sub(matrix &b)//减法运算{int i,j;matrix*c=(matrix*)malloc(sizeof(matrix));for(i=0;i〈col;i++)for(j=0;j<row;j++)c->m[i][j]=m[i][j]—b。
m[i][j];return *c;}matrix matrix::Mul(matrix &b)//乘法运算{int i,j,k;double sum=0;matrix*c=(matrix*)malloc(sizeof(matrix));for(i=0;i<col;i++){for(j=0;j〈row;j++){for(k=0;k〈row;k++)sum+=m[i][k]*(b.m[k][j]);c-〉m[i][j]=sum;sum=0;}}return(*c);}matrix matrix::Div(matrix &b)//除法运算{//除法直接求解,参见主函数matrix c;return(c);}matrix matrix::Inverse()//求逆运算{//参考博客:http:///rollenholt/articles/2050662。
用C语言实现矩阵运算
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
MF[i][j]=MA[i][j]-MB[i][j];
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
printf("%6.2f ",MF[i][j]);
}
printf("\n");
}
}
void Multiplication(float MA[][C1],float MB[][C2])//矩阵相乘函数
for(i=0;i<R2;i++)
{
for(j=0;j<C2;j++)
{
scanf("%f",&MB[i][j]);
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
ME[i][j]=MA[i][j]+MB[i][j];
}
}
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
{
int i,j,k;
float MG[R1][C2]={0};
printf("请输入%d*%d矩阵MA(每行以回车结束):\n",R1,C1);
for(i=0;i<R1;i++)
{
for(j=0;j<C1;j++)
C++课程设计报告--矩阵乘法计算
C++课程设计报告一、题目名称:矩阵乘法计算二、难易等级:A级三、对题目的分析和注释:分析:依次建立两个矩阵空间并按照矩阵乘法规则进行运算。
(矩阵的乘法规则:1、矩阵的乘法运算必须符合m*n的矩阵与n*s的矩阵相乘。
2、第一个矩阵的第i行的元素依次乘以第二个矩阵的第j列元素后结果相加组成生成矩阵第i行第j列元素。
)注释:(1)设计一个矩阵类,将相应的函数和数据封装在类中,简化程序。
(2)修改程序结构,使程序可以反复执行,直至按键选择退出为止。
(3)本程序用数组表示5*5矩阵,将其改为根据输入矩阵的大小动态分配空间[m][n]来放置数据,其中m,n为用户可输入的任意整数。
(4)增加类的构造函数和成员函数,使得矩阵数据既可以用在对象初始化时赋值,也可以通过键盘赋值,还可以通过读取数据文件输入。
(5)用模板的形式改写矩阵数据类型,使得矩阵中的数据既可以是整型数据,也可以是浮点型数据,执行程序时,分别定义两个整型矩阵和两个浮点型矩阵进行乘法验证。
(6)完成矩阵的乘法运算,在运算之前判断这两个矩阵能否满足乘法运算的条件,若不满足,则给出提示信息。
四、所增加功能模块的设计如果要说增加功能的话,自己编的程序里面不多,我只是按照题目要求,设计了一个矩阵类,同时用模板的形式改写矩阵数据类型和运算符的重载。
1、模板的使用我使用了大量的模板,以T为模板参数,通过对T的不同类型的选择实现相应的运算处理。
其中choose1()函数本是无参函数,为了方便模板化,给其赋以伪参数T,在执行时通过T的取值生成相应的函数模板。
template<class T>void choose1(T){}调用时:switch(sjlx){case 1:{choose1(1);}break;case 2:{choose1(0.0);}break;case 3:{choose1(1e-10);}break;default:cout<<"输入选择错误!!!"<<endl;}2、矩阵类的构造按照课本要求采用二级指针动态开辟内存空间,节省内存使用;其中数据结构如下:Mat-->Mat[0] ----->Mat[0][0] Mat[0][1] ……Mat[0][j]Mat[1] ----->Mat[1][0] Mat[1][1] ……Mat[1][j]::Mat[i] ----->Mat[i][0] Mat[i][1] ……Mat[i][j]实现构造的代码为:template<class T>CMatrix<T>::CMatrix(int row,int col){int i,j;nRow=row,nCol=col;Mat=new T*[nRow];for(i=0;i<nRow;i++){Mat[i]=new T[nCol];}cout<<"请输入数据:\n";for(i=0;i<nRow;i++)for(j=0;j<nCol;j++){cout<<"第["<<i+1<<"]["<<j+1<<"]个数据:";cin>>Mat[i][j];}}3、运算符的重载要实现矩阵间的乘法运算,有必要对其运算符进行重载。
C程实验大作业设计(矩阵运算)
中北大学《C语言程序设计》实验大作业设计说明书学院:信息与通信工程学院专业:电子信息类(信息与通信)班级:17051042班组长姓名:宁尉君学号:1705104206 组员:段建新学号:1705104230杜文燕学号:1705104211马瑞江学号:1705104226黄山学号:1705104249学号:设计题目:矩阵运算日期: 2018年6月20日1 设计分工(1)段建新——输入输出矩阵、矩阵的逆矩阵以及矩阵的鞍点(2)杜文燕——矩阵各行元素的最大值、矩阵各列元素的平均值(3)宁尉君——两个矩阵相乘、C程实验大作业设计说明书(4)马瑞江——矩阵主对角线和次对角线元素之和(5)黄山——矩阵的周边之和2实现程序功能描述(1)输入并输出矩阵。
(2)计算矩阵主对角线和次对角线元素之和并输出。
(3)计算矩阵的周边之和并输出。
(4)计算矩阵各行元素的最大值并输出原矩阵和最大值。
(5)计算矩阵各列元素的平均值并输出原矩阵和平均值。
(6)计算矩阵的逆矩阵并输出原矩阵和逆矩阵。
(7)计算矩阵的鞍点并输出。
(8)计算两个矩阵相乘的结果并输出。
3 本设计采用的数据结构在本设计中主要采用了循环和数组类型的数据结构。
4 主要函数及说明#include<stdio.h>#include<stdlib.h>#define M 80#define N 80void main( void){printf("\t\t\t\t 欢迎使用矩阵运算系统,请选择您要执行的功能\n");printf("功能选项:\n");printf("◆1.输入输出矩阵\n◆2.计算矩阵主对角线和次对角线元素之和并输出\n");printf("◆3.计算矩阵的周边之和并输出\n◆4.计算矩阵各行元素的最大值并输出原矩阵和最大值\n");printf("◆5.计算矩阵各列元素的平均值并输出原矩阵和平均值\n◆6.计算矩阵的逆矩阵并输出原矩阵和逆矩阵\n");printf("◆7.计算矩阵的鞍点并输出\n◆8.计算两个矩阵相乘的结果并输出\n\n");int choice;printf("请输入选择要执行的功能\n");scanf("%d",&choice);switch(choice){void shuru();void duijiaoxian();void zhoubian();void hangmax();void lieave();void nijuzhen();void andian();void xiangcheng();scanf("%d",&choice);case 1:shuru();break;case 2: duijiaoxian();break;case 3: zhoubian();break;case 4: hangmax();break;case 5:lieave();break;case 6: nijuzhen();break;case 7: andian();break;case 8: xiangcheng();break;}system("pause") ;}以上为本次设计的主函数,功能为显示8种功能选项菜单以及输入选择要执行的功能。
c语言实现矩阵运算
c语言实现矩阵运算以C语言实现矩阵运算矩阵运算是线性代数中的重要概念,它可以用来解决各种实际问题,如图像处理、信号处理、机器学习等。
在C语言中,我们可以通过使用数组和循环结构来实现矩阵的各种运算。
本文将介绍如何使用C语言实现矩阵的加法、减法、乘法和转置运算。
1. 矩阵的表示在C语言中,我们可以使用二维数组来表示矩阵。
例如,一个m行n列的矩阵可以用一个m*n的二维数组来表示。
下面是一个3行2列的矩阵的表示方式:```cint matrix[3][2] = {{1, 2},{3, 4},{5, 6}};```2. 矩阵的加法矩阵的加法是指两个矩阵对应元素相加得到一个新的矩阵。
要实现矩阵的加法,我们可以使用两层循环遍历两个矩阵的对应元素,并将其相加得到新的矩阵。
下面是一个实现矩阵加法的示例代码:```cvoid matrix_add(int m, int n, int matrix1[m][n], int matrix2[m][n], int result[m][n]) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {result[i][j] = matrix1[i][j] + matrix2[i][j];}}}```3. 矩阵的减法矩阵的减法与加法类似,只需要将相加的操作改为相减即可。
下面是一个实现矩阵减法的示例代码:```cvoid matrix_subtract(int m, int n, int matrix1[m][n], int matrix2[m][n], int result[m][n]) {for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {result[i][j] = matrix1[i][j] - matrix2[i][j];}}}```4. 矩阵的乘法矩阵的乘法是指两个矩阵相乘得到一个新的矩阵。
C矩阵的加减乘除
《矩阵类》程序设计基础课程设计报告二OO八年七月一日目录一.编程目的:.................................................. 错误!未定义书签。
二.设计要求:.................................................. 错误!未定义书签。
三.各函数功能说明: ....................................... 错误!未定义书签。
四.流程图:...................................................... 错误!未定义书签。
五.总结:. (11)参考书目: (12)一.编程目的:编写一个矩阵类,可以实现矩阵的初始化,矩阵的加法,减法,乘法等基本功能,要求对运算符+、-,《、》进行重载。
二.设计要求:_ 编写一个矩阵类1.实现矩阵的初始化2.实现矩阵的加法(将两个矩阵的对应位置的数相加)3.实现矩阵的减法4.实现矩阵的乘法5.对基本运算符的重载(+、-、《《、》》)6.输出这些信息三.各函数功能说明:函数源代码以及函数的功能:#include<iostream.h>#define M 3class Matrix // 定义类Matrix{public:Matrix(); // 声明构造函数Matrix operator + (Matrix &); //声明加法重载运算符作为成员函数Matrix operator - (Matrix &); //声明减法重载运算符作为成员函数Matrix operator * (Matrix&); //声明乘法重载运算符作为成员函数Matrix zhuanzhi(Matrix &); //声明矩阵的转值为成员函数friend istream &operator >> (istream&,Matrix&); //声明输入重载运算符作为友元函数friend ostream &operator << (ostream&,Matrix&); //声明输出重载运算符作为友元函数private:int q[M][M];};Matrix::Matrix() //定义构造函数{for(int i=0;i<M;i++)for(int j=0;j<M;j++)q[i][j]=0;}Matrix Matrix:: operator + (Matrix &a) //定义加法重载运算符函数{Matrix m;for(int i=0;i<M;i++)for(int j=0;j<M;j++)m.q[i][j]=q[i][j]+a.q[i][j];return m;}Matrix Matrix:: operator - (Matrix &a) // 定义减法重载运算符函数{Matrix m;for(int i=0;i<M;i++)for(int j=0;j<M;j++)m.q[i][j]=q[i][j]-a.q[i][j];return m;}Matrix Matrix ::operator * (Matrix &a) //定义乘法运算符函数{Matrix m;for(int i=0;i<M;i++){for(int j=0;j<M;j++)for(int k=0;k<M;k++)m.q[i][j]+=q[i][k]*a.q[k][j];}return m;}Matrix Matrix::zhuanzhi(Matrix &a) //定义矩阵的转值{Matrix b,c;b=a;for(int i=0;i<M;i++)for(int j=0;j<M;j++)c.q[i][j]=b.q[j][i];return c;}istream &operator >> (istream& input,Matrix& a ) //定义输入重载运算符函数{int i=0,j=0;cout<<"Please enter its date:"<<endl;for(i=0;i<M;i++)for(j=0;j<M;j++)input >>a.q[i][j];return input;}ostream &operator << (ostream& output,Matrix& a) // 定义输出重载运算符函数{cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@"<<endl;cout<<"@@@@@@@@ The new Matrix is: @@@@@@@"<<endl; cout<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@"<<endl;for(int i=0;i<M;i++)for(int j=0;j<M;j++){_ output<<a.q[i][j]<<" ";if(j==M-1) cout<<endl;}return output;}int main(){Matrix a,b,c,d,f,k; // 定义对象a,b,c,d,fcin>>a;cin>>b;c=a+b;d=a-b;f=a*b;cout<<endl<<"Matrix a is:"<<endl;cout<<a;cout<<endl<<"Matrix b is:"<<endl;cout<<b;cout<<endl<<"Matrix c = Matrix a + Matrix b is:"<<endl;cout<<c; //输出两矩阵之和cout<<endl<<"Matrix d = Matrix a - Matrix b is:"<<endl;_ cout<<d; // 输出两矩阵之减cout<<endl<<"Matrix f= Matrix a * Matrix b is:"<<endl;cout<<f; // 输出两矩阵之乘积cout<<endl<<"Matrix a's zhuanzhi is:"<<endl;cout<<f.zhuanzhi(a);return 0;}四、流程图:五.总结:在做程序设计前就已经感觉到我设计的《矩阵类》比较复杂,不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。
矩阵运算c语言课程设计
矩阵运算c语言课程设计一、课程目标知识目标:1. 学生能够理解矩阵的基本概念,掌握矩阵的存储方式和基本运算原理。
2. 学生能够掌握C语言中二维数组的使用,并将其应用于矩阵的表示和运算。
3. 学生能够运用所学知识,实现矩阵的加、减、乘、转置等基本运算。
技能目标:1. 学生能够运用C语言编写程序,实现矩阵的各种运算,提高编程能力。
2. 学生能够通过分析问题,设计合理的算法,解决矩阵相关的问题。
3. 学生能够利用调试工具检查并修正程序中的错误,提高解决问题的能力。
情感态度价值观目标:1. 学生在学习过程中,培养对编程的兴趣和热情,形成积极的学习态度。
2. 学生通过团队协作和交流,培养合作精神和沟通能力,提高团队意识。
3. 学生在学习过程中,感受计算机科学的魅力,树立科学精神,增强对科技创新的认识。
课程性质:本课程为计算机科学与技术领域的专业课程,旨在让学生掌握矩阵运算的C语言实现,提高编程能力。
学生特点:学生已具备C语言基础,具有一定的编程能力和问题解决能力。
教学要求:通过本课程的学习,学生应能独立完成矩阵运算的编程任务,具备解决实际问题的能力。
教师应注重理论与实践相结合,引导学生主动参与,培养其创新思维和团队合作能力。
在教学过程中,关注学生的个体差异,因材施教,确保每位学生都能达到课程目标。
二、教学内容1. 矩阵基础知识:矩阵的定义、存储方式、基本运算(加、减、乘、转置)。
- 教材章节:第二章 矩阵及其运算2. C语言二维数组:二维数组的声明、初始化、访问,以及与矩阵的关联。
- 教材章节:第一章 C语言基础回顾3. 矩阵运算的C语言实现:- 矩阵加法:编写程序实现矩阵的加法运算- 矩阵减法:编写程序实现矩阵的减法运算- 矩阵乘法:编写程序实现矩阵的乘法运算- 矩阵转置:编写程序实现矩阵的转置运算- 教材章节:第三章 矩阵运算的C语言实现4. 矩阵运算程序调试与优化:- 算法优化:分析算法性能,提高程序运行效率- 调试技巧:运用调试工具,查找并修正程序错误- 教材章节:第四章 程序调试与优化教学内容安排与进度:1. 矩阵基础知识(2课时)2. C语言二维数组(2课时)3. 矩阵运算的C语言实现(4课时)- 矩阵加法(1课时)- 矩阵减法(1课时)- 矩阵乘法(2课时)- 矩阵转置(1课时)4. 矩阵运算程序调试与优化(2课时)三、教学方法1. 讲授法:教师通过讲解矩阵的基本概念、运算原理以及C语言二维数组的使用方法,为学生奠定坚实的理论基础。
C语言课程设计报告矩阵的运算
序号:学号:------------课程设计设计课程名称: C语言课程设计题目:矩阵的运算学生姓名: **********学院(系): ********* 专业班级: ********* 指导教师: ******* 专业技术职务:设计时间: **** 年 * 月 ** 日 ? ****年 * 月 **日目录1.矩阵运算任务书 (3)2.描述及绘制出系统的功能结构框图 (7)3.C语言程序代码 (8)4.使用说明 (15)5.设计日志及心得体会 (16)"矩阵运算"任务书一、目的要求本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成一个矩阵运算子程序集,并能最终实现本系统的功能要求。
二、功能要求【题目描述】矩阵运算是大多数科学运算的必要工具。
假定所有矩阵均以文本文件形式保存,试编写程序,处理简单的矩阵运算。
矩阵文件每一行以文本保存矩阵中一行数据每个数据之间以一个或者多个空格隔开。
目前矩阵仅保存整数值。
下面是一个矩阵文件例子:文件名:matrix1.txt1 123 -43 1 -14 52 0 0 5 65 6 7 8 910 11 12 14 13你的程序需要实现以下功能:1.矩阵加法。
2.矩阵转置3.矩阵乘法【程序要求】(1)程序正确。
能够严格实现任务书中描述的功能;(2)界面友好。
尽可能使界面友好、直观、易操作;(3)风格友好。
源程序应有良好的编码风格,使程序容易阅读。
(4)从文件中读矩阵,将矩阵写入文件,矩阵3个操作均需要以子程序形式编写。
【输入/输出要求】(1)每项功能在选择后,应提示用户输入源矩阵所在文件名,并检验该文件是否存在,但是并不读取该文件内容。
然后再提示用户输入结果矩阵文件名。
通过子程序读取矩阵数据,将运算结果同时输出到文件和屏幕上。
(2)所有源矩阵均可使用记事本生成。
(3)若main函数带有参数repeat则所有读取矩阵和运算函数操作均需重复10000次。
c语言矩阵运算课程设计
c语言矩阵运算课程设计一、课程目标知识目标:1. 学生能够掌握矩阵的基本概念,了解其在C语言中的应用。
2. 学生能够运用C语言实现矩阵的创建、初始化、输入输出等基本操作。
3. 学生能够理解并掌握矩阵的加、减、乘、转置等运算的C语言实现方法。
4. 学生能够运用C语言解决实际问题中的矩阵运算。
技能目标:1. 学生能够独立编写C语言程序完成矩阵的基本操作。
2. 学生能够运用调试工具对矩阵运算程序进行调试,找出并修正错误。
3. 学生能够分析实际问题,设计并实现相应的矩阵运算算法。
情感态度价值观目标:1. 学生通过学习矩阵运算,培养对程序设计的兴趣和热情,提高信息素养。
2. 学生在编程过程中,养成严谨、细致、合作的学习态度,增强团队协作能力。
3. 学生能够认识到矩阵运算在实际问题中的应用价值,激发进一步学习的动力。
课程性质:本课程为C语言程序设计课程的一部分,侧重于矩阵运算在实际问题中的应用。
学生特点:学生已具备一定的C语言基础,了解基本的数据类型、语法和编程技巧。
教学要求:结合学生特点和课程性质,将课程目标分解为具体的学习成果,注重实践操作,强调算法设计和程序调试。
在教学过程中,关注学生的个体差异,提供有针对性的指导。
二、教学内容1. 矩阵基础知识:- 矩阵的定义及性质- 矩阵的表示方法- 特殊矩阵(单位矩阵、对角矩阵等)2. C语言矩阵操作:- 矩阵的动态内存分配- 矩阵的输入输出- 矩阵的创建与初始化3. 矩阵运算:- 矩阵的加、减、乘运算- 矩阵的转置- 矩阵的行列式、逆矩阵计算4. 矩阵运算程序设计:- 矩阵运算算法分析- 编写相应的C语言程序- 程序调试与优化5. 实践案例:- 矩阵运算在实际问题中的应用- 结合教材案例,进行编程实践- 分析并改进教材案例中的算法教学大纲安排:第一周:矩阵基础知识学习,介绍矩阵的定义、性质及表示方法。
第二周:C语言矩阵操作,学习动态内存分配、矩阵输入输出、创建与初始化。
矩阵运算实验报告
实验报告--矩阵运算一.实验目的。
1.通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。
2.通过实践进一步领会程序设计的特点和应用,提高运用C++ 语言以及面向对象知识解决实际问题的能力。
3.通过实践掌握用C++ 语言编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;4.学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。
为后续的相关课程的学习打下基础。
二.实验要求。
1.学会建立模板类;2.实现矩阵的“加”、“减”、“乘”、“数乘”、“转置” ;3.动态内存分配并用随机数填充;4.注意“加”、“减”、“乘” 要进行条件的判断;三.设计思路。
3.1算法基本流程1)获取用户输入的矩阵1的行数和列数,动态生成一个一维数组2)利用随机数生成数组成员,并利用两个循环输出数组,使其符合矩阵的格式3)矩阵2同矩阵1的处理方法4)通过两个矩阵的行数和列数比较来判断能否进行加减乘等运算,如不能,输出相关信息5)如能够进行计算,则利用数组进行相应运算,并按照正确格式输出6)通过改变一维数组中元素的顺序来实现转置并输出3.2算法流程图四.基本界面。
五.关键代码。
5.1关键类的声明class CMatrixclass{public:CMatrixclass(){int m_Row = 0; //行int m_Col = 0; //列m_pElements = NULL; //一维数组};virtual ~CMatrixclass(){delete [] m_pElements;}public:int m_Row;int m_Col;int * m_pElements;};5.2关键函数代码void CMyView::OnCHECKadd(){m_nums.SetCheck(0);m_combine.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnCHECKsubtrict(){m_add.SetCheck(0);m_combine.SetCheck(0);m_nums.SetCheck(0);}void CMyView::OnCHECKcombine(){m_add.SetCheck(0);m_nums.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnCHECKnums(){m_add.SetCheck(0);m_combine.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnBUTTONcompute(){UpdateData(TRUE);// TODO: Add your control notification handler code hereif(m_add.GetState()==1){if(op1->imax!=op2->imax||op1->jmax!=op2->jmax||op1==NULL||op2==NU LL){m_result="行数列数不等无法相加!";}else{matrix<int> c(op1->imax,op1->jmax);c=*op1+*op2;m_result="matrix1+matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_subtrict.GetState()==1){if(op1->imax!=op2->imax||op1->jmax!=op2->jmax||op1==NULL||op2==NU LL){m_result="行数列数不等无法相减!";}else{matrix<int> c(op1->imax,op1->jmax);c=*op1-*op2;m_result="matrix1-matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_combine.GetState()==1){if(op1->jmax!=op2->imax||op1==NULL||op2==NULL){m_result="以上无法相乘!";}else{matrix<int> c(op1->imax,op2->jmax);c=(*op1)*(*op2);m_result="matrix1*matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_nums.GetState()==1){if(op2==NULL){m_result="运算不出结果!";}else{matrix<int> c(op2->imax,op2->jmax); c=m_k*(*op2);m_result="k*matrix2";m_result+="\r\n";m_result+=c.my_show();}}else{m_result="请先选定一个算法!";}UpdateData(FALSE);}void CMyView::OnBUTTONrotate(){UpdateData(TRUE);if(m_r1.GetState()==1){if(op1==NULL){m_result="请先输入矩阵!";}else{matrix<int> c=rotate(*op1);m_result="matrix1转置";m_result+="\r\n";m_result+=c.my_show();}}else if(m_r2.GetState()==1){if(op2==NULL){m_result="请先输入矩阵!";}else{matrix<int> c=rotate(*op2);m_result="matrix2转置";m_result+="\r\n";m_result+=c.my_show();}}else{m_result="请选择一个矩阵!";}UpdateData(FALSE);}void CMyView::OnCHECKr1(){UpdateData(TRUE);m_r2.SetCheck(0);UpdateData(FALSE);}void CMyView::OnCHECKr2(){UpdateData(TRUE);m_r1.SetCheck(0);UpdateData(FALSE);}六.实验心得与编程收获。
C语言程序设计报告矩阵运算
C语言程序设计报告矩阵运算矩阵运算是计算机科学中重要的基础知识,它在多个领域中都有广泛的应用。
本报告将介绍C语言中的矩阵运算,包括矩阵的定义、基本运算、以及一些常见的算法。
一、矩阵的定义在C语言中,我们可以用二维数组来表示一个矩阵。
一个矩阵可以定义为一个m行n列的矩形数组,其中每个元素可以通过矩阵的行标和列标来访问。
例如,我们可以定义一个3行3列的矩阵如下:```int matrix[3][3] ={1,2,3},{4,5,6},{7,8,9}};```二、矩阵的基本运算1.矩阵的加法矩阵的加法是指两个相同行列数的矩阵对应元素相加的运算。
例如,对于两个3行3列的矩阵A和B,它们的加法可以表示为C=A+B,其中C 的每个元素等于A和B对应元素的和。
2.矩阵的减法矩阵的减法是指两个相同行列数的矩阵对应元素相减的运算。
例如,对于两个3行3列的矩阵A和B,它们的减法可以表示为C=A-B,其中C 的每个元素等于A和B对应元素的差。
3.矩阵的乘法矩阵的乘法是指矩阵与矩阵或者矩阵与向量之间的运算。
对于两个矩阵A和B,它们的乘法可以表示为C=A*B,其中C的每个元素等于A的对应行与B的对应列的乘积之和。
三、常见的矩阵运算算法除了基本的矩阵运算,还有一些常见的算法用于解决特定的问题。
下面介绍两个常见的算法。
1.矩阵的转置矩阵的转置是指将矩阵的行和列对调的操作。
例如,对于一个3行2列的矩阵A,它的转置矩阵可以表示为B=A^T,其中B的第i行第j列的元素等于A的第j行第i列的元素。
2.矩阵的行列式矩阵的行列式是一个标量值,可以表示为,A,其中A是一个n行n 列的矩阵。
行列式可以用于判断一个方阵是否可逆,以及求解线性方程组等问题。
四、实现一个矩阵运算的示例程序下面通过一个示例程序来演示如何实现一个矩阵的加法和乘法运算。
```c#include <stdio.h>#define ROW 3#define COL 3void matrix_add(int A[ROW][COL], int B[ROW][COL], intC[ROW][COL])for (int i = 0; i < ROW; i++)for (int j = 0; j < COL; j++)C[i][j]=A[i][j]+B[i][j];}}void matrix_multiply(int A[ROW][COL], int B[COL][ROW], int C[ROW][ROW])for (int i = 0; i < ROW; i++)for (int j = 0; j < ROW; j++)C[i][j]=0;for (int k = 0; k < COL; k++)C[i][j]+=A[i][k]*B[k][j];}}}void print_matrix(int matrix[ROW][COL]) for (int i = 0; i < ROW; i++)for (int j = 0; j < COL; j++)printf("%d ", matrix[i][j]);}printf("\n");}int maiint A[ROW][COL] ={1,2,3},{4,5,6},{7,8,9}};int B[ROW][COL] ={9,8,7},{6,5,4},{3,2,1}};int C[ROW][COL];matrix_add(A, B, C);printf("A + B:\n");print_matrix(C);int D[ROW][ROW];matrix_multiply(A, B, D);printf("A * B:\n");print_matrix(D);return 0;```以上示例代码定义了三个函数,分别实现了矩阵的加法、乘法以及打印矩阵的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计报告矩阵运算学院:地质与环境学院专业:资源勘查工程0901姓名:***学号:**********目录1.设计任务书1.1题目1.2设计要求1.3程序涉及的知识点2.功能设计2.1算法设计2.2部分模块流程图3.程序代码设计3.1源代码3.2运行结果4.运行结果5.程序设计总结6.致谢7.参考文献1设计任务书1.1 题目矩阵运算1.2 设计要求此程序为矩阵运算的相关程序,用来计算包括两矩阵的加、减、乘运算,求矩阵的转置矩阵、最大值元素、最小值元素及对角线元素之和等运算。
1.2 本系统涉及的知识点此程序涉及了老师讲授的多个知识点,包括:for、if、printf及scanf 等语句,顺序、选择、循环等结构。
2功能设计2.1 算法设计此程序需要实现的功能要求:利用for、if、printf及scanf 等语句来实现所需功能。
输入矩阵a和b的元素之后,依次计算:程序一:计算a+b矩阵;程序二:计算a-b矩阵;程序三:计算a*b矩阵;程序四:计算a的转置矩阵;程序五:计算a矩阵的最小值元素;程序六:计算a矩阵的最大值元素;程序七:计算a矩阵的主对角线元素之和;程序八:计算a矩阵的副对角线元素之和;程序九:计算a矩阵的上三角元素之和;程序九:计算a矩阵的下三角元素之和;2.2 部分模块流程图3 程序源代码3.1源代码#include"stdio.h"void main(){int a[3][3],b[3][3],c[3][3],int i,j,k,s,max,min,sum1=0,sum2=0,sum3=0,sum4=0;printf("矩阵运算\n");printf("\n");printf("请输入a矩阵元素:\n");for(i=0;i<3;i++) /*通过二重循环给a矩阵的元素赋值*/ for(j=0;j<3;j++)scanf("%4d",&a[i][j]);printf("a矩阵:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",a[i][j]);printf("\n");}printf("\n");printf("请输入b矩阵元素:\n");for(i=0;i<3;i++) /*通过二重循环给b矩阵的元素赋值*/ for(j=0;j<3;j++)scanf("%4d",&b[i][j]);printf("b矩阵:\n");for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",b[i][j]);printf("\n");}printf("\n");printf("程序一:计算a+b矩阵\n"); /*计算a+b矩阵并输出*/ for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][j]+b[i][j];printf("%6d",c[i][j]);}printf("\n");}printf("\n");printf("程序二:计算a-b矩阵\n"); /*计算a-b矩阵并输出*/ for(i=0;i<3;i++){for(j=0;j<3;j++){c[i][j]=a[i][j]-b[i][j];printf("%6d",c[i][j]);}printf("\n");}printf("\n");printf("程序三:计算a*b矩阵\n"); /*计算a*b矩阵(c矩阵)并输出*/for(i=0;i<3;i++) /*最外层循环控制c矩阵的行数*/for(j=0;j<3;j++) /*次外层循环控制c矩阵的列数*/{for(k=s=0;k<3;k++) /*计算c矩阵的每个元素的值*/s+=a[i][k]*b[k][j];c[i][j]=s;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",c[i][j]);printf("\n");}printf("\n");printf("程序四:计算a的转置矩阵\n"); /*计算a的转置矩阵并输出*/for(i=0;i<3;i++)for(j=0;j<3;j++)c[j][i]=a[i][j];for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%6d",c[i][j]);printf("\n");}printf("\n");printf("程序五:计算a矩阵的最小值元素\n"); /*计算a矩阵的最小值元素min并输出*/min=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]<min)min=a[i][j];printf("min=%d\n",min);printf("\n");printf("程序六:计算a矩阵的最大值元素\n"); /*计算a矩阵的最大值元素max并输出*/max=a[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(a[i][j]>max)max=a[i][j];printf("max=%d\n",max);printf("\n");printf("程序七:计算a矩阵的主对角线元素之和\n"); /*计算a矩阵的主对角线元素之和sum1并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i==j)sum1+=a[i][j];}printf("sum1=%d\n",sum1);printf("\n");printf("程序八:计算a矩阵的副对角线元素之和\n"); /*计算a矩阵的副对角线元素之和sum2并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i+j==2)sum2+=a[i][j];}printf("sum2=%d\n",sum2);printf("\n");printf("程序九:计算a矩阵的上三角元素之和\n"); /*计算a矩阵的上三角元素之和sum3并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i<j||i==j)sum3+=a[i][j];}printf("sum3=%d\n",sum3);printf("\n");printf("程序十:计算a矩阵的下三角元素之和\n"); /*计算a矩阵的下三角元素之和sum4并输出*/for(i=0;i<3;i++){for(j=0;j<3;j++)if(i>j||i==j)sum4+=a[i][j];}printf("sum4=%d\n",sum4);printf("\n");printf("运算完毕!\n"); /*运算完毕*/ printf("\n");}4运行结果运行结果如图所示:5程序设计总结这次“矩阵运算”的程序设计不仅让我对C语言的熟悉程度上升到了另一个高度,更加熟练的运用C语言,而且在一定意义上对面向对象设计的理解更加深刻了,是我学习C语言的过程中一次进步。
在这个过程中,我对编程语言有了一个新的认识。
当看着一个个矩阵运算的结果出现在自己面前时,心中泛起激动的涟漪,原来编程也不是那么遥不可及,编程也富有趣味性,并且从中能让我收获更多的实践知识,挺高自己学习C语言和编程的能力。
6致谢感谢张老师的认真教授和耐心讲解。
7参考文献【1】龚尚福,《C/C++语言程序设计》中国矿业大学出版社 2007.2。