我对编写C不太熟悉,但我正在将一些代码从FORTRAN转换为C.我理解两者的含义,但我不确定如何在C中编写它。这是我的代码的一小部分在Fortran:
program main
parameter (g=9.8,nx=102,ny=100,r13=1./3.,r23=2./3.)
dimension u0(0:nx+1,0:ny+1,3),ux(0:nx+1,0:ny+1,3)
dimension uy(0:nx+1,0:ny+1,3),uxx(0:nx+1,0:ny+1,3)
dimension uxy(0:nx+1,0:ny+1,3),uyy(0:nx+1,0:ny+1,3)
答案 0 :(得分:1)
parameter (g=9.8,nx=102,ny=100,r13=1./3.,r23=2./3.)
可以翻译为#define
语句。
#define g 9.8
#define nx 102
#define ny 100
#define r13 (1./3.)
#define r23 (2./3.)
和
dimension u0(0:nx+1,0:ny+1,3),ux(0:nx+1,0:ny+1,3)
可以翻译成:
double u0[nx+2][ny+2][3];
double u1[nx+2][ny+2][3];
你必须非常小心使用索引。在FORTRAN中,u0(0, 0, 3)
是有效的项目。在C中,您必须使用u0[0][0][2]
来访问相应的项目。
答案 1 :(得分:1)
这有点接近 - 假设C99编译器或支持可变长度数组的C2011编译器:
const double g = 9.8;
const int nx = 102;
const int ny = 100;
const double r13 = 1.0/3.0;
const double r23 = 2.0/3.0;
int main( void )
{
int u0[nx+2][ny+2][3];
int ux[nx+2][ny+2][3];
int uy[nx+2][ny+2][3];
int uxx[nx+2][ny+2][3];
int uxy[nx+2][ny+2][3];
int uyy[nx+2][ny+2][3];
...
}
请注意,C中的数组不允许任意索引;他们始终从0开始,因此N
- 元素数组始终从0到N
- 1索引。因此,如果要将数组索引为0到103,则必须将数组大小声明为104.
如果您使用的驱动程序不支持VLA,则必须使用编译时常量表达式指定数组维。因此,nx
和ny
必须是预处理器宏而不是const
- 限定变量,如下所示:
#define nx 102
#define ny 100
在文件范围内声明其他常量使其对其他翻译单元可见,这种排序类型与PARAMETER
语句具有相同的功能。