C程序设计快速进阶大学教程:第3章 数据结构_第1页
C程序设计快速进阶大学教程:第3章 数据结构_第2页
C程序设计快速进阶大学教程:第3章 数据结构_第3页
C程序设计快速进阶大学教程:第3章 数据结构_第4页
C程序设计快速进阶大学教程:第3章 数据结构_第5页
已阅读5页,还剩29页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 数据结构数据结构 C程序设计快速进阶大学教程程序设计快速进阶大学教程C程序设计快速进阶大学教程2022-2-212第第3章章 数据结构数据结构 本章要点本章要点 数组数组 结构体结构体 动态数组动态数组 文件文件数据结构数据结构 + 算法算法 = 程序程序 C程序设计快速进阶大学教程2022-2-2133.1 数组数组 知识点知识点 数组的概念数组的概念 数组的定义数组的定义 数组元素的引用数组元素的引用问题问题1: 求求N门课程的平均成绩门课程的平均成绩 C程序设计快速进阶大学教程2022-2-2143.1 数组数组 1. 数组的定义数组的定义 利用整型数组利用整型数组 aGra

2、deaGrade实现多个成绩的存储实现多个成绩的存储; ; 定义数组时需要指定数组的大小和类型。定义数组时需要指定数组的大小和类型。 int aGradeN; 类型类型intint表示数组中所有数据都为整数,表示数组中所有数据都为整数, 方括号方括号中必须是正整型常量,中必须是正整型常量, 表示数组的长度,即包含多少个数据。表示数组的长度,即包含多少个数据。 C程序设计快速进阶大学教程2022-2-2153.1 数组数组 2. 数组的引用数组的引用 数组中的每个数据称为数组元素数组中的每个数据称为数组元素; aGradei表示数组中的第表示数组中的第i+1个元素。个元素。 引用数组元素时方括号

3、中的整数称为下标,引用数组元素时方括号中的整数称为下标,可为整型常量或者变量,注意下标的范围为可为整型常量或者变量,注意下标的范围为0 N-1。 数组元素的使用数组元素的使用 可以通过运算符进行各种运算,也可以作为可以通过运算符进行各种运算,也可以作为参数实现输入输出操作。参数实现输入输出操作。C程序设计快速进阶大学教程6例例3.1 求求N门课程的平均成绩门课程的平均成绩 #include #define N 5 /*课程数目课程数目*/int main( ) int aGradeN ; /*成绩数组成绩数组*/ int i = 0; /*计数器计数器*/ float fAve = 0; /*

4、平均成绩平均成绩*/ printf(Input %d grade:,N); while( iN ) /*遍历数组遍历数组*/ scanf(%d,&aGradei ); /*输入数组元素值输入数组元素值*/ fAve = fAve + aGradei; +i; printf(Average = %.2fn, fAve / i); return 0;C程序设计快速进阶大学教程2022-2-2173.1 数组数组 3. 数组的初始化数组的初始化 定义数组平均分数组定义数组平均分数组aGrades时,可用花括时,可用花括号号列举出数组元素的值,即数组初始化;列举出数组元素的值,即数组初始化;

5、数组初始化形式数组初始化形式 float aGrades5 = 78.81, 88.56, 67.0,91.2,56.4; 花括号中数组的个数不能超过数组长度。花括号中数组的个数不能超过数组长度。C程序设计快速进阶大学教程8例例3.2 求求5个学生的最高成绩和最低成绩个学生的最高成绩和最低成绩 #include int main() float aGrades5= 78.81, 88.56, 67.0,91.2,56.4; float fMax = 0, fMin = 100 ; int i = 0; do /* 遍历数组遍历数组*/ printf(%6.2f,aGradesi); if(aG

6、radesifMax) /* 比较最高分比较最高分*/ fMax = aGradesi; if(aGradesifMin) /* 比较最低分比较最低分*/ fMin = aGradesi;+i ;while( i 5);return 0;C程序设计快速进阶大学教程2022-2-2193.1 数组数组 4. 数组的遍历数组的遍历 通常使用循环结构逐个访问数组中的所有元通常使用循环结构逐个访问数组中的所有元素,并用计数器变量控制循环,这称为数组素,并用计数器变量控制循环,这称为数组的遍历。的遍历。【同步练习】【同步练习】大毛要参加歌唱比赛,有大毛要参加歌唱比赛,有10个评委给她打分,个评委给她打分

7、,实际得分是去掉最高分和最低分的平均分。实际得分是去掉最高分和最低分的平均分。利用数组编写程序,输入利用数组编写程序,输入10个分数,个分数,输出最高分、最低分和实际得分。输出最高分、最低分和实际得分。C程序设计快速进阶大学教程2022-2-21103.2 结构体结构体 知识点知识点 结构体的概念结构体的概念 结构体的声明结构体的声明 结构体变量的定义结构体变量的定义 结构体成员的引用结构体成员的引用问题问题2: 利用结构体输入输出个人信息利用结构体输入输出个人信息 C程序设计快速进阶大学教程2022-2-21113.2结构体结构体 1. 结构体类型用途结构体类型用途 结构体是用来描述具有多个

8、成员数据的自定结构体是用来描述具有多个成员数据的自定义数据类型,不要求所有成员数据类型一致。义数据类型,不要求所有成员数据类型一致。2. 结构的声明与结构体变量定义结构的声明与结构体变量定义 结构的声明是用来说明一个数据类型,并没结构的声明是用来说明一个数据类型,并没有数据空间。有数据空间。 结构体变量定义才真正开辟了空间。结构体变量定义才真正开辟了空间。C程序设计快速进阶大学教程12例例3_3 定义阿定义阿Q的结构体,的结构体, 输入并输出其姓名、年龄和成绩。输入并输出其姓名、年龄和成绩。#include /*开始声明结构体开始声明结构体Student*/*结构体声明只是在声明一种数据类型,

9、并没有存放数据的结构体声明只是在声明一种数据类型,并没有存放数据的空间,只有用该类型定义变量时才有存放数据空间空间,只有用该类型定义变量时才有存放数据空间*/struct Studentchar aName20; /*姓名姓名*/int iAge; /*年龄年龄*/float fScore; /*成绩成绩*/; /*不要忘记此处的分号(不要忘记此处的分号(;)*/*结束声明结构体结束声明结构体Student */C程序设计快速进阶大学教程13例例3_3 定义阿定义阿Q的结构体的结构体 int main( ) struct Student sAhQ; /*定义结构体变量定义结构体变量sAhQ*/

10、printf(输入阿输入阿Q的姓名、年龄、成绩的姓名、年龄、成绩:n);scanf(%s,sAhQ.aName); /*输入输入sAhQ的姓名的姓名*/scanf(%d, &sAhQ.iAge); /*输入输入sAhQ的年龄的年龄*/scanf(%f, &sAhQ.fScore); /*输入输入sAhQ的成绩的成绩*/printf(输出阿输出阿Q的姓名、年龄、成绩的姓名、年龄、成绩:n); printf(%sn,sAhQ.aName); /*输出输出sAhQ的姓名的姓名*/printf(%dn,sAhQ.iAge); /*输出输出sAhQ的年龄的年龄*/printf(%.2fn

11、,sAhQ.fScore); /*输出输出sAhQ的成绩的成绩*/ return 0;C程序设计快速进阶大学教程2022-2-21143.2结构体结构体 3. 结构体成员的引用结构体成员的引用 结构体成员的引用通过成员运算符结构体成员的引用通过成员运算符. .引用。引用。具体格式为:具体格式为: 结构体变量结构体变量. .成员成员4. 结构体输入、输出结构体输入、输出 不可以用结构体变量进行整体输入输出,不可以用结构体变量进行整体输入输出, 只能使用结构体成员分别输入、输出,只能使用结构体成员分别输入、输出, 但是结构体变量间可以整体赋值。但是结构体变量间可以整体赋值。 C程序设计快速进阶大学

12、教程15例例3.4 计算计算5个学生的最高成绩和最低成绩个学生的最高成绩和最低成绩#include struct Studentchar aName20; /*姓名姓名*/int iAge; /*年龄年龄*/float fScore; /*成绩成绩*/; /*结束声明结构体结束声明结构体Student*/int main() /* 学生结构体数组学生结构体数组*/ struct Student aStudents5 =AhQ,19,78.81f,AhX,20,88.56f, “AhY”,18,67.0f, “AhZ”,20,91.2f,“AhD”,20,56.4f; C程序设计快速进阶大学教程

13、16例例3.4 计算计算5个学生的最高成绩和最低成绩个学生的最高成绩和最低成绩float fMaxValue=0, fMinValue=100; /*成绩最高值和最低值成绩最高值和最低值*/ int fMaxNumber=0, fMinNumber=0; int i = 0; /*假定成绩最高和最低同学的下标都为假定成绩最高和最低同学的下标都为0*/ do/* 遍历数组遍历数组*/ printf(%st,aStudentsi.aName); printf(%dt,aStudentsi.iAge); printf(%.2fn,aStudentsi.fScore); if( aStudentsi.

14、fScorefMaxValue ) /*比较最高分比较最高分*/ fMaxValue=aStudentsi.fScore; /*获取新的最高值获取新的最高值*/ fMaxNumber = i; /*获取新的最高值下标获取新的最高值下标*/C程序设计快速进阶大学教程17例例3.4 计算计算5个学生的最高成绩和最低成绩个学生的最高成绩和最低成绩if(aStudentsi.fScorefMinValue) /*比较最低分比较最低分*/ fMinValue=aStudentsi.fScore; /*获取新的最低值获取新的最低值*/ fMinNumber = i; /*获取新的最低值下标获取新的最低值下

15、标*/+i ;while( i 5);printf(%s成绩最高成绩最高,%s成绩最低成绩最低n, aStudentsfMaxNumber.aName, aStudentsfMinNumber.aName);printf(%s请请%s吃饭吃饭n,aStudentsfMinNumber.aName,aStudentsfMaxNumber.aName);return 0;C程序设计快速进阶大学教程2022-2-21183.2结构体结构体 【同步练习】【同步练习】 大毛有兄弟五人,分别叫大毛、二毛、三毛、大毛有兄弟五人,分别叫大毛、二毛、三毛、四毛、五毛、每个人都有自己的零用钱,四毛、五毛、每个人都

16、有自己的零用钱, 写一个程序,输出零用钱最多和最少者的姓写一个程序,输出零用钱最多和最少者的姓名。名。C程序设计快速进阶大学教程2022-2-21193.3 动态数组动态数组知识点知识点 指针的应用指针的应用 动态空间的申请和释放动态空间的申请和释放 malloc函数函数 free函数函数问题问题3: 利用变长数组计算平均成绩利用变长数组计算平均成绩C程序设计快速进阶大学教程2022-2-21203.3 动态数组动态数组 数组定义时必须用常量指定大小数组定义时必须用常量指定大小 不能在程序运行过程中根据需要定义数组的大小。不能在程序运行过程中根据需要定义数组的大小。 用变量用变量来定义数组的大

17、小是不允许的来定义数组的大小是不允许的: :int i1, i2=10;scanf(%d,&i1);int aArr1i1, aArr2i2; 可以利用指针及可以利用指针及mallocmalloc函数,根据需要开辟数组函数,根据需要开辟数组的大小。的大小。C程序设计快速进阶大学教程2022-2-21213.3 动态数组动态数组 用到动态空间申请与释放时,用到动态空间申请与释放时, 需要头文件需要头文件stdlib.h。 malloc函数申请一块连续的空间函数申请一块连续的空间 返回值为该空间的起始地址,是一个空类型的地址需要返回值为该空间的起始地址,是一个空类型的地址需要转换为指定类型

18、,括号为强制转换运算符。转换为指定类型,括号为强制转换运算符。 释放空间释放空间 当空间使用完毕后,应该使用函数当空间使用完毕后,应该使用函数free释放。释放。C程序设计快速进阶大学教程22例例3.5 变长数组计算平均成绩变长数组计算平均成绩#include#include /*使用使用malloc函数时需要此头文件函数时需要此头文件*/int main() int i1;int iNumber; /*课程门数课程门数*/float fSum=0,fAve;float *pScore;printf(输入课程门数:输入课程门数:n);scanf(%d,&iNumber);/*申请申请i

19、Number个个float类型大小的空间,类型大小的空间, 用用pScore记载该空间起始地址记载该空间起始地址*/pScore=(float*)malloc(sizeof(float)*iNumber);C程序设计快速进阶大学教程23例例3.5 变长数组计算平均成绩变长数组计算平均成绩 /*输入输入iNumber门课程成绩门课程成绩*/ printf(输入输入%d门课程成绩:门课程成绩:n,iNumber);for(i1=0;i1iNumber;i1+)scanf(%f,&pScorei1); /*计算计算iNumber门课程平均成绩门课程平均成绩*/ for(i1=0;i1iNum

20、ber;i1+)fSum=fSum+pScorei1;fAve=fSum/iNumber;printf(%d门课程平均成绩为门课程平均成绩为%.2f,iNumber,fAve); free(pScore); /*释放有释放有malloc申请的空间申请的空间*/ return 0;C程序设计快速进阶大学教程2022-2-21243.3 动态数组动态数组例例3.6 3.6 输出某班级学生的最高成绩和最低成绩的姓名输出某班级学生的最高成绩和最低成绩的姓名阿阿Q Q所在学校每个班级的学生人数目是不同的,希望写一个所在学校每个班级的学生人数目是不同的,希望写一个程序,首先输入班级的学生人数,然后输入该班

21、每个同学程序,首先输入班级的学生人数,然后输入该班每个同学的姓名、年龄、成绩并用数组保存起来,最后计算并输出的姓名、年龄、成绩并用数组保存起来,最后计算并输出成绩最高和最低的同学的姓名。为了让阿成绩最高和最低的同学的姓名。为了让阿Q Q所在学校的每个所在学校的每个班级都能够使用该程序,所以程序中保存同学的数组的长班级都能够使用该程序,所以程序中保存同学的数组的长度必须是可变的。度必须是可变的。 应该使用数组成员换成了学生结构体应该使用数组成员换成了学生结构体 空间的分配与回收道理是一样的函数空间的分配与回收道理是一样的函数freefree释放。释放。C程序设计快速进阶大学教程2022-2-21

22、253.3 动态数组动态数组 【同步练习】【同步练习】 大毛有兄弟五人,分别叫大毛、二毛、大毛有兄弟五人,分别叫大毛、二毛、三毛、四毛、五毛;三毛、四毛、五毛; 每个人都有自己的故事书(每本书有书每个人都有自己的故事书(每本书有书名、页数),但是每个人的本数不一样。名、页数),但是每个人的本数不一样。 写一个程序,使得写一个程序,使得5 5个兄弟都能用该程序个兄弟都能用该程序找出自己的页数最多和页数最少的书的书名。找出自己的页数最多和页数最少的书的书名。C程序设计快速进阶大学教程2022-2-21263.4 文件文件知识点知识点 文件的概念文件的概念 文件标识文件标识 文件的操作文件的操作 问

23、题问题4: 利用文件读写数据利用文件读写数据C程序设计快速进阶大学教程2022-2-21273.4 文件文件 文件的概念文件的概念 所谓所谓“文件文件”一般是指存储在外部介质上数据的集合。一般是指存储在外部介质上数据的集合。文件是以数据的形式存放在外部介质上文件是以数据的形式存放在外部介质上 操作系统是以文件为单位对数据进行管理的操作系统是以文件为单位对数据进行管理的 如果想找存在外部介质上的数据,必须先按文件名找如果想找存在外部介质上的数据,必须先按文件名找到指定的文件,然后再从该文件中读取数据。到指定的文件,然后再从该文件中读取数据。 文件标识文件标识 (1 1) 文件路径:表示文件在外部

24、存储设备中的位置文件路径:表示文件在外部存储设备中的位置(2 2) 文件名:文件命名规则遵循标识符的命名规则文件名:文件命名规则遵循标识符的命名规则(3 3) 文件扩展名:用来表示文件的性质文件扩展名:用来表示文件的性质( .txt .dat .c)( .txt .dat .c)C程序设计快速进阶大学教程28例例3.7 把结构体数组写入文件把结构体数组写入文件#includestruct Studentchar aName20; /*姓名姓名*/int iAge; /*年龄年龄*/float fScore; /*成绩成绩*/; /*结束声明结构体结束声明结构体Student*/int main

25、()struct Student aStudents5; /*定义结构体数组定义结构体数组*/FILE *fp; int i1;float f=1.0;C程序设计快速进阶大学教程29for(i1=0;i15;i1+) printf(输入第输入第%d同学信息:姓名、年龄、成绩同学信息:姓名、年龄、成绩n,i1); scanf(%s,aStudentsi1.aName); /*输入某同学的姓名输入某同学的姓名*/ scanf(%d,&aStudentsi1.iAge); /*输入某同学的年龄输入某同学的年龄*/ scanf(%f,&aStudentsi1.fScore); /*输入

26、某同学的成绩输入某同学的成绩*/if(fp=fopen(file1.txt,wb) =NULL) /*打开磁盘文件打开磁盘文件*/ printf(nCannot open file strike any key exit!); getch(); /*等待敲键盘,为显示上一句话等待敲键盘,为显示上一句话*/ exit(1); /*结束程序结束程序*/ fwrite(aStudents,sizeof(struct Student),5,fp); fclose(fp); /*关闭磁盘文件关闭磁盘文件*/ return 0; fopen函数打开文件函数打开文件“file1.txt”为磁盘文件名为磁盘文

27、件名“wb”说明文件是以写二进制文件的方式打开说明文件是以写二进制文件的方式打开write函数的作用函数的作用把从把从aStudents的内存地址开始的内存地址开始5倍的倍的sizeof(struct student)个字节写到个字节写到fp所指所指的文件中。的文件中。 例例3.7 把结构体数组写入文件把结构体数组写入文件C程序设计快速进阶大学教程2022-2-21303.4 文件文件 文件操作分文件操作分3 3部分:部分:1. 打开文件打开文件 fopen函数函数2. 读写文件读写文件 fread函数函数 fwrite函数函数3. 关闭文件关闭文件 fclose函数函数把数据写进磁盘文件后,

28、以后使用数据时就可以直接从把数据写进磁盘文件后,以后使用数据时就可以直接从文件中读出来,不必要再重新输入。文件中读出来,不必要再重新输入。C程序设计快速进阶大学教程31例例3.8 把文件中的同学数据读出并输出到标准输出设备上把文件中的同学数据读出并输出到标准输出设备上#includestruct Studentchar aName20; /*姓名姓名*/int iAge; /*年龄年龄*/float fScore; /*成绩成绩*/; int main()struct Student aStudents5; /*定义结构体数组定义结构体数组*/FILE *fp; int i1;if(fp=fopen(file1.txt,rb)=NULL) /*打开磁盘文件打开磁盘文件*/ printf(nCannot open file strike any key exit!); getch(); exit(1); 文件打开方式文件打开方式“rb”,读二进制文件的方式打开读二进制文件的方式打开 C程序设计快速进阶大学教程32例例3.8 把文件中的同学数据读出并输出到标准输出设备上把文件中的同学数据读出并输出到标准输出设备上 /*从文件中读从文件中读5条学生记录写到数组条学生记录写到数组aStudents中中*/ fread(aStudents,si

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论