STRUCTURE 授課:ANT 日期:2010/5/12.

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

电子成绩单项目实现.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Loops.
第一章 C语言概述 计算机公共教学部.
補充: Input from a text file
数据结构与算法 数据结构与算法实验
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C语言程序设计 第十二章 位运算.
第一章 程序设计入门.
高级语言程序设计 主讲人:陈玉华.
C 程序设计实例 1. 问题描述 2. 数据结构 3. 算法分析 4. 参考程序 5. 改进说明.
選擇排序法 通訊一甲 B 楊穎穆.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
Chap 10 函数与程序结构 10.1 函数的组织 10.2 递归函数 10.3 宏定义 10.4 编译预处理.
If … else 選擇結構 P27.
Chap 9 结构 9.1 构建手机通讯录 9.2 结构变量 9.3 结构数组 9.4 结构指针.
Introduction to the C Programming Language
第9章 自訂資料型態 – 結構 9-1 結構資料型態 9-2 結構陣列 9-3 指標與結構 9-4 動態記憶體配置 9-5 聯合資料型態
C语言程序设计基础 第9章 结构 刘新国.
STRUCTURE 授課:ANT 日期:2011/4/25.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
程式撰寫流程.
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
C语言程序设计 李祥.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
作弊是否很有诱惑性? 上堂课已经讲了 作业不一定在两个小时里都能完成 答疑没有一个人? 作弊是有记录的 心理系很多同学集体作弊,让人震惊
算法的基本概念.
C语言 程序设计基础与试验 刘新国、2012年秋.
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
計數式重複敘述 for 迴圈 P
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第5讲 结构化程序设计(Part II) 周水庚 2018年10月11日.
第七章 函数及变量存贮类型 7.1 函数基础与C程序结构 7.2 函数的定义和声明 7.3 函数的调用 7.4 函数的嵌套与递归
Struct結構 迴圈
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
C语言概述 第一章.
1.2 C语言程序的结构与书写规则 一、 C语言程序的总体结构
函式庫補充資料.
輸出與輸入(I/O).
C程序设计.
C语言程序设计 李祥 QQ:
C++程式設計入門 變數與運算子 作者:黃建庭.
第二章 类型、对象、运算符和表达式.
Introduction to the C Programming Language
第三章 基本的輸出與輸入函數 (Basic Output & Input Function)
Introduction to the C Programming Language
程式設計--linear search 通訊一甲 B 楊穎穆.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
結構、檔案處理(Structure, File)
C/C++基礎程式設計班 C語言入門、變數、基本處理與輸入輸出 講師:林業峻 CSIE, NTU 3/7, 2015.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
Introduction to the C Programming Language
函式庫補充資料 1.
安排座位.
隨機函數.
Presentation transcript:

STRUCTURE 授課:ANT 日期:2010/5/12

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

小範例 用 . 存取結構變數成員  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是一樣的

給予初始值,在看watches才不會有亂碼 範例 #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); return 0; } 給予初始值,在看watches才不會有亂碼

結構當作引述傳遞到函數 #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結果圖示