STRUCTURE 授課:ANT 日期:2011/4/25.

Slides:



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

电子成绩单项目实现.
数据结构与算法 数据结构与算法实验
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
結構(struct).
第十一章 結構.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
選擇排序法 通訊一甲 B 楊穎穆.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
列舉(enum).
101北一女中 資訊選手培訓營 快速排序函式qsort() Nan.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
String C語言-字串.
If … else 選擇結構 P27.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Introduction to the C Programming Language
STRUCTURE 授課:ANT 日期:2010/5/12.
C语言程序设计基础 第9章 结构 刘新国.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
C語言簡介 日期 : 2018/12/2.
Function.
類別(class) 類別class與物件object.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
算法的基本概念.
Java 程式設計 講師:FrankLin.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
計數式重複敘述 for 迴圈 P
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
|12 結構與列舉型態.
程式設計實習課(四) ----C 函數運用----
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
第一單元 建立java 程式.
Struct結構 迴圈
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
輸入&輸出 函數 P20~P21.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
挑戰C++程式語言 ──第8章 進一步談字元與字串
輸出與輸入(I/O).
C程序设计.
C qsort.
第二章 类型、对象、运算符和表达式.
第14章 結構與其他資料形式.
陣列與結構.
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
Introduction to the C Programming Language
結構、檔案處理(Structure, File)
第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete
Programming & Language Telling the computer what to do
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
Array(陣列) Anny
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
台大資訊工程學系 資訊系統訓練班 第119期 吳晉賢
Introduction to the C Programming Language
函式庫補充資料 1.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
隨機函數.
方法(Method) 函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Presentation transcript:

STRUCTURE 授課:ANT 日期:2011/4/25

OUTLINE 什麼是結構? 結構的定義、宣告以及使用 巢狀結構(nested structure) 結構陣列 指向結構的指標 結構當作引述傳遞到函數 Lab08 HW08

什麼是結構? 指能夠結合多個彼此相關的變數在一個名稱之下,且可以包含數個不 同資料型態的變數。 結構是一種使用者自定的型態,它可將不同的資料型態串在一起。 姓名 char[4] 電話 long 資料型態 年齡 int 住址 char[30] …..

結構的定義、宣告以及使用 格式: struct 結構型態名稱 { 欄項資料型態 欄項變數名稱; : : } 變數Ⅰ,變數Ⅱ……;     欄項資料型態 欄項變數名稱;        :     : } 變數Ⅰ,變數Ⅱ……; struct 是定義結構 EXAMPLE CODE: struct Student_PersonalData { char name[4]; int age; char address[30]; } SP_Data;

結構的定義、宣告以及使用 當我們宣告 struct team { int number ; char classroom ; char name[30]; }g1 , g2 ; g1 , g2 是struct team的變數,在記憶體裡是有分配位置的。互不相干擾。 g1的資料成員有 g2的資料成員有 number classroom name

成員們一個值 struct team { int number ; char classroom ; }student ; Student.number = 3; Student.classroom = ‘5’;

小範例 用 . 存取結構變數成員  printf( "%d", student.math ); #include <stdio.h> #include <stdlib.h> int main(void){ struct data{ char name[10]; int math; }student; printf("input your name:"); scanf("%s", student.name); printf("input your math points:"); scanf("%d", &student.math); printf("Name: %s\n", student.name); printf("Points: %d\n", student.math); system("pause"); return 0; } 用 . 存取結構變數成員  printf( "%d", student.math );

結構的定義、宣告以及使用 如何給定初值 將一個結構變數的值給另一個相同結構的變數 #include <stdio.h> #include <stdlib.h> int main(){ struct data{ char name[10]; int math; }s1 = {"aaa", 83}; struct data s2; s2 = s1; printf("s1.name = %s, s1.math = %d\n", s1.name, s1.math); printf("s2.name = %s, s2.math = %d\n", s2.name, s2.math); system("pause"); return 0; } Break point

另一種定義方式 若嫌每次定義struct變數還要寫struct這個字 就像宣告結構變數時會用 struct data s2; 可以用typedef來做宣告,宣告方式如下 typedef struct{ char name[10]; int math; }data; 當你要宣告一個結構實只要用 data s1 = {"aaa",99} , s2; s1有給初始值,s2沒有。

兩種定義方式比較

細節注意 結構不能包含自己這種結構的資料,但可以有指向自己這種結構的指 標(後面投影片講解) struct A { struct A { struct A a; struct A *a; }; }; (錯誤的寫法) (可行的寫法) struct僅僅定義型態,並未宣告變數,所以不佔記憶體空間

巢狀結構(NESTED STRUCTURE) 格式: struct  結構名稱1 { 成員型別1 成員名稱1; 成員型別2 成員名稱2; 成員型別3 成員名稱3; }; struct  結構名稱2 { 結構名稱1  成員名稱11; 成員型別2 成員名稱21; 成員型別3 成員名稱31; }; struct 結構名稱2  結構變數; //宣告結構變數 結構變數 = { { 成員 1 的值 ,成員 2 的值 , 成員 3 的值 } , 成員21的值 , 成員31的值}; //給予初始值 定義巢狀結構

範例 #include <stdio.h> #include <stdlib.h> int main(){ struct data{ int month; int day; }; struct data1{ char name[10]; int math; struct data birthday; struct data1 s1 = {"aaa", 74, {10, 2}}; printf("Name: %s\n", s1.name); printf("Points: %d\n", s1.math); printf("Birthday: %d month %d day\n", s1.birthday.month, s1.birthday.day); return 0; } 給予初始值要注意,有定義哪些變數成員

結構陣列 連同結構一起宣告的方式。 格式: struct 結構型態名稱 { 欄項資料型態 欄項變數名稱; : : }變數名稱[元素個數];     欄項資料型態 欄項變數名稱;        :     : }變數名稱[元素個數]; 或者先宣告structure,再另外宣告結構變數 struct 結構型態 變數名稱[元素個數];

範例 #include <stdio.h> #include <stdlib.h> #define MAX 2 int main(){ int i , j; struct data { char name[10]; int math; }student[MAX]={ {0} , 0}; //給予字元陣列name以及變數math初始值 for(i = 0; i< MAX; i++) printf("input name:\n"); scanf("%s", student[i].name); printf("input points:\n"); scanf("%d", &student[i].math); } for(j = 0; j < MAX; j++) printf("%s的數學成績=> %d\n", student[j].name, student[j].math); return 0;

指向結構的指標 先宣告好結構,如下 struct data{ int number; char name[10]; }; 接著以下方式宣告指標來指向結構 struct data *mydataptr; 如果要取得指標mydataptr所指的資料成員name,語法為mydataptr->name printf("%s", mydataptr->name); mydataptr->number 與( *mydataptr ).number是一樣的

範例 #include <stdio.h> #include <stdlib.h> int main(){ struct data{ char name[10]; int math; int eng; }student={' ',0,0}, *ptr; ptr = &student; /*將ptr指向變數student的位址*/ printf("Student Name:"); scanf("%s", ptr->name); printf("Math Points:"); scanf("%d", &ptr->math); printf("English Points:"); scanf("%d", &ptr->eng); printf("數學:%d 英文:%d 兩科的平均:%.2f\n", ptr->math, ptr->eng, (ptr->math + ptr- >eng) / 2.0); printf("數學:%d 英文:%d 兩科的平均:%.2f\n", student.math, student.eng, (student.math + student.eng) / 2.0); return 0; }

結構當作引述傳遞到函數 #include <stdio.h> #include <stdlib.h> struct data{ char name[10]; int math; }; /*不管在哪個function都可以使用這個變數結構來宣告結構變數*/ /*副程式的宣告,必定要放在struct data宣告後,因函式宣告用到struct*/ void display(struct data); int main(){ struct data s1 = {"aaa", 74}; display(s1); return 0; } void display(struct data s){ printf("Name: %s\n", s.name); printf("Points: %d\n", s.math);

函數回傳值亦可為STRUCT型態

LAB08 此程式須包含2個structure變數。 第一個structure變數為學生的編號num以及數學成 績score(自己輸入) ex 12 60 第二個structure變數為學生的編號num以及英文成 績score(自己輸入) ex 12 80 寫一支副函式,將同一個人的其兩項成績做平均後, 用在副函式新宣告structure變數儲存,傳回存有運 算後學生編號與平均成績的structure回傳至主函式 做印出。如果編號不對則印出error message。 Hint: structure用全域變數結構(p.16)

LAB08結果圖示

HW08 建立一時間結構time,其成員包括hour(小時)、 minutes(分)及second(秒),其中hour與minutes的形態 皆為int,而second的型態則為double。 宣告一個結構time型態的變數start,並設定初值為{12 , 32 , 25.49} 宣告一個結構time型態的變數end,並設定初值為{15 , 12 , 17.53} 以hh:mm:ss.ss的格式印出結構start與end的值。 hh代 表小時,佔有2格;mm代表分,佔有2格;ss.ss代表秒, 其中秒數部分, 整數與小數部分皆均取兩位。 Ex 05:19:20.43代表了5小時19分20.43秒 試計算從start開始到end結束, 共歷經多少時間, 歷經 時間請用另一個結構變數elapse儲存, 並以hh:mm:ss.ss 的格式印出

HW08結果圖示