Fortran学习3:控制流2:循环
一个程序中循环是非常重要的,他会控制变量进行多次相同运算,在数组操作中有着不可替代的地位,今天就走进Fortran的循环,感受一下循环的乐趣。
哦,对了,Fortran程序在stop之前,可以加一个pause,这样.exe文件运行时就不会跳窗一而过了,这就相当于c++的system(pause)。
1、Do循环:
结构是这样的:
do counter = 1, UpperBound, step!counter是计数器,!UpperBound是上界,只要counter<=UpperBound,循环就继续进行!step就是迭代步数,每执行一次,count=count+step
......
end do
上面用来做计数器的counter变量,脱离了循环语句之后就不能再用任何其他命令去改变器数值,不然编译就会出错。
随遍写个Do循环试一试:
program main
integer number
number=1
do counter = 1, 100, 1number=number+counterwrite(*,*)number
end do
pause
stop
end
结果:
太长了,就展示一小部分
do循环结束之后,要去思考一个很有意思的问题:如果退出循环的条件是对逻辑成立的判断,那我们应该怎么做呢?
答案就是:DO while循环:
do while(!逻辑判断)
...
end do
其实,在后面的新兴语言中,while循环时非常常用的一个,但我个人更喜欢c++的while循环,更简洁也更明了:
while(逻辑判断){}
简单的写写书上的例题:输出:2+4+6+8+10的结果:
program main
implicit none
integer number
integer sum
number=2
sum=0
do while(number<=10)sum=sum+numbernumber=number+2
end do
write(*,*)"2+4+6+8+10=",sum
pause
stop
end
!注意,这个pause,如果你时直接在vscode等ide的集成终端上操作时,可以在代码最后不用pause,但如果你要使用.exe文件运行的时候,代码中加个pause时一个不错的选择,不要害怕出现的warning,那个在这里压根就没啥大用。
再玩一个,猜年龄(书上时猜蔡小姐的体重,但我觉得这样太冒犯蔡小姐了,还是猜年龄吧)
program mainimplicit noneinteger errorparameter(error=1)integer:: age=26integer input_agedo while(abs(age-input_age)>=error)write(*,*)"input Mis Cai'age"read(*,*)input_ageend do write(*,*)"great!,you are right",input_age! pausestop
end program main
cycle命令,一旦出现器所对应的条件,那就跳过,直接进行下一次循环:这里举一个等差数列相加的例子1+3+5+7+9+...+41,但其中如果下一个数时3x的话,就跳过:
program mainimplicit noneinteger ::sum=0integer counter!注意,前面的那个2+4+6+8的代码,没有声明counter是什么类型,但也可以运行的原因是只是用的!加法,他不会报错,但是这里我使用了mod函数求余,所以必须要什么counter的类型,!否则就会因为没有什么counter的类型报错:!Error: Symbol 'counter' at (1) has no IMPLICIT typedo counter = 1, 41, 2if(mod(counter,3)==0)cyclesum=sum+counterend dowrite(*,*)"sum:",sum
stop
end program main
exit:它满足条件的时候就跳出循环了,do 循环和exit的配合就相当于do while循环,改写一下猜蔡小姐年龄的代码:
program mainimplicit noneinteger errorparameter(error=1)integer:: age=26integer input_agedo write(*,*)"input Mis Cai'age"read(*,*)input_ageif(abs(age-input_age)<error)exitend do write(*,*)"great!,you are right",input_age! pausestop
end program main
我还是第一次见到给循环命名的,感觉没这个必要嘛,实在是记不住循环是干啥的,直接写个注释他不香吗?,但既然Fortran有这个,那就稍微写写吧,感觉没啥大用,反正后面编程我肯定不会给循环命名,有点太傻乎乎的感觉了
就还是给上面的猜蔡小姐年龄的循环,直接改一下就行:
a_cycle: do write(*,*)"input Mis Cai'age"read(*,*)input_ageif(abs(age-input_age)<error)exitend do a_cycle
简单练练手吧:
1:等比数列求和:
program main
implicit none
integer ::a1=2
integer:: sum=0
do while(a1<=100)sum=sum+a1a1=a1*2
end do
write(*,*)"sum=",sum
stop
end program main
2:输出斐波那契数列:
program fibonacciimplicit noneinteger fn,fn_1integer fn_2,counterfn=0fn_1=1fn_2=0write(*,*)fn_2write(*,*)fn_1do counter=1,20,1fn=fn_1+fn_2fn_2=fn_1fn_1=fnwrite(*,*)fnend dostop end
3、输入判断运算
program mainimplicit nonereal a,bcharacter ::Key='Y'character symbolinteger:: answer=0real ::ans=0do while((Key=='y').or.(key=='Y'))write(*,*)"input a:"read(*,*)awrite(*,*)"input b:"read(*,*)bwrite(*,*)"input Symbol :"read(*,*)symbolselect case(symbol)case('+')ans=a+bwrite(*,*)anscase('-')ans=a-bwrite(*,*)anscase('*')ans=a*bwrite(*,*)anscase('/')ans=a/bwrite(*,*)anscase defaultwrite(*,*)"error symbol"end selectwrite(*,*)"keep going?"read(*,*)Keyend do
stop
end program main
可以把我的代码复制后自己运行一下。
4、加密、解密:
ascii码值加3:
program mainimplicit nonecharacter(len=30):: stringinteger i, StringLengthinteger keyparameter(key=3)write(*,*)"input string"read(*,*)stringStringLength=len-trim(string)do i=1,StringLengthstring(i:i)=char(ichar(string(i:i))+key)end dowrite(*,*)stringstop
end
书上写的不太对劲,总是报错,说是len没有隐式声明,百思不得其解...
行了,再把书上的题做一做:
1、输出五次fortran:这个就算了,太简单了,真没啥意思
2、循环计算等差数列1+3+5+7+...+99:参考前面的2+4+6+8+...+
3、对蔡小姐的体重猜五次,少于五次猜中,跳出循环,猜测次数多于五次,也要跳出循环:
这个很简单,用控制流加上exit修改修改上面的程序就ok:
program mainimplicit noneinteger errorparameter(error=1)integer:: age=26integer input_age,counterinteger UpperBoundparameter(UpperBound=5)counter=1do while(counter<=UpperBound)write(*,*)"input Mis Cai'age"read(*,*)input_ageif(abs(age-input_age)<error)exitcounter=counter+1end doif((counter>UpperBound).and.(abs(age-input_age)>=error))thenwrite(*,*)"you wrong" elsewrite(*,*)"great!,you are right",input_ageend if! pausestop
end program main
结果:左边是超过五次就停止程序,右边是猜对之后。
4、计算1/1!+1/2!+...+1/10!:
function pro(input) result(output)
integer product
product=1
do counter=1,input
product=product*counter
end do
end function pro
program main
! 其实这里使用函数会更简单一些,所以我设置了函数pro
real ::sum=0
do i=1,10
sum=sum+1/pro(i)
end do
write(*,*)sum
stop
end
结果(我没有理会warning):
5、除去字符串里的空格:
program blankimplicit nonecharacter(len=30)::stringwrite(*,*)"input a string"read(*,*)stringinteger stringlenstringlen=len-trim(string)do i=1,stringleninteger j=i+1if(string(i)==" ")thenstring(i)=string(j)end ifend dostop
end program blank
!还是会出现len没有定义的问题查了很多,也没有查到为什么
!emm...就放着吧,反正我以后用Fortran大致要做的是地震道数据的处理,
!对字符串的操作可能并不是很多,就放着吧
hhh,到这里Fortran的所有基础语法就已经差不多了,已经可以向着数组迈进了,数组我会分两天进行学习,第一天是固定数组,第二天是可变数组,这两个都是非常重要的数据结构,可以说,没有数组的支撑,一个程序是很难完成设计者所要完成的功能的。
ok,控制流就到这里了,byebye!
Fortran学习3:控制流2:循环相关推荐
- Python编程语言学习:在for循环中如何同时使用2个变量或者3个变量
Python编程语言学习:在for循环中如何同时使用2个变量或者3个变量 目录 在for循环中如何同时使用2个变量或者3个变量 在for循环中如何同时使用2个变量
- python里while的用法_Python学习笔记之While循环用法分析
本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...
- python中while的用法_Python学习笔记之While循环用法分析
本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...
- Fortran学习杂记(一)
Fortran学习杂记(一) 1. 内置函数 1) 数值运算 常见:- abs( ) - aimag( ) -conj( ) -max( ) ** -min( ) - mod(a, b) - real ...
- autoit学习笔记---“While…WEnd”循环
autoit学习笔记---"While-WEnd"循环 (2012-03-26 16:10:58) 标签: 杂谈 分类: 学习笔记之autoit "While-WEnd& ...
- 深度学习小白专场之循环神经网络和递归神经网络
深度学习小白专场之循环神经网络和递归神经网络 全连接神经网络和卷积神经⽹网络,都只能单独的去处理单个的输入,且前后的输入之间毫无关系.但是在一些任务中,我们需要更好的去处理序列的信息,即前后的输⼊之间 ...
- while用法python_Python学习笔记之While循环用法分析
本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...
- Linux嵌入式学习---c语言之循环结构
Linux嵌入式学习---c语言之循环结构 一.while语句循环 1.1一般形式 1.2累加求和 二.do...while语句循环 2.1do....while语句一般形式 2.2do....whi ...
- 【从零开始学习 SystemVerilog】3.1.4、SystemVerilog 控制流—— forever 循环
一个永远的循环会永远运行,或者运行无限时间. 文章目录 语法 语法 forever// Single statementforever begin// Multiple statements end ...
最新文章
- CV算法复现(分类算法4/6):GoogLeNet(2014年 谷歌)
- NOIP2017大爆炸
- Bootstrap学习遇到的role属性--- 无障碍网页应用属性
- mongodb默认的用户名密码_MongoDB 设置账号和密码
- 【Python基础】安利3个Python数据分析EDA神器!
- php使用fputcsv进行大数据的导出
- 7-39 魔法优惠券 (25 分)(思路加解释 用容器做的)加油兄弟们
- C语言 指针数组 - C语言零基础入门教程
- SQLServer2008数据库还原失败 恢复失败
- webpack 优化react项目没有解决的问题
- 关于Mac下mysql8.0的启动
- Windows下WSL的root密码忘记解决办法
- 传统企业如何面对电子商务的发展
- 通知器(Notifier)
- 简单学JAVA-Java学习方法-JavaSE阶段
- 极限的无穷小和无穷大
- GitHub如何使用
- idea 使用debug模式自动编译的设置
- 平安夜的真实来历(平安夜的由来)
- Apache与文件解析漏洞详解