文章目录
- 概述
- hello,world
- 环境
- 接收输入与输出
- 读取csv文件
- if and select case
- 循环
- format
- read,write format
概述
FORTRAN是英文“FORmulaTRANslator”的缩写,译为“公式翻译器”,它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。
Fortran语言的最大特性是接近数学公式的自然描述,在计算机里具有很高的执行效率。易学,语法严谨。可以直接对矩阵和复数进行运算,这一点类似matlab。自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。很多专用的大型数值运算计算机针对Fortran做了优化。广泛地应用于并行计算和高性能计算领域。Fortran90,Fortran95,Fortran2003的相继推出使Fortran语言具备了现代高级编程语言的一些特性。
hello,world
环境
codeblock + gfortran
- linux
安装 gfortran和codeblock即可 - windows
下载相应版本mingw-w64
https://sourceforge.net/projects/mingw-w64/files/
然后解压后,配置path路径
最后,codeblock新增项目,选择fortran
并配置编译器
program hello
implicit none
write (*,*) "Hello,World!"
end program
- code::blocks中文设置
没有好的方法,直接将文件保存为gbk格式。
不要使用utf-8
接收输入与输出
program hello
implicit none
integer::age
character(len=10) ::name
write (*,*) '您叫什么名字?'
read(*,*) name
write (*,*) '您今年多少岁?'
read(*,*) age
write (*,*) 'Hi,欢迎',name,'加入学习fortran的队伍!'
write (*,*) '您今年',age,'岁!'
end program
读取csv文件
以读取机器学习训练集iris为例。
program aiFortran
implicit none
character(20)::class_name
character(200)::file_name
integer::record_count=0
integer::io_status
integer::read_status
integer::path_pos
character(200)::err_msg
real::sepal_length,sepal_width,petal_length,petal_width
type::iris_info
real::iris_sepal_length
real::iris_sepal_width
real::iris_petal_length
real::iris_petal_width
character(len=20)::iris_class_name
end type iris_info
type(iris_info),dimension(200)::iris_datas
type(iris_info)::iris_data
character(len=255) :: cmd
call get_command(cmd)
path_pos=index(cmd, '\bin' , .true.)
file_name=trim(cmd(1:path_pos))//"iris\iris.data"
open (unit=10,file=file_name,status='old',action='read',iostat=io_status,iomsg=err_msg)
if (io_status/=0) then
write(*,90) file_name,err_msg
90 format ('读取iris文件',A200,'异常:',A200)
else
write (*,*) "萼片长度,萼片宽度,花瓣长度,花瓣宽度,分类"
read_file:do
read (10,*,iostat=read_status) sepal_length,sepal_width,petal_length,petal_width,class_name
if (read_status/=0) exit
record_count=record_count+1
iris_data=iris_info(sepal_length,sepal_width,petal_length,petal_width,class_name)
iris_datas(record_count)=iris_data
write (*,100) iris_data
end do read_file
close(unit=10)
write (*,*) "共读取",record_count,"条数据!"
endif
100 format(4(F5.1,1X),A50)
end program aiFortran
if and select case
您叫什么名字?
张三
您数学、英语、政治成绩多少分?
98,78,55
Hi,欢迎张三 !
您平均分: 77 !
您真是一个数学天才!
您政治要加油了!
Process returned 0 (0x0) execution time : 17.262 s
Press any key to continue.
program hello
implicit none
integer::math_score,english_score,politics_score
character (len=10)::name
write (*,*) '您叫什么名字?'
read(*,*) name
write (*,*) '您数学、英语、政治成绩多少分?'
read(*,*) math_score,english_score,politics_score
write (*,*) 'Hi,欢迎',name,'!'
write (*,*) '您平均分:',(math_score+english_score+politics_score)/3,'!'
math:select case (math_score)
case (101:) math
write (*,*) '您数学成绩真实吗?'
case (60:79) math
write (*,*) '您数学及格了!'
case (80:79) math
write (*,*) '您数学比较好了!'
case (80:95) math
write (*,*) '您数学很优异!'
case (96:100) math
write (*,*) '您真是一个数学天才!'
end select math
english:if (english_score >85 )then
write (*,*) '您英语比较好了!'
else if (english_score >95) then
write (*,*) '您真是一个英语天才!'
end if english
politics:select case (politics_score)
case (:70)
write (*,*) '您政治要加油了!'
case (96,97,98,99,100)
write (*,*) '您真是一个政治天才!'
case (101:)
write (*,*) '您政治成绩真实吗?'
case default
write (*,*) '您政治比较好了!'
end select politics
end program
上面程序有一个错误
english:if (english_score >85 )then
write (*,*) '您英语比较好了!'
else if (english_score >95) then
write (*,*) '您真是一个英语天才!'
end if english
您叫什么名字?
张三
您数学、英语、政治成绩多少分?
89,98,77
Hi,欢迎张三 !
您平均分: 88 !
您数学很优异!
您英语比较好了!
您政治比较好了!
Process returned 0 (0x0) execution time : 12.550 s
Press any key to continue.
修改一下
program hello
implicit none
integer::math_score,english_score,politics_score
character (len=10)::name
write (*,*) '您叫什么名字?'
read(*,*) name
write (*,*) '您数学、英语、政治成绩多少分?'
read(*,*) math_score,english_score,politics_score
write (*,*) 'Hi,欢迎',name,'!'
write (*,*) '您平均分:',(math_score+english_score+politics_score)/3,'!'
math:select case (math_score)
case (101:) math
write (*,*) '您数学成绩真实吗?'
case (60:79) math
write (*,*) '您数学及格了!'
case (80:79) math
write (*,*) '您数学比较好了!'
case (80:95) math
write (*,*) '您数学很优异!'
case (96:100) math
write (*,*) '您真是一个数学天才!'
end select math
english:if (english_score >95 )then
write (*,*) '您真是一个英语天才!'
else if (english_score >85) then
write (*,*) '您英语比较好了!'
end if english
politics:select case (politics_score)
case (:70)
write (*,*) '您政治要加油了!'
case (96,97,98,99,100)
write (*,*) '您真是一个政治天才!'
case (101:)
write (*,*) '您政治成绩真实吗?'
case default
write (*,*) '您政治比较好了!'
end select politics
end program
您叫什么名字?
张三
您数学、英语、政治成绩多少分?
88,99,44
Hi,欢迎张三 !
您平均分: 77 !
您数学很优异!
您真是一个英语天才!
您政治要加油了!
Process returned 0 (0x0) execution time : 11.435 s
Press any key to continue.
循环
求素数
program hello
implicit none
integer::num,i
logical::is_prime_number=.TRUE.
write (*,*) "请输入数:"
read (*,*) num
do i=2,num-1
if (mod(num,i)==0) then
is_prime_number=.FALSE.
write (*,*) num,'/',i,'=',num/i
exit
endif
end do
if (is_prime_number) then
write (*,*) num,"是素数"
else
write (*,*) num,"不是素数"
end if
end program
program hello
implicit none
integer::i,max_num,n
logical::is_prime_number
write (*,*) "请输入求素数的最大范围:"
read (*,*) max_num
do n=3,max_num-1
is_prime_number=.TRUE.
do i=2,n-1
if (mod(n,i)==0) then
is_prime_number=.FALSE.
write (*,*) n,'/',i,'=',n/i
exit
endif
end do
if (is_prime_number) then
write (*,*) n,"是素数"
end if
end do
end program
format
11,342,992,345.4253345,202.32454532,0.023435
11 342 992 345.43 0.20232E+03 2.343500033E-02
Process returned 0 (0x0) execution time : 14.987 s
Press any key to continue.
program format_output
implicit none
integer::i,j,k
real::x1,x2,x3
read (*,*) i,j,k,x1,x2,x3
write (*,100) i,j,k,x1,x2,x3
100 format(" ",2I6,1X,I0,1X,F0.2,1X,E16.5,1X,ES15.9)
end program format_output
read,write format
program learn
implicit none
integer::id
real::math_score,english_score,politics_score
write(*,*) "请输入数据(学号,数学成绩,英语成绩,政治成绩):"
read (*,100) id,math_score,english_score,politics_score
write (*,100) id,math_score,english_score,politics_score
100 format(I5,3F6.2)
end program learn
请输入数据(学号,数学成绩,英语成绩,政治成绩):
1,87.34,98.22,69.54
1 87.34 98.22 69.54
Process returned 0 (0x0) execution time : 13.665 s
Press any key to continue.
program learn
implicit none
character(10)::name
integer::id
real::math_score,english_score,politics_score
write(*,*) "请输入数据(学号,姓名,数学成绩,英语成绩,政治成绩):"
read (*,*) id,name,math_score,english_score,politics_score
write (*,100) id,name,math_score,english_score,politics_score
100 format(I5,A10,3F6.2)
end program learn
请输入数据(学号,姓名,数学成绩,英语成绩,政治成绩):
1,张三,89.31,86.81,76.34
1张三 89.31 86.81 76.34
Process returned 0 (0x0) execution time : 20.302 s
Press any key to continue.