我有两个例程。我从main中的数组x开始。一个例程是为阵列x中的每个对应元素生成三角形数并输出新数组。另一个例程做同样的事情,除了它现在是阶乘数。
我在main函数中对每个例程进行了两次调用。但只有首先调用的一个会产生正确的结果。所以我知道我的代码对于这两个例程都是正确的。但我不知道出了什么问题。
#include <stdio.h>
#define maxRow 3
#define maxCol 4
void factorial(int matrix[maxRow][maxCol]) {
int row, column, i, product;
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
product = 1;
for (i = 1; i <= matrix[row][column];++i) {
product = product*i;
}//innermost loop ends
matrix[row][column] = product;
}//inner loop ends
}//big for ends
printf("Factorial number matrix:\n");
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
printf("%i\t\t", matrix[row][column]);
}//inner loop ends
printf("\n");
}//big for ends
}
int main() {
void triangular(int matrix[maxRow][maxCol]);
int x[maxRow][maxCol] = {
{ 1,2,3,4 },
{ 5,6,7,8 },
{ 9,10,11,12 }
};//array ends
factorial(x);
triangular(x);
}
void triangular(int matrix[maxRow][maxCol]) {
int row, column, i, sum;
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
sum = 0;
for (i = 1; i <= matrix[row][column];++i) {
sum += i;
}//innermost loop ends
matrix[row][column] = sum;
}//inner loop ends
}//big for ends
printf("Triangular number matrix:\n");
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
printf("%i\t", matrix[row][column]);
}//inner loop ends
printf("\n");
}//big for ends
printf("\n");
}
答案 0 :(得分:2)
第一次调用时,您正在对x
进行更改。现在第二次将其传递给triangular()
时,它不是原始x
- 它是已更改的数组x
(factorial()
函数的结果)。
复制阵列可以解决问题。 (制作临时副本 - 打印结果 - 然后回滚对x
所做的更改。)
void factorial(int matrix[maxRow][maxCol]) {
int copy[maxCol][maxCol];
int row, column, i, product;
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
product = 1;
copy[row][column]=matrix[row][column];
for (i = 1; i <= matrix[row][column];++i) {
product = product*i;
}//innermost loop ends
matrix[row][column] = product;
}//inner loop ends
}//big for ends
printf("Factorial number matrix:\n");
for (row = 0;row < maxRow;++row) {
for (column = 0;column < maxCol;++column) {
printf("%i\t\t", matrix[row][column]);
matrix[row][column]=copy[row][column];
}//inner loop ends
printf("\n");
}//big for ends
}
如果数字增加,则因子值不会保存在int
变量中。尝试使用long
来获得更好的范围并保持更大的阶乘值。
注意:正在传递指向数组的指针。如果我们对指针指向的数组进行更改 - 它将更改原始数组。