C语言程序设计基础 第9章 结构 刘新国.

Slides:



Advertisements
Similar presentations
第 8 章 数组 计算机科学学院 李淮 Tel QQ
Advertisements

基本概論 Basic concepts.
电子成绩单项目实现.
第10章 结构体与链表 本章要点: 结构体类型与结构体变量的定义 结构体变量的引用与初始化 结构体数组 链表处理 共用体类型和枚举类型
Loops.
天净沙·秋思 马致远 枯藤老树昏鸦, 小桥流水人家, 古道西风瘦马。 夕阳西下, 断肠人在天涯。
第三章 鏈結串列 Linked List.
数据结构与算法 数据结构与算法实验
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
第九章 系 统 安 全 性 9.1 结构体 9.2 结构体型数组  9.3 结构体型指针 9.4 内存的动态分配 9.5 共用体
Linked List Operations
第7章 结构体、联合体和枚举类型 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
程式設計 博碩文化出版發行.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
.NET 程式設計入門(使用 C#) 講師:鄧智鴻.
第二章 C# 基础知识.
第四章 在 C# 中实现 OOP 概念.
佇列 (Queue).
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
C 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
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++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
程序设计专题 第2讲 - 结构 刘新国.
STRUCTURE 授課:ANT 日期:2010/5/12.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
计算概论 第十八讲 C语言高级编程 结构与习题课 北京大学信息学院.
Function.
程序设计期末复习 黎金宁
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
Chap 8 指针 8.1 寻找保险箱密码 8.2 角色互换 8.3 冒泡排序 8.4 电码加密 8.5 任意个整数求和*
C语言程序设计 李祥.
程序设计专题一 结构化程序设计与递归函数 主讲教师: 刘新国.
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
C语言 程序设计基础与试验 刘新国、2012年秋.
多维数组与指针 用指针变量可以指向一维数组中的元素,也可以指向多维数组中的元素。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂一些。 1. 多维数组元素的地址 先回顾多维数组的性质,可以认为二维数组是“数组的数组”,例 : 定义int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
Struct結構 迴圈
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
OOP6 結構Struct 黃兆武.
目录 9.1 结构体类型 9.2 共用体类型 9.3 枚举类型 9.4 类型声明符typedef 1.
第十章 结构体与链表 西安工程大学.
广州中医药大学研究生 学位论文网络提交方法
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 字节对齐.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第九章 指针.
第2章 基本数据及其运算 本章学习的目标: 1、掌握基本数据的各种表示,基本数据常数的书写方法;
第二章 类型、对象、运算符和表达式.
陣列 東海大學物理系‧資訊教育 施奇廷.
本节内容 指针类型.
第13章 文 件.
Introduction to the C Programming Language
第七章  数 组.
Chap 7 数 组 7.1 排序问题 7.2 找出矩阵中最大值所在的位置 7.3 进制转换.
第 10 章 JSP应用实例 10.1 网上书店概述 10.2 系统功能 10.3 数据库设计 10.4 各模块功能介绍及实现.
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成.
C++程序语言设计 Chapter 14: Templates.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
安排座位.
Presentation transcript:

C语言程序设计基础 第9章 结构 刘新国

第9章 结构 什么是结构? 定义和使用 结构+数组 结构+指针 结构+函数

9.1 结构定义和使用 数据类型 C语言提供的基本数据类型 整数:int,unsigned,short,long,…… 浮点数:float,double 字符:char 字符串不是基本的数据类型 空/无类型:void 指针:各种数据类型都有对应的指针类型 数组:各种数据类型都有对应的数组类型 不同长度、不同维度的数组是不同的类型

9.1 结构定义和使用 结构类型 struct student { int num; /*学号*/ char name[10] /*姓名*/ 用户自定义的数据类型 struct student { int num; /*学号*/ char name[10] /*姓名*/ int computer, english, math; /*成绩*/ double average; /*平均成绩*/ };/* 不要遗漏分号 */ struct是C语言关键字 student是用户定义的标识符,作为结构的名字,必须和struct联合使用。

9.1 结构定义和使用 struct 结构名 { }; 关键字struct和结构名一起,构成一个数据类型 类型名 结构成员名1; 类型名 结构成员名2;    类型名 结构成员名n; }; 关键字struct和结构名一起,构成一个数据类型 结构的定义以分号结束,被看作一条语句(结构定义语句) 一个结构体所占的字节数可以sizeof运算符确定

结构定义示例 定义平面坐标结构: 或者 定义一个图像 定义一个产品 struct point { double x; double y; }; 或者 double x, y; 定义一个图像 struct image { int width, height; int format; char * pixels; }; 定义一个产品 struct prooduct int id; int type; char name[100]; int price;

结构定义示例 定义一个复数: 定义一个地址 定义一个朋友 struct complex { double real, image; }; struct address char city[20]; char street[20]; char code; int zip; 定义一个朋友 struct friend { char name[10]; char phone[13]; int age; struct address addr; char memo[100]; };

9.1 结构定义和使用 [例9-1] 建立一个学生信息库 struct student { int num; /*学号*/ char name[10] /*姓名*/ int computer, english, math; /*成绩*/ double average; /*平均成绩*/ };

[例9-1] 建立一个学生信息库 #define MaxSize 50 struct student students[MaxSize]; int count = 0; 用结构struct student 定义了一个数组students 长度为50 MaxSize是一个宏,定义为50 宏定义的一般格式 #define 宏名 宏体 之后所有的宏名都会被编译器替换为宏体

[例9-1] 建立一个学生信息库 用运算符 . 使用结构成员变量 结构变量可以整体赋值 结构数组/指针作为形式参数 void new_student(struct student students[]) { struct student s; if( count==MaxSize ) { printf("The array is full\n"); return; } scanf("%d", &s.num); scanf("%s", &s.name); scanf("%d", &s.math); scanf("%d", &s.computer); scanf("%d", &s.english); s.verage = ( s.math + s.computer + s.english ) / 3.0; students[count ++] = s; 结构数组/指针作为形式参数 等价于struct student *students 用运算符 . 使用结构成员变量 结构变量可以整体赋值

[例9-1] 建立一个学生信息库 结构类型的形式参数 /* 输出一个学生的信息 */ void print_student(struct student s) { printf("Num: %d", s.num); printf("Name: %s", s.name); printf("Math: %d", s.math); printf("Computer: %d", s.computer); printf("English: %d", s.english); printf("Average: %.2f\n", s.average); } 结构类型的形式参数

[例9-1] 建立一个学生信息库 结构数组的第i个元素 作为实际参数 /* 根据学好查找学生 */ void search_student(struct student students[], int num ) { int i; for( i=0; i<count; i++ ) if( students[i].num == num ) print_student( students[i] ); return; } printf("Not Found\n"); 结构数组的第i个元素 作为实际参数

[例9-1] 建立一个学生信息库 /* 根据学好查找学生 */ void output_student(struct student students[]) { int i; if( count==0 ) printf("Count of student is zero\n"); return; } for( i=0; i<count; i++ ) print_student( students[i] );

9.2.2 结构变量的定义和初始化 数据类型是struct student 结构变量是s1 1 单独定义 struct student { 9.2.2 结构变量的定义和初始化 1 单独定义 struct student { int num; /*学号*/ char name[10] /*姓名*/ int computer, english, math; /*成绩*/ double average; /*平均成绩*/ }; struct student s1; 数据类型是struct student 结构变量是s1

9.2.2 结构变量的定义和初始化 2 混合定义 struct student { int num; /*学号*/ 9.2.2 结构变量的定义和初始化 2 混合定义 struct student { int num; /*学号*/ char name[10] /*姓名*/ int computer, english, math; /*成绩*/ double average; /*平均成绩*/ } s1, s2; 数据类型是struct student 结构变量是s1, s2

9.2.2 结构变量的定义和初始化 3 无名定义 struct { int num; /*学号*/ char name[10] /*姓名*/ 9.2.2 结构变量的定义和初始化 3 无名定义 struct { int num; /*学号*/ char name[10] /*姓名*/ int computer, english, math; /*成绩*/ double average; /*平均成绩*/ } s1, s2; 数据类型是一种结构类型,但是没有给它名字 结构变量是s1, s2

9.2.2 结构变量的定义和初始化 结构变量初始化 struct student s1 = {101,“Zhang”,78,87, 85 }; 按照成员变量的定义顺序,对应初始化 各个数据项用逗号隔开 struct student { int num; char name[10]; int computer, english, math; double average; };

9.2.2 结构的使用 1 引用结构成员 结构变量名.结构成员名 s1.num = 101; 9.2.2 结构的使用 1 引用结构成员 结构变量名.结构成员名 s1.num = 101; strcpy(s1.name, “zhang”); s2.num = s1.num; strcpy(s2.name, s1.name); 2 结构整体赋值 s2 = s1; 相当于将s2中所有字节中内容复制到s1中

9.2.2 结构的使用 3 定义结构数组 struct student students[50]; 4 结构类型的参数 9.2.2 结构的使用 3 定义结构数组 struct student students[50]; 4 结构类型的参数 void print_student(struct student s); 5 结构变量作为返回值 当程序的规模较大,功能较多时,需要以函数的形式进行功能模块的划分和实现; 如果在函数间传递结构数据,则需用结构变量作为函数的参数或返回值。

9.3 结构数组 结构数组的定义方法与结构变量相同 struct friends_list { char name[10]; 9.3 结构数组 结构数组的定义方法与结构变量相同 struct friends_list { char name[10]; int age; char telephone[13]; } friends[10]; 定义了结构数组friends 它有10个数组元素,从friends[0]到friends[9] 每个数组元素都是结构类型struct friends_list

结构数组的初始化 struct friends_list friends[10] = { { "zhang san", 26, "0571-85271880"}, { "Li Si", 30, "13605732436"} }; 初始化了2个元素:friends[0],friends[1] 规则:数组初始化规则+结构初始化规则

9.3 结构数组 一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用结构数组。 9.3 结构数组 一个结构变量只能表示一个实体的信息,如果有许多相同类型的实体,就需要使用结构数组。 结构数组是结构与数组的结合,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括各个成员项。

[例9-3] 结构数组排序 struct student sa[50]; int n, i; /* 输入一批学生和成绩 */ [例9-3] 结构数组排序 struct student { int num; char name[10]; int computer, english, math; double average; }; struct student sa[50]; int n, i; /* 输入一批学生和成绩 */ scanf(“%d”, &n); for( i=0; i<n; i++ ) { scanf(“%d”, &sa[i].num); scanf(“%s”, &sa[i].name); ……/*成绩略*/ as[i].average = … }

9.3 结构数组 结果是从高到低 /* 按照平均分对学生数组排序 */ 9.3 结构数组 /* 按照平均分对学生数组排序 */ void sort(struct student s[], int n) { int i, j, index; struct student temp; for( i=0; i<n-1; i++ ) index = i; for( j=i+1; j<n; j++ ) if( s[j].average>s[index].average ) index = j; temp = s[index]; s[index] = s[i]; s[i] = temp; } 结果是从高到低

9.4 结构指针 结构指针 struct student sa[50], s1, s2, *p; 9.4 结构指针 结构指针 指向结构类型变量的指针 struct student sa[50], s1, s2, *p; struct student *p2 = &s2; p = &s1; p = &s2; p = sa + 5;

9.4 结构指针 使用结构指针 struct student s1, s2, *p = &s1; (*p).num = 101; 或者 9.4 结构指针 使用结构指针 struct student s1, s2, *p = &s1; (*p).num = 101; 或者 p->num = 101; -> 箭头运算符(减号+大于号) 访问指针所指向的结构的成员 优先级非常高,和点运算符是一样.

本章要点 什么是结构? 定义形式 结构嵌套 结构变量和结构成员变量, 引用结构成员变量 结构在函数参数中使用 结构数组,如何定义和使用结构数组? 结构指针,通过结构指针访问结构成员