编程求两个矩阵的乘积,主函数如下,请编写子函数multi(),output(),用指针处理。
编程求两个矩阵的乘积,主函数如下,请编写子函数multi(),output(),用指针处理。main(){inta[3][4],b[4][3],c[3][3];用循环对数...
编程求两个矩阵的乘积,主函数如下,请编写子函数multi(),output(),用指针处理。
main()
{ int a[3][4],b[4][3],c[3][3];
用循环对数组a赋值(用指针处理)
用循环对数组b赋值(用指针处理)
multi(a,b,c);
output(c);
} 展开
main()
{ int a[3][4],b[4][3],c[3][3];
用循环对数组a赋值(用指针处理)
用循环对数组b赋值(用指针处理)
multi(a,b,c);
output(c);
} 展开
1个回答
展开全部
呵呵,完全是依题意用指针操作喔,若哪里不懂就追问哈~
#include <stdio.h>
void multi(int a[][4],int b[][3],int c[][3]) { //注意数组只能省略第一维的大小
int *pa,*pb,*pc,sum,i,j,k;
for(pc = c[0], i = 0; i < 3; i++) { //c[0]为数组c的首地址
for(j = 0; j < 3; j++) {
pa = a[i]; //让pa指向数组a第i+1行开头
pb = &b[0][j]; //让pb指向数组b第j+1列开头
sum = 0;
for(k = 0; k < 4; k++) {
sum += (*pa) * (*pb);
pa++; //让pa指向该行第二个元素
pb += 3; //让pb指向该列第二个元素
} //for
*pc++ = sum;
} //for
} //for
} //multi
void output(int c[][3]) {
int i,*p;
printf("\n数组c:\n");
for(p = c[0], i = 0; i < 9; i++) {
((i + 1) % 3) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
} //output
int main() {
int a[3][4],b[4][3],c[3][3],*p,i;
//对数组a赋值.注意a[0]是个一维指针,指向数组a的首地址,且该数组总长度为3*4即12
for(p = a[0], i = 0; i < 12; i++) {
scanf("%d",p++);
} //for
for(p = b[0], i = 0; i < 12; i++) { //对数组b赋值,其总长度为4*3即12
scanf("%d",p++);
} //for
printf("\n数组a:\n");
for(p = a[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
printf("\n数组b:\n");
for(p = b[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
multi(a,b,c);
output(c);
return 0;
} //main
#include <stdio.h>
void multi(int a[][4],int b[][3],int c[][3]) { //注意数组只能省略第一维的大小
int *pa,*pb,*pc,sum,i,j,k;
for(pc = c[0], i = 0; i < 3; i++) { //c[0]为数组c的首地址
for(j = 0; j < 3; j++) {
pa = a[i]; //让pa指向数组a第i+1行开头
pb = &b[0][j]; //让pb指向数组b第j+1列开头
sum = 0;
for(k = 0; k < 4; k++) {
sum += (*pa) * (*pb);
pa++; //让pa指向该行第二个元素
pb += 3; //让pb指向该列第二个元素
} //for
*pc++ = sum;
} //for
} //for
} //multi
void output(int c[][3]) {
int i,*p;
printf("\n数组c:\n");
for(p = c[0], i = 0; i < 9; i++) {
((i + 1) % 3) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
} //output
int main() {
int a[3][4],b[4][3],c[3][3],*p,i;
//对数组a赋值.注意a[0]是个一维指针,指向数组a的首地址,且该数组总长度为3*4即12
for(p = a[0], i = 0; i < 12; i++) {
scanf("%d",p++);
} //for
for(p = b[0], i = 0; i < 12; i++) { //对数组b赋值,其总长度为4*3即12
scanf("%d",p++);
} //for
printf("\n数组a:\n");
for(p = a[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
printf("\n数组b:\n");
for(p = b[0], i = 0; i < 12; i++) {
((i + 1) % 4) ? printf("%d ",*p++) : printf("%d\n",*p++);
} //for
multi(a,b,c);
output(c);
return 0;
} //main
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询