C语言代码的问题

时间:2018-01-13 18:08:00

标签: c multidimensional-array

  

编写完整的程序。

     
      
  • 程序应该从键盘上读取两个整数: m n
  •   
  • 为动态2D m * n 双精度数组分配内存。
  •   
  • 根据公式A[i][j]=(i-5)/(j+1)初始化数组。
  •   

我的代码:

#include <stdio.h>
#include <math.h>

int main() {
    int m,n;
    scanf ("%d %d",&m &n);

    double**A=(double**) malloc (m*size of (double*));
    double*B=(double*) malloc (m*n * size of (double));

    for (int i=0;i<n;i++){
        A[i]=B+i*m;
    }

    for (int i=0;i<n;i++){
        for (int j=0;i<m;j++){
            A[i][j]=(i-5)/(j+1);
        }
    }
    free (A);
    free (B);

    return 0;
}

1 个答案:

答案 0 :(得分:4)

几乎没有错:

  • size未定义。
  • 因为你没有调用任何数学函数,所以不需要
  • #include <math.h>
  • 严格来说,您应#include <stdlib.h>声明malloc()和朋友。
  • ,中缺少scanf ("%d %d",&m &n);
  • 无需转换malloc()返回值。
  • 始终使用小写字母启动变量名称。
  • 你有一个}太多了。
  • 缩进和代码格式化非常糟糕,并且要求麻烦。**
  • ...

检查this section of the C-FAQ,看看您是否正确完成了分配。

想法:通过上面提到的C-FAQ,它将教会你很多,并将成为宝贵的时间投资。

**这是一个很好的代码缩进的示例&amp;格式化(没有修复):

int main()
{
    int m;
    int n;

    scanf("%d %d", &m, &n);

    double** A = malloc(m * size of (double*));
    double*  B = malloc(m * n * size of (double));

    for (int i = 0; i < n; i++)
    {
        B[i] = B + i * m;
    }

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; i < m; j++)
        {
            A[i][j] = (i - 5) / (j + 1);
        }
    }

    free(A);
    free(B);

    return 0;
}

好吧,我修复了多余的}