第十一章 結構.

Slides:



Advertisements
Similar presentations
第一單元 建立java 程式.
Advertisements

电子成绩单项目实现.
四資二甲 第三週作業 物件導向程式設計.
编译原理上机实习
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
数据结构与算法 数据结构与算法实验
資料結構 Data Structure.
第2章 陣列與結構 (Arrays and Structures)
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
C语言程序设计 第十二章 位运算.
結構(struct).
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
程式設計 博碩文化出版發行.
第十章 結構(structure)、聯集(union)
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
複習 char name1[20]; //長度為20的字串 char name2[20]; //讀取字串 gets(name1);
列舉(enum).
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
STRUCTURE 授課:ANT 日期:2011/4/25.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
類別(class) 類別class與物件object.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
第四章 C 语言中的输入和输出.
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
|12 結構與列舉型態.
第一單元 建立java 程式.
陣列(Array).
Struct結構 迴圈
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
輸入&輸出 函數 P20~P21.
第十章 指標.
指標
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
樣版.
第三章 数据抽象.
C程序设计.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第3章 数据类型、运算符与表达式.
資料結構簡介 綠園.
第14章 結構與其他資料形式.
陣列與結構.
第四章 C 语言中的输入和输出.
#include <iostream.h>
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
本节内容 指针类型.
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
目录 12.1 位运算符 12.2 位域(位段) 1.
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
Programming & Language Telling the computer what to do
Array(陣列) Anny
SQLite資料庫 靜宜大學資管系 楊子青.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
台大資訊工程學系 資訊系統訓練班 第119期 吳晉賢
安排座位.
C语言基础学习 从外行到入门.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
InputStreamReader Console Scanner
Presentation transcript:

第十一章 結構

本章學習重點 何謂結構 結構變數 結構陣列 巢狀結構 結構與函數 結構與指標 聯合型態

11-1 何謂結構 陣列是數個相同基本型態的元素集合 結構是數個不同基本型態的元素集合 結合數個彼此相關的變數在一個名稱之下,而且可以包含許多不同資料型態的變數。結構宣告如下: struct 結構型態 { 資料型態1 結構成員1 ; 資料型態2 結構成員2 ; 資料型態3 結構成員3 ; : : 資料型態N 結構成員N; };

11-2 結構變數 使用結構型態來宣告變數 1 struct family 2 { 3 char ch; 4 int age; }; 6 分離型宣告 先宣告結構的組成內容,以建立一個新的型態,然後再把變數宣 告成該型態。如下所示: 1 struct family 2 { 3 char ch; 4 int age; }; 6 7 struct family show; /*宣告show為family型態的變數名稱 */

範例 Ch11_1 (1/2) Ch11_1 分離型宣告 1 #include<stdio.h> 2 void main( ) 3 { 4 struct family /*此結構型態名稱為family */ 5 { 6 char name[20]; 7 int age; 8 }; 9 struct family people; /*結構型態family的變數名稱為people */ 10 strcpy(people.name, “John Wang”); /*指定結構的初始值 */ 11 people.age = 18; 12 printf(“Name = %s\n”, people.name); /* people.name,指出people的成員 */ 13 printf(“Age = %d”, people.age); /* people.age 以『.』指出people的成員 */ 14 }

Ch11_1 輸出結果 (2/2) 程式執行結果 Name = John Wang Age = 18

11-2 結構變數 2. 結合型宣告 此種宣告方式是把分離型宣告的兩個階段合而為一。如下所示: 1 struct family 2 { 2 { 3 char ch; 4 int age; 5 } people; /*宣告people為family型態的變數名稱 */

範例 Ch11_2 (1/2) Ch11_2 結合型宣告 1 #include<stdio.h> 2 void main( ) 3 { 4 struct family /*此結構型態名稱為family */ 5 { 6 char name[20]; 7 int age; 8 }people; /*結構型態family的變數名稱為people */ 9 strcpy(people.name, “John Wang”); /*指定結構的初始值 */ 10 people.age = 18; 11 printf(“Name = %s\n”, people.name); /* people.name,指出people的成員 */ 12 printf(“Age = %d”, people.age); /* people.age 以『.』指出people的成員 */ 13 }

Ch11_2 輸出結果 (2/2) 程式執行結果 Name = John Wang Age = 18

11-3 結構陣列(1/2) 結構也可以組成陣列,其語法如下: 例如: struct family people[2] 表示在一結構中,其型態為family,此family有一名稱為people[2]的陣列。元素分別為: people[0] people[1] 此結構若由下頁的宣告而來: struct 結構型態名稱 陣列名稱[元素個數]

11-3 結構陣列(2/2) 則其結構陣列可表示如下: struct family { char name[10]; int age; }; struct family people[2] = {{“John”, 18},{“Mary”, 20}} 則其結構陣列可表示如下: char int people[0] name[10] age people[1] 佔10bytes 佔2bytes

範例 Ch11_3 (1/3) Ch11_3 結構陣列 1 #include<stdio.h> 2 void main( ) 3 { 4 struct company 5 { 6 char name[10]; /* 宣告結構陣列char name[10],然後 7 int salary; 再宣告salary,prize,total為整數型態*/ 8 int prize; 9 int total; 10 };

範例 Ch11_3 (2/3) 11 struct company person[ ] = {{"Mary", 20000, 1500}, 12 {"Jack", 30000, 2000}, 13 {"John", 15000, 5000}, 14 {"Tony", 25000, 2500}}; 15 int i; 16 for(i = 0; i < 4; i++) 17 { 18 person[i].total = person[i].salary + person[i].prize; 19 printf("%s", person[i].name); 20 printf("%8d", person[i].salary); 21 printf("%8d", person[i].prize); 22 printf("%8d\n", person[i].total); 23 } 24 }

Ch11_3輸出結果 (3/3) 程式執行結果 Mary 20000 1500 21500 Jack 30000 2000 32000 John 15000 5000 20000 Tony 25000 2500 27500

11-4 巢狀結構 結構中可以包含結構,而形成一個巢狀結構。如下所示: struct person { char name[20]; int age; }  struct family /*結構family中包含結構person*/ struct person brother; struct person sister; } struct family group = {{“Tony”, 22}, {“Mary”, 20}}; 則 group.brother.name = Tony group.brother.age = 22 group.sister.name = Mary group.sister.age = 20

範例 Ch11_4 (1/2) 1 #include<stdio.h> 2 main() 3 { 3 { 4 struct company 5 { 6 int salary; 7 int prize; 8 }; 9 struct class 10 { 11 struct company person; 12 int total; 13 }p;

範例 Ch11_4 (2/2) 程式執行結果 total = 35000 p.person.salary = 28000; p.person.prize = 7000; p.total = p.person.salary + p.person.prize; printf("total = %d\n", p.total); 18 } 程式執行結果 total = 35000

11-5 結構與函數 通常結構放置於主程式的內部 當有函數存在時,必須將結構置於主程式的外面 main( ) { struct family /*結構在主程式內*/ … }; } 當有函數存在時,必須將結構置於主程式的外面 struct family /*結構在主程式外*/ { … }; main( ) /*主程式*/ …….; fun( ); } fun( ) /*函數*/ …….

範例 Ch11_5 (1/2) Ch11_5 結構與函數之傳值法 1 #include<stdio.h> 2 struct add { 3 int a, b; 4 }number; 5 main() 6 { 7 int total; 8 static struct add number = {50, 70}; 9 total = sum(number.a, number.b); 10 printf("The result : a + b = %d\n", total); 11 } 12 sum(int m, int n) 13 { 14 return(m + n); 15 }

Ch11_5 輸出結果 (2/2) 程式執行結果 The result : a + b = 120

範例 Ch11_6 (1/2) Ch11_6 結構與函數之傳址法 1 #include<stdio.h> 2 struct add { 3 int a, b; 4 }number; 5 main() 6 { 7 int total; 8 static struct add number = {50, 70}; 9 total = sum(&number); 10 printf("The result : a + b = %d\n", total); 11 } 12 sum(ab) 13 struct add *ab; 14 { 15 return(ab -> a + ab -> b); 16 }

Ch11_6 輸出結果 (2/2) 程式執行結果 The result : a + b = 120

11-7 聯合型態 聯合(unions)型態是將不同型態的資料存放在同一記憶體的空間內 前面提到的結構是將每一種不同型態的資料存放在不同記憶體的空間內。 結構中的資料型態必須佔用不同的記憶體空間,而聯合則可以使不同的資料型態佔用相同的記憶體空間。 union 聯合名稱 { 資料型態 聯合項目; }聯合變數; union class { int i; char *name; char *number }student;

範例 Ch11_8 (1/2) Ch11_8 聯合型態 #include<stdio.h> void main() { struct class   {     int i;     char c;    };   union score float b;    struct class student; };

範例 Ch11_8 (2/2) 程式執行結果 size = 4 a.student.i = 75 a.student.c = K union score a; printf(“size = %d\n”, sizeof(union score)); printf(“a.student.i = %d\n”, a.student.i = 75); printf(“a.student.c = %c\n”, a.student.c = ‘K’); printf(“a.b = %.1f\n”, a.b = 60.0); 19 } 程式執行結果 size = 4 a.student.i = 75 a.student.c = K a.b = 60.0