两个数组逆位相乘c语言
时间: 2023-11-24 14:51:33 浏览: 90
以下是两个数组逆位相乘的C语言代码示例:
```c
#include <stdio.h>
int main() {
int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 定义二维数组a
int b[3][2] = {{7, 8}, {9, 10}, {11, 12}}; // 定义二维数组b
int c[2][2] = {0}; // 定义结果数组c并初始化为0
// 逆位相乘
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 3; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
// 输出结果数组c
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
printf("%d ", c[i][j]);
}
printf("\n");
}
return 0;
}
```
运行结果为:
```
58 64
139 154
```
相关问题
C语言两个二维数组相乘
以下是C语言中两个二维数组相乘的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TwoDArray {
int rows;
int columns;
int **elements;
} TwoDArray, *TwoDArrayPtr;
// 初始化二维数组
void initTwoDArray(TwoDArrayPtr array, int rows, int columns) {
array->rows = rows;
array->columns = columns;
array->elements = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
array->elements[i] = (int *)malloc(columns * sizeof(int));
}
}
// 释放二维数组
void freeTwoDArray(TwoDArrayPtr array) {
for (int i = 0; i < array->rows; i++) {
free(array->elements[i]);
}
free(array->elements);
}
// 随机赋值
void randomAssign(TwoDArrayPtr array) {
for (int i = 0; i < array->rows; i++) {
for (int j = 0; j < array->columns; j++) {
array->elements[i][j] = rand() % 10;
}
}
}
// 打印二维数组
void printTwoDArray(TwoDArrayPtr array) {
for (int i = 0; i < array->rows; i++) {
for (int j = 0; j < array->columns; j++) {
printf("%d ", array->elements[i][j]);
}
printf("\n");
}
}
// 二维数组相乘
TwoDArrayPtr multiplyTwoDArray(TwoDArrayPtr array1, TwoDArrayPtr array2) {
if (array1->columns != array2->rows) {
printf("Error: The number of columns in the first array must be equal to the number of rows in the second array.\n");
return NULL;
}
TwoDArrayPtr result = (TwoDArrayPtr)malloc(sizeof(TwoDArray));
initTwoDArray(result, array1->rows, array2->columns);
for (int i = 0; i < array1->rows; i++) {
for (int j = 0; j < array2->columns; j++) {
int sum = 0;
for (int k = 0; k < array1->columns; k++) {
sum += array1->elements[i][k] * array2->elements[k][j];
}
result->elements[i][j] = sum;
}
}
return result;
}
// 测试代码
void test() {
TwoDArray array1, array2, *result;
initTwoDArray(&array1, 2, 3);
initTwoDArray(&array2, 3, 2);
randomAssign(&array1);
randomAssign(&array2);
printf("Array1:\n");
printTwoDArray(&array1);
printf("Array2:\n");
printTwoDArray(&array2);
result = multiplyTwoDArray(&array1, &array2);
if (result != NULL) {
printf("Result:\n");
printTwoDArray(result);
freeTwoDArray(result);
}
freeTwoDArray(&array1);
freeTwoDArray(&array2);
}
// 主函数
int main() {
test();
return 0;
}
```
两个n阶矩阵相乘c语言
以下是两个n阶矩阵相乘的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入矩阵的阶数n:");
scanf("%d", &n);
int **a, **b, **c; // 定义三个二维数组,存储矩阵
a = (int **)malloc(n * sizeof(int *));
b = (int **)malloc(n * sizeof(int *));
c = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++) {
a[i] = (int *)malloc(n * sizeof(int));
b[i] = (int *)malloc(n * sizeof(int));
c[i] = (int *)malloc(n * sizeof(int));
}
printf("请输入第一个矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("请输入第二个矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &b[i][j]);
}
}
printf("结果矩阵为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
printf("%d ", c[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < n; i++) {
free(a[i]);
free(b[i]);
free(c[i]);
}
free(a);
free(b);
free(c);
return 0;
}
```
代码解释:
1. 首先输入矩阵的阶数n。
2. 定义三个二维数组a、b、c,分别存储两个输入的矩阵和相乘的结果矩阵。
3. 通过循环输入两个矩阵的各个元素。
4. 通过三重循环计算两个矩阵相乘的结果,并输出结果矩阵。
5. 最后释放动态分配的内存。
注意事项:
1. 需要动态分配二维数组的内存,否则会出现错误。
2. 两个矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数,否则无法相乘。
3. 在计算结果矩阵的过程中,需要先将结果矩阵的元素全部初始化为0,否则会出现错误。