-3

Cで3x3の2つの配列をユーザーに要求し、合計を含むsum_matrixを各場所に出力するプログラムを作成する必要があります。

また、それを 3 つの機能に分割する必要があります。実行しましたが、エラーでいっぱいのようで、実際に機能させることができません。

PS:行、列、挿入、合計、印刷righeを意味します。colonneinseriscisommastampa

#include <stdio.h>
#include <stdlib.h>

void leggi_matrice(int MAT[][], int nRighe, int nColonne);
void somma(int MAT1[][N], int MAT2[][], int nRighe, int nColonne);
void stampa_matrice(int MAT[][], int dim, int nRighe, int nColonne);

int main ()
{
    int mat_somma[][];
    int mat1[][];
    int mat2[][];
    int nRighe = 3;
    int nColonne =3;

    leggi_matrice( mat1[][], nRighe, nColonne);
    leggi_matrice(mat2[][], nRighe, nColonne);
    void somma(mat1[][], mat2[][], nRighe, nColonne);
    void stampa_matrice(mat_somma[][], nRighe, nColonne);

    printf("\n\n\n");
    system("PAUSE");
    return 0;
}


void leggi_matrice(int MAT[][], int nRighe, int nColonne)
{
     for (i=0 ; i<nRighe ; i ++);
     for (j=0 ; j<nColonne ; j ++);
     {
         printf("Inserisci elemento");
         scanf("%d", & MAT[i][j]);
     }
}


void somma(int MAT1[][], int MAT2[][], int nRighe, int nColonne);
{
     int mat_somma[][];
     for (i=0 ; i<nRighe ; i ++);
     for (j=0 ; j<nColonne ; j ++);
     {
         mat_somma[i][j] = MAT1[i][j] + MAT2[i][j];
     }
}


void stampa_matrice(int MAT[][], int dim, int nRighe, int nColonne)
{
     int mat_somma[][];
     for (i=0 ; i<nRighe ; i ++);
     for (j=0 ; j<nColonne ; j ++);
     {
         printf ("%3d",mat_somma[i][j];
     }
}
4

3 に答える 3

4
for (i = 0; i < nRighe; i++);    
for (j = 0; j < nColonne; j++);
{
    printf ("%3d", mat_somma[i][j];
}
  • ローカル スコープで and を使用してforループを終了すると、使用されている宣言されていない変数が取得されます。;{}ij
  • iと のデータ型をステートメントjで定義する必要があります。for
  • また、Paul Griffiths が述べたように、printf()関数の最後に括弧がありません。

私はあなたがこれをするつもりだったと思います:

for (int i = 0; i < nRighe; i++)
{
    for (int j = 0; j < nColonne; j++)
    {
        printf ("%3d", mat_somma[i][j]);
    }
}

または簡略版:

for (int i = 0; i < nRighe; i++)
    for (int j = 0; j < nColonne; j++)
        printf ("%3d", mat_somma[i][j]);
于 2013-10-18T16:01:14.953 に答える
3

C では、配列のサイズを宣言する必要があります。

悪い

int mat_somma[][];   
int mat1[][];
int mat2[][];

良い

int mat_somma[3][3];   
int mat1[3][3];
int mat2[3][3];

配列を受け取る関数を作成するときは、配列の最も内側の次元を指定する必要があります。あなたの場合、配列の両方の次元を指定することをお勧めします。

悪い

void leggi_matrice(int MAT[][], int nRighe, int nColonne)

良い

void leggi_matrice(int MAT[3][3], int nRighe, int nColonne)

配列を使用して関数を呼び出すときは、括弧を使用しないでください。

悪い

leggi_matrice( mat1[][], nRighe, nColonne);

良い

leggi_matrice( mat1, nRighe, nColonne);

戻り値なしで関数を呼び出すときは、その前にa を置かないでください。void

悪い

void somma(mat1, mat2, nRighe, nColonne);

良い

somma(mat1, mat2, nRighe, nColonne);

変数を使用する前に宣言します。

悪い

void leggi_matrice(int MAT[3][3], int nRighe, int nColonne)
{
    for (i=0 ; i<nRighe ; i ++)
    {

良い

void leggi_matrice(int MAT[3][3], int nRighe, int nColonne)
{
    int i;
    int j;
    for (i=0 ; i<nRighe ; i ++)
    {

このすべて (および他のいくつかの些細なエラー) の後、コードは次のようになります。

#include <stdio.h>
#include <stdlib.h>

void leggi_matrice(int MAT[3][3], int nRighe, int nColonne);
void somma(int MAT1[3][3], int MAT2[3][3], int nRighe, int nColonne);
void stampa_matrice(int MAT[3][3], int nRighe, int nColonne);

int main ()
{
    int mat_somma[3][3];
    int mat1[3][3];
    int mat2[3][3];
    int nRighe = 3;
    int nColonne =3;

    leggi_matrice( mat1, nRighe, nColonne);
    leggi_matrice(mat2, nRighe, nColonne);
    somma(mat1, mat2, nRighe, nColonne);
    stampa_matrice(mat_somma, nRighe, nColonne);

    printf("\n\n\n");
    system("PAUSE");
    return 0;
}


void leggi_matrice(int MAT[3][3], int nRighe, int nColonne)
{
    int i;
    int j;
    for (i=0 ; i<nRighe ; i ++)
    {
        for (j=0 ; j<nColonne ; j ++)
        {
            printf("Inserisci elemento");
            scanf("%d", & MAT[i][j]);
        }
   }
}


void somma(int MAT1[3][3], int MAT2[3][3], int nRighe, int nColonne)
{
    int i;
    int j;
     int mat_somma[3][3];
     for (i=0 ; i<nRighe ; i ++)
     {
        for (j=0 ; j<nColonne ; j ++)
        {
            mat_somma[i][j] = MAT1[i][j] + MAT2[i][j];
        }
     }
}


void stampa_matrice(int MAT[3][3], int nRighe, int nColonne)
{
     int mat_somma[3][3];
     int i;
     int j;
     for (i=0 ; i<nRighe ; i ++)
     {
        for (j=0 ; j<nColonne ; j ++)
        {
            printf ("%3d",mat_somma[i][j]);
        }
     }
}

NitPickers への注意: これは完全な C ではありません。しかし、ポインター、スタイル、構造などについて彼に講義するつもりはありません。これは目的地ではありません。

于 2013-10-18T16:06:20.747 に答える
2

ループの;後にどこでも追加しています。for

for (i=0 ; i<nRighe ; i ++);

間違っている。このように変更します。

for (i=0 ; i<nRighe ; i ++)

このエラーのため、値を読み込んで出力することができません。

iまた、使用する前にandを定義jしてください。コンパイルエラーが発生します。それが何を意味するのかを理解するようにしてください。

使用している場合は、C99次のようにループ内で宣言できます。

for (int i=0 ; i<nRighe ; i ++)

それ以外の場合は、関数の先頭で宣言してください。

于 2013-10-18T15:59:02.243 に答える