【问题标题】:Manipulation of two-dimensional arrays: add rows and columns二维数组的操作:添加行和列
【发布时间】:2018-04-15 04:53:04
【问题描述】:

问题是它没有向我显示结果添加行和列,它没有做出相应的总和。

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

屏幕上的错误是:

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

【问题讨论】:

    标签: c arrays multidimensional-array add


    【解决方案1】:

    您需要学习更多指针和如何将二维数组传递给函数。当您将 2D 数组传递给函数时,在该函数中,您需要使用 指向数组的指针而不是双指针来捕获。

    你的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);
    }
    

    【讨论】:

    • 这使用了 C90 结构,因此它具有最大的可移植性,但同时具有最小的灵活性。在 C99(强制)和 C11(可选)中,支持可变长度数组 (VLA)。这些函数的调用顺序略有不同,大小出现在数组之前,但是单个函数可以用于任何大小的 (int) 数组。
    • @achal 为什么:void sumc(int (*A)[N],int r,int c){ 只使用 (*A)[N] 而不使用 (*A)[M] [N]?
    • int (*A)[row][col] 是什么?它的指向数组的指针,不需要捕获2D 数组。
    • @achal 那么为什么你只使用 (*A)[N] ?我的意思是为什么只使用 col ?如果它是一个二维数组。为什么没有必要?
    • Bcz 从主函数传递 1D 或 2D 或 3D 数组您只是传递该数组的基地址,现在 sum() 函数如何知道我接收的是 1D 或 2D 或 3D 数组地址,bcz 这只是一个地址。所以必须指定/发送多少行或列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多