fortran和c++对比

更新时间:2024-06-06 17:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Fortran90与C++的比较

一、程序结构、语句和注释

程序结构 fortran Program main(自定义程序名) 主程序代码 Stop(程序结束,可省) End(主程序代码结束) C++ 预处理命令以“#”开头,包括宏定义命令、文件包含命令和条件编译命令 函数,有一个主函数和若干个函数组成,主函数为main函数。函数体由一对花括号“{}”括起来 语句 每行一般为一句语句,语句末不加“;” 书写格式自由灵活,语句末加“;” 1. 每行可写132个字符 1. 每一行可写一条或多条语句,一条语2. 代码开头或结尾的“&”,连接下一句可分写在一行或多行内 行或下一行代码 感叹号“!”后的文本为注释 单行注释:“//”后的文本为注释 多行注释:以“/*”开头,以“*/”结束,之间的内容都是注释 注释 二、字符集和变量命名规则

字符集 fortran 1. A~Z及a~z 2. 0~9 3. 其他字符 :=+-*/(),.’!”%&;<>?$_(空格) 1. 英文字母、下划线或数字,前缀英文字母 2. 不区分大小写 3. 长度1~31 4. 不要和执行命令同名,不能和主程序或已声明过的变量同名 注释:Fortran默认I、J、K、L、M、N开头的变量为整型,其他为实型,故在PROGRAM命令下一行加入IMPLICIT NONE命令,关闭默认类型功能。

C++ 变量命名规则 1. 英文字母、下划线或数字,前缀英文字母或下划线 2. 严格区分大小写 3. 长度1~31 4. 不要同名

三、数据结构

数据类型 fortran 1. 整型 INTEGER a 1) 长整型,4字节(默认) 2) 短整型,2字节 3) 更短整型,1字节 声明方法: 1) INTEGER(kind=4) a 2) INTEGER*4 a 3) INTEGER(4) a 2. 实型REAL a 1) 单精度,4字节(默认) 2) 双精度,8精度 声明类似整型 3. 复数 COMPLEX a 4. 字符和字符串 CHARACTER a 声明方法: Charater(len=10) a Character(10) a Character*10 a 注释:在””之间输入”需要”” 5. 逻辑变量 LOGICAL a a=.true. a=.false. C++ 1. 整型 int a 1) signed/unsigned long int ,4字节 2) signed/unsigned int ,4字节 3) signed/unsigned short int,2字节 4) signed/unsigned char,1字节 默认:signed 2. 实型 1) float 2) double 3) long double 3. 字符型 char a 1) char 2) unsigned char 表示方法: 1) 引号之内的图形符号 2) 引号以内以\\开头的ASCII码或 特定符号 注释:\\a\\a\\t\\n\\v\\r\\”\\’\\?\\\\\\ddd\\xhh \\ddd:1~3位8进制数对应ASCII码 \\xhh:1~2位16进制数对应ASCII码 注释: 转换次序从低到高:字符-短整型-整型-单精度-双精度(低自动向高转,不会出错) static_cast<要转换的新数据类型>被转换的表达式 1. 数据结构体struct struct name { int name1; char name2; ??; } sruct name a; 赋初值 (1) a={23,’w’} (2) a.name1=23; a.name2=’w’; 复合类型 1. 自定义数据类型 type ::person character(len=20)::name integer::age integer::length end type person type(person)::a a%name=”xiaoming” 四、常量和变量

常量 fortran 1. 数值常量同c++ 2. 字符常量同c++ 3. 符号常量 声明方法: 1) real pi parameter(pi=3.14159) 2) real parameter::pi=3.14159 C++ 1. 数值常量(整型常量、实型常量) 2. 字符常量(字符常量、字符串常量) 转义字符: \\a\\b\\f\\n\\r\\t\\v\\\\\\?\\’\\”\\0\\ddd\\xhh 字符常量:单引号,单个字符,占一个字节 字符串常量:双引号,单个多个字符,占一个以上字节(结束符\\0) 3. 符号常量 声明方法:#define pi 3.14159 或cons tintpi=3.14159

变量

五、输入和输出语句

输入输出 fortran 输出:write(unit,fmt) A,B,C print fmt, A,B,C 输入:read(unit,fmt) A,B,C 1. 默认输出位置和不限定输入输出格式write(*,*) A,B,C 2. 格式化输入输出 1) 指定代码行对应格式输入输出 write (*,100) A 100 formt(I4) 2) 输入输出格式直接写在命令中 write (*,”(I5)”) A 3) 利用字符串存储输入输出格式 character(len=10) fmtstring fmtstring=”(I2)” write (*,fmtstring) 3 C++ 运用输入输出流头文件 #include 屏幕标准输出:cout<<”abc”<<34<>num 输入输出格式 主要输入输出格式: 2. Aw 以w个字符宽输出字符串 1) 右对齐,不足左端补空格 2) 从左向右读入,超出部分截去 3. Ew.d[Ee] 以w个字符宽输出指数类型浮点数,小数部分占d个字符宽,指数部分占e个字符宽 1) 超过w字符宽,输出w个* 2) 小数或指数部分不足宽度补0 3) 小数部分超出四舍五入截去 4. Fw.d 以w个字符宽输出浮点数,小数部分占d个字符宽 1) 超过w字符宽,输出w个 2) 小数部分不足补0,超出截去 5. Iw[.m] 以w个字符串输出整数,最少输出m个数字 1) 超过w字符宽,输出w个* 2) 右对齐,不足m位左端补0 6. nX 插入n个空格

六、表达式

算术表达式 1. **乘方 2. *乘、/除 3. + 加、-减 fortran C++ 1. *乘、/除、%取模 2. +加、-减 3. ++自加、--自减 注释:前置先计算再赋值 后置先赋值再计算 1. <、<=、>、>= 2. ==、!= 1. && 2. || 3. ! 注释:非0为真,0为假 1. ?: A?B:C 先计算A,如果A值为true(非0),返回B值作为整个条件表达式的值,如果A值为false(0),返回C值。 2. = 3. +=、-=、*=、/=、%= 4. &=、^=、|= 5. &&=、||= 注释:x*=y 即x=x*y,从右向左赋值 1. , 用于将几个表达式隔开,从左向右计算,优先级最低 1. 单目、双目、三目、赋值,逗号,优先级依次降低 2. 单目运算及赋值运算从左至右 3. 算术、位移、关系、位、逻辑运算依次降低

关系表达式 逻辑表达式 1. <、<=、>、>= 2. ==、/= 1. 2. 3. 4. 5. 无 .AND. .OR. .NOT. .EQV. .NEQV. 条件表达式 赋值表达式 1. = 逗号表达式 优先级 无

七、选择结构

选择结构 fortran C++ 1. IF语句 1. If语句 1) 单分支IF结构 1) 单支if语句 a) IF(逻辑表达式)?? if语句 if(s>100) write(*,*) “slow” ??; b) 块IF结构 2) 双支if-else语句 IF(逻辑表达式)THEN if(表达式) ?? ??; END IF else 2) 双支IF结构 ??; IF(逻辑表达式)THEN 3) 嵌套if语句 ?? 2. 多支switch语句 ELSE switch(表达式) ?? case 常量表达式1; END IF ??; 3) 多支IF结构 case 常量表达式n; a) ELSE IF语句 ??; default IF(条件1)THEN ?? ??; ELSE IF(条件2)THEN 注释: ?? (1) 与break语句结合跳出循环 ELSE (2) 两个或以上常量都对应一?? 个语句,则 END IF case 表达式1 b) 嵌套IF语句 case 表达式2 IF(条件1)THEN ??; IF(条件2)THEN IF(条件3)THEN ?? ELSE ?? END IF END IF END IF 2. SELECT CASE语句 select case(变量) case(数值1) ?? case(数值2) …… case default ?? end select 注释: case冒号前后两个数值代表范围内所有数值,用逗号放入一个或多个数值 数值只能是整型或字符型 case中数值必须为常量,不能使用变量

八、循环结构

循环结构 fortran 1. do语句 do counter=起始值,终止值,计数器增值 ?? ?? end do 2. do while语句 do while (逻辑表达式) ?? ?? end do C++ 1. while语句 while(逻辑表达式) { ??; } 2. for语句 for(表达式1;表达式2;表达式3) { ??; } 3. do while语句 do { ??; } while(表达式); 1. goto语句 label; ?? ?? if(逻辑表达式) goto label; 流程控制语句 1. GOTO语句 GOTO 100 ?? 100 ?? 跳跃至指定行,不建议使用 2. PAUSE语句 当遇到该语句暂停执行,直到用户按下ENTER继续执行 3. CONTINUE语句 继续向下执行语句 4. STOP语句 结束程序执行 1. CYCLE语句 略去该语句之后的循环模块,继续下一次循环 2. EXIT语句 跳出当前的循环 3. 署名的循环 例如:loop: do i=1,4,1 与EXIT、CYCLE语句结合 选择或循环控制语句 1. break语句 只能用在switch和循环语句中 用在循环中跳出当前的循环,同fortran的exit 2. Continue语句 略去该语句之后的循环模块,继续下一次循环,同fortran的cycle 九、数组

一维数组 fortran 声明方法 1. integer a(10) 2. integer,dimension(10)::a 注释方法:下标从1开始 声明方法 1. integer a(10,10) 2. integer,dimension(10,10)::a 声明方法 1. integer a(10,10,10) 2. integer,dimension(10,10,10)::a 注释: 另类声明:integer a(m:n) m~n为坐标范围 C++ 声明方法: int a[5] 包含a[0],a[1]??a[4] 注释:下标从0开始 声明方法: int a[3][4] 相当于int a[0][4],a[1][4],a[2][4] 声明方法: int a[2][3][4] 注释:三维以上很少使用 二维数组 多维数组 赋初值 1. 使用DATA设置初值 1. 在定义数组时给全部全速赋值 int a[5]={1,2,3,4,5}; (1) integer a(5) data a /1,2,3,4,5/ 2. 部分数组赋值 int a[5]={1,2,3} 或 data a/5*3/ (2) 利用隐式循环(Fortran独有!) 只能赋值前x个元素,不可以跳integer a(5) 过某一元素给下一元素赋值 integer i 3. 初始化数组时初值全给出可不data(a(i),i=2,4)/2,3,4/ 指定数组长度 int a[]={1,2,3,4,5} 注释:可以局部赋值 2. 省略DATA的声明 (1) integer ::a(5)=(/1,2,3,4,5/) (2) 利用隐式循环 integer ::i integer ::a(i)=(/(i,i=1,5)/) 注释: 只可全部赋值,不可局部赋值 (Fortran独有!) 1. a=5 对数组每个元素赋值5 2. a=b 将a同位置元素值设置成和b一样 3. a=b+c 将b和c同位置值相加赋给a,同理-、*、/ 4. a=sin(b) 1. a(m:n,e)=?? 对m~n之间步长为e部分数组元素赋值等号左边须是大小维数和右边相等数组 2. 隐式循环赋值 使用多个隐式循环,较低维循环可当作内无 整个数组操作 部分数组操作 无 层循环 数组函数 1. where 例如: where (a<3) b=a else where b=-a end where 相当于数组中的if函数,可嵌套,可取名 1. 二维数组按列存放 2. 多维数组,自高维向低纬存放 integer,allocatable :: a(:) allocate(a(students)) !分配内存空间 deallocate(a)释放a 无 存数顺序 可变大小数组 与Fortran相反! 1. 二维数组按行存放 2. 自低维向高维存放 无

十、函数

fortran subroutine sub1() ?? (return) end subroutine sub1 注释: 1. 可放在主程序前后 2. 在主程序中使用无需声明,用CALL调用,无返回值 function add(a,b) real add 或real function add(a,b) ?? return end 注释: 1. 在主程序中调用需要声明,如: real external::add 2. 不需要CALL即可调用,有返回值 传递参数使用“传址调用”,实参和形参共用一块内存 C++ 1. 函数定义 <函数类型><函数名>(<形参表>) { ?? } (1) 有参且有返回值 (2) 有参但无返回值 (3) 无参但有返回值 (4) 无参且无返回值 2. 函数调用 定义在前可在主调函数中直接调用 函数定义在后,可在主调函数中声明 <函数类型><函数名>(<形参表>) 注释:形参名可以省略 传递参数使用“传值调用” 子程序 SUBROUTINE 自定义函数 FUNCTION 参数传递方法 变量的定义 1. 一般用法 real a,b,c,d,e,f,g common a,b,c,d,e,f,g 对用全局变量中从第1到n个变量,用在不同程序中,按址对应 2. 独立的COMMON空间 common/group1/ 全局变量3. BLOCK DATA赋初值 COMMON block data implicit none integer a,b common a,b data a,b/1,2/ ?? ?? end block data 函数中的变量 1. 一般参数类型 注意传递参数类型要统一 2. 数组参数 传递数组参数实为传递数组元素当中某一位置的内存地址 在函数中,如果数组时接受参数,可以用常量或变量赋值大小 3. 用SAVE可延长函数中出输入参数以外的变量的生存周期 4. 将函数名称作为参数传递 real,intrinsic ::sin 5. 参数属性:intent(in/out/inout) 1. 函数接口INTERFACE 以下情况必须使用 (5) 函数返回值为数组 (6) 指定参数位置传递参数 (7) 调用函数参数数目不固定 (8) 输入指针参数 (9) 函数返回值为指针 program main implicit none 3. interface function random10(10) implicit none real::random10(10) end interface 2. 不确定个数参数传递 integer,optional::b 3. 改变参数传递位置 1. 递归 recursive integer function fact(n) result(ans) 2. 内部函数 contains subroutine add ?? ?? end subroutine module global 可放变量声明 可定义自定义类型 可在contains之后定义函数 end module program main use global 模块中的变量、函数、函数无需再定义 特殊参数的使用方法 特殊的函数类型 MODULE函数 在主程序中声明放在program和implicit之间

本文来源:https://www.bwwdw.com/article/8jf6.html

Top