你所说的能否运行,是编译器的事情。
编译器,就好像金山词霸的概念一样。
电脑上有很多英式英语的软件,比如金山词霸,灵格斯词典,QQ词典等等。他们支持的 *** 作系统不完全相同。
同样的,全球支持 Fortran90 语法的编译器,保守估计有大约20个。主流的有 Intel Fortran,PGI Fortran,Sliverfrost Ftn95,NAGFortran 等等。每一种 Fortran90 的编译器,其适用的 *** 作系统和平台也不完全相同。
单纯说 Fortran90,不能说明是哪个编译器。更不能说明该编译器支持什么 *** 作系统。
这就好像问:“美式英语在win7中能运行吗?”,这样的提法就有问题。
因此,需要你具体的告知,你使用的什么品牌,什么版本的编译器?请注意,Fortran90不是品牌,也不是编译器版本。
出现这种情况一般原因是程序不严谨,比如说定义数组之后没有初期化,判断俩实数是否相等,用了一些不通用的函数(各个版本的编译器都可能会有一些独特的函数),数值精度不统一等等。输入数据也可能造成这种影响,比如说4.0和4.0d0在计算机看来是两个不同的数。就算是同一个编译器编译的程序,在不同电脑上跑甚至在相同电脑跑结果都可能不相同。这又涉及到CPU位数的问题了。
避免此类情况发生的时候,写代码要养成良好的习惯。定义real的时候顺便明确一下kind,定义数组之后马上就初始化一下,判断两实数是否相等不要直接判断,输入数据的时候要考虑到输入数据的类型等等
program mainimplicit none
character(len=100)::chr
integer(8)::N,k,i
write(*,*)'请输入一个整数:'read(*,*)N
if(IsPalindrome(N)) then
write(*,*)N,"是回文数"
else
write(*,*)N,"不是回文数"
endif
write(*,*)'输出完成!'
read(*,*)
contains
function IsPalindrome(N)result(p)
implicit none
integer(8),intent(in)::N
integer(8)::i,k
logical(1)::p
character(len=100)::chr
p=.true.
write(chr,"(I100)")N
chr=adjustl(chr)
k=len_trim(chr)
do i=1,k/2,1
if(chr(i:i)/=chr(k-i+1:k-i+1))then
p=.false.
exit
endif
enddo
end function IsPalindrome
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)