解释fortran 或语句中这个语句最后一部分的意思。

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
fortran语言第二章
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口fortran语句:pi=dacos(-1.D0)_百度知道
fortran语句:pi=dacos(-1.D0)
平时用C++的,麻烦fortran高手解释下:1.acos 前面加d什么意思
2.(-1.D0),.D0什么意思?谢谢
提问者采纳
1、DACOS,专用于求双精度的实型数据的反余弦值, 返回值也为双精度的实型数据2、.D0表示双精度
提问者评价
其他类似问题
按默认排序
其他1条回答
dacos()是fortran中返回值是双精度(有十五位有效数字)的反余弦函数,其参数也是双精度的数,-1.D0就是双精度数。-1.D0代表的是-1.00,这是fortran的一种表示格式,它可以输出十五位有效数字,D前面的-1.表示-1.0,D后面的0代表-1.0扩大的倍数,譬如1.3D.3就表示1.3*10^3(不过表示时得换成十五位有效数字0000替代之。)下面这个程序可供参考,希望能帮到你:program mainimplicit nonewrite(*,*)1.235d3write(*,*)0.5d0write(*,*)dacos(0.5d0)write(*,*)314.write(*,*)dcos(314.)stopend
fortran的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁fortran程序运行时出现如下问题,是什么意思啊,怎么解决?_百度知道
fortran程序运行时出现如下问题,是什么意思啊,怎么解决?
forrtl:severe(29):file not found , unit 1 , file D:\eof\fort.1如果说是找不到名为fort.1这么一个文件,问题是根本就没有这样一个东西,更不需要用这个,程序语句中也根本没有
提问者采纳
在 Fortran 中,open 时没有指定文件名的话,就会打开名为 fort.&文件号& 的文件找找 open(1, ... 之类的语句
提问者评价
其他类似问题
打开游戏提示无法定位程序输入法Directsdcreate8与动态链接库d3d8 dll是什么意思它由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间
按默认排序
其他2条回答
stop的上一行加pause。比如程序: program main implicit none write(*,*) &AAAAAAAAAAAAAAAAAAAAAAAA& pausestop end
比较大的应用程序都由很多模块组成,这些模块分别完成相对独立的功能,它们彼此协作来完成整个软件系统的工作。可能存在一些模块的功能较为通用,在构造其它软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序 EXE 文件中,会产生一些问题:一个缺点是增加了应用程序的大小,它会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的 EXE 程序时,在每次修改重建时都必须调整编译所有源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。Windows 系统平台上提供了一种完全不同的较有效的编程和运行环境,你可以将独立的程序模块创建为较小的 DLL (Dynamic Linkable Library) 文件,并可对它们单独编译和测试。在运行时,只有当 EXE 程序确实要调用这些 DLL 模块的情况下,系统才会将它们装载到内存空间中。这种方式不仅减少了 EXE 文件的大小和对内存空间的需求,而且使这些 DLL 模块可以同时被多个应用程序使用。Windows 自己就将一些主要的系统功能以 DLL 模块的形式实现。一般来说,DLL 是一种磁盘文件,以.dll、.DRV、.FON、.SYS 和许多以 .EXE 为扩展名的系统文件都可以是 DLL。它由全局数据、服务函数和资源组成,在运行时被系统加载到调用进程的虚拟空间中,成为调用进程的一部分。如果与其它 DLL 之间没有冲突,该文件通常映射到进程虚拟空间的同一地址上。DLL 模块中包含各种导出函数,用于向外界提供服务。DLL 可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个 DLL 在内存中只有一个实例;DLL 实现了代码封装性;DLL 的编制与具体的编程语言及编译器无关。在 Win32 环境中,每个进程都复制了自己的读/写全局变量。如果想要与其它进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL 模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。Windows 在加载 DLL 模块时将进程函数调用与 DLL 文件的导出函数相匹配。Windows 操作系统对 DLL 的操作仅仅是把 DLL 映射到需要它的进程的虚拟地址空间里去。DLL 函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。调用方式 1、静态调用方式:由编译系统完成对 DLL 的加载和应用程序结束时 DLL 卸载的编码(如还有其它程序使用该 DLL,则 Windows 对 DLL 的应用记录减1,直到所有相关程序都结束对该 DLL 的使用时才释放它,简单实用,但不够灵活,只能满足一般要求。隐式的调用:需要把产生动态连接库时产生的 .LIB 文件加入到应用程序的工程中,想使用 DLL 中的函数时,只须说明一下。隐式调用不需要调用 LoadLibrary() 和 FreeLibrary()。程序员在建立一个 DLL 文件时,链接程序会自动生成一个与之对应的 LIB 导入文件。该文件包含了每一个 DLL 导出函数的符号名和可选的标识号,但是并不含有实际的代码。LIB 文件作为 DLL 的替代文件被编译到应用程序项目中。当程序员通过静态链接方式编译生成应用程序时,应用程序中的调用函数与 LIB 文件中导出符号相匹配,这些符号或标识号进入到生成的 EXE 文件中。LIB 文件中也包含了对应的 DL L文件名(但不是完全的路径名),链接程序将其存储在 EXE 文件内部。当应用程序运行过程中需要加载 DLL 文件时,Windows 根据这些信息发现并加载 DLL,然后通过符号名或标识号实现对 DLL 函数的动态链接。所有被应用程序调用的 DLL 文件都会在应用程序 EXE 文件加载时被加载在到内存中。可执行程序链接到一个包含 DLL 输出函数信息的输入库文件(.LIB文件)。操作系统在加载使用可执行程序时加载 DLL。可执行程序直接通过函数名调用 DLL 的输出函数,调用方法和程序内部其 它的函数是一样的。2、动态调用方式:是由编程者用 API 函数加载和卸载 DLL 来达到调用 DLL 的目的,使用上较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。显式的调用:是指在应用程序中用 LoadLibrary 或 MFC 提供的 AfxLoadLibrary 显式的将自己所做的动态连接库调进来,动态连接库的文件名即是上面两个函数的参数,再用 GetProcAddress() 获取想要引入的函数。自此,你就可以象使用如同本应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用 FreeLibrary 或 MFC 提供的 AfxFreeLibrary 释放动态连接库。直接调用 Win32 的 LoadLibary 函数,并指定 DLL 的路径作为参数。LoadLibary 返回 HINSTANCE 参数,应用程序在调用 GetProcAddress 函数时使用这一参数。GetProcAddress 函数将符号名或标识号转换为 DLL 内部的地址。程序员可以决定 DLL 文件何时加载或不加载,显式链接在运行时决定加载哪个 DLL 文件。使用 DLL 的程序在使用之前必须加载(LoadLibrary)加载DLL从而得到一个DLL模块的句柄,然后调用 GetProcAddress 函数得到输出函数的指针,在退出之前必须卸载DLL(FreeLibrary)。Windows将遵循下面的搜索顺序来定位 DLL:包含EXE文件的目录 进程的当前工作目录 Windows系统目录 Windows目录 列在 Path 环境变量中的一系列目录 MFC中的DLLNon-MFC DLL:指的是不用 MFC 的类库结构,直接用 C 语言写的 DLL,其输出的函数一般用的是标准 C 接口,并能被 非 MFC 或 MFC 编写的应用程序所调用。 Regular DLL:和下述的 Extension DLLs 一样,是用 MFC 类库编写的。明显的特点是在源文件里有一个继承 CWinApp 的类。其又可细分成静态连接到 MFC 和动态连接到 MFC 上的。 静态连接到 MFC 的动态连接库只被 VC 的专业 版和企业版所支持。该类 DLL 应用程序里头的输出函数可以被任意 Win32 程序使用,包括使用 MFC 的应用程序。输入函数有如下形式:extern &C& EXPORT YourExportedFunction();如果没有 extern &C& 修饰,输出函数仅仅能从 C++ 代码中调用。DLL 应用程序从 CWinApp 派生,但没有消息循环。动态链接到 MFC 的 规则 DLL 应用程序里头的输出函数可以被任意 Win32 程序使用,包括使用 MFC 的应用程序。但是,所有从 DLL 输出的函数应该以如下语句开始:AFX_MANAGE_STATE(AfxGetStaticModuleState( )) 此语句用来正确地切换 MFC 模块状态。Regular DLL能够被所有支持 DLL 技术的语言所编写的应用程序所调用。在这种动态连接库中,它必须有一个从 CWinApp 继承下来的类,DLLMain 函数被 MFC 所提供,不用自己显式的写出来。Extension DLL:用来实现从 MFC 所继承下来的类的重新利用,也就是说,用这种类型的动态连接库,可以用来输出一个从 MFC 所继承下来的类。它输出的函数仅可以被使用 MFC 且动态链接到 MFC 的应用程序使用。可以从 MFC 继承你所想要的、更适于你自己用的类,并把它提供给你的应用程序。你也可随意的给你的应用程序提供 MFC 或 MFC 继承类的对象指针。Extension DLL使用 MFC 的动态连接版本所创建的,并且它只被用 MFC 类库所编写的应用程序所调用。Extension DLLs 和 Regular DLLs 不一样,它没有从 CWinApp 继承而来的类的对象,所以,你必须为自己 DLLMain 函数添加初始化代码和结束代码。和规则 DLL 相比,有以下不同:1、它没有从 CWinApp 派生的对象;2、它必须有一个 DLLMain 函数;3、DLLMain 调用 AfxInitExtensionModule 函数,必须检查该函数的返回值,如果返回0,DLLMmain 也返回 0;4、如果它希望输出 CRuntimeClass 类型的对象或者资源,则需要提供一个初始化函数来创建一个 CDynLinkLibrary 对象。并且,有必要把初始化函数输出;5、使用扩展 DLL 的 MFC 应用程序必须有一个从 CWinApp 派生的类,而且,一般在InitInstance 里调用扩展 DLL 的初始化函数。DLL入口函数1、每一个 DLL 必须有一个入口点,DLLMain 是一个缺省的入口函数。DLLMain 负责初始化和结束工作,每当一个新的进程或者该进程的新的线程访问 DLL 时,或者访问 DLL 的每一个进程或者线程不再使用DLL或者结束时,都会调用 DLLMain。但是,使用 TerminateProcess 或 TerminateThread 结束进程或者线程,不会调用 DLLMain。DLLMain的函数原型:BOOL APIENTRY DLLMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOIDlpReserved){
switch(ul_reason_for_call)
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
return TRUE;
}}参数:hMoudle:是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符);ul_reason_for_call:是一个说明动态库被调原因的标志。当进程或线程装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库被调用的原因。它所有的可能值为:DLL_PROCESS_ATTACH: 进程被调用;DLL_THREAD_ATTACH: 线程被调用;DLL_PROCESS_DETACH: 进程被停止;DLL_THREAD_DETACH: 线程被停止;lpReserved:是一个被系统所保留的参数;2、_DLLMainCRTStartup为了使用 &C& 运行库 (CRT,C Run time Library) 的 DLL 版本(多线程),一个 DLL 应用程序必须指定 _DLLMainCRTStartup 为入口函数,DLL 的初始化函数必须是 DLLMain。_DLLMainCRTStartup 完成以下任务:当进程或线程捆绑(Attach) 到 DLL 时为 &C& 运行时的数据 (C Runtime Data) 分配空间和初始化并且构造全局 &C++&对象,当进程或者线程终止使用DLL(Detach) 时,清理 C Runtime Data 并且销毁全局 &C++& 对象。它还调用 DLLMain 和 RawDLLMain 函数。RawDLLMain 在 DLL 应用程序动态链接到 MFC DLL 时被需要,但它是静态链接到 DLL 应用程序的。在讲述状态管理时解释其原因。关于调用约定动态库输出函数的约定有两种:调用约定和名字修饰约定。1)调用约定(Calling convention):决定函数参数传送时入栈和出栈的顺序,由调用者还是被调用者把参数弹出栈,以及编译器用来识别函数名字的修饰约定。函数调用约定有多种,这里简单说一下:1、__stdcall 调用约定相当于16位动态库中经常使用的 PASCAL 调用约定。在32位的 VC++5.0 中PASCAL 调用约定不再被支持(实际上它已被定义为__stdcall。除了__pascal 外,__fortran 和__syscall也不被支持),取而代之的是 __stdcall 调用约定。两者实质上是一致的,即函数的参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈,但不同的是函数名的修饰部分(关于函数名的修饰部分在后面将详细说明)。_stdcall 是 Pascal 程序的缺省调用方式,通常用于 Win32 API 中,函数采用从右到左的压栈方式,自己在退出时清空堆栈。VC 将函数编译后会在函数名前面加上下划线前缀,在函数名后加上 &@& 和参数的字节数。2、C 调用约定(即用__cdecl 关键字说明)按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。另外,在函数名修饰约定方面也有所不同。_cdecl 是 C 和 C++ 程序缺省的调用方式。每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用 _stdcall 函数的大。函数采用从右到左的压栈方式。VC 将函数编译后会在函数名前面加上下划线前缀。 它是 MFC 缺省调用约定。3、__fastcall 调用约定是 &人& 如其名,它的主要特点就是快,因为它是通过寄存器来传送参数的(实际上,它用 ECX 和 EDX 传送前两个双字(DWORD)或更小的参数,剩下的参数仍旧自右向左压栈传送,被调用的函数在返回前清理传送参数的内存栈),在函数名修饰约定方面,它和前两者均不同。_fastcall方式的函数采用寄存器传递参数,VC 将函数编译后会在函数名前面加上&@&前缀,在函数名后加上&@&和参数的字节数。4、thiscall 仅仅应用于 &C++& 成员函数。this 指针存放于 CX 寄存器,参数从右到左压。thiscall 不是关键词,因此不能被程序员指定。5、naked call采用 1-4 的调用约定时,如果必要的话,进入函数时编译器会产生代码来保存ESI,EDI,EBX,EBP寄存器,退出函数时则产生代码恢复这些寄存器的内容。naked call不产生这样的代码。naked call不是类型修饰符,故必须和_declspec 共同使用。关键字 __stdcall、__cdecl 和 __fastcall 可以直接加在要输出的函数前,也可以在编译环境的 Setting...\C/C++ \Code Generation 项选择。当加在输出函数前的关键字与编译环境中的选择不同时,直接加在输出函数前的关键字有效。它们对应的命令行参数分别为/Gz、/Gd 和 /Gr。缺省状态为/Gd,即__cdecl。要完全模仿 PASCAL 调用约定首先必须使用 __stdcall 调用约定,至于函数名修饰约定,可以通过其它方法模仿。还有一个值得一提的是 WINAPI 宏,Windows.h 支持该宏,它可以将出函数翻译成适当的调用约定,在 WIN32 中,它被定义为 __stdcall。使用 WINAPI 宏可以创建自己的 APIs。2)名字修饰约定1、修饰名(Decoration name)&C& 或者 &C++& 函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。有些情况下使用函数的修饰名是必要的,如在模块定义文件里头指定输出&C++&重载函数、构造函数、析构函数,又如在汇编代码里调用&C&&或&C++&函数等。修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。2、名字修饰约定随调用约定和编译种类(C或C++)的不同而变化。函数名修饰约定随编译种类和调用约定的不同而不同,下面分别说明。a、C编译时函数名修饰约定规则:__stdcall 调用约定在输出函数名前加上一个下划线前缀,后面加上一个&@&符号和其参数的字节数,格式为 _functionname@number。__cdecl调用约定仅在输出函数名前加上一个下划线前缀,格式为 _functionname。__fastcall调用约定在输出函数名前加上一个&@&符号,后面也是一个&@&符号和其参数的字节数,格式为@functionname@number。它们均不改变输出函数名中的字符大小写,这和PASCAL调用约定不同,PASCAL约定输出的函数名无任何修饰且全部大写。b、C++编译时函数名修饰约定规则:__stdcall调用约定:1、以&?&标识函数名的开始,后跟函数名;2、函数名后面以&@@YG&标识参数表的开始,后跟参数表;3、参数表以代号表示:X——void,D——char,E——unsigned char,F——short,H——int,I——unsigned int,J——long,K——unsigned long,M——float,N——double,_N——bool,....PA——表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以&0&代替,一个&0&代表一次重复;4、参数表的第一项为该函数的返回值类型,其后依次为参数的数据类型,指针标识在其所指数据类型前;5、参数表后以&@Z&标识整个名字的结束,如果该函数无参数,则以&Z&标识结束。其格式为&?functionname@@YG*****@Z&或&?functionname@@YG*XZ&,例如int Test1(char *var1,unsigned long)-----“?Test1@@YGHPADK@Z”
void Test2()
-----“?Test2@@YGXXZ”__cdecl调用约定:规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的&@@YG&变为&@@YA&。__fastcall调用约定:规则同上面的_stdcall调用约定,只是参数表的开始标识由上面的&@@YG&变为&@@YI&。VC++对函数的省缺声明是&__cedcl&,将只能被C/C++调用。关于DLL的函数动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。输出函数的方法有以下几种:1、传统的方法在模块定义文件的 EXPORT 部分指定要输入的函数或者变量。语法格式如下:entryname[=internalname] [@ordinal[NONAME]] [DATA] [PRIVATE]其中:entryname 是输出的函数或者数据被引用的名称;internalname 同@ordinal 表示在输出表中的顺序号(index);NONAME 仅仅在按顺序号输出时被使用(不使用 entryname );DATA 表示输出的是数据项,使用 DLL 输出数据的程序必须声明该数据项为 _declspec(DLLimport)。上述各项中,只有 entryname 项是必须的,其他可以省略。对于&C&函数来说,entryname 可以等同于函数名;但是对 &C++& 函数(成员函数、非成员函数)来说,entryname 是修饰名。可以从 .map 映像文件中得到要输出函数的修饰名,或者使用DUMPBIN /SYMBOLS 得到,然后把它们写在 .def 文件的输出模块。DUMPBIN 是VC提供的一个工具。如果要输出一个 &C++& 类,则把要输出的数据和成员的修饰名都写入 .def 模块定义文件。2、在命令行输出对链接程序 LINK 指定 /EXPORT 命令行参数,输出有关函数。3、使用 MFC 提供的修饰符号 _declspec(DLLexport)在要输出的函数、类、数据的声明前加上 _declspec(DLLexport) 修饰符表示输出。__declspec(DLLexport) 在 C 调用约定、C 编译情况下可以去掉输出函数名的下划线前缀。extern &C& 使得在 C++ 中使用 C 编译方式成为可能。在&C++&下定义&C&函数需要加 extern &C& 关键词。用 extern &C& 来指明该函数使用 C 编译方式。输出的 &C& 函数可以从 &C& 代码里调用。例如,在一个 C++ 文件中,有如下函数:extern &C& 其输出函数名为:TestMFC提供了一些宏,就有这样的作用。AFX_CLASS_IMPORT:__declspec(DLLexport)AFX_API_IMPORT:__declspec(DLLexport)AFX_DATA_IMPORT:__declspec(DLLexport)AFX_CLASS_EXPORT:__declspec(DLLexport)AFX_API_EXPORT:__declspec(DLLexport)AFX_DATA_EXPORT:__declspec(DLLexport)AFX_EXT_CLASS: #ifdef _AFXEXT
AFX_CLASS_EXPORT
AFX_CLASS_IMPORTAFX_EXT_API:#ifdef _AFXEXT
AFX_API_EXPORT
AFX_API_IMPORTAFX_EXT_DATA:#ifdef _AFXEXT
AFX_DATA_EXPORT
AFX_DATA_IMPORT像 AFX_EXT_CLASS 这样的宏,如果用于 DLL 应用程序的实现中,则表示输出(因为_AFX_EXT被定义,通常是在编译器的标识参数中指定该选项 /D_AFX_EXT);如果用于使用DLL的应用程序中,则表示输入(_AFX_EXT没有定义)。要输出整个的类,对类使用_declspec(_DLLexpot);要输出类的成员函数,则对该函数使用_declspec(_DLLexport)。如:class AFX_EXT_CLASS CTextDoc : public CDocument{
…}extern &C& AFX_EXT_API void WINAPI InitMYDLL();这几种方法中,最好采用第三种,方便好用;其次是第一种,如果按顺序号输出,调用效率会高些;最次是第二种。模块定义文件(.DEF)模块定义文件(.DEF)是一个或多个用于描述 DLL 属性的模块语句组成的文本文件,每个DEF文件至少必须包含以下模块定义语句:第一个语句必须是LIBRARY语句,指出DLL的名字; EXPORTS 语句列出被导出函数的名字;将要输出的函数修饰名罗列在 EXPORTS 之下,这个名字必须与定义函数的名字完全一致,如此就得到一个没有任何修饰的函数名了。 可以使用DESCRIPTION语句描述DLL的用途(此句可选); &;&对一行进行注释(可选)。 DLL程序和调用其输出函数的程序的关系 1、DLL与进程、线程之间的关系DLL模块被映射到调用它的进程的虚拟地址空间。 DLL使用的内存从调用进程的虚拟地址空间分配,只能被该进程的线程所访问。 DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。 DLL使用调用进程的栈。 2、关于共享数据段DLL定义的全局变量可以被调用进程访问;DLL可以访问调用进程的全局数据。使用同一DLL的每一个进程都有自己的DLL全局变量实例。如果多个线程并发访问同一变量,则需要使用同步机制;对一个DLL的变量,如果希望每个使用DLL的线程都有自己的值,则应该使用线程局部存储(TLS,Thread Local Strorage)。在程序里加入预编译指令,或在开发环境的项目设置里也可以达到设置数据段属性的目的.必须给这些变量赋初值,否则编译器会把没有赋初始值的变量放在一个叫未被初始化的数据段中。
fortran的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁人人小组 - 关于fortran语言 转自维基百科
关于fortran语言 转自维基百科
FORTRAN 发明的年代还没有键盘与萤幕,程式码必须使用打卡机打在打孔卡(punch card)上。&图中显示卡片上的1-5行、第6行与73-80行被使用过。
Fortran语言最初是由&&方面的需要而发展起来的。&12月,IBM公司程式员&(J. Backus)深深体会到编写程式的困难性,他写了一份备忘录给董事长&&(Cuthbert Hurd),建议为IBM704系统设计一套全新的电脑语言,从根本上提高编程效率。&当时IBM公司顾问&强烈反对这项建议,他认为巴克斯的建议是没有必要的,而且不切实际。&但赫德批准了这项计划。,&&开发出第一套FORTRAN语言,执行在IBM704电脑上。&历史上第一支FORTRAN程式在&&的西屋贝地斯核电厂试验。&日星期五的下午,一位IBM程式员决定在电厂内编译第一支FORTRAN程式,当程式码输入后,经过编译,印表机列出一道讯息:「原始程式错误& &右侧括号后面没有逗号」,现场人员都感到讶异,这个错误经过修正之后,程式编译器再度执行,二十二分钟后,印表机输出正确结果。&意外地成为FORTRAN的第一个商业用户。&推出FORTRAN Ⅱ,几年后又推出FORTRAN Ⅲ,&推出FORTRAN Ⅳ,开始广泛被使用。
&,&&制定了Fortran(x3.9-1966,也就是Fortran 66)和Fortran(x3.10-1966)标准。&这时Fortran语言还不是结构化的程式语言。
&,&&重新对Fortran(x3.9-1966)进行了评估,公布了新的Fortran标准,也就是Fortran 77。&Fortran 77是具有结构化特性的程式语言。&Fortran77在短时间内取得了巨大的成功,广泛地应用于科学和专案计算,几乎统治了&&领域。
&,Fortran 77被ISO接纳为国际标准。
&发布的Fortran 90大幅改进了旧版Fortran的型式,加入了物件导向的观念与提供指标,并同时加强&&的功能。
Fortran后来又陆续推出Fortran 95、Fortran 2003等更新版本。
最早的FORTRAN版本应用于IBM 704系统上,包含了32种语句,包括:
DIMENSION&和&EQUIVALENCE&语句
三态&算术&IF&语句。
以&IF&这个陈述式检查例外情况(&ACCUMULATOR OVERFLOW&,&QUOTIENT OVERFLOW&和&DIVIDE CHECK&);&IF&语句以处理&
GOTO&,计算的&GOTO&,&ASSIGN&,和赋值&GOTO
格式化的输入与输出(Formatted I/O):&FORMAT&,&READ&,&READ INPUT TAPE&,&WRITE&,&WRITE OUTPUT TAPE&,&PRINT&和&PUNCH
非格式化的输入与输出(Unformatted I/O):&READ TAPE&,&READ DRUM&,&WRITE TAPE&和&WRITE DRUM
其他的输入与输出:&END FILE&,&REWIND&,和&BACKSPACE
PAUSE&,&STOP&,和&CONTINUE
FREQUENCY&语句(为编译器提供&最佳化&帮助)&
FORTRAN II
1958年IBM又推出&FORTRAN II&.支援使用者撰写副程式(subroutines)以及函数(functions)。&有六个新陈述如下:
SUBROUTINE&,&FUNCTION&,和&END
CALL&和&RETURN
接下来的几年内,FORTRAN II继续又支援&DOUBLE PRECISION&和&COMPLEX&等资料型态(data types)。
FORTRAN III
IBM继续开发&FORTRAN III&至1958年时已可以内建&&码并新增其它功能;然而这个版本却从未推出。&有如704 FORTRAN和FORTRAN II、FORTRAN III等的开发过程包含了过多的机器相依性(machine-dependent),造成程式码不易移植到其他机器上的问题。&早期提供FORTRAN版本的厂商经常为此所苦
A pad of Fortran coding forms, intended to be used by programmers to prepare the program for transcription by&operators. Now obsolete.
FORTRAN IV
自&&开始,由于客户的强烈要求,IBM开始发展&FORTRAN IV&,目的在于移除一些FORTRAN II中过于依赖机器本身的程式码(例如:&READ INPUT TAPE&)同时新增一些新的功能,如&LOGICAL&资料型别。(TRUE或者FALSE)与&逻辑IF语句&则取代了&算术IF语句&。&FORTRAN IV于&&推出,最早应用于&&("Stretch")计算机之上,以及其接续的&&和&&版本。
FORTRAN 66
早期的FORTRAN语言发展史上最重要的一件大事也许是&美国标准协会&(&American Standards Association,即今日的&&)的委员们开始为FORTRAN制定标准规格,名为"American Standard Fortran."&&委员会推出两套FORTRAN标准版本,分别定义成&FORTRAN&(基于FORTRAN IV,用来应付&de facto&标准)和Basic FORTRAN&(基于FORTRAN II,并且移除其平台依赖性)。&FORTRAN第一套标准后来被称为&FORTRAN 66(大家仍习惯称之为FORTRAN IV)。&FORTRAN 66有效的成功第一套工业标准版的FORTRAN。&其功能如下:
主程式,&SUBROUTINE&,&FUNCTION&和&BLOCK DATA&程式单元
INTEGER&,&REAL&,&DOUBLE PRECISION&,&COMPLEX&和&LOGICAL&资料型别
COMMON&,&DIMENSION&和&EQUIVALENCE&语句
DATA&语句用以指定初始值
内部和&EXTERNAL&(&例如&函式库)函式
GOTO&,赋值&GOTO&和计算&GOTO&语句
逻辑&IF&和算术(三态)&IF&语句
READ&,&WRITE&,&BACKSPACE&,&REWIND&和&ENDFILE&语句以处理顺序读写
FORMAT&语句
CALL&,&RETURN&,&PAUSE&和&STOP&语句
DATA&和&FORMAT&语句中的&&,作为子程式的实际参数
最长六个字母的识别元
FORTRAN 77
在FORTRAN 66标准推出之后,各家编译器厂商不断推出更具扩充性的标准FORTRAN("Standard Fortran"),这使得ANSI于1969年开始着手于1966标准版本的修正工作。&最后定稿于1977年,1978年四月正式推出FORTRAN。&新的标准规格也就是著名的&FORTRAN 77&,这个版本是基于FORTRAN 66之上新增许多功能,弥补过去的缺点:
CHARACTER&资料型别,极大地扩充功能了的字元输入和输出以及对基于字元的资料进行处理的工具
IMPLICIT&语句
IF&语句块,以及可选的&ELSE&和&ELSE IF&从句,提供改进了的对&&的语言支援。
OPEN&,&CLOSE&和&INQUIRE&语句以改进I/O能力
直接存取档案I/O
PARAMETER&语句以指定常数
SAVE&语句以保存原生变数
内部函式的通用名称
1978年推出了一个重要的版本FORTRAN 77 是为MIL-STD-1753 Release版。&这个规格由美国国防部制定,这个标准化的FORTRAN 77 编译器并未引入ANSI FORTRAN 77 标准。&一些新功能最终合并到Fortran 90 标准版。
DO WHILE&和&END DO&语句
INCLUDE&语句
IMPLICIT NONE&变数,用于&IMPLICIT&语句
&内部函式,基于类似的包含在&&中的函式
1991年推出&&1003.9&&标准版,为Fortran-77的程式人员提供了POSIX system上的呼叫。&有超过一百种功能呼叫被定义在档案上。&允许存取POSIX-相容的行程控制(process control)、信号取得(signal handling)、档案系统控制(file system control)、装置控制(device control)、程式指定(procedure pointing),以及资料流的输入与输出(stream I/O)。
由于成功的修正了FORTRAN 77 发展流程,使得原本过于缓慢重复的程式设计可以顺利的应付计算机领域迅速的变化。&同时,作为将近15年的「标准FORTRAN」,FORTRAN 77成为历史上最重要的一套电脑语言。
Fortran 90
FORTRAN 77的被严重推迟的后续版本,非正式名称是&Fortran 90&,最终于1992年作为ANSI标准发表。&这一大版本添加了许多新特性以反映自1978年标准以来发展的在程式方面显著的变化:
&,以及小写的Fortran关键字
模组&,将有关联的&&和资料组合在一起,使它们可以被其它程式单元呼叫,包括允许限制一些模组的特定部分存取。
极大地改善了参数传递机制,允许在编译时检查&
通用过程的使用者自订介面
衍生/&&资料型别
新的资料型别定义语法,以指定资料型别和变数的其它属性
可以在运算式和赋值语句中按整体运算元组(或阵列节),由此极大地简化了数学和专案计算。&这些特性包括整体、部分和通配的阵列赋值(比如用&WHERE语句作选择性赋值),阵列常数和运算式,使用者定义的阵列函式和阵列构造。
&透过&ALLOCATABLE&属性和&ALLOCATE&和&DEALLOCATE&语句
&属性,指标赋值和&NULLIFY&语句以便于建立和操作动态&
CASE&结构以用于多路选择
EXIT&和&CYCLE&语句以用于在按顺序地"跳出"正常的&DO&回圈重复
最长31个字元的识别元
使用者可控制的可定义的数位精度
新的和增强的内部过程
Fortran 95
Fortran 95&仅是一个小改版,大部份修正了Fortran 90 standard一些较为显著的问题。&虽然如此,Fortran 95仍有不少的扩充,尤其是在&&的规格:
FOR ALL&和巢状的&WHERE&结构以帮助向量化
使用者定义的&PURE&和&ELEMENTAL&过程
Fortran 95的一个重要补充是&&技术报告&&,非正式名称是&可分配的TR&。&这一标准定义了&ALLOCATABLE&阵列的增强的应用,先于与完全的Fortran 2003相容的Fortran编译器,以供使用。&这些使用包括在过程伪参数列中以及将函式返回值使用&ALLOCATABLE&阵列作为衍生的型别元件。&(&ALLOCATABLE&阵列比基于&POINTER&的阵列更受欢迎,因为&ALLOCATABLE&阵列是由Fortran 95保证的,当它们结束范围时会被自动释放掉,避免了&&的可能性。另外,&别名&也不再是最佳化阵列参照时的一个问题,可以使编译器生成比用指标时更快的代码。)
Fortran 95的第二个补充是&&技术报告&&,非正式名称是&IEEE TR&。&这一标准定义了对&&和&&的支援。
Fortran 2003
最新的版本,&Fortran 2003&,有着更大幅度的改版。&的官方网站有关于Fortran 2003新特性的详细总结,并有&PDF&或者&可供直接下载。
据该文所述,本版本的主要改进包括:
增强了衍生型别:带参数的衍生型别,改善了控制的可操作性,改善了结构化的建立和释放。
支援&&:&扩充功能型别和继承&,&&,动态型别分配,以及型别系结过程。
改善了资料操作:可分配的元件(编入IEEE TR 15581),延期的型别参数,&,在阵列构造和分配语句中显式定义型别,增强的指标,扩充功能的初始化运算式,增强的内部过程。
增强的输入/输出:&&传输,流存取,使用者指定衍生型别的传输操作,使用者在格式转换时指定舍入控制,为连线前单元指定常数,&FLUSH&语句,关键字的规范,存取错误资讯。
支援&&和&&(编入IEEE TR 15580)。
与&&的互动性
支援国际化:存取&&4位元组字元和在格式化的数位输入/输出中选择数位或者逗号。
与宿主作业系统增强的整合:存取&&参数,&&和处理器错误资讯。
Fortran 2008
Fortran 2003之后的下一个版本是Fortran 2008. 一如Fortran 95, 这只是一个小改版,略微更正了Fortran 2003 的一些问题, 并且合并了TR-19767的语言功能。
如同February 2007,新的功能包括了&
&&平行处理模式
2007年8月,资料型态BIT 被删除了。&2008年2月,Coarrays 的计画已缩小,仅有Parallel I/O,而研发团队也被裁员了。
FORTRAN的特性
Fortran语言的最大特性是接近&&的自然描述,在电脑里具有很高的执行效率。
易学,语法严谨。
可以直接对&&和&&平行运算,这点&&有继承。
自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的&&。
很多专用的大型数值运算电脑针对Fortran做了最佳化。
广泛地应用于&&和&&领域。
Fortran 90,Fortran 95,Fortran 2003的相继推出使Fortran语言具备了现代高阶程式语言的一些特性。
其矩阵元素在记忆空间储存顺序是采用列优先(Column first),&&也承袭这点,目前最多使用的&&则采用行优先(Row first)。
FORTRAN的Hello World程式
下面是一个在标准输出装置上输出&&的简单程式,这种程式通常作为开始学习程式语言时的第一个程式:
以Fortran 90/95 自由格式的写法为例
!惊叹号之后是注解 program main !这行可以省略,但是写大程式的时候会发生混乱
write ( * , * )
"hello, world!"
!第一个*表示输出缩排使用内定值,第二个*表示不指定输出格式
write ( unit
"hello, world!"
!作一样的事
!这行代表程式结束,可以省略 end
program main ! end之后的program main也可以省略,但写上是比较严谨的
FORTRAN编译器
Windows作业系统下:
Visual Fortran&系列
Fortran Power Station&4.0 (FPS 4.0),&&开发的Fortran编译器。&3月转让给&&。
Digital Visual Fortran&(DVF),Fortran Power Station的DEC公司版本,版本号为5.0.x ~ 6.0.x 。&1月,DEC公司被&&收购,Digital Visual Fortran更名为Compaq Visual Fortran。
Compaq Visual Fortran&(CVF),上述DVF的进一步发展,版本号6.5.x ~ 6.6.B。&2002年5月康柏公司已并入&&,但仍然称为Compaq Visual Fortran,版本号升级到6.6.C 。
Intel Fortran&,&&开发的Fortran编译器。&事实上,惠普购买了Compaq的Fortran编译器技术之后不久,便留下了用于&&/&系统的相关技术,而将&&平台上的Fortran编译器相关权利全部转售给Intel。&因此从CVF 6.6.C之后,Windows平台下的Visual Fortran编译器就改由Intel生产和销售了,(需要&&Visual Studio外壳的支援才能实作Visual IDE功能,Intel只提供命令列介面的编译器核心)。
Lahey Fortran
Absoft Fortran
OpenWatcom
Linux作业系统下:
PGI Fortran
g77&,GNU的Fortran 77编译器,整合在&&中。
gfortran&,GNU的最新的Fortran编译器,整合在GCC 4.x中,目的是支援Fortran 95和一部分Fortran 2003的功能,以替代G77。
Intel Fortran
Absoft Fortran
g95&,跟GFORTRAN同为开放原始码的Fortran 95编译器。
FORTRAN的套件
几个著名的Fortran Package:
IMSL--国际数学和统计链结函式库
MKL--Intel数学核心函式库
BLAS--Basic Linear Algebra Subroutines
LAPACK--Linear Algebra PACKage
&注意:通常人们会认为这一语句对应于IBM 704上的一个三态分支指令。&但事实并非如此,704的分支指令只包含了一个标的位址(例如,TZE -转换AC为零,TNZ -转换AC为非零,TPL -转换AC为加,TMI -转换AC为减)。&机器(以及它的后继者如&&)确实有一个三态&跳转&指令(CAS -比较AC与储存),那可能是这一说法的最初起源,但是用这一指令来执行&IF&的话,会消耗4个指令词,需要把常数零放入储存中,然后执行三个机器回圈,而如果使用转换指令来实作&IF&的话,只需要1到3个指令词就够了,不需要将常数存入储存,只需要1到3个机器回圈来执行。&一个最佳化的编译器如FORTRAN最有可能采用的是更精简的和通常来说更快的转换指令,而不是比较指令(使用指换指令同时也允许&FREQUENCY&语句来最佳化&IF&,而如果使用比较指令的话则无法实作)。&同时,比较指令还将-0和+0认为是不同的值,而转换零和转换非零语句将它们视为相同的值。
&FORTRAN中的FREQUENCY最初是被用来给算术IF语句的三种分支状态给出可能性的,以供选择代码生成的方式以及生成的代码的基本块的顺序,在全域最佳化时,会在内部记忆体中安排以便于最佳化。&第一个FORTRAN编译器使用这一权重法来在编译时作执行时生成代码的&&。&在当时来说是非常复杂的。&这一技术最初记载于1957年的一篇关于第一个FORTRAN编译器实作的文章中,作者是J. Backus等人。&许多年之后,FREQUENCY语句对代码已经没有作用了,就被作为注释语句对待了,因为编译器不再作这种编译时模拟了。&以下摘自1957的论文:"FORTRAN自动编码系统",作者:Backus等人,FREQUENCY语句和它在编译时&&执行时的用法,以最佳化生成的代码。&引文:
The fundamental unit of program is the&&; a basic block is a stretch of program which has a single entry point and a single exit point. The purpose of section 4 is to prepare for section 5 a table of predecessors (PRED table) which enumerates the basic blocks and lists for every basic block each of the basic blocks which can be its immediate predecessor in flow, together with the absolute frequency of each such basic block link. This table is obtained by an actual "execution" of the program in Monte-Carlo fashion, in which the outcome of conditional transfers arising out of IF-type statements and computed GO TO'S is determined by a random number generator suitably weighted according to whatever FREQUENCY statements have been provided.
&A full list is in the report available at&PDF (24.2 KB)&.
科技热点话题
全站热门话题
同类热门小组推荐
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字·文化部监督电子邮箱:wlwh@·
文明办网文明上网举报电话: 举报邮箱:admin1@&&&&&&&&&&&&
密码必须由6-20个字符组成
请输入验证码

我要回帖

更多关于 名词解释是什么意思 的文章

 

随机推荐