Zhiguo 的个人资料Flexalice照片日志列表更多 工具 帮助

Flexalice

blog my feeling, blog my life

Liu Zhiguo

职业
地点
感谢访问!
请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。
访问统计|true|





JHU学生手刃窃贼

前晚凌晨一点,一名盗贼潜入霍普金斯学校附近一所公寓欲行盗窃,被居住于该公寓的一名本科生发现。这名学生手持日本武士刀,当场砍断窃贼的手臂,并刺入其胸口,令其当场毙命。据悉,该窃贼是一名惯犯,刚从号子里放出来不久,不料如此死于非命。

枪击案

昨晚10点左右,我和老婆听到几声很沉闷的枪响,当时感觉距离很近。不到3分钟,就有救护车风驰电掣的从我们楼前经过。我们当时就想,可能又有人被老黑做了。
果然,今天看到Baltimore Sun上这则消息:
那条街离我们的apartment也就不到2 miles的距离。
 

静态局部变量

Fortran中的局部变量默认为静态局部变量,即每次子程序调用完毕,其局部变量的值可以保存至下次调用。比如:
      program test
      implicit none
      call s()
      call s()
      call s()
      stop
      end program test
     
      subroutine s()
      implicit none
      integer m
C    save m
      data m /0/
      m=m+1
      write(*, *) "Subroutine s() called ", m, " times."
      end
 
程序输出为:
 Subroutine s() called            1  times.
 Subroutine s() called            2  times.
 Subroutine s() called            3  times.
其中,语句save m显式地指定保存局部变量m的值,不过由于所有局部变量默认都被保存,注释该语句对结果无影响。那么,如何才能使局部变量像C语言中的局部变量一样,每次调用时具有相同的初值呢?最简单的办法是使用赋值语句,而非data初始化语句。这样每次调用时,赋值语句就覆盖了上次调用时保留下的值。程序如下:
      program test
      implicit none
      call s()
      call s()
      call s()
      stop
      end program test
     
      subroutine s()
      implicit none
      integer m
      m=0
      m=m+1
      write(*, *) "Subroutine s() called ", m, " times."
      end
 
输出如下:
 Subroutine s() called            1  times.
 Subroutine s() called            1  times.
 Subroutine s() called            1  times.
 

Fortran 77中的变量类型

 Fortran 77的变量类型相比较于C/C++而言更简单,只有两种:一种是common block,类似于C/C++的全局变量;另一种是局部变量,与C/C++中的相似。其中,common block比较难懂一点。就我的理解而言,common block其实就是定义了一块连续的公用内存,其存放的数据格式按照common语句定义的变量顺序进行解释。这块内存位于静态数据空间,而局部变量位于栈空间。
 
为了证实这两种变量类型在内存中的布局,可以用一个小程序来显示common block变量和局部变量的内存地址。程序如下:
 

      program test1
      implicit none
C   global
      integer a, b, c
      data b,c /1,2/
      common /kk/ b, a(50), c
C   local
      integer j
      do j=1,50
      a(j)=j
      enddo
      print *, Loc(a), " ", Loc(b), " ", Loc(c), " ", Loc(j)
      call s1()
      stop
      end program test1
     
 subroutine s1()
      integer e, f, g, i
      common /kk/ f, e(50), g
      f=f+1
      g=g+1
      do i=1,50
      e(i)=e(i)+1
      enddo
      print *, Loc(e), " ", Loc(f), " ", Loc(g), " ", Loc(i)
      end
 
运行结果为:
     4501588       4501584       4501788       4544052
     4501588       4501584       4501788       4544056
Press any key to continue
 
可以看出,变量在common block “kk”中的分布为integer, interger(50), interger,其内存地址是连续的。
而局部变量i和j分布于更远的地址空间,且二者地址连续,说明其在栈空间上。
 
因此,common block有点类似C中的structure,将一堆数据放在一块连续的内存中,然后按照名字去索引。
只不过common block中的成员名是可以重新定义的,只要索引时是按照common语句中出现的顺序就行了,
这种行为很像子程序的参数传递。
 
 

华氏转摄氏心算口诀

俺的原创发明哦 :)
 
华氏温度-32
所得数字/2 (大概摄氏温度)
所得数字小数点左移一位,然后与原数字相加(精确摄氏温度)