c语言的矩阵乘法问题 初学者求助

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言的矩阵乘法问题 初学者求助相关的知识,希望对你有一定的参考价值。

完成程序,设计实现函数void f(int a[],int b[],int c[],int m,int n,int t),其功能为计算给定的两个整型数组(一个为m行n列,一个为n行t列)的乘积矩阵。

函数接口定义:
void f(int a[],int b[],int c[],int m,int n,int t);/*功能为计算给定的矩阵a(m行n列)和矩阵b(n行t列)的乘积矩阵c*/
裁判测试程序样例:
#include <stdio.h>

/* 请在这里填写答案 */

int main()
int i,j,a[3][4],b[4][3],c[3][3];
for(i=0; i<3; i++)
for(j=0; j<4; j++)
scanf("%d",&a[i][j]);
for(i=0; i<4; i++)
for(j=0; j<3; j++)
scanf("%d",&b[i][j]);
f(a[0],b[0],c[0],3,4,3);
for(i=0; i<3; i++)
for(j=0; j<3; j++)
printf("%5d",c[i][j]);
printf("\n");


输入格式:
首先输入整型数组a[3][4]的各元素的值,再输入整型数组b[4][3]的各元素的值,数据中间以空格为间隔。

输出格式:
对于输入的a数组和b数组,输出a和b的乘积矩阵c[3][3],其中每个元素显示格式为:占5列,右对齐。

输入样例:
1 2 3 4
2 3 4 5
3 4 5 6
1 2 3
2 3 4
3 4 5
4 5 6
结尾无空行
输出样例:
30 40 50
40 54 68
50 68 86
结尾无空行

//矩阵乘法属于线性代数;矩阵乘法的原理不难,只要原理搞请,代码很好写的

#include<stdio.h>

/*功能为计算给定的矩阵a(m行n列)和矩阵b(n行t列)的乘积矩阵c*/

void f(int a[3][4], int b[4][3], int c[3][3], int m, int n, int t)

//矩阵乘法:前行乘后列 

//矩阵a的行(m)作为矩阵c的行

//矩阵b的列(t)作为矩阵c的列 

for (int i = 0; i < m; i++) //新矩阵m行 

for (int j = 0; j < t; j++) //新矩阵t列 

int sum=0;

for (int k = 0; k < n; k++)  

sum += (a[i][k] * b[k][j]);//行列对应相乘,然后累加

c[i][j]=sum;

/* 请在这里填写答案 */

/*

1 2 3 4

2 3 4 5

3 4 5 6

1 2 3

2 3 4

3 4 5

4 5 6

*/

int main()

int i, j, a[3][4], b[4][3], c[3][3];

for (i = 0; i < 3; i++)

for (j = 0; j < 4; j++)

scanf("%d", &a[i][j]);

for (i = 0; i < 4; i++)

for (j = 0; j < 3; j++)

scanf("%d", &b[i][j]);


f(a, b, c, 3, 4, 3);

for (i = 0; i < 3; i++)

for (j = 0; j < 3; j++)

printf("%5d", c[i][j]);

printf("\\n");

参考技术A #include<stdio.h>
//使用递归算法求阶乘
int calc(int num)
if(num==1)
return 1;
else
return num*calc(num-1);


void main()
int i,sum=0;
//①用for循环,计算n=10时sum的值?
for(i=1;i<=10;i++)
sum+=calc(i);

printf("n=10时sum的值是:%d!\n",sum);
//②用while循环,计算sum在1000内的最大值?
sum=0;
i=0;
while(sum<=1000)
i++;
sum+=calc(i);

printf("sum在1000内的最大值是:%d!\n",i-1);
参考技术B #include<stdio.h>
//使用递归算法求阶乘
int calc(int num)
if(num==1)
return 1;
else
return num*calc(num-1);


void main()
int i,sum=0;
//①用for循环,计算n=10时sum的值?
for(i=1;i<=10;i++)
sum+=calc(i);

printf("n=10时sum的值是:%d!\n",sum);
//②用while循环,计算sum在1000内的最大值?
sum=0;
i=0;
while(sum<=1000)
i++;
sum+=calc(i);

printf("sum在1000内的最大值是:%d!\n",i-1);
参考技术C 回家变卖典质,父亲还了亏空;又借钱办了丧事。这些日子,家中光景很是惨淡,一半为了丧事,一半为了父亲赋闲。丧事完毕,父亲要到南京谋事,我也要回到北京念书,我们便同行。

求助 :c语言程序设计 输入一个2-9之间任意一个数,然后利用循环嵌套,输出一个相应的乘法表

这个可以这样实现先读入一个数n,然后设计一个二重循环,外层循环从1一直到n,也就是一共输出有n行。
然后内循环是从1开始,一直到本行的行数为止进行循环,每次执行内循环体就输出一个乘法等式,当内循环结束的时候进行换行。
整个程序就实现了题目所规定的要求。
main()
int i,j,n;
scanf (“%d”,&n);
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
printf (“%d*%d=%-4d”,i,j,i*j);
printf(“\n”);

参考技术A 你要写一个九九乘法表?
#include<stdio.h>
void main()
int num,i,j;
printf("请输入一个2-9之间的数:");
scanf("%d",&num);
while (num>9||num<2)
printf("必须输入一个2-9之间的数!\n\n");
scanf("%d",&num);

for (i = 1; i <= num; i++)
for (j = 1; j <= i; j++)
printf("%d×%d=%d\t",i,j,(i*j));

printf("\n");


本回答被提问者采纳

以上是关于c语言的矩阵乘法问题 初学者求助的主要内容,如果未能解决你的问题,请参考以下文章

C语言之两矩阵乘法的实现

动态规划 - 矩阵链乘法

DSP矩阵运算-放缩,乘法和转置矩阵

需要帮助使用 MPI 调试并行矩阵乘法

矩阵的乘法运算怎么算?

算法矩阵列乘法 | 动态规划