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 Moo"
    book1%subject = "C Programming Tutorial"
    book1%book_id = 6495407
    
    Note that there are no spaces before and after the % symbol.

    例子

    以下程序说明了上述概念 -
    
    program deriveDataType
       !type declaration
       type Books
          character(len = 50) :: title
          character(len = 50) :: author
          character(len = 150) :: subject
          integer :: book_id
       end type Books
       
       !declaring type variables
       type(Books) :: book1 
       type(Books) :: book2 
       
       !accessing the components of the structure
       
       book1%title = "C Programming"
       book1%author = "Nuha Moo"
       book1%subject = "C Programming Tutorial"
       book1%book_id = 6495407 
       
       book2%title = "Telecom Billing"
       book2%author = "Alex Moo"
       book2%subject = "Telecom Billing Tutorial"
       book2%book_id = 6495700
      
       !display book info
       
       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 Moo                                          
     C Programming Tutorial            
       6495407
     Telecom Billing                                   
     Alex Moo                                          
     Telecom Billing Tutorial            
       6495700
    
  • 结构数组

    您还可以创建派生类型的数组 -
    
    type(Books), dimension(2) :: list
    
    数组的各个元素可以访问为 -
    
    list(1)%title = "C Programming"
    list(1)%author = "Nuha Moo"
    list(1)%subject = "C Programming Tutorial"
    list(1)%book_id = 6495407
    
    以下程序说明了这个概念 -
    
    program deriveDataType
       !type declaration
       type Books
          character(len = 50) :: title
          character(len = 50) :: author
          character(len = 150) :: subject
          integer :: book_id
       end type Books
       
       !declaring array of books
       type(Books), dimension(2) :: list 
        
       !accessing the components of the structure
       
       list(1)%title = "C Programming"
       list(1)%author = "Nuha Moo"
       list(1)%subject = "C Programming Tutorial"
       list(1)%book_id = 6495407 
       
       list(2)%title = "Telecom Billing"
       list(2)%author = "Alex Moo"
       list(2)%subject = "Telecom Billing Tutorial"
       list(2)%book_id = 6495700
      
       !display book info
       
       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 Moo                                          
    C Programming Tutorial               
       6495407
    C Programming                                     
    Alex Moo                                          
    Telecom Billing Tutorial                                      
       6495700