2016-02-04 60 views
-7
#include <stdio.h> 
#include <math.h> 
#include <stdlib.h> 

int main() 
{ 
    int i,j; 
    double xcord[201], ycord[201]; 
    double *a,*b; 
    float delx,dely; 

    double *phi = (double *)malloc(201 *201* sizeof(double)); 
    double *r = (double *)malloc(201 *201* sizeof(double)); 

    delx=0.005; 

    dely=0.005; 
    a=xcord; 
    b=xcord; 

    for(i=1;i<=201;i++)//grid generation 
    { 
     xcord[i]=-0.5+0.005*(i-1); 
     ycord[i]=-0.5+0.005*(i-1); 
    } 
    for(i=1;i<=201;i++) 
    { 
     for(j=1;j<=201;j++) 
     { 
      printf("%f %f\n",xcord[i],ycord[j]); 
     } 
    } 
    for(i=1;i<=201;i++)//phi value calculation 
    { 
     for(j=1;j<=201;j++) 
     { 
     /* Next 2 lines are highlighted */ 
      *(r + (i-1)*201+ (j-1))=1500*[{(*(a+(i-1))+0.25)*(*(a+(i-1))+0.25)}+{(*(b+(j-1)))*(*(b+(j-1)))}; 
      *(phi + (i-1)*201+ (j-1))=5*exp (*(r + (i-1)*201+ (j-1))); 
     } 
    } 
    for(i=1;i<=201;i++) 
    { 
     for(j=1;j<=201;j++) 
     { 
      printf("%f \n",*(phi + (i-1)*201+ (j-1))); 
     } 
    } 
    return 0; 
} 

此我写以产生计算网格事后在网格中的每个节点计算变量phi的值的代码。我试图把phi (=5exp[-1500{(x+0.25)*(x+0.25)+y*y}])的公式放在两行中。但每次我编译的时候我之前在该行34预期表达之前“[”令牌

+2

请正确格式化您的代码。提交前请检查'预览'区域。你也应该发布你的确切代码。在开始'***(r'我不确定这些星星是否意味着是代码的一部分或者不是...... –

+0

它不是我的代码的一部分,我试图突出问题的路线在堆栈溢出中,它们显示为** –

+0

查看该行,编译器错误只是您的第一个问题。请问这是[IOCCC](http://www.ioccc.org/)? – Lundin

回答

3

小括号括号[令牌得到一个错误“预期的表达。在C分组表达式当你不使用任何其他类型的括号,因为方括号[]和大括号{}必须在语言特殊含义只需使用括号()


然后几个一般提示的:对于任何指针或数组p和索引i,表达*(p + i)相当于p[i]的。后者通常更易于阅读和理解这意味着它也更易于维护。请注意,p可以是产生指针(或数组)的任何表达式,并且i可以是产生非负整数的任何表达式。

另外,如果你有一个静态大小的“数组”像例如phi在您的代码中,而是将其声明为数组。这也会使它更容易理解和维护。如果phi是一个所谓的“二维”数组,然后使它数组的数组:

double phi[201][201]; 

因为你其实并不free你分配内存,这一点尤为重要。在这种情况下,它运行良好,因为你退出了大多数系统上的程序,这意味着分配的内存将自动释放,但养成分配你所分配的内存的习惯将会为你省去麻烦。使用数组你不需要释放任何东西。

最后,在C中,您不应该使用malloc(或任何返回void *的函数)。见this SO question and answer for more information

相关问题