Fortran Coder

查看: 8803|回复: 5
打印 上一主题 下一主题

[子程序] 对同一个常数,函数前后输出值不同

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
跳转到指定楼层
楼主
发表于 2016-10-20 21:17:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
主程序中首尾两个is_prime(32)输出值不同,这是怎么回事?
把do循环删除后又变得正常了。
[Fortran] 纯文本查看 复制代码
program test
	implicit none
	logical,external :: sum_is_5,is_prime
	integer :: n
	print *,is_prime(32)
	do n=2,100
		if(sum_is_5(n).and.is_prime(n)) print *,n
	end do
	print *,is_prime(32)
end program test
logical function sum_is_5(i)
	implicit none
	integer :: i,digit(3)=0
	sum_is_5=.false.
	digit(1)=mod(i,10)
	digit(2)=mod(i/10,10)
	digit(3)=i/100
	if(sum(digit)==5) sum_is_5=.true.
end function sum_is_5
logical function is_prime(j)
	implicit none
	integer :: j,k=2
	is_prime=.true.
	do while(k<j)
		if(mod(j,k)==0) then
			is_prime=.false.
			exit
		end if
		k=k+1
	end do
end function is_prime

123.PNG (31.96 KB, 下载次数: 242)

123.PNG
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

59

帖子

2

主题

0

精华

大师

F 币
810 元
贡献
476 点
沙发
发表于 2016-10-20 23:22:03 | 只看该作者
本帖最后由 kerb 于 2016-10-20 23:24 编辑

这种判别质数效率比较低

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
板凳
发表于 2016-10-21 09:42:45 | 只看该作者
子过程中,定义时赋值(24行,k),变量具有save属性。拆开写:
integer j, k
k=2

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

地板
发表于 2016-10-21 09:44:23 | 只看该作者
第22行,图片中第24行
  integer :: j,k=2
改为
  integer :: j,k
  k=2

前者 k=2 是第一次赋值。后者 k=2 是每次都赋值。

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
5#
 楼主| 发表于 2016-10-21 10:02:54 | 只看该作者
楚香饭 发表于 2016-10-21 09:44
第22行,图片中第24行
  integer :: j,k=2
改为

原来是这样,改了之后就对了,谢谢

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
6#
 楼主| 发表于 2016-10-21 10:04:44 | 只看该作者
kerb 发表于 2016-10-20 23:22
这种判别质数效率比较低

这个我知道,但是找一百以内的素数没有必要优化
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-25 03:04

Powered by Tencent X3.4

© 2013-2024 Tencent

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