首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Fortran do循环不计算输入的变量

Fortran do循环不计算输入的变量
EN

Stack Overflow用户
提问于 2019-02-21 22:01:18
回答 2查看 299关注 0票数 0

当我只运行摄氏度的代码时,我得到了下面的代码结果:

代码语言:javascript
复制
    program temperature
! F C temperature conversion
implicit none
real :: celcius=0.0, fahrenheit=0.0

integer:: t,n
print *,'enter the number of lines'
read*, n
do n=1,n
print*,'enter the  value of t: one per line',n
read*, t
celcius=5/9*(t-32)

enddo
do n=1,n
print*, t, celcius
enddo
end program

结果

代码语言:javascript
复制
    enter the number of lines
3
 enter the  value of t: one per line           1
50
 enter the  value of t: one per line           2
20
 enter the  value of t: one per line           3
10
          10   0.00000000E+00
          10   0.00000000E+00
          10   0.00000000E+00
          10   0.00000000E+00

很明显,编译器在计算中没有选择t的值。

EN

回答 2

Stack Overflow用户

发布于 2019-02-21 22:12:13

您至少有三个问题:

  1. 表达式5/9*(t-32)的求值顺序是从左到右,因此5/9部分是一个整数(截断)除法,始终生成0。零点与任何有限点的乘积是零。有几种方法可以解决这个问题,但更简单的方法之一是重写表达式,因为5 * (t - 32) / 9.
  2. Your变量tcelcius是标量。他们每个人一次只持有一个号码。在您的第一个循环中,您将多个值按顺序分配给每个循环。当您稍后执行第二次循环以打印结果时,只能访问分配给每个变量的最后一个值。如果您必须将输出推迟到读取所有输入之后,那么处理它的一种方法是使tcelcius数组具有足够的大小,并将值存储在不同的元素中。(还要注意:英语单词的正确拼写是"celsius".)
  3. Per @albert in comments,在索引的do循环结束后,迭代变量的值是它在下一次循环迭代中的值(如果有的话)。因此,通过将变量n同时用作迭代变量和上限,可以使每次循环后的值与以前不同。有几种方法可以解决这个问题,但我强烈建议您简单地避免重用n作为迭代变量。避免有目的的迭代变量并不能提高效率。
票数 1
EN

Stack Overflow用户

发布于 2019-02-22 04:19:23

您有几个选项。

程序温度!F C温度转换隐式无实数,可分配::华氏(:)整数::n打印*,‘输入行数’读取*,n分配(华氏(N))打印*,‘输入t的值:一行上的所有项目’读取*,华氏打印*,'F:',华氏打印*,'C:',fahrenheit_to_celcius(华氏)包含纯元素函数fahrenheit_to_celcius(t_f) fahrenheit_to_celcius(T_c) real,

程序温度!F C温度转换隐式无实数::华氏整数::i,n打印*,‘输入行数’读取*,n do i= 1,n打印*,‘输入t的值:每行一个',n读取*,华氏打印*,'F:’,华氏,'C:',fahrenheit_to_celcius(华氏) enddo包含纯元素函数fahrenheit_to_celcius(t_f) result(t_c) real,intent(in) ::t_f real ::t_c t_c = 5.*(t_f-32.)/9。end function fahrenheit_to_celcius end program

注意,我在函数中使用了elemental关键字。这意味着你既可以传递标量,也可以传递数组。对于直接计算来说,这是一个很好的解决方案:例程fahrenheit_to_celcius在这两种情况下都是相同的。

我修复了5/9 (它返回0)和混合变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54808847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档