FORTRAN模拟计算器程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FORTRAN实验报告

给水排水1001班

武俊槟

1004030134

模拟计算器程序

一、实验目的:

设计一个程序来模拟一个简单的手持计算器,程序支持算数运算+,-,*,/,=以及C(清除),A(全清除)等操作。

二、实验要求:

在运行程序时,显示一个窗口,等待用户输入,用户可以从键盘输入要计算的表达式,输入的表达式显示在串口中,用户键入‘=’符号后,窗口显示结果。

三、实验步骤:

1

2、程序代码见附录。

3、测试数据:经检验程序无错

四、实验心得:

经过这次编程,我熟练掌握了VF课程所教授的知识,理论联系实际,这次作业提高了我的编程水平,发现了自己平时所忽略的知识点,同时也增强了团队合作意识。

在基本确定编程思路画出大致流程草图后,我们对编程做出了安排,大家分工合作。在编程过程中,我们都或多或少的遇到一些困难,有时可以通过自己的查阅相关资料得到解决,而有时却不得甚解,此时,团队的力量便展现了出来,大家共同探讨遇到的问题。通过大家的共同努力,一起解决在编程中所遇到的问题如:如何实现清屏,输出格式的美观化等。尤其是实现清除命令的过程中,我们最后通过文件操作解决了这个问题。

最后再将大家做的程序进行整合,对程序进行debug,查找程序中的错误,大家共同探讨出现的错误,不断地将程序进行改进,最后实现编程要求并美观化。

编程不仅仅但是编程,它最大乐趣是在编程的过程中不断对自己VF知识的总结和完善,同时也考验一个团队的合作意识。通过这次编程,我觉得我的收获是巨大的,编程锻炼了我在遇到问题时的解决能力及思维方式,加强了我的团队合作意识,使我感觉到了团队的力量,并提高了个人分析能力综合素质。

!武俊槟

!西安科技大学建工学院给排1001

!学号:1004030134

!模拟计算器程序

!调用C/C++库函数清屏命令

interface to function system[c](string)

integer*2 system

character string[reference]

end

!fortran主程序

implicit none

integer::i,j,l=0,num(120),nn=0

integer*2 system

real::a,b,c

character::str(120)

character(len=125)::string,substring1,substring2

print*

print*,' 请输入运算式(len<=125):'

print*," 输入格式:'1+1='"

print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'

print*

do

j=1

!生成数据库database.txt

open(unit=1,file='database.txt')

read*,string

if(string/='A'.or.string/='C') nn=nn+1

if(string=='exit') then

close(unit=1)

exit

!清除

elseif(string=='C') then

string=system("cls")

print*

print*,' 请输入运算式(len<=125):'

print*," 输入格式:'1+1='"

print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'

print*

rewind 1

do i=1,nn

read(1,*) string

write(*,*) string

enddo

!清屏

elseif(string=='A') then

string=system("cls")

rewind 1

close(unit=1)

print*

print*,' 请输入运算式(len<=125):'

print*," 输入格式:'1+1='"

print*,' 小提示:输入exit可退出程序。按C清除,按A全清除。'

print*

else

l=len_trim(string)

if(string(l:l)/='=') then

print*,"请输入完整、合理的表达式,输入“=”,按回车。(输入格式:'1+1=')"

else

do i=1,l

if(string(i:i)=='+'.or.string(i:i)=='-'.or.string(i:i)=='*'.or.string(i:i)=='/'.or.string(i:i) =='=') then

num(j)=i

str(j)=string(i:i)

j=j+1

endif

enddo

j=j-1

substring1=string(1:num(1)-1)

read(substring1,*) a

do i=1,j

substring2=string(num(i)+1:num(i+1)-1)

read(substring2,*) b

call f(a,b,c,str(i))

a=c

enddo

write(*,*) string,c

write(1,*) string,c

endif

string='________________________________________________________ __________________'

print*,string

write(1,*) string

endif

enddo

!内部子例行程序

contains

subroutine f(a,b,c,str)

real::a,b,c

character str

if(str=='+') c=a+b

if(str=='-') c=a-b

if(str=='*') c=a*b

if(str=='/') c=a/b

if(str=='=') c=a

endsubroutine

end

相关文档
最新文档