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");

}

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-06-24
#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);
}
第2个回答  2022-06-27
#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);
}
第3个回答  2021-11-11
回家变卖典质,父亲还了亏空;又借钱办了丧事。这些日子,家中光景很是惨淡,一半为了丧事,一半为了父亲赋闲。丧事完毕,父亲要到南京谋事,我也要回到北京念书,我们便同行。
相似回答