第四章复合数据结构基础 计算机程序设计基础 学习目标 掌握数组定义与基本使用方法,熟悉字符型数组概念 掌握指针基本概念,能熟练使用指针操作基本数据对象, 掌握指针基本运算,了解指针与数组的关系 掌握结构体类型的声明、结构体变量的定义与基本用法, 能在程序中熟练使用结构体 掌握联合体类型的声明、联合体变量的定义与基本用法, 能在程序中熟练使用联合体 掌握枚举类型的概念、定义与使用方法 了解自定义类型的定义与使用方法 清华大学计算中心 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< stdio. h> 础ntmi0 实际为数组元素遍历问题:使用 循环,从头至尾搜索整个数组 float data[12]: float result1=0.0, result2=0.0 数组经常与循环联系 int i. 在一起,这是因为数 printf("Pleaseinput 12 floats:"; 组下标的变化与循环 for(i=0;i<12;计+) scanf(%of,&tlil;控制变量是一致的 for(i=0;i<12;i++) if(datai]>0.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 <stdio.h> int main() { float data[12]; float result1 = 0.0, result2 = 0.0; int i; printf(“Please input 12 floats:\n“); for(i = 0; i < 12; i++) scanf(“%f“, &data[i]); for(i = 0; i < 12; i++){ if(data[i] > 0.0) result1 += data[i]; else result2 += data[i]; } printf(“Positives: %f\nNegatives: %f\n“, result1, result2); return 0; } 实际为数组元素遍历问题:使用 循环,从头至尾搜索整个数组 数组经常与循环联系 在一起,这是因为数 组下标的变化与循环 控制变量是一致的