-3

I have to make a program that has to ask the user for 2 array's of 3x3 in C and then print the sum_matrix that contains the sum in each place.

I also have to divide it in 3 functions, I've done it but it seems full of errors and I can't really get it to work.

PS: righe means lines, colonne columns, inserisci insert, somma sum , stampa print.

#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];
}
  • 您将在本地范围内for以 a 和 结束循环,这些,您将获得正在使用的未声明变量:和。;{}ij
  • 您需要在语句中定义i和的数据类型。jfor
  • printf()正如 Paul Griffiths 所说,函数末尾缺少括号。

我认为您打算这样做:

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);

当调用一个没有返回值的函数时,不要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和。j它会给你一个编译错误。试着理解它的意思。

如果您正在使用C99,您可以像这样在循环中声明它们:

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

否则在函数的顶部声明它们。

于 2013-10-18T15:59:02.243 回答