一个程序中循环是非常重要的,他会控制变量进行多次相同运算,在数组操作中有着不可替代的地位,今天就走进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:循环相关推荐

  1. Python编程语言学习:在for循环中如何同时使用2个变量或者3个变量

    Python编程语言学习:在for循环中如何同时使用2个变量或者3个变量 目录 在for循环中如何同时使用2个变量或者3个变量 在for循环中如何同时使用2个变量

  2. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  3. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  4. Fortran学习杂记(一)

    Fortran学习杂记(一) 1. 内置函数 1) 数值运算 常见:- abs( ) - aimag( ) -conj( ) -max( ) ** -min( ) - mod(a, b) - real ...

  5. autoit学习笔记---“While…WEnd”循环

    autoit学习笔记---"While-WEnd"循环 (2012-03-26 16:10:58) 标签: 杂谈 分类: 学习笔记之autoit "While-WEnd& ...

  6. 深度学习小白专场之循环神经网络和递归神经网络

    深度学习小白专场之循环神经网络和递归神经网络 全连接神经网络和卷积神经⽹网络,都只能单独的去处理单个的输入,且前后的输入之间毫无关系.但是在一些任务中,我们需要更好的去处理序列的信息,即前后的输⼊之间 ...

  7. while用法python_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  8. Linux嵌入式学习---c语言之循环结构

    Linux嵌入式学习---c语言之循环结构 一.while语句循环 1.1一般形式 1.2累加求和 二.do...while语句循环 2.1do....while语句一般形式 2.2do....whi ...

  9. 【从零开始学习 SystemVerilog】3.1.4、SystemVerilog 控制流—— forever 循环

    一个永远的循环会永远运行,或者运行无限时间. 文章目录 语法 语法 forever// Single statementforever begin// Multiple statements end ...

最新文章

  1. CV算法复现(分类算法4/6):GoogLeNet(2014年 谷歌)
  2. NOIP2017大爆炸
  3. Bootstrap学习遇到的role属性--- 无障碍网页应用属性
  4. mongodb默认的用户名密码_MongoDB 设置账号和密码
  5. 【Python基础】安利3个Python数据分析EDA神器!
  6. php使用fputcsv进行大数据的导出
  7. 7-39 魔法优惠券 (25 分)(思路加解释 用容器做的)加油兄弟们
  8. C语言 指针数组 - C语言零基础入门教程
  9. SQLServer2008数据库还原失败 恢复失败
  10. webpack 优化react项目没有解决的问题
  11. 关于Mac下mysql8.0的启动
  12. Windows下WSL的root密码忘记解决办法
  13. 传统企业如何面对电子商务的发展
  14. 通知器(Notifier)
  15. 简单学JAVA-Java学习方法-JavaSE阶段
  16. 极限的无穷小和无穷大
  17. GitHub如何使用
  18. idea 使用debug模式自动编译的设置
  19. 平安夜的真实来历(平安夜的由来)
  20. Apache与文件解析漏洞详解

热门文章

  1. MySQL 判断是否周末
  2. win10 加ip地址映射
  3. 3D打印云平台在线显示
  4. 软件定义的网络(中)
  5. linux服务器好管理吗,给初学者Linux服务器管理建议
  6. RBF神经网络基本思想
  7. textarea文本不换行的问题
  8. Android工作经验6年,Android事件分发机制收藏这一篇就够了,分享PDF高清版
  9. 【论文阅读】用于自动中文作文评分的多阶段预训练
  10. 目标定位算法(二)之基于测距的定位算法