Fortran - 派生数据类型

Fortran 允许您定义派生数据类型。 派生数据类型也称为结构,它可以由不同类型的数据对象组成。

派生数据类型用于表示记录。 例如。 您想要跟踪图书馆中的图书,您可能需要跟踪每本书的以下属性 −

  • Title
  • Author
  • Subject
  • Book ID

定义派生数据类型

要定义派生数据类型,请使用type 和end type 语句。 。 type 语句定义了一种新的数据类型,为您的程序提供了多个成员。 类型声明的格式是这样的 −

type type_name      
   declarations
end type 

这是声明 Book 结构的方式 −

type Books
   character(len = 50) :: title
   character(len = 50) :: author
   character(len = 150) :: subject
   integer :: book_id
end type Books

访问结构成员

派生数据类型的对象称为结构。

可以在类型声明语句中创建 Books 类型的结构,例如 −

type(Books) :: book1 

可以使用组件选择符 (%) 访问该结构的组件 −

book1%title = "C Programming"
book1%author = "Nuha Ali"
book1%subject = "C Programming Tutorial"
book1%book_id = 6495407

请注意,% 符号前后没有空格。

示例

下面的程序说明了上述概念 −

program deriveDataType

   !类型声明
   type Books
      character(len = 50) :: title
      character(len = 50) :: author
      character(len = 150) :: subject
      integer :: book_id
   end type Books
   
   !声明类型变量
   type(Books) :: book1 
   type(Books) :: book2 
   
   !访问结构的组件
   
   book1%title = "C Programming"
   book1%author = "Nuha Ali"
   book1%subject = "C Programming Tutorial"
   book1%book_id = 6495407 
   
   book2%title = "Telecom Billing"
   book2%author = "Zara Ali"
   book2%subject = "Telecom Billing Tutorial"
   book2%book_id = 6495700
  
   !显示信息
   
   Print *, book1%title 
   Print *, book1%author 
   Print *, book1%subject 
   Print *, book1%book_id  
   
   Print *, book2%title 
   Print *, book2%author 
   Print *, book2%subject 
   Print *, book2%book_id  

end program deriveDataType

当上面的代码被编译并执行时,会产生以下结果 −

 C Programming                                     
 Nuha Ali                                          
 C Programming Tutorial            
   6495407
 Telecom Billing                                   
 Zara Ali                                          
 Telecom Billing Tutorial            
   6495700

结构体数组

您还可以创建派生类型的数组 −

type(Books), dimension(2) :: list

数组的各个元素可以通过以下方式访问 −

list(1)%title = "C Programming"
list(1)%author = "Nuha Ali"
list(1)%subject = "C Programming Tutorial"
list(1)%book_id = 6495407

下面的程序说明了这个概念 −

program deriveDataType

   !类型声明
   type Books
      character(len = 50) :: title
      character(len = 50) :: author
      character(len = 150) :: subject
      integer :: book_id
   end type Books
   
   !声明Books数组
   type(Books), dimension(2) :: list 
    
   !访问结构的组件
   
   list(1)%title = "C Programming"
   list(1)%author = "Nuha Ali"
   list(1)%subject = "C Programming Tutorial"
   list(1)%book_id = 6495407 
   
   list(2)%title = "Telecom Billing"
   list(2)%author = "Zara Ali"
   list(2)%subject = "Telecom Billing Tutorial"
   list(2)%book_id = 6495700
  
   !显示信息
   
   Print *, list(1)%title 
   Print *, list(1)%author 
   Print *, list(1)%subject 
   Print *, list(1)%book_id  
   
   Print *, list(1)%title 
   Print *, list(2)%author 
   Print *, list(2)%subject 
   Print *, list(2)%book_id  

end program deriveDataType

当上面的代码被编译并执行时,会产生以下结果 −

C Programming                                     
Nuha Ali                                          
C Programming Tutorial               
   6495407
C Programming                                     
Zara Ali                                          
Telecom Billing Tutorial                                      
   6495700