精华内容
下载资源
问答
  • C语言实现一个矩阵乘法计算器 代码如下 虽然还有很多可以改进的地方,比如把输入矩阵做成函数以简化代码,不过本人初学能力有限,只想实现这样一个简单的小功能。 #include <stdio.h> int main(void) { int m...

    C语言实现一个矩阵乘法计算器

    虽然一般做练习题的时候具体的矩阵最多四阶左右,但是作为实现该功能的代码最好不要局限于此。由于矩阵乘法的运算要求,第二个矩阵的行数必须与第一个矩阵的列数相等,且两个矩阵的行列数均不可小于或等于0,该算法会先要求输入第一个矩阵的行数与列数,然后按行输入矩阵的元素,接着输入第二个矩阵的行数与列数,判断是否符合要求,然后同样按行输入矩阵元素。然后就可以得到结果。

    虽然还有很多可以改进的地方,比如把输入矩阵做成函数以简化代码,另外当时只是一边构思一边编写代码,所以命名极不规范,建议初学者不要养成这样的习惯。不过本人确实是初学者,目的只是实现这样一个小功能,细枝末节的地方暂不深究。

    具体代码如下(请不要吐槽我混乱的代码风格)

    #include <stdio.h>
    int main(void)
    {
      int m,n;                                    //输入第一个矩阵的规格
      printf("请输入第一个矩阵的行数和列数:\n");
      scanf("%d %d",&m,&n);
    
      if(m<=0||n<=0)                              //判断 m,n的值是否有效,如果无效重新输入
      {
        printf("不可小于或等于0!\n");
        printf("请重新输入第一个矩阵的行数和列数:");
        scanf("%d %d",&m,&n);
      }
    
      printf("请输入第一个矩阵的元素:\n");            //输入第一个矩阵的元素
      int array1[m][n];
      int x_1;
      int i_1,j_1;
      for(i_1=0;i_1<m;i_1++)
      {
        for(j_1=0;j_1<n;j_1++)
        {
          scanf("%d",&x_1);
          array1[i_1][j_1]=x_1;
        }
      }
    
      int p,q;                                       //输入第二个矩阵的规格
      printf("请输入第二个矩阵的行数和列数:\n");
      scanf("%d %d",&p,&q);
    
      if(p<=0||q<=0)                              //判断 m,n的值是否有效,如果无效重新输入
      {
        printf("不可小于或等于0!\n");
        printf("请重新输入第一个矩阵的行数和列数:\n");
        scanf("%d %d",&p,&q);
      }
    
      if(p!=n)                                    //判断第二个矩阵的行数是否等于第一个矩阵的列数  如果不等则重新输入第二个矩阵的行列数
      {
        printf("第二个矩阵的行数应等于第一个矩阵的列数!\n");
        printf("请重新输入第二个矩阵的行数和列数:\n");
        scanf("%d %d",&p,&q);
      }
    
      int array2[p][q];
      int x_2;
      int i_2,j_2;
    
      printf("请输入第二个矩阵的元素:\n");            //输入第二个矩阵的元素
      for(i_2=0;i_2<p;i_2++)
      {
        for(j_2=0;j_2<q;j_2++)
        {
          scanf("%d",&x_2);
          array2[i_2][j_2]=x_2;
        }
      }
      
      int array3[m][q];                         //定义第三个矩阵
      int i_3,j_3;
      int i;
      int sum=0;
      for(i_3=0;i_3<m;i_3++)
      {
        for(j_3=0;j_3<q;j_3++)
        {
          for(i=0;i<n;i++)
          {
          sum=sum+array1[i_3][i]*array2[i][j_3];        //对前两个矩阵进行运算,讲结果保存在第三个矩阵里
          array3[i_3][j_3]=sum;
          }
          sum=0;
        }
      }
    
      printf("两个矩阵相乘得到的结果为:\n");
      
      for(i_3=0;i_3<m;i_3++)                              //输出结果矩阵
      {
        for(j_3=0;j_3<q;j_3++)
        {
          printf("%d\t",array3[i_3][j_3]);
        }
        printf("\n");
      }
      return 0;
    }
    
    展开全文
  • 100),表示第一个矩阵是A行B列,第二个矩阵是B行C列。 然后是A行整数,每行B个,以空格分隔,表示第一个矩阵的内容。 然后是B行整数,每行C个,以空格分隔,表示第二个矩阵的内容。 输出格式: 输出两个矩阵的...

    输出二个矩阵的乘积 


    任务描述

    编程输出两个矩阵的乘积。

    输入格式:

    首先是三个正整数A,B,C(0〈A,B,C<100),表示第一个矩阵是A行B列,第二个矩阵是B行C列。
    然后是A行整数,每行B个,以空格分隔,表示第一个矩阵的内容。
    然后是B行整数,每行C个,以空格分隔,表示第二个矩阵的内容。

    输出格式:

    输出两个矩阵的乘积,为A行整数,每行C列,整数间以1个空格分隔。

    输入样例:

    3 5 2
    12 25 56 89 -98
    100 200 210 300 2
    55 88 66 77 44
    1 2
    2 2
    3 4
    5 1
    6 2

    输出样例:

    87 191
    2642 1744
    1078 715

    输入样例:

    2 3 4
    1 2 3
    3 2 1
    1 2 3 4
    2 1 2 4
    3 2 4 1

    输出样例:

    14 10 19 15
    10 10 17 21

     


    首先回顾矩阵乘积的定义和方法

    如图所示

    代码

    #include <stdio.h>
    int main(int argc, char *argv[])
    {
    	int a1,b1,c1,i,j,k,a[10][10],b[10][10],c[10][10]={0};
    	scanf("%d %d %d",&a1,&b1,&c1);
    	for(i=0;i<a1;i++)
    	{
    		for(j=0;j<b1;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}
    	for(j=0;j<b1;j++)
    	{
    		for(k=0;k<c1;k++)
    		{
    			scanf("%d",&b[j][k]);
    		}
    	}
    	int x;
    	for(i=0;i<a1;i++)
    	{
    		for(x=0;x<c1;x++)
    		{
    			for(j=0;j<b1;j++)
    			{
    				c[i][x] += (a[i][j]*b[j][x]);
    			}
    		}
    	}
    	for(i=0;i<a1;i++)
    	{
    		for(j=0;j<c1;j++)
    		{
    			if(j==c1-1)
    			printf("%d",c[i][j]);
    			else
    			printf("%d ",c[i][j]);
    		}
    		if(i!=a1-1)
    		printf("\n");
    	}
    	return 0;
    }

    下面是有注释的代码。因为加上注释可能会运行失败,所以打在下面:

    
    #include <stdio.h>
    int main(int argc, char *argv[])
    {
    	int a1,b1,c1,i,j,k,a[10][10],b[10][10],c[10][10]={0};//定义表达符
    	scanf("%d %d %d",&a1,&b1,&c1);//其中a1,b1是a数组的行和列;b1,c1是b数组的行和列
    	for(i=0;i<a1;i++)
    	{
    		for(j=0;j<b1;j++)
    		{
    			scanf("%d",&a[i][j]);
    		}
    	}//输入第一个数组
    
    	for(j=0;j<b1;j++)
    	{
    		for(k=0;k<c1;k++)
    		{
    			scanf("%d",&b[j][k]);
    		}
    	}//输入第二个数组
    
    	int x;
    	for(i=0;i<a1;i++)
        //最大的第一循环,就是a数组处理执行完;
    	{
    		for(x=0;x<c1;x++)
        //c数组中一共有b1个元素,即b数组的列;
    		{
    			for(j=0;j<b1;j++)
        //最内层的循环,求c数组的元素
    			{
    				c[i][x] += (a[i][j]*b[j][x]);
    			}
    		}
    	}
    	for(i=0;i<a1;i++)
    	{
    		for(j=0;j<c1;j++)
    		{
    			if(j==c1-1)//如果是新数组的最后一列则不输出空格(题中要求只有整数件才有空格)
    			printf("%d",c[i][j]);
    			else
    			printf("%d ",c[i][j]);
    		}
    		if(i!=a1-1)//如果不是新数组的最后一行则换行
    		printf("\n");
    	}
    	return 0;
    }
    
    ?

     

    展开全文
  • 请求出这个矩阵的总和。 Input 每行给定整数N (N),表示矩阵为 N*N.当N为0时,输入结束。 Output 输出答案,保留2位小数。 Sample Input 1 2 3 4 0 Sample Output 1.00 3.00 5.67...
  • 线性代数知识。 两个矩阵的加法。... printf("请输入一个 %d 行 %d 列的矩阵:", row, column); int i, j; for (i = 0; i < row; i++) { for (j = 0; j < column; j++) { scanf("%d

    线性代数知识。

    两个矩阵的加法。

    //完成两个矩阵加法运算
    void Add(int row, int column) {
    	int l_matrix[row][column];
    	int r_matrix[row][column];
    
    	printf("请输入第一个 %d 行 %d 列的矩阵:", row, column);
    	int i, j;
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &l_matrix[i][j]);
    		}
    	}
    	printf("请输入第二个 %d 行 %d 列的矩阵:", row, column);
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &r_matrix[i][j]);
    		}
    	}
    
    	for (i = 0; i < row; i++) {
    		printf("{");
    		for (j = 0; j < column; j++) {
    			if (j == 0) {
    				printf("%d", l_matrix[i][j] + r_matrix[i][j]);
    			} else {
    				printf(",%d", l_matrix[i][j] + r_matrix[i][j]);
    			}
    		}
    		printf("}\n");
    	}
    }
    

    两个矩阵的减法。

    //完成两个矩阵减法运算
    void Sub(int row, int column) {
    	int l_matrix[row][column];
    	int r_matrix[row][column];
    
    	printf("请输入第一个 %d 行 %d 列的矩阵:", row, column);
    	int i, j;
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &l_matrix[i][j]);
    		}
    	}
    	printf("请输入第二个 %d 行 %d 列的矩阵:", row, column);
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &r_matrix[i][j]);
    		}
    	}
    
    	for (i = 0; i < row; i++) {
    		printf("{");
    		for (j = 0; j < column; j++) {
    			if (j == 0) {
    				printf("%d", l_matrix[i][j] - r_matrix[i][j]);
    			} else {
    				printf(",%d", l_matrix[i][j] - r_matrix[i][j]);
    			}
    		}
    		printf("}\n");
    	}
    }
    

    两个矩阵的乘法。

    //完成两个矩阵的乘法运算
    void Mul(int row, int column) {
    	int l_matrix[row][column];
    	int r_matrix[column][row];
    
    	printf("请输入第一个 %d 行 %d 列的矩阵:", row, column);
    	int i, j;
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &l_matrix[i][j]);
    		}
    	}
    	printf("请输入第二个 %d 行 %d 列的矩阵:", column, row);
    	for (i = 0; i < column; i++) {
    		for (j = 0; j < row; j++) {
    			scanf("%d", &r_matrix[i][j]);
    		}
    	}
    
    	int k;
    	for (i = 0; i < row; i++) {
    		printf("{");
    		for (j = 0; j < column; j++) {
    			int sum = 0;
    			for (k = 0; k < column; k++) {
    				sum += l_matrix[j][k] * r_matrix[k][j];
    			}
    			if (i == 0) {
    				printf("%d", sum);
    			} else {
    				printf(",%d", sum);
    			}
    		}
    		printf("}\n");
    	}
    }
    

    一个矩阵和一个常数的乘法。

    //完成一个矩阵和常数的乘法运算
    void MulByFactor(int row, int column, int factor) {
    	int l_matrix[row][column];
    
    	printf("请输入第一个 %d 行 %d 列的矩阵:", row, column);
    	int i, j;
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &l_matrix[i][j]);
    		}
    	}
    
    	for (i = 0; i < row; i++) {
    		printf("{");
    		for (j = 0; j < column; j++) {
    			if (j == 0) {
    				printf("%d", l_matrix[i][j] * factor);
    			} else {
    				printf(",%d", l_matrix[i][j] * factor);
    			}
    		}
    		printf("}\n");
    	}
    }
    

    转置矩阵。

    //转置矩阵运算 
    void Transposed(int row, int column) {
    	int transposed_matrix[column][row];
    	
    	printf("请输入需要转置的 %d 行 %d 列的矩阵:\n");
    	int i, j;
    	for (i = 0; i < row; i++) {
    		for (j = 0; j < column; j++) {
    			scanf("%d", &transposed_matrix[j][i]);
    		}
    	} 
    	
    	for (i = 0; i < column; i++) {
    		printf("{");
    		for (j = 0; j < row; j++) {
    			if (j == 0) {
    				printf("%d", transposed_matrix[i][j]);
    			} else {
    				printf(",%d", transposed_matrix[i][j]);
    			}
    		}
    		printf("}\n");
    	}
    }
    

    日常放代码水文章:-)

    开发工具 Dev-C++。
    C语言源码下载地址。
    C++实现点这里。

    展开全文
  • 输入个矩阵,分别是ms,sn大小。输出两个矩阵相乘的结果。 输入格式:         第行,空格隔开的三个整数m,s,n(均不超过200)。       ...

    问题描述

    输入两个矩阵,分别是ms,sn大小。输出两个矩阵相乘的结果。

    输入格式:
            第一行,空格隔开的三个整数m,s,n(均不超过200)。
            接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
            接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。

    输出格式:
            m行,每行n个空格隔开的整数,输出相乘后的矩阵C(i,j)的值。

    样例输入:
    2 3 2
    1 0 -1
    1 1 -3
    0 3
    1 2
    3 1

    样例输入:
    -3 2
    -8 2

    提示:
            矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
            例如样例中C(1,1)=(1,0,-1)(0,1,3)=10+0*1+(-1)*3=-3。

    有一说一,博主这题得了28分,个人认为思路是没错的(但不得不承认有些繁琐了)。

    思路:将数组a的每一行,分别与b的每一列相乘,输出的结果存入数组c,输出c。

    代码:

    #include<stdio.h>
    
    int main()
    {
    	int m,s,n;
    	scanf("%d%d%d",&m,&s,&n);
    	int i,j,k=0,l=0;//i,j用于标记a矩阵,k,l用于标记b矩阵
    	int a[m][s];
    	int b[s][n];
    	for(i=0;i<m;i++)//给矩阵a赋值
    	{
    		for(j=0;j<s;j++)
    		{
    			scanf("%d",&a[i][j]); 
    		}
    	}
    	for(i=0;i<s;i++)//给矩阵b赋值
    	{
    		for(j=0;j<n;j++)
    		{
    			scanf("%d",&b[i][j]); 
    		}
    	}
    	int p=0,q=0;//用于控制输出矩阵c的下标
    	int t=0;//用于记录每一次乘完的值
    	int x=0;//因为只有和b的每一列乘完了,a才能换行,这里控制a乘完之后才能换行
    	int c[m][n];//输出矩阵
    	int flag=0;//控制要乘的b数组中的变化
    	int flag1=0;//控制存入输出矩阵的数据的换行
    	for(i=0;i<m;i++)
    	{
    			x=0;//i每次变化都要将控制a的次数的变量置0
    			
    			k=0;
    			l=0;//将b数组归为第一个元素
    			while(x<n)//当b数组还没有被乘完
    			{
    				flag=0;//表示b是从第一行开始的元素乘
    				
    				t=0;//初始化行*列的值
    				
    				for(j=0;j<s;j++)//a的行i确定,从该行往后一个一个的乘
    				{
    				
    					if(k<s&&l<n&&flag==0)
    					{
    						t+=a[i][j]*b[k++][l];//这儿k++,表示乘完了才进行b当前列的下一个元素的乘
    					}
    					else if(k==s&&flag==0)//此处表示b当前列已经到达最底下,下一次要换列了,也就是l++
    					{
    						k=0;
    						t+=a[i][j]*b[k][++l];
    						flag=1;
    					}
    					else//经过了换列,由于换列同时已经复制,因此这里是++k
    					{
    						t+=a[i][j]*b[++k][l];
    						k++;
    					}
    				}
    				if(p<m&&q<n&&flag1==0)//表示此时c的一行还没有排满 
    					{	
    						c[p][q++]=t;
    					}
    				else if(q==n&&flag1==0)//这里的原理和上面for循环里的逻辑相同
    					{
    						q=0;
    						c[++p][q]=t;
    						flag1=1;
    					}
    				else
    				{
    					c[p][++q]=t;
    				}
    				x++;
    			}
    	}
    	for(i=0;i<m;i++)//输出
    	{
    		for(j=0;j<n;j++)
    		{
    			printf("%d ",c[i][j]);
    		}
    		printf("\n");
    	}
    	return 0;
     } 
    

    测试:
    在这里插入图片描述

    总结:上面这个测试案例是我在评测用例正确的一个中挑来的,其他的测试不成功,所以如果大家有发现我这程序错误在哪,希望私信给我指点呀!/手动鲜花

    展开全文
  • c语言 判断上三角矩阵

    千次阅读 2020-03-27 20:05:42
    接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。 输出格式: 每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”...
  • C语言 判断上三角矩阵

    万次阅读 2017-06-29 10:26:42
    接下来给出TT个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数nn。随后nn行,每行给出nn个整数,其间以空格分隔。 ②输出格式:每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,...
  • 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 6 9 来源/分类 C语言 题目截图: 思路: 遇到过坑,我想着转换。结果比较难实现! 后来就,改变一下输出顺序就好啦...
  • 思想:将矩阵看做一个二维数组,用scanf()函数输入矩阵,将数组首位设置为最大值max,将max与数组中数按顺序两两比较,更新max,比较到最后一位得到最终max。void main(){ int a[3][4],i,j,max,max_i,max_j; printf...
  • . .页脚 C语言矩阵的逆矩阵 班级 自动化1604 ...求矩阵的逆求伴随矩阵矩阵的行列式功能模块输入矩阵矩阵的逆 求伴随矩阵矩阵的行列式 功能模块 输入矩阵 最主要的问题就是求解矩阵的逆矩阵而且是一个动态矩
  • printf("输入一个要添加的整数: \n"); scanf("%d", &num); insert(MAX, &size, ar, num); break; case 3: printf("输入一个要被移除的整数: \n"); scanf("%d", &num); iremove(&size,...
  • 查找一个只包含0和1的矩阵中每行最长的连续1序列。 输入说明 输入第一行为两个整数m和n(0<=m,n<=100)表示二维数组行数和列数,其后为m行数据,每行n个整数(0或1),输入数据中不会出现同一行有两个最长1序列...
  • C语言)指针转置矩阵

    千次阅读 2020-04-12 16:54:51
    2.编写函数,求一个3×3矩阵的转置矩阵。 (1)编程提示 转置矩阵,将原矩阵的行变为列,列变为行。注意,通过指针访问二维数组时的方法。本题采用的是指向数组元素的指针变量。 输入样例: 1 2 3 4 5 6 7 8 9 输出...
  • 输入在一行中,给出一个正整数R(<10),给出一个正整数C(<10)。 输出格式 输出R×C的螺旋方阵。共R行,每行C个数字,每个数字占3位。 输入样例 3 4 输出样例 2.题目分析 坐标的变化 例如这个
  • 题目: ...创建一个函数来寻找我们输入的数字是否在二维数组中存在,这个函数只要利用到while循环和if else if 语句。 代码如下图所示: 运行结果如下: 当你输入的数字在创建的二维数组中存在时: ...
  • C语言中字符矩阵换行输入输出

    千次阅读 2020-01-27 19:27:44
    输入字符矩阵时,换行符‘\n’会被当做字符存入字符矩阵中,准确的说,存入了每一行的最后一个。那么我们可以每一行多一个单位储存换行符,即在定义二维数组的大小时,列+1。     输入输出示例:  ...
  • 一个n×n(n<10)矩阵的转置程序,输出其原矩阵的值和转置以后的结果。 (注:不输入数组元素,用a[i][j]=n∗i+j+1a[i][j] = n* i + j + 1a[i][j]=n∗i+j+1求得) 输入输出提示 **输入提示:"please input n:" *...
  • c语言基本例题总结】 问题描述 求矩阵的和与积 代码 #include<stdio.h> #include<string.h>... int a[M][N]={0},b[M][N]={0},c[M][N]={0},d[M][N]={0};... printf("请输入一个矩阵:\n");
  • #include<stdio.h> #include<string.h> int main() ... printf("请输入行的数据\n"); for(i=0;i<n;i++) scanf("%d",&m[0][i]); //输入模块结束 for(i=1;i<n;i++).
  • 使用说明:输入一个数字k,计算矩阵的k次幂,输出原矩阵以及其k次幂矩阵 矩阵的k次幂可用于以邻接矩阵存储的图的算法中,具体原理涉及到离散数学,在此不作证明。 #include <stdio.h> #define N 4 ...
  • 简单的c 求出一个矩阵的对角线元素的和。 控制台的默认分割符就是空格,所以输入数字的时候用空格分开两个数字。回车也可以当做分隔符。
  • 编写程序,将一个n×n()的矩阵进行转置,即将行与列互换,转置后再按n×n矩阵形式输出。 输入格式: 输入整数n,从第2行开始依次输入n*n个整数,各数以一个空格分隔。 输出格式: 按n行n列的形式输出转置后的二维...
  • C语言初级小例题矩阵对角线求和

    千次阅读 2016-11-24 13:58:48
    一个3*3矩阵对角线元素之和。 1.程序分析: 利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 2.程序源代码: main() { float a[3][3],sum=0; int i,j; printf( “C语言研究中心 ...
  • L1-048 矩阵A乘以B (15分) ...对于每个矩阵,首先在行中给出其行数R和列数C,随后R行,每行给出C个整数,以1个空格分隔,且行首尾没有多余的空格。输入保证两个矩阵的R和C都是正数,并且所有整数的绝对值不超过1
  • 每次生成一个非零元的行与列之后,由键盘输入非零元的大小e;并将其先存入二维数组a[][]。 2、压缩矩阵至三元组的算法思想:获得矩阵之后,将其压缩进三元组表当中,三元组的非零元个数初始中为0,因在生成随机矩阵...
  • 编程:第一行输入m,n,然后输入一个m*n矩阵,求他们的各行元素之和。 Input: 3 3 4 5 6 5 6 7 7 8 9 output: sum[0] = 15 sum[1] = 18 sum[2] = 24 //看似需要二维数组,实则一层for循环即可 #include <...
  • [img=https://img-bbs.csdn.net/upload/202006/30/1593501066_67090.png][/img] 大佬可以帮我看看嘛?
  • 题目:在一个二维数组中,每一...请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。#include #include #pragma warning(disable:4996) int find(int arr[3][3], int rows, int cols, int
  • C语言回型矩阵

    2014-09-14 22:26:50
    C语言实现输入任意一个数字,然后以回型矩阵的形式显示出来,其中用数字填充回型矩阵,没有采用递归算法,而是简单判断条件然后循环至结束
  • 一个矩阵方程xA=B,其中x是一个1∗n的行向量,A是一个n∗n的矩阵,B是一个1∗n的行向量,并且n=9999999999999999999. 并且A[i][j]=1当且仅当i是j的约数,否则A[i][j]是0,B[i]=1当且仅当i=1,否则B[i]是0. 给出一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 908
精华内容 363
关键字:

c语言输入一个矩阵

c语言 订阅