Fortran Coder

查看: 250|回复: 9

[求助] Fortran判断是否为闰年

[复制链接]

17

帖子

5

主题

0

精华

入门

F 币
93 元
贡献
51 点
发表于 2020-7-2 09:15:10 | 显示全部楼层 |阅读模式
Fortran判断是否为闰年,求教老师看一下哪里出错
[Fortran] 纯文本查看 复制代码
program test0504
implicit none
integer year
write(*,*) "Please input the yaer:"
read(*,*) year
!if((mod(yaer,4.0)==0).or.(mod(yaer,100.0)==0.and.mod(yaer,400.0)==0)) then
if((yaer%4.0==0.0).or.(yaer%100.0==0.0.and.yaer%400.0==0.0)) then
write(*,*) "This year is a leap yaer."
else
write(*,*) "This year is not a leap yaer."
end if
stop
end

错误:
错误        1         error #5082: Syntax error, found REAL_CONSTANT '4.0' when expecting one of: <IDENTIFIER> [              
错误        2         error #5082: Syntax error, found REAL_CONSTANT '100.0' when expecting one of: <IDENTIFIER> [        
错误        3         error #5082: Syntax error, found REAL_CONSTANT '400.0' when expecting one of: <IDENTIFIER> [               
错误        4         error #5082: Syntax error, found ')' when expecting one of: , (/ : ]        
错误        5        Compilation Aborted (code 1)        



回复

使用道具 举报

1538

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1417 元
贡献
936 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-7-2 10:54:05 | 显示全部楼层
[Fortran] 纯文本查看 复制代码
program test0504
  implicit none
  integer year
  write(*,*) "Please input the yaer:"
  read(*,*) year
  if((mod(year,4)==0).or.(mod(year,100)==0.and.mod(year,400)==0)) then
    write(*,*) "This year is a leap yaer."
  else
    write(*,*) "This year is not a leap yaer."
  end if
end program test0504

546

帖子

1

主题

0

精华

大宗师

F 币
2702 元
贡献
1721 点
发表于 2020-7-2 22:29:51 | 显示全部楼层
(mod(year,400)==0) .or. (mod(year,100)/=0.and.mod(year,4)==0)

160

帖子

14

主题

0

精华

大宗师

F 币
3921 元
贡献
774 点
发表于 2020-7-3 00:21:57 | 显示全部楼层
li913 发表于 2020-7-2 22:29
(mod(year,400)==0) .or. (mod(year,100)/=0.and.mod(year,4)==0)

这个写法不符合尽量减少计算量的原则,虽然没啥大影响……
最节省计算量的写法应该是三个表达式的次序完全倒过来

160

帖子

14

主题

0

精华

大宗师

F 币
3921 元
贡献
774 点
发表于 2020-7-3 00:23:49 | 显示全部楼层
fcode 发表于 2020-7-2 10:54
[mw_shl_code=fortran,true]program test0504
  implicit none
  integer year

版主,判断表达式似乎不太对劲……

17

帖子

5

主题

0

精华

入门

F 币
93 元
贡献
51 点
 楼主| 发表于 2020-7-3 09:09:49 | 显示全部楼层
谢谢各位老师,改好的程序如下,可以正常运行了
[Fortran] 纯文本查看 复制代码
program test0504
  implicit none
  integer year
  write(*,*) "Please input the yaer:"
  read(*,*) year
  if((mod(year,400)==0).or.(mod(year,100)/=0.and.mod(year,4)==0)) then
   write(*,*) "This year is a leap yaer."
  else
   write(*,*) "This year is not a leap yaer."
  end if
  stop
end program test0504

17

帖子

5

主题

0

精华

入门

F 币
93 元
贡献
51 点
 楼主| 发表于 2020-7-3 09:25:09 | 显示全部楼层
liudy02 发表于 2020-7-3 00:21
这个写法不符合尽量减少计算量的原则,虽然没啥大影响……
最节省计算量的写法应该是三个表达式的次序完 ...

谢谢老师的指教,问题处理好了

1538

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1417 元
贡献
936 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2020-7-3 09:57:47 | 显示全部楼层
liudy02 发表于 2020-7-3 00:23
版主,判断表达式似乎不太对劲……

的确不对,光想着改语法问题了,没考虑逻辑错误。

160

帖子

14

主题

0

精华

大宗师

F 币
3921 元
贡献
774 点
发表于 2020-7-7 09:41:29 | 显示全部楼层
本帖最后由 liudy02 于 2020-7-7 09:44 编辑
15235312522 发表于 2020-7-3 09:25
谢谢老师的指教,问题处理好了

最合理的判断语句应该是:
(mod(year,4)==0 .and. (mod(year,100)/=0 .or. mod(year,400)==0))
这样才是最节省计算量的办法

17

帖子

5

主题

0

精华

入门

F 币
93 元
贡献
51 点
 楼主| 发表于 2020-7-14 10:45:36 | 显示全部楼层
收到,谢谢老师
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-8-14 22:38

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表