c语言第6章 数组.ppt
《c语言第6章 数组.ppt》由会员分享,可在线阅读,更多相关《c语言第6章 数组.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第第第6 6 6 6章章章章 数组数组数组数组2022/12/222思考思考随机生成随机生成20个两位整数,按从小到大排序(根个两位整数,按从小到大排序(根据成绩,对一个班的据成绩,对一个班的50个学生进行排名)个学生进行排名)在一组数据中查找某一数值在一组数据中查找某一数值2022/12/223数组数组若干若干类型相同类型相同的的相关数据相关数据的有序集合的有序集合2022/12/224内容提要内容提要一维数组和多维数组的定义、初始化和引用一维数组和多维数组的定义、初始化和引用向函数传递一维数组和二维数组;向函数传递一维数组和二维数组;常用算法:排序、查找、求最大最小值等;常用算法:排序、
2、查找、求最大最小值等;用字符数组存取字符串;用字符数组存取字符串;使用使用 字符串处理函数字符串处理函数 处理字符串处理字符串2022/12/225数组数组若干若干类型相同类型相同的的相关数据相关数据用统一的名字标识用统一的名字标识使用数组的原则:使用数组的原则:先定义后使用先定义后使用定义数组的语法形式:定义数组的语法形式:类型数组名类型数组名下标下标1下标下标2下标下标n;类型用于声明数组中元素的数据类型类型用于声明数组中元素的数据类型数组名用于标识数组数组名用于标识数组下标的个数表明数组的维数下标的个数表明数组的维数下标值表示相应维的长度下标值表示相应维的长度2022/12/226一维数
3、组的声明及存储形式一维数组的声明及存储形式一维数组的声明一维数组的声明类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例如:例如:int A10;定义一个有定义一个有10个元素的整型数组个元素的整型数组A,每个元素的类型均为,每个元素的类型均为int同样合法的声明:同样合法的声明:float farr5;char carr80;-A0A1A2A3A4A5A6A7A8A9A(未初始化未初始化)数组元素在内存中连续存放数组元素在内存中连续存放数组元素在内存中连续存放数组元素在内存中连续存放,每个元素占据着其类型,每个元素占据着其类型,每个元素占据着其类型,每个元素占据着其类型规定长度的规
4、定长度的规定长度的规定长度的连续内存单元,其后紧跟着它的后继元素。连续内存单元,其后紧跟着它的后继元素。连续内存单元,其后紧跟着它的后继元素。连续内存单元,其后紧跟着它的后继元素。2022/12/227一维数组元素的引用一维数组元素的引用引用一维数组元素的语法形式:引用一维数组元素的语法形式:数组名数组名下标表达式下标表达式数组元素中,数组元素中,下标表达式的值必须是整数下标表达式的值必须是整数,第一个元,第一个元素的下标是素的下标是0可以用任意表达式作为下标,动态决定访问哪个元素可以用任意表达式作为下标,动态决定访问哪个元素for(i=0;iSIZE;i+)ai=2*i;下标越界是下标越界是
5、大忌大忌!使用大于最大下标的下标,将访问数组以外的空间。那里使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果的数据是未知的,可能带来严重后果sizeof可以用来获得数组大小可以用来获得数组大小2022/12/228只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:int a10,i;输入第输入第输入第输入第i i个数组元素:个数组元素:个数组元素:个数组元素:scanf(%d,&ai);输入整个数组元素输入整个数组元素输入整个数组元素输入整个数组元素:for(i=0;i10;i+)scanf(%d,&ai)
6、;输出方法:输出方法:输出第输出第输出第输出第i i个数组元素:个数组元素:个数组元素:个数组元素:printf(%d,ai);输出整个数组元素:输出整个数组元素:输出整个数组元素:输出整个数组元素:for(i=0;i10;i+)printf(%d,ai);一维数组的输入和输出2022/12/229思考思考随机生成随机生成20个两位整数个两位整数/通过键盘任意输入通过键盘任意输入20个个整数整数/直接赋值,将其中的最大数和最小数的位直接赋值,将其中的最大数和最小数的位置交换,再输出调整后的数组置交换,再输出调整后的数组2022/12/2210在声明数组的同时,可以指定数组元素的初值。在声明数组
7、的同时,可以指定数组元素的初值。例如:例如:int a10=0,1,2,3,4,5,6,7,8,9;一维数组的初始化一维数组的初始化 int a10=0,1,2,3,4,5,6;int i;for(i=0;i10;i+)printf(“%d”,ai);可以只可以只给一部分元素赋初值给一部分元素赋初值,这时必须明确指出总元素,这时必须明确指出总元素个数。个数。未初始化的元素由系统自动初始化为未初始化的元素由系统自动初始化为0 0,若,若为字符型数组,未初始化的元素初始化为为字符型数组,未初始化的元素初始化为 空空。2022/12/2211一维数组的初始化一维数组的初始化如果如果对全部数组元素对全
8、部数组元素赋初值,可省略数组元素个数。赋初值,可省略数组元素个数。如:如:int a=1,2,3,4,5int Frequency5=0,0,0,0,0;int Total5=0;int Zero=0;int Digits=0,1,3,4,5,6,7,8,9;char Alphabet=a,b,c,d,e;Clock clocks10;上机实验:上机实验:当所赋初值多于所定义数组的元素当所赋初值多于所定义数组的元素个数时个数时,将会怎样?,将会怎样?2022/12/2212一维数组的初始化一维数组的初始化数组定义后的初值仍然是随机数,一般需要我们来数组定义后的初值仍然是随机数,一般需要我们来初
9、始化初始化int a5=12,34,56,78,9;int a5=0;int a=11,22,33,44,55;数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化#define SIZE 10int aSIZE;数组大小定义好后,将永远不变数组大小定义好后,将永远不变pppp2022/12/2213二维数组二维数组二维数组的定义二维数组的定义二维数组的存储方式二维数组的存储方式二维数组的初始化二维数组的初始化二维数组的输入输出二维数组的输入输出二维数组的引用二维数组的引用2022/12/2214二维数组的定义二维数组的定义数据类型数据类型 数组名数组名常量
10、表达式常量表达式1常量表达式常量表达式2;在逻辑上可以把二维数组看成一个有行和列的表格或矩阵,在逻辑上可以把二维数组看成一个有行和列的表格或矩阵,第一个下标说明行数,第二个下标说明列数。第一个下标说明行数,第二个下标说明列数。intint a23;a23;说明了一个整型二维数组说明了一个整型二维数组说明了一个整型二维数组说明了一个整型二维数组 a a,其中第一维有,其中第一维有,其中第一维有,其中第一维有2 2个元素(个元素(个元素(个元素(0-20-2),每个元素又是有),每个元素又是有),每个元素又是有),每个元素又是有3 3个元素(个元素(个元素(个元素(0-20-2)的一维数组。)的一
11、维数组。)的一维数组。)的一维数组。数组的元素个数为数组的元素个数为数组的元素个数为数组的元素个数为6 6。a0a1a-a00 a01 a02-a10 a11 a122022/12/2215二维数组的存储结构二维数组的存储结构short int a23;a0a1a10 a11a12a00 a01a02存放顺序:存放顺序:按行按行存放存放先顺序存放第先顺序存放第0行的元素行的元素再存放第再存放第1行的元素行的元素a00a01a02a10a11a122022/12/2216将所有数据写在一个将所有数据写在一个 内,按顺序赋值内,按顺序赋值例例:int a22=1,2,3,4;/若初值多于元素个数若
12、初值多于元素个数,则出现语法错误则出现语法错误分行给二维数组赋初值分行给二维数组赋初值例:例:int a22=1,2,3,4 ;/若所赋初值的行数或每行的元若所赋初值的行数或每行的元素数多于下标中说明的行数或列数,则出现语法错误。素数多于下标中说明的行数或列数,则出现语法错误。在给出初始化数据的多维数组说明中,在给出初始化数据的多维数组说明中,最多只能最多只能省略其第一维省略其第一维的大小。的大小。int a 2=1,2,3,4 ;可以对部分元素赋初值可以对部分元素赋初值例如:例如:int a22=1 ,0,6 ;int b24=1,2,3;对部分元素初始化时,对部分元素初始化时,未被初始化的
13、元素的初值为未被初始化的元素的初值为0二二二二维数组的初始化维数组的初始化维数组的初始化维数组的初始化162022/12/2217可以通过赋初值来确定二维数组的行数,但必须有确可以通过赋初值来确定二维数组的行数,但必须有确定的列数。定的列数。对于一维数组,可以在数组定义语句中省略方括号中对于一维数组,可以在数组定义语句中省略方括号中的常量表达式,通过所赋初值的个数来确定数组的大的常量表达式,通过所赋初值的个数来确定数组的大小;小;对于二维数组,对于二维数组,只可以省略第一个方括号中的常量表只可以省略第一个方括号中的常量表达式达式,而不能省略第二个括号中的常量表达式。第一,而不能省略第二个括号中
14、的常量表达式。第一维的大小按以下规则决定:维的大小按以下规则决定:当初值的个数能被第二维的常量表达式的值除尽时,当初值的个数能被第二维的常量表达式的值除尽时,第一维的大小第一维的大小=所得商数。所得商数。当初值的个数不能被第二维的常量表达式的值除尽当初值的个数不能被第二维的常量表达式的值除尽时,则第一维的大小时,则第一维的大小=所得的商数所得的商数+1通过赋初值定义二维数组的大小通过赋初值定义二维数组的大小2022/12/2218上节课主要内容上节课主要内容一维数组的定义、引用及其初始化一维数组的定义、引用及其初始化二维数组的定义、引用及其初始化二维数组的定义、引用及其初始化一维数组的输入、输
15、出一维数组的输入、输出找一组数里的最大数、最小数算法找一组数里的最大数、最小数算法2022/12/2219一维数组的定义、引用及初始化示例一维数组的定义、引用及初始化示例 题目:已知有声明题目:已知有声明“int m=5,4,3,2,1,i=0;”,下列对下列对m数组元素的引用中数组元素的引用中,错误的是错误的是_。A.m+i B.m5 C.m2*2 D.mm42022/12/2220以下能正确定义二维数组的是以下能正确定义二维数组的是_A)int a3;B)int a3=2*3;C)int a3=;D)int a23=1,2,3,4;以下能正确定义二维数组并正确赋值的语句是以下能正确定义二维
16、数组并正确赋值的语句是_A)int N=5,bNN;B)int a12=1,3;C)int a2=1,2,3,4;D)int a32=1,2,3,4;二维数组的定义、引用及初始化示例二维数组的定义、引用及初始化示例2022/12/2221最大数、最小数算法的应用最大数、最小数算法的应用随机生成随机生成20个两位整数个两位整数/通过键盘任意输入通过键盘任意输入20个整数个整数/直接赋值,将其中的最大数和最小数直接赋值,将其中的最大数和最小数的位置交换,再输出调整后的数组的位置交换,再输出调整后的数组思路:思路:步骤步骤1:先定义变量和数组:先定义变量和数组 步骤步骤2:生成:生成20个随机数个随
17、机数 步骤步骤3:输出:输出20个随机数个随机数 步骤步骤3:找出最大数及其最小数的位置:找出最大数及其最小数的位置 步骤步骤4:交换最大数及其最小数:交换最大数及其最小数 步骤步骤5:输出调整后的数组:输出调整后的数组2022/12/2222总结总结学习方法:用熟悉的知识来学习新知识!学习方法:用熟悉的知识来学习新知识!数组操作的关键:数组操作的关键:理解并掌握数组的定义、初始化理解并掌握数组的定义、初始化理解并掌握数组的引用。数组的操作一般是通理解并掌握数组的引用。数组的操作一般是通过元素进行的,元素是通过下标访问的。过元素进行的,元素是通过下标访问的。学会分析数据,从中找出待处理元素下标
18、的变学会分析数据,从中找出待处理元素下标的变化规律化规律理解并掌握常用的算法(查找、排序、插入、理解并掌握常用的算法(查找、排序、插入、删除、矩阵相关的)删除、矩阵相关的)2022/12/2223本节课的主要内容本节课的主要内容二维数组的输入输出二维数组的输入输出排序算法(直接选择排序法、冒泡排序法、插排序算法(直接选择排序法、冒泡排序法、插入排序法)入排序法)查找算法(顺序查找法、折半查找法)查找算法(顺序查找法、折半查找法)2022/12/2224二维数组的输入和输出二维数组的输入和输出数组的输入和输出只能数组的输入和输出只能逐个对数组元素逐个对数组元素进行操作进行操作(字符数组例外)(字
19、符数组例外)int a23,i,j;输入方法:输入方法:输入方法:输入方法:输入第输入第i行第行第j列元素:列元素:scanf(“%d”,&aij);输入整个数组元素:输入整个数组元素:for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”,&aij);输出方法:输出方法:输出方法:输出方法:输出第输出第i行第行第j列列元素:元素:printf(“%d”,aij);输出整个数组元素:输出整个数组元素:for(i=0;i2;i+)for(j=0;j3;j+)printf(“%d”,aij);2022/12/2225矩阵矩阵矩阵的转置矩阵的转置加减乘运算加减乘运算半三角元素运
20、算半三角元素运算求周边元素的和或平均值求周边元素的和或平均值主对角线、副对角线元素的处理主对角线、副对角线元素的处理(关键点:关键点:对下标的操作、下标的界限,对数组对下标的操作、下标的界限,对数组bbMM应注意应注意M的奇偶性,对周边元素求值应注意的奇偶性,对周边元素求值应注意不要多加四角元素)不要多加四角元素)提示:提示:矩阵运算一般都是利用两个矩阵运算一般都是利用两个for循环来实现,外循环来实现,外层循环变量代表矩阵的横坐标,内层循环变量代表矩层循环变量代表矩阵的横坐标,内层循环变量代表矩阵的纵坐标,或者内层循环变量代表矩阵的横坐标,阵的纵坐标,或者内层循环变量代表矩阵的横坐标,外层循
21、环变量代表矩阵的纵坐标。在进行半三角元素外层循环变量代表矩阵的纵坐标。在进行半三角元素运算及求周边元素的和或平均值时,要特别注意两个运算及求周边元素的和或平均值时,要特别注意两个循环下标的范围。循环下标的范围。2022/12/2226例例初始化一个矩阵初始化一个矩阵int t34=1,2,3,4,2,3,4,5,3,4,5,6;并将每个元素都输出,分别计算每一行的元素并将每个元素都输出,分别计算每一行的元素之和,并将和直接存放在每行的第一个元素中,输之和,并将和直接存放在每行的第一个元素中,输出各行元素的和。出各行元素的和。2022/12/2227思考思考编写一个求一维数组最大数的函数编写一个
22、求一维数组最大数的函数GetMax()和一个求一维数组最小数的函数和一个求一维数组最小数的函数GetMin()数组通过参数传递。数组通过参数传递。2022/12/2228max(i=0)max(i=2)max(i=3)计算最大值算法计算最大值算法2022/12/2229例例6.2 打印最高分打印最高分从键盘输入学生人数从键盘输入学生人数n;从键盘输入所有学生的学号和成绩分别存入数组从键盘输入所有学生的学号和成绩分别存入数组num和和score假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高maxScore=score0;对所有学生成绩进行比较,即对所有学生成绩进行比较,即 for(i=
23、1;i maxScore则修改则修改maxScore值为值为scorei 打印最高分打印最高分maxScore2022/12/2230.main().for(i=0;in;i+)scanf(%ld%f,&numi,&scorei);maxScore=score0;for(i=1;i maxScore)maxScore=scorei;printf(maxScore=%.0fn,maxScore);例例6.2 打印最高分打印最高分2022/12/2231.main().for(i=0;in;i+)scanf(%ld%f,&numi,&scorei);maxScore=score0;maxNum=n
24、um0;for(i=1;i maxScore)maxScore=scorei;maxNum=numi;printf(maxScore=%.0f,maxNum=%ldn,maxScore,maxNum);例例6.2 打印最高分及其打印最高分及其学生序号学生序号 用函数实现?用函数实现?2022/12/2232#include#define ARR_SIZE 40float FindMax(float arr,int n);main()float scoreARR_SIZE,maxScore;int n,i;printf(Please enter total number:);scanf(%d,&
25、n);printf(Please enter the score:n);for(i=0;in;i+)scanf(%f,&scorei);maxScore=FindMax(score,n);printf(maxScore=%.0fn,maxScore);float FindMax(float arr,int n)float max;int i;max=arr0;for(i=1;i max)max=arri;return max;用函数实现打印最高分用函数实现打印最高分2022/12/2233本次课主要内容本次课主要内容字符输入字符输入/输出函数输出函数P51字符串与字符数组字符串与字符数组字符数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言第6章 数组 语言
限制150内