Fortran与C++的比较

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Fortran 与 C++的比较
1.引言
本文从计算机语言的一般要素的角度比较 Fortran 语言与 C++语言。先比较 Fortran77 与标准 C++;然后讨论 Fortran90 对 Fortran77 的改进与扩展,并比较 Fortran90 与标准 C++; 最后从一般意义上对 Fortran 和 C/C++语言进行比较,并阐述在解决实际问题时如何选择适 当的语言的个人观点,。这篇文章适合于已经掌握一种语言,却又需要或想掌握另一种语言 的读者阅读。
2.4 表达式9
Fortran77 算 术 1)+ “加”
C++ 1)2)3)4)同Fortran7712
4 某些系统所用的FORTRAN可以用REAL*8 来说明双精度型。 5 如果实部和虚部不是常数,而是表达式,则应该用CMPLX函数将实部和虚部组成复型数据再赋值给复型 变量:C=CMPLX(3.0*A,6.0+B) 6 Fortran77 的逻辑常量为两个:.TRUE.和.FALSE. 7 字符型常量亦称字符串,字型型变量定义:CHARACTER*5 A, B*6, C, D*4
4) PAUSE [n]暂时停止执行(不同机 器恢复执行的方法和命令是不同 的)
2.2 字符集与变量命名规则
字符 集2
变量 命名 规则
Fortran77
C++
1) 52 个英文字母(大小写);
1) 同 Fortran;
2) 10 个数字;
2) 同 Fortran;
3) 其 它 字 符 ( 共 13 个 ):( 空 3) 其 它 字 符 : ( 空
char) 1)C++有多种复合数据类型; 2)数组定义:a[N] (变量范围 a[0]—a[n-1], 同样的 Fortran77 数组定义变量范围为 a[1]—a[N]一定要注意!) 3 ) C++ 中 多 维 数 组 是 按 行 存 放 的 ; Fortran77 的数组是按列存放的。
2.3.2 Fortran77 与 C++数据结构对比小结 1) Fortran77 中有“I-N 规则”:在程序中的变量名中,凡以字母 I、J、K、L、M、N 六个字母开头的,即认为该变量为整型变量;以其它字母开头的变量为实型变量。 2) Fortran77 中复数是基本数据类型;C++中 Complex 是 Complex.h 头文件中定义的类。 3) Fortan77 中的字符串用单引号(’ ’)包含,C++中用双引号(“ ”)包含,单个字符 才用单引号(‘’)。在 Fortran 字符串中包含’要用’’,C++包含很多特殊字符(\a, \n, \t, \v, \b, \r, \\, \”, \’, \ddd, \xhh 等)
5).EQ. (equal to)
6).NE. (Not Equal to ) 1.AND. (逻辑与) 2).OR. (逻辑或) 3).NOT. (逻辑非) 4).EQV. (逻辑等,实际为同或) 5).NEQV. (逻辑不等,实际为异或)
5)% “取余”(只能对整数进行操作, 不允许对浮点数进行操作13。
子字符串:字符变量名(e1:e2) 字符串连接: ‘A’//’B’(‘AB’) 用于字符处理的内部函数: (1)LEN(a) ; (2)LGT(a,b); (3)LGE(a,b); (4)LLT(a,b); (5)LLE(a,b) ; (6)INDEX(a,b); (7)CHAR(I); (8)ICHAR(a) 8(1) 当维数说明符的维数下界省略时表示下界是 1, 如REAL IA(1:10)与REAL IA(10)等价; (2)数组说明语句必须出现在所有可执行 语句之前; (3)维说明符中的下标下界和上界必须是整型常量和整型常量表达式,且上界的值必须大于下界。 (4)多维数组的存储采取按列存放的。 9 Fortran77 和C++中表达式的优先顺序均为:括号,算术运算,关系运算,逻辑运算。
2.1 注释与语句
注释 语句
Fortran77 一行中第一列为“C”或“*”,该行则 为注释行
一般每一行即为一条语句,多行的语句 需要用续行标志(第 6 列非零非空字 符),最多允许 19 个继续行)。 特殊语句: 1) PARAMETER语句(参数语句),
用来定义符号常量1; 2) END 结束本程序单位的运行或作
格)’$()+-*/,(逗号)=.(小数点):(冒
格)’=+-*/,():;”?_!#%&[]|{}^<>
号)
1) 第一个字符必须为字母;
1) 第一个字符必须是字母或下划线;
2) 第一个字母后面可以跟 1-5 位数 2) 长度随系统而定,一般不要超过 31
字或字母(如果选定的变量名超过
个字符,变量名中只能使用数字、字
2/13
2.3.1 Fortran77 与 C++数据结构对照表
基本 数据 类型
复合 数据 类型
Fortran77 1) 整型(INTEGER) 2) 实型(REAL) 3) 双精度型4(DOUBLE PRECISION) 4) 复型5(COMPLEX) 5) 逻辑型(LOGICAL)6 6) 字符型7(CHARACTER)
达式 2[,表达式 3]

(DO s[,] v=e1,e2[,e3])
3)do{ … }while (condition) 4)do{…}until (condition)

s:循环终端语句标号

v:循环变量
break;语句表示跳出本循环体!
e1:循环变量初值
e2:循环变量终值
e3:循环变量增量(省略表示 e3=1)
的函数名或语句定义做变量名。
2.3 数据结构
Fortran77 提供的基本数据类型包括整型、实型、双精度型、复型、逻辑型和字符型;构 造类型包括数组、记录、文件等。Fortran77 不提供指针数据类型。
C++提供的基本数据类型包括整型(int)、字符型(单字符型 char、宽字符型 w_char)、实 型(单精度型 float、双精度型 double)、逻辑型(bool);非基本数据类型包括数组(type [])、 指针(type *)、空类型(void)、结构(struct)、联合(union)、枚举(enum)、类(class)等。
为一个程序单位的最后一行;
C++ 1)一对/* */ 之间的内容 2)C++中较 C 增加//之后的内容为注释的 形式 用分号来分隔语句,任意多行,只要不出 语法错误。 特殊语句: 1)BREAK 跳出循环体。
1 如:INTEGER P PARAMETER (P=5)
1/13
3) STOP [n] 停止运行程序,在子程序 中也是使整个程序停止运行而不是 使控制返回主程序。n 为一个不超 过 5 位的无符号整数或一个字符串 (可以帮助调试)
C++ 1) 整型(分 int, unsigned int, signed int,
short int, long int 等) 2) 实型(分 float, double, long double) 3) 逻辑型(bool) 4) 字 符 型 (char, unsigned char, signed
case constexpr2: statements2;
10 对Fortran77 和C++都有:同类型的算术量之间的运算的结果仍保持同类型;如果参加运算的两个算术量 为不同类型,则编译系统会自动将它们转换成同一类型然后进行运算。 11 这是Fortran77 特别的地方,多次乘方按“先右后左”原则处理, 所以 4**3**2 表示 4**(3**2);C++中表 示乘方需要用系统函数pow。 12 但在C++中,当一变量既出现在表达式的左边又出现在右边时可以缩写,如x=x*y (x*=y), x=x%y(x%=y); 另外C++中的增量和减量操作符(++,--)也是Fortran77 中没有的。 13 Fortran77 中求余用内部函数MOD来实现。 14 关系表达式的值不是一个数值,而是一个逻辑量(真或假)
1) if (condition1) { … } [else if (condition2) { }]
块1

[ELSE IF (逻辑表达式) THEN

块2 ]
[…] [else{ }] (可见 C++中将 Fortran77 中块 IF 语句和逻辑 IF 语句的功能

[…]
合二为一!)

[ELSE
1)> 2)>= 3)< 4)<= 5)== 6)!= 1)&& 2)|| 3)! 4)5)在 C++没有逻辑等与逻辑不等,非零 表示真,零表示逻辑假。 1)逗号表达式:表达式 1,表达式 2,。。。, 表达式 n; 2)有&,^,|等位操作符
2.5 选择结构
Fortran77
C++
1) 块 IF 语句。 IF (逻辑表达式) THEN
块 n]
2) 条件运算符:(条件表达式)?(条 件为真时的表达式):(条件为假时
END IF
的表达式),如:x=a<b?a:b
2)逻辑 IF 语句。 如 : IF (GRADE .LT. 60.0) PRINT*,GRADE (无 THEN,无 END IF, 简洁!)
3) 用 switch 语句实现分支选择。 Switch( expression) { case constexpr1: statements1;
2.Fortran77 与 C++的比较
以下将分别从以下方面比较 Fortran77 与标准 C++(很多地方对 C 也是类似的): z 注释与语句 z 字符集和变量命名规则 z 数据结构 z 表达式(算术表达式、关系表达式、逻辑表达式) z 选择结构 z 循环结构 z 输入/输出(包括标准终端和文件) z 函数和子程序 z 其它
6 个字符,只有前面 6 个字符有效); 母和下划线;
3) 变量名的字符之间可以插入空格, 3) 中间不能有空格;
这些空格是不起作用的;
4) 变量名区分大小写;
4) 变量名不分大小写
5) 不能使用C++关键字3,也不能与C++
5) 没有规定保留字,可以使用 Fortran
的函数名、类名和对象名相同。
4/13
… default: … }
2.6 循环结构
Fortran77 1) 用GOTO15语句实现循环;
C++ 1) goto (C++不推荐使用 GOTO 实现循
4) 用 DO 语句实现循环:
环)
DO 标号[,]16循环变量=表达式 1,表 2) for(exp1;exp2;exp3){…}

3/13
表达 式10
关系 表达 式14
逻辑 表达 式
2)- “减” 3)* “乘” 4)/ “除” 5)**11 “乘方” “ 1).GT. (Greater Than) 2) .GE. (GrLT. (Less Than)
4).LE. (Less than or Equal to)
1) 数 组 a) 定 义 8 : REAL
IA(1:10),W(1:3,1:2) a)引用:数组名(下标,…) 2) 在 输 入 输 出 语 句 中 使 用 隐 含 DO 循环,如:
WRITE (*,100) (A(I),I=1,N) 3) 给数组赋初值(使用 DATA 语
句):DATA 变量表/初值表/, 变量表/初值表/,…
5) WHILE 语句实现当型循环(但不 是 Fortran77 标准)
2 Fortran其它字符多$(多用于续行);C多”?_!#%&[]|{}^<>(其中%表示求余) 3 C++关键字: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while(以上为ANSI C的 32 个保留字)bool catch class delete friend inline new operator private protected public template this throw try virtual等,BC和VC对保留字的扩充不同。
相关文档
最新文档