第 十 章 結 構 與 組 合

我 們 在 前 一 章 介 紹 過 陣 列 ,也 說 明 了 陣 列 對 於 大 量 的 資 料 處 理 有 相 當 大 的 助 益 ,但 大 部 份 的 程 式 設 計 領 域 中 ,會 用 到 不 少 的 資 料 集 合 , 例 如 我 們 個 人 資 料 是 由 個 人 的 身 份 字 號 , 姓 名 , 性 別 , 年 齡 , 地 址 , 電 話 等 資 料 所 組 成 ,如 僅 靠 陣 列 來 處 理 ,會 顯 得 雜 亂 ,不 易 管 理 .幸 好 C 語 言 提 供 了 結 構 ( structure ) 的 功 能 , 使 得 程 式 在 處 理 這 類 的 資 料 集 合 有 較 佳 的 效 果 ,且 結 構 也 會 在 我 們 未 來 的 程 式 設 計 的 過 程 中 佔 有 舉 足 輕 重 的 地 位 ,所 以 好 好 的 學 習 結 構 是 本 章 的 任 務 .


10-1 結 構 ( structure)

10-1-1 結 構 的 宣 告 與 使 用 規 則

<1> 結 構 的 宣 告 方 式 如 下 所 述 :

             struct   結構名稱  {
                                        .
                                        .
                                    結構所屬成員
                                        .
                                        .
                                };

             struct   結構名稱   結構變數名稱 ;

  
    或

             struct   結構名稱  {
                                        .
                                        .
                                    結構所屬成員
                                        .
                                        .
                                }結構變數名稱;

   
    例如:
        example 10-1-1:

             struct   personal  {
                                   int id[10];
                        	   char name[8];
                                   int age;
                                   char sex;
                                   char address[20];
                                   char tel[12];
                                };

             struct personal taipei;

    或
        example 10-1-2:

             struct   personal  {
                                   int id[10];
                        	   char name[8];
                                   int age;
                                   char sex;
                                   char address[20];
                                   char tel[12];
                                }taipei;


<2> 由 上 述 宣 告 的 例 子 來 說 明 ,personal 為 此 結 構 之 名 稱 ,又 稱 為 標 籤 ( tag ) ,而 在 { } ( 括 號 ) 內 的 敘 述 則 是 personal 這 個 結 構 的 成 員 ,taipei 為 personal 這 個 結 構 的 變 數 名 稱 .最 後 在 結 構 宣 告 結 束 時 須 加 一 ; ( 分 號 ) 表 示.

<3> 結 構 的 成 員 其 資 料 型 態 可 以 使 用 整 數 ,浮 點 數 及 字 元 ,也 可 使 用 陣 列 與 指 標 變 數 . 另 外 結 構 變 數 可 使 用 陣 列 變 數 ,且 可 一 次 宣 告 多 個 .

<4> 結 構 的 名 稱 與 結 構 變 數 名 稱 的 命 名 方 式 同 程 式 中 所 使 用 之 變 數 ,請 參 考 相 關 之 章 節 .

<5> 結 構 的 宣 告 與 使 用 亦 分 為 內 ,外 部 .所 謂 內 部 宣 告 即 表 示 結 構 的 宣 告 在 程 式 的 { } ( 括 號 ) 內 完 成 ,反 之 ,如 果 結 構 的 宣 告 在 程 式 的 { } ( 括 號 ) 外 完 成 稱 外 部 宣 告 .內 外 部 結 構 之 使 用 同 內 外 部 變 數 ,請 參 考 相 關 之 章 節 .


10-1-2 結 構 的 使 用

我 們 可 以 利 用 example 10-1-1 或 是 example 10-1-2 的 方 式 來 作 結 構 變 數 taipei 的 宣 告 ,當 結 構 變 數 taipei 宣 告 完 成 後 即 表 示 其 成 員 包 含 下 列 六 項 :

              taipei.id      ( 或 taipei->id )
              taipei.name    ( 或 taipei->name )
              taipei.age     ( 或 taipei->age )
              taipei.sex     ( 或 taipei->sex )
              taipei.address ( 或 taipei->address )
              taipei.tel     ( 或 taipei->tel )

現 在 我 們 可 以 對 這 六 個 成 員 來 做 資 料 的 存 取 ,達 成 使 用 結 構 來 完 成 程 式 設 計 之 目 地 !! 舉 例 example 10-1-3 說 明 程 式 如 何 將 鍵 盤 輸 入 的 資 料 放 入 結 構 成 員 中 ,再 將 結 構 成 員 之 內 容 秀 至 螢 幕 :

           Example 10-1-3 :

                #include 
                main()
                {
                   struct personal  {
                                      char id[10];
                                      char name[8];
                                      int age;
                                      char sex;
                                      char address[20];
                                      char tel[12];
                                    } taipei;

                   printf("Please input your id : ");
                   gets(taipei.id);
                   printf("\nPlease input your name : ");
                   gets(taipei.name);
                   printf("\nPlease input your address : ");
                   gets(taipei.address);
                   printf("\nPlease input your telephone number : ");
                   gets(taipei.tel);
                   printf("\nPlease input your sex ( M or F ) : ");
                   scanf("%c",&taipei.sex);
                   printf("\nPlease input your age : ");
                   scanf("%d",&taipei.age);

                   printf("\nYour id : %s\n",taipei.id);
                   printf("Your name : %s\n",taipei.name);
                   printf("Your age : %d\n",taipei.age);
                   printf("Your sex : %c\n",taipei.sex);
                   printf("Your adderss : %s\n",taipei.address);
                   printf("Your telephone number : %s\n",taipei.tel);

                }

            執 行 結 果 :

                   Please input your id : 007
                   Please input your name : Mike
                   Please input your address : Taipei
                   Please input your telephone number : 12345678
                   Please input your sex ( M or F ) : M
                   Please input your age : 29

                   Your id : 007
                   Your name : Mike
                   Your age : 29
                   Your sex : M
                   Your adderss : Taipei
                   Your telephone number : 12345678


10-2 組 合 ( union )

待 續 !!!!!!!



           Example 10-2-1 :




           Example 10-2-2 :



10-3 定 義 新 的 資 料 型 態 ( typedef )

待 續 !!!!!!!



           Example 10-3-1 :



回 到 C 語 言 入 門 教 室 首 頁