清华大学:《计算机程序设计基础》课程教学资源(PPT课件讲稿)第四章 复合数据结构基础

第四章复合数据结构基础 计算机程序设计基础 学习目标 掌握数组定义与基本使用方法,熟悉字符型数组概念 掌握指针基本概念,能熟练使用指针操作基本数据对象, 掌握指针基本运算,了解指针与数组的关系 掌握结构体类型的声明、结构体变量的定义与基本用法, 能在程序中熟练使用结构体 掌握联合体类型的声明、联合体变量的定义与基本用法, 能在程序中熟练使用联合体 掌握枚举类型的概念、定义与使用方法 了解自定义类型的定义与使用方法 清华大学计算中心 http://learn.tsinghua.edu.cn 2
清华大学计算中心 http://learn.tsinghua.edu.cn 2 计 算 机 程 序 设 计 基 础 第四章 复合数据结构基础 • 学习目标 – 掌握数组定义与基本使用方法,熟悉字符型数组概念 – 掌握指针基本概念,能熟练使用指针操作基本数据对象, 掌握指针基本运算,了解指针与数组的关系 – 掌握结构体类型的声明、结构体变量的定义与基本用法, 能在程序中熟练使用结构体 – 掌握联合体类型的声明、联合体变量的定义与基本用法, 能在程序中熟练使用联合体 – 掌握枚举类型的概念、定义与使用方法 – 了解自定义类型的定义与使用方法

计 算 4.1数组及其应用 机 程 序·一维数组 设 计·多维数组 基 础 字符数组的应用 清华大学计算中心 http://learn.tsinghua.edu.cn 3
清华大学计算中心 http://learn.tsinghua.edu.cn 3 计 算 机 程 序 设 计 基 础 4.1 数组及其应用 • 一维数组 • 多维数组 • 字符数组的应用

维数组的定义与格式 计算机程序设计基础 一维数组的定义:相同类型的一系列数据 数据类型数组名[元素个数 例:inta[8l; a[0]a[1a[2]a[3]a[4]a[5]a[6]a[7 关于数组定义的几点说明 数组声明中的方括号不能使用小括号代替 数组元素个数必须为整型常量或编译期可计算的常量表 达式,不能为变量 数组元素下标从0开始编号,数组元素个数必须大于1 系统不检查数组下标,注意数组下标是否超出定义范围! 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 4 计 算 机 程 序 设 计 基 础 一维数组的定义与格式 • 一维数组的定义:相同类型的一系列数据 – 数据类型 数组名[元素个数]; – 例:int a[8]; • 关于数组定义的几点说明 – 数组声明中的方括号不能使用小括号代替 – 数组元素个数必须为整型常量或编译期可计算的常量表 达式,不能为变量 – 数组元素下标从0开始编号,数组元素个数必须大于1 – 系统不检查数组下标,注意数组下标是否超出定义范围! a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

一堆维数组的初始化 计算机程序设计基础 ·初始化格式:相同类型的一系列数据 数据类型数组名[元素个数]={值1值2,…值n 例:inta[8]={10,20,30 10 20 30 a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7 关于数组初始化的几点说明 花括号中数据序列表示数组初始值,以逗号分隔 数组元素的初始化从第0个元素开始;若初始值数目少于 数组元素个数,则后继元素未初始化;若中间部分元素 无需初始化,则应使用逗号分隔(系统默认为0) 数组定义与初始化场合,可省略方括号中的元素个数说 明,系统自动将其设为初始化值的个数 清华大学计算中心 http://learn.tsinghua.edu.cn 5
清华大学计算中心 http://learn.tsinghua.edu.cn 5 计 算 机 程 序 设 计 基 础 一维数组的初始化 • 初始化格式:相同类型的一系列数据 – 数据类型 数组名[元素个数] = {值1, 值2, …, 值n}; – 例:int a[8] = {10, 20, 30}; • 关于数组初始化的几点说明 – 花括号中数据序列表示数组初始值,以逗号分隔 – 数组元素的初始化从第0个元素开始;若初始值数目少于 数组元素个数,则后继元素未初始化;若中间部分元素 无需初始化,则应使用逗号分隔(系统默认为0) – 数组定义与初始化场合,可省略方括号中的元素个数说 明,系统自动将其设为初始化值的个数 10 20 30 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7]

计 算 维数组示例 机 程 序 输入一个含有12个浮点数的一维数组,分别计算数 设组中所有正数与所有负数的和 计 基 include 础ntmi0 实际为数组元素遍历问题:使用 循环,从头至尾搜索整个数组 float data[12]: float result1=0.0, result2=0.0 数组经常与循环联系 int i. 在一起,这是因为数 printf("Pleaseinput 12 floats:"; 组下标的变化与循环 for(i=0;i0.0) result1+=datalil; else result2+=datalil: printf("Positives: %ofnNegatives: %fn,result1, result2), return O: 清华大学计算中心 http://learn.tsinghua.edu.cn 6
清华大学计算中心 http://learn.tsinghua.edu.cn 6 计 算 机 程 序 设 计 基 础 一维数组示例一 • 输入一个含有12个浮点数的一维数组,分别计算数 组中所有正数与所有负数的和 #include int main() { float data[12]; float result1 = 0.0, result2 = 0.0; int i; printf(“Please input 12 floats:\n“); for(i = 0; i 0.0) result1 += data[i]; else result2 += data[i]; } printf(“Positives: %f\nNegatives: %f\n“, result1, result2); return 0; } 实际为数组元素遍历问题:使用 循环,从头至尾搜索整个数组 数组经常与循环联系 在一起,这是因为数 组下标的变化与循环 控制变量是一致的

维数组示例二 计算机程序设计基础 使用冒泡法对5个整数按从大到小的顺序排列 7 2、1620 112121216.20个16 12 1 16162012 12 161616 20 20202020 1 1 一趟二趟三趟四趟 利用冒泡法进行排序,5个数分别位于不同层。要使大数在顶层 小数在底层,小数应下降,大数应上升。最大数上升到顶层最 多需要“冒泡”4次,其中每一次称为一趟。而在每一趟中,最 小数不断下降,因为每次只交换相邻两个层面的数据,所以每 趟内的执行次数不大于4次,并会随着趟数的增加不断减少 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 7 计 算 机 程 序 设 计 基 础 一维数组示例二 • 使用冒泡法对5个整数按从大到小的顺序排列 利用冒泡法进行排序,5个数分别位于不同层。要使大数在顶层 小数在底层,小数应下降,大数应上升。最大数上升到顶层最 多需要“冒泡”4次,其中每一次称为一趟。而在每一趟中,最 小数不断下降,因为每次只交换相邻两个层面的数据,所以每 一趟内的执行次数不大于4次,并会随着趟数的增加不断减少。 1 7 12 16 20 7 1 12 16 20 7 12 1 16 20 7 12 16 1 20 7 12 16 20 1 12 16 20 7 1 16 20 12 7 1 20 16 12 7 1 一 趟 二 趟 三 趟 四 趟

计 算 维数组示例二 机 序·使用冒泡法对5个整数按从大到小的顺序排列 设 include 计 int main0 基 础inti,j,temp static int a[5]={1,712,16,20} for(i=0;i<4;i++) for(=0;j<4-i+){ if(al<a+1)∥若后面数据比前面大则交换 temp=alil; alil=alj+1l; alj+1]=temp for(j=0; j<5; j++)printf("al%od=%dn",j, aljD return 0: 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 8 计 算 机 程 序 设 计 基 础 一维数组示例二 • 使用冒泡法对5个整数按从大到小的顺序排列 #include int main() { int i, j, temp; static int a[5] = {1, 7, 12, 16, 20}; for(i = 0; i < 4; i++) for(j = 0; j < 4 – i; j++){ if(a[j] < a[j+1]) // 若后面数据比前面大则交换 { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } for(j = 0; j < 5; j++) printf(“a[%d] = %d\n“, j, a[j]); return 0; }

多维教组的定义与格式 计算机程序设计基础 多维数组的定义:相同类型的一系列数据 数据类型数组名[常量表达式1常量表达式2] 例:inta[2I[8] a[o[o]a[o1a[OJ2]a[03]a[0[4]a[05]a[oJ6]a[07 I[o]a[l[]a[1l[2]a[1[B3]a[[4]a[1[5]a[1[6]a[1[7 关于多维数组定义的几点说明 数据顺序存放,先存第一行,再存第二行 只能引用元素,不能引用整体数组,如不能整体赋值 系统不检查数组下标,注意数组下标是否超出定义范围 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 9 计 算 机 程 序 设 计 基 础 多维数组的定义与格式 • 多维数组的定义:相同类型的一系列数据 – 数据类型 数组名[常量表达式1][常量表达式2]…; – 例:int a[2][8]; • 关于多维数组定义的几点说明 – 数据顺序存放,先存第一行,再存第二行 – 只能引用元素,不能引用整体数组,如不能整体赋值 – 系统不检查数组下标,注意数组下标是否超出定义范围! a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5] a[1][6] a[1][7] a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[0][5] a[0][6] a[0][7]

计 算 多维数组的初始化 机 序·按数据元素的存放顺序依次初始化每个元素 设 例:inta[2[8]={0,12,34.567,89,10,1112,131415} 计 基 础 按其维度分别初始化:相当于降维处理 例:inta[2[8]={0,1,2345,6,78,9,10,1112,13,14,15 a[o[o]a[o1]a[0J[2]a[0[3]a[o][4]a[o0J5]a[o[6]a[0[7] 2 3 4 6 7 8 9 10 11 12 13 14 15 [lI0]a[l[]a[1][2]a[1][3]a[14]al[5]al6]a[1[7] 清华大学计算中心 http://learn.tsinghua.edu.cn 10
清华大学计算中心 http://learn.tsinghua.edu.cn 10 计 算 机 程 序 设 计 基 础 多维数组的初始化 • 按数据元素的存放顺序依次初始化每个元素 – 例:int a[2][8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; • 按其维度分别初始化:相当于降维处理 – 例:int a[2][8] = {{0,1,2,3,4,5,6,7},{8,9,10,11,12,13,14,15}}; 8 9 10 11 12 13 14 15 a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5] a[1][6] a[1][7] 0 1 2 3 4 5 6 7 a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[0][5] a[0][6] a[0][7]

计 算 多维数组示例 机 序·用户输入一个4×4的整数矩阵,编写程序求其两对 设 角线上元素的和 计 基# Include 础ntmi0 int matrix[41[4l, i, j, result1=0, result2=0; for(i=0i<4;i++) printf("Line %/ od: ,i); for(=0;j<4+ scnf(°od,& cmatrixlil[) if(i=j result1+=matrirlilljl; if(i+j==3) result2+=matrixlilljl printf(Results: %od, %od\",result, result2 ); return 0: 清华大学计算中心 http://learn.tsinghua.edu.cn 11
清华大学计算中心 http://learn.tsinghua.edu.cn 11 计 算 机 程 序 设 计 基 础 多维数组示例 • 用户输入一个4×4的整数矩阵,编写程序求其两对 角线上元素的和 #include int main() { int matrix[4][4], i, j, result1 = 0, result2 = 0; for(i = 0; i < 4; i++){ printf(“Line %d: “, i); for(j = 0; j < 4; j++){ scanf(“%d“, &matrix[i][j]); if(i == j) result1 += matrix[i][j]; if( i + j == 3 ) result2 += matrix[i][j]; } } printf(“Results: %d, %d\n“, result1, result2); return 0; }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学:《计算机程序设计基础》课程教学资源(PPT课件讲稿)第三章 程序控制结构.ppt
- 清华大学:《计算机程序设计基础》课程教学资源(PPT课件讲稿)第二章 基本数据类型及其运算.ppt
- 清华大学:《计算机程序设计基础》课程教学资源(PPT课件讲稿)第一章 C语言的基本概念(主讲:乔林).ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)(理科)公选课报告.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第四章 检索语言.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第六章 计算机信息检索概述.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第五章 文献的类型及识别.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第二章 信息概述.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第三章 信息检索原理.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)第一章 绪论.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)电子资源总揽.ppt
- 武汉大学:《计算机信息检索与利用》课程教学资源(PPT课件讲稿)检索报告要求.ppt
- 武汉大学:《文献信息与论文写作》 讲义.ppt
- 《大学计算机基础教程》课程教学资源:第三章 文字处理系统.ppt
- 《大学计算机基础教程》课程教学资源:第五章 网络基础知识.ppt
- 《大学计算机基础教程》课程教学资源:第四章 数据库管理系统.ppt
- 《大学计算机基础教程》课程教学资源:第三章 文字处理系统.ppt
- 《大学计算机基础教程》课程教学资源:第二章 计算机操作系统.ppt
- 《大学计算机基础教程》课程教学资源:第一章 计算机基础知识.ppt
- 《大学计算机基础教程》课程教学资源:第三章 文字处理系统.ppt
- 清华大学:《计算机程序设计基础》课程教学资源(PPT课件讲稿)第五章 结构化程序设计概论.ppt
- 《MATLAB程序设计》课程PPT教学课件:第十章 MATLAB图形句柄.ppt
- 《MATLAB程序设计》课程PPT教学课件:第十一章 MATLAB图形用户界面设计.ppt
- 《MATLAB程序设计》课程PPT教学课件:第十二章 Simulink动态仿真集成环境.ppt
- 《MATLAB程序设计》课程PPT教学课件:第十三章 在Word环境下使用MATLAB.ppt
- 《MATLAB程序设计》课程PPT教学课件:第一章 MATLAB操作基础.ppt
- 《MATLAB程序设计》课程PPT教学课件:第二章 MATLAB矩阵及其运算.ppt
- 《MATLAB程序设计》课程PPT教学课件:第三章 MATLAB程序设计.ppt
- 《MATLAB程序设计》课程PPT教学课件:第四章 MATLAB文件操作.ppt
- 《MATLAB程序设计》课程PPT教学课件:第五章 MATLAB绘图.ppt
- 《MATLAB程序设计》课程PPT教学课件:第六章 MATLAB数据分析与多项式计算.ppt
- 《MATLAB程序设计》课程PPT教学课件:第七章 MATLAB解方程与函数极值.ppt
- 《MATLAB程序设计》课程PPT教学课件:第八章 MATLAB数值积分与微分.ppt
- 《MATLAB程序设计》课程PPT教学课件:第九章 MATLAB符号计算.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第一章 网页制作初识.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第十章 美化网页.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第十一章 在网页中使用CSS样式.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第十二章 利用模板和库设计网页.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第十三章 在网页中使用 JavaScript.ppt
- 21世纪高等院校规划教材:《网页设计与制作实用技术》课程配套电子教案(PPT教学课件)第十四章 利用ASP实现交互功能.ppt