操纵二维数组:添加行和列

时间:2018-04-15 04:53:04

标签: c arrays multidimensional-array add

问题是它没有显示resultsadd行和列,它没有相应的总和。

另一个细节是我没有正确打印行总和的短语,因为我省略了: 打印列时会发生同样的情况。

屏幕上的错误是:

p1.c: In function ‘sum’:
p1.c:34:8: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    suma= suma + A[i][j];
p1.c:36:10: warning: too many arguments for format [-Wformat-extra-args]
   printf("La suma de la fila %i", i+1, " es: %i\n", suma);
p1.c: In function ‘sumc’:
p1.c:47:9: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    sumac= sumac + A[i][j];
p1.c:49:10: warning: too many arguments for format [-Wformat-extra-args]
   printf("La suma de la columa %i", j+1, " es: %i\n ", sumac);
#include <stdio.h>
#define M 2
#define N 3

void sum();
void sumc();
int main(void){

    int A[M][N];

    printf("Este programa lee una matriz y suma de manera independiente las filas y las columnas de esta\n");
    printf("Ingrese las entradas de la matriz\n");
    for(int i=0; i<M; i++)
    {
        for(int j=0; j<N; j++)
        {   
            scanf("%i", &A[i][j]);
        }
        printf("\n");
    }
    sum(&A[M][N]);
    sumc(&A[M][N]);
}

void sum(int *A[M][N]){
    for(int i=0; i<M; i++)
    {
        int suma=0;
        for(int j=0; j<N; j++)
        {   
            suma= suma + A[i][j];
        }
        printf("La suma de la fila %i", i+1, " es: %i\n", suma);
    }
    return;
}

void sumc(int *A[M][N]){
    for(int j=0; j<N; j++)
    {
        int sumac=0;
        for(int i=0; i<M; i++)
        {   
            sumac= sumac + A[i][j];
        }
        printf("La suma de la columa %i", j+1, " es: %i\n ", sumac);
    }
    return;
}

1 个答案:

答案 0 :(得分:2)

你需要学习更多指针&amp; 如何将2D数组传递给函数。当您将2D数组传递给函数&amp;在该函数中,您需要使用指向数组的指针而不是使用双指针。

您的printf声明也是错误的。

printf("La suma de la fila %i", i+1, " es: %i\n", suma);

应该是

printf("La suma de la fila %i es: %i\n",i+1, suma);

这是修改后的代码

#define M 2
#define N 3
void sum(int (*A)[N],int r,int c){ /* r is row & c is column */
        for(int i=0; i<r; i++) {
                int suma=0;
                for(int j=0; j<c; j++) {
                        suma= suma + A[i][j];
                }
                printf("La suma de la fila %i es: %i\n",i+1, suma);
        }
        return;
}

void sumc(int (*A)[N],int r,int c){
        for(int j=0; j<c; j++){
                int sumac=0;
                for(int i=0; i<r; i++) {
                        sumac= sumac + A[i][j];
                }
                printf("La suma de la columa %i  es: %i\n ",j+1, sumac);
        }
        return;
}
int main(void){

        int A[M][N];

        printf("Este programa lee una matriz y suma de manera independiente las filas y las columnas de esta\n");
        printf("Ingrese las entradas de la matriz\n");
        for(int i=0; i<M; i++) {
                for(int j=0; j<N; j++) {
                        scanf("%i", &A[i][j]);
                }
                printf("\n");
        }
        sum(A,M,N);/* passing 2D aray base address,no of row and no of column */
        printf("\n=====\n");
        sumc(A,M,N);
}