私は2つのルーチンを持っています。私はメインの配列xから始めます。 1つのルーチンは、配列x内の対応する要素ごとに三角の数を生成し、新しい配列を出力するルーチンです。もう1つのルーチンは、それが今の階乗的な数を除いて同じことをします。1D配列が2つの関数に渡されると、1つの関数だけが正しい結果を出力します。どうして?
私は各ルーチンに対してmain関数で2回の呼び出しを行いました。しかし、最初に呼び出されたものだけが正しい結果を生成します。だから私は自分のコードが両方のルーチンに正しいことを知っている。しかし、私は何が間違っているのか分からない。ここで
#include <stdio.h>
#define maxRow 3
#define maxCol 4
void factorial(int matrix[maxRow][maxCol]) {
\t int row, column, i, product;
\t for (row = 0;row < maxRow;++row) {
\t \t for (column = 0;column < maxCol;++column) {
\t \t \t product = 1;
\t \t \t for (i = 1; i <= matrix[row][column];++i) {
\t \t \t \t product = product*i;
\t \t \t }//innermost loop ends
\t \t \t matrix[row][column] = product;
\t \t }//inner loop ends
\t }//big for ends
\t printf("Factorial number matrix:\n");
\t for (row = 0;row < maxRow;++row) {
\t \t for (column = 0;column < maxCol;++column) {
\t \t \t printf("%i\t\t", matrix[row][column]);
\t \t }//inner loop ends
\t \t printf("\n");
\t }//big for ends
}
int main() {
\t void triangular(int matrix[maxRow][maxCol]);
\t int x[maxRow][maxCol] = {
\t \t { 1,2,3,4 },
\t \t { 5,6,7,8 },
\t \t { 9,10,11,12 }
\t };//array ends
\t
\t factorial(x);
\t triangular(x);
}
void triangular(int matrix[maxRow][maxCol]) {
\t int row, column, i, sum;
\t for (row = 0;row < maxRow;++row) {
\t \t for (column = 0;column < maxCol;++column) {
\t \t \t sum = 0;
\t \t \t for (i = 1; i <= matrix[row][column];++i) {
\t \t \t \t sum += i;
\t \t \t }//innermost loop ends
\t \t \t matrix[row][column] = sum;
\t \t }//inner loop ends
\t }//big for ends
\t printf("Triangular number matrix:\n");
\t for (row = 0;row < maxRow;++row) {
\t \t for (column = 0;column < maxCol;++column) {
\t \t \t printf("%i\t", matrix[row][column]);
\t \t }//inner loop ends
\t \t printf("\n");
\t }//big for ends
\t printf("\n");
}
'main'の前に' void triangle(int matrix [maxRow] [maxCol]);を置く方がよいでしょう。コンパイラは実際の定義との不一致があるかどうかを警告します –