gpt4 book ai didi

c - 一维数组传递给两个函数,只有一个函数输出正确的结果。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:58 24 4
gpt4 key购买 nike

我有两个例程。我从 main 中的数组 x 开始。一个例程是为数组 x 中的每个对应元素生成三角数并输出新数组。另一个例程做同样的事情,只是它现在是阶乘数。

我在主函数中对每个例程进行了两次调用。但只有第一个被调用的才会产生正确的结果。所以我知道我的代码对于这两个例程都是正确的。但我不知道哪里出了问题。

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

这是控制台输出: enter image description here

最佳答案

第一次调用时,您正在对 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 以获得更好的范围并保持更大的阶乘值。

注意:正在传递指向数组的指针。如果我们更改指针指向的数组 - 它会更改原始数组。

关于c - 一维数组传递给两个函数,只有一个函数输出正确的结果。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47381579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com