第1讲 数值型数组共52页文档

合集下载

数组第一、二讲

数组第一、二讲

第一讲数组江苏省黄埭中学王荣生小明的爸爸有三个儿子,老大叫大毛,老二叫二毛,老三叫什么?程序中经常需要存储、处理大量的具有相同类型的数据(成百上千,甚至几十万),如果用简单变量来存储这些数据,为这些变量取不同名字将是非常艰巨无法想象的事!为了解决大量相同类型数据的存储、命名问题,C++为我们提供了数组这一复合数据类型(多个简单变量类型组合而成的)。

它在一块连续的存储空间中存储这些数据,利用数组名+下标(序号)来确定每个数据。

这样就非常方便的解决了大量的、具有相同类型的数据的存储、命名、操作等问题。

数组就是在一段连续的存储空间中分配多个存储单元,每个数据存储在一个独立的存储单元中,这些存储单元又称为数组元素。

用数组名+下标来表示。

例如:int a[10];//定义一个整数类型数组,它有10个int类型的元素;char b[26];//定义一个字符类型数组,它有26个char类型的元素它们的数组元素分别是:a[0],a[1],a[2],......,a[9],其类型都是intb[0],b[1],b[2],......b[25],其类型都是char注意:数组元素的下标从0开始,不是1。

其在内存中分配情况如下图所示9876.........3210a[9]a[8]a[7]a[6]a[3]a[2]a[1]a[0]a (相当于10个整型变量)说明:1)a是数组名称,它代表整个储存空间的首地址。

“[]”是下标运算符,“[]”内的数字称为下标,表示是数组的第几个元素。

2)a[0]是数组的第0个元素,a[1]是数组的第1个元素,......3)下标可以是常数,如a[2],也可以是变量,如:a[i]4)一个数组元素可以当作是简单变量,与简单变量用法一样。

5)下标必须是非负整数,不能是负数、小数,且不能超出数组定义的范围,超出定义的范围称为“越界”。

例如:int a[10];a[-3]=5; a[10]=15; int k=a[20];C++不对下标是否越界进行检查,因此,虽然数组下标越界了,编译却能通过,但程序运行时可能会出现意想不到的结果,甚至崩溃,这是编程中常见的错误!所以编写程序时要时刻注意控制。

C语言程序设计教程数组PPT课件

C语言程序设计教程数组PPT课件

{ if (max<a[i]) { max=a[i];j=i;}/*把当前最大值送max,下标送j*/
else if (min>a[i]){ min=a[i];k=i;}
}
printf("max:a[%d]=%d,min:a[%d]=%d",j,max,k,min);
}
第11页/共78页
212021/4/6
2021/4/6
4
第4页/共78页
6.1.2 数组元素的引用
定义了数组以后,就可使用它了。
但不能利用数组名来整体引用一个数组,只能单个的使用数组 元素
数组元素的描述 : 由 数组名加方括号中的下标 组成,即:
数组名[下标]

标:数组元素在数组中的顺序号,使用整序型表达
式。
a[5]=80;
取值范围:从0到元素个数-1。 C语言不a[对2.5下]=标60;越?界作语法
③ #define N 5
long data[N]; /* 定义一个有5个元素的长整型数组
data */
2021/4/6
3
第3页/共78页
例:试判断下列数组定义是否合法:
int student[35]; char name[20]; float score[35]; #define student 35 float n_student[student]; int score_student[student*3]; int person(10); int n=10, a[n];
若不对auto数组进行初始化,则其初值是不可知的。
若一个static或外部数组未进行初始化,则对数值型 数组元素,初值为0,而对字符型数组元素,初值为空字 符‘\0’.

数值型数组

数值型数组

二维数组的声明和引用
#include <stdio.h> 输出x[3][2] #define ROW 3 #define COL 2 int main(void) { int i, j; int x[ROW][COL]={{1,2},{3,4},{5,6}}; for( i = 0; i < ROW; i++ ) { for( j = 0; j < COL; j++ ) printf("\t %d", x[i][j]); printf("\n"); } getch(); return 0; }
数组元素的输入 数组元素赋值和参加运算 数组元素的比较 数组元素的输出
引用一维数组
对数组元素的处理操作称为引用数组
#include <stdio.h> int main(void) { int aweek[ 7 ], day; for(day = 0; day < 7; day++) { aweek[day] = day; printf("aweek[%d] = %d \n", day,aweek[day]); } getch(); return 0; }
2
数组的特点
数组是一组按序存储的数据的集合.在内存中连续存放. 数组是一组按序存储的数据的集合 在内存中连续存放. 一组按序存储的数据的集合. 其中每个数据的名称相同,数据类型也相同,只是在数组中 其中每个数据的名称相同,数据类型也相同, 每个数据的名称相同 类型也相同 存放的位置不同.数组中的数据被称为数组元素 数组元素. 存放的位置不同.数组中的数据被称为数组元素.
a_sort.c

教案5.1数值型数组(一)

教案5.1数值型数组(一)

**中等专业学校C语言程序设计教案执教者科目C语言程序设计班级课题 5.1数值型数组(一)课型新授时间课时 2教学目标1、了解数组的定义,使用。

2、跟据数组的作用,进行多例题分析,巩固学生知识。

3、能运用适当变量进行描述一个算法。

教学重点数组的概念数组的使用教学难点数组的概念。

应多选用例题讲解分析课前准备多媒体网络教学平台、教学课件、例题教学环节教学过程学生活动引入新课Main()作用以及之前所学数学函数的作用引入新课回顾,思考,发现问题新授新授数组是若干相同数据的有序集合。

在数组中,每一个变量称之为一个数组元素。

数组元素可以用一个统一的数组名和下标来唯一地确定。

下标用来表示数组元素在数组中的位置。

数组的特点是在程序中可以通过下标访问数组中的每一个元素。

在处理大量的相同类型数据的场合,使用数组是非常方便的。

5.1 数值型数组5.1.1 一维数组1.一维数组的定义一维数组的定义格式为:类型说明符数组名[常量表达式];其中,类型说明符包括int、float、double等,它表示数组的类型,也即数组中每个元素的数据类型。

关于一维数组的定义,有以下几点说明:(1)数组名的命名规则与变量名相同,遵循标识符的命名规则。

(2)数组名后是用方括号括起来的常量表达式,不能用圆括号。

例如:int a(10); 是不正确的。

(3)常量表达式表示元素的个数,即数组长度。

(4)常量表达式中一般包括整型常量、字符常量或符号常量,不能包含变量。

例如:int n=8;int a[n];是不正确的。

2.一维数组的引用(1)数组元素由数组名和下标来表示。

下标表示该元素在数组中的位置,它可以是整型常量、整型变量或整型表达式。

例如:a[3]【熟记】组合知识点感兴趣了解认真听讲解a[3+2](2)C语言规定:数组元素下标从0开始,最大下标为数组长度减1。

例如:int a[5];数组a中有5个元素:a[0],a[1],a[2],a[3],a[4]。

C语言数组教程ppt课件

C语言数组教程ppt课件

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
输入理想的程序,输出快乐的人生
二维数组元素的引用
• 二维数组元素的引用形式:
数组名[行下标] [列下标];
• 例如:
int a[3][4]; a[0][0]=3; a[0][1]=a[0][0]+10;
a[3][4]=5; /*下标越界*/
数据类型数组名数组大小一维数组可用一个循环动态赋值而二维数组可用二重嵌套循环动态赋值c把数组名解释为该数组第1个元素a0的首地址并且c编译器不检查所引用的数组元素下标是否越界地址传递1值传递方式实参与形参占用不同的内存单元includestdiohvoidswapinttemp
输入理想的程序,输出快乐的人生
for (i=0; i<3; i++) for( j=0; j<4; j++) printf(“%d”, a[i][ j] );
输入理想的程序,输出快乐的人生
二维数组的输入和输出
为一个3行4列的二维数组输入/输出数据
int main() { int a[3][4], i, j; for (i=0; i<3; i++) for (j=0; j<4; j++) scanf(“%d”,&a[i][j]); for (i=0; i<3; i++) { for (j=0; j<4; j++) printf(“%5d”, a[i][j]); printf(“\n”); } return 0;
输入理想的程序,输出快乐的人生
下标越界是大忌!
• int a[10]; scanf("%d",&a[10]); /*下标越界*/ – 编译程序不检查是否越界 – 下标越界,将访问数组以外的空间,可能带来严重后果

C语言数值型数组讲解

C语言数值型数组讲解

while(!feof(fp)) {//从文件读 个整数到数组 ,并n增1 从文件读1个整数到数组 从文件读 个整数到数组a, 增 fscanf(fp,"%d",&a[n++]); } fclose(fp); //遍历整型数组,求最大值 遍历整型数组, 遍历整型数组 maxindex= 0; //假定最大值是第 个数 假定最大值是第1个数 假定最大值是第 for(i=1;i<n;i++) //从第 个数开始遍历数组 从第2个数开始遍历数组 从第 if(a[i]>a[maxindex]) //如果第 个数 最大值大,修正 如果第i个数 最大值大, 如果第 个数>最大值大 修正maxindex maxindex=i; //输出数组 输出数组 for(i=0;i<n;i++) printf("%5d",a[i]); //输出最大值及下标 输出最大值及下标 printf("\n max=a[%d]=%d",maxindex,a[maxindex]); }
– 遍历整型数组,求最大值 遍历整型数组, – 输出最大值
• 编写程序实现
源程序
//从数据文件中读数据到数组,求最大值 从数据文件中读数据到数组, 从数据文件中读数据到数组 并显示结果。 并显示结果。 #include <stdio.h> #define MAXLEN 100 void main() {int a[MAXLEN]; int n=0; //数组实际长度 数组实际长度 int i=0; //数组下标 数组下标 int max; //最大值 最大值 FILE *fp; //读数据到整型数组 获取 值 读数据到整型数组,获取 读数据到整型数组 获取n值 if((fp=fopen("data.txt","r"))==NULL) {printf("can not open file !"); return ; }

01-数组 PPT

01-数组 PPT

数组名[行下标] [列下标]; 例:a[2][3]
0
1
2
3
4
0
1
数组元素是变量,因此一切
2
可以使用变量的地方都可以
使用数组元素
3
int a[4][5];
二维数组初始化
⒈分行初始化。如: static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
⒉按数组排列的顺序将所有数据写在一个大括号内, 如:
1
2
3
4
5
6
7
8
9
10 11 12
二维数组元素值的输入与输出
实现的。
【例题6】二维数组输入与输出方法示例。
【例题7】在N行M列的二维数组x中,找出数组的最大值以及此最大值 所在的行、列下标。
字符数组与字符串
1.字符数组的定义
• char 数组名[常量表达式];
a[1]
a[2]
static int a[5]={0,1,2,3,4};
0
1
2
②可以只给一部分元素赋初值;
b[0]
b[1]
b[2]
static float b[5]={ , ,1.4,7.2}; 0.0
0.0
1.4
③在对全部数组元素赋初值时,可以不指定数组长度。
a[0]
a[1]
a[2]
static int a[]={1,2,3};
规律:十位数相同的归在一类里
二维数组
int a[5];
a[0] a[1] a[2] 数组元素为 a[3] 整型变量 a[4]
数组元素为 数组
aa[0] aa[1] aa[2]

第1讲 数值型数组

第1讲 数值型数组
2016/3/28 27
例:建立长度为10数组,按冒泡 排序法升序排列,输出。
#include<stdio.h> void BubbleSort(int a[ ],int n); void main( ) {int arr[10]={22,33,44,11,67, 86,23,43,84,100}, i; BubbleSort(arr,10); for(i=0;i<10;i++) printf("%4d",arr[i]); printf("\n"); }
2016/3/28
26
冒泡法实现排序(升序)过程
1.设置双重循环 2.外循环i控制最大数上冒 位置(n-1~1) 3.内循环j对0~i下标位置的 元素两两比较和交换
for(i=n-1;i>=1;i--) for(j=0;j<i;j++) if(a[j]>a[j+1]) { 第一趟使最大数冒至最后, t=a[j]; 第二趟使次大数冒至倒数第2, a[j]=a[j+1]; 。。。。。。 a[j+1]=t; } 第n-1趟使大数冒至第2
2016/3/28 30
算法实现(排升序)
void SelectSort(int a[], int n) { int i, j, index, t; for (i=0; i<n-1; i++) index=i; for( j=i+1;j<n ; j++) if ( a[j] < a[index]) index=j; /*选出的最小元素(index下标)与i下标的元素交换*/ if(index!=i) { t=a[index]; a[index]=a[i]; a[i]=t;} } /*index为某趟比较中记录最小元素的下标*/ /*n-1趟:找出的最小值与i位置元素交换*/

数值型数组

数值型数组

数值型数组一、实习目的1.熟练掌握一维、二维数值型数组的定义、元素赋值、引用和输出方法;2.学会灵活运用数组元素的下标编程,能用数组思想优化程序;3.理解一维数组的指针和指针变量,会用指针编写程序;4.理解并掌握指向二维数组元素的指针和指向行的指针这两种不同类型的指针;5.熟练掌握与数组有关的算法,如排序等;6.进一步熟悉选择和循环结构。

二、实习内容1.例6-2,体会数组的定义、元素赋值、引用和输出方法;并试用指针解决。

2.例6-3、6-4,排序是程序设计学习的重点,要求重点掌握;3.例6-5,试用普通变量的方法解,并将两种方法进行比较,体会使用数组的特点;4.例6-7,体会数组的指针特点;5.例6-10、6-11、6-12,体会二维数组的定义、元素赋值、引用和输出方法。

6.例6-17,认真分析运行结果,总结二维数组指法的使用方法。

三、注意事项1.数组:用一个统一的名字和不同的下标来标识有序的一组数据,元素编号从0开始,在内存占据一片连续的区域,每一个数组元素都等价于一个普通变量。

运用数组使程序精练。

数组的奥妙和编程的灵活性全体现在下标上。

下标可以是常量、变量、表达式,还可以是数组元素,甚至是函数;2.对一维数组元素指针的理解:⑴理解一维数组元素的指针与变量的指针定义形式相同。

如int *p;指针变量p可以指向int型变量,也可以指向int型数组,且p++、p+i都是有意义的;⑵用指针引用数组元素的方式:*p或*(p+表达式)。

系统在计算机地址时,p++、p+i 按p+i*d处理,d为基类型所占的字节数:char型1字节、int型2字节、float型4字节、double型8字节;⑶一维数组名代表地址,所以又可以当指针用,一维数组指针名也可以当数组名用。

所以,引用一维数组元素的方法就有:下标法a[i]、p[i]和指针法*(a+i)、*(p+i)。

这是非常重要的一个关系,体现了数组与其指针的实质;3.对二维数组指针的理解:⑴首先从概念上要分清两种指向不同的指针:指向元素的与指向行的;⑵指向二维数组元素的指针,本质上与普通变量的指针及一维数组的指针相同。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 主要步骤
– 读数据到整型数组,获取n值
• 打开文件,读数据,关闭文件
– 遍历整型数组,求最大值 – 输出最大值
课堂练习2 sample01_03.cpp
• 修改课堂练习1 • 输出最大值及最大值所在的下标
提示:
最大值下标maxindex 最大值a[maxindex]
删除下标为i的数组元素
• 思路:将下标为i+1~n-1个数 • 循环j从i+1 到n-1 step +1
数组的存储结构
• 对应内存的连续空间,每一单元因数据类
型相同而大小相同,例: int a[10]
内存用户数据区
数组元素
0x1001
3
0
0x1005
5
1
0x1009

2
2
0x100D
8
3
0x1011
1
.
a 数组名 :地
址常量,表示 数组首地址。
0x1015
22
.
0x1019
89
.
偏移量下标 --分量a[2]
数据类型
简单类型: C语言中进行基本运算的基本单位。如果是一个 简单类型变量,可以被赋值或在表达式中直接使 用。每个变量单独存储,变量间没有任何联系。 例:int i,j;
构造类型: 由简单类型构造而成。构造类型的每个分量是一 个变量,这个变量可以是简单类型或构造类型。 相互间又有一定联系,并按一定顺序存储。
第1讲 数值型数组
主要内容
• 数组的逻辑结构 • 数组的存储结构 • 一维数组的基本运算 • 文件存储数组数据 • 函数之间传递一维数组 • 简单的排序算法
• 阅读教材 7.1、8.3
数组的逻辑结构
数组的分量是具有相同数据类型的数据。 分量——数组元素。
一维
二维
多维
数组的类型
• 分量都是简单类型 • 一维数组:
• 等价于全部元素初始化
b[0] = 1;b[1] = 2; b[2] = 3;b[3] = 0;b[4] = 0;
• 如果对全部元素都赋初值,可以省略数组长度 int a[ 10 ] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
建议不要省略数组长度
一维数组的基本运算
• 访问数组元素 • 遍历数组 • 删除一个数组元素 • 增加一个数组元素
0x101D
0
0x1021
-1
0x1025
7
9
0x1029
内存地址
一维数组的初始化
• 定义数组时,对数组元素赋初值
类型名 数组名[数组长度] = {初值表}; int a[10] = {1,2,3,4,5,6,7,8,9,10};
即:a[0]=1, a[1]=2,...… a[9]=10
• 静态数组的初始化
– 整型数组 – 浮点型数组 – 字符数组
• 分量是构造类型:
– 二维数组: – 多维数组 – 结构体数组
一维数组的定义
类型说明符 数组名[常量表达式];
常量表例达:式in确t 定a数[1组0]的; 长度,C语言 不不siincnta允 能tnaf许以[n(n“;]%对变; d数量cf”l,ho&组的aan的值rt);sn长 来ca度 定omr作 义e错e[动 数[误53]态 组0; ]定 长; 义 度数 量 类 简 定 类,组命型单义型名名说类类),的规明型型指命则符,(针结名相可用类构与同以户型体变是自
组元素前移一位
j
a[j-1]=a[j];
• n--; //数组长度-1
012
i i+1 n-1
• 写出for循环语句
9
a 3 5 2 8 1 22 89 0
a[0] a[1]
012
a 3 5 2 8 22 89 0
a[9]
9 for(j=i+1;j<n;j++) a[j-1]=a[j];
n--;
插入x到下标为i的位置
static int b[5] = {1, 2, 3, 4, 5}; static int b[5]; 注:静态存储的数组如果没有初始化,所有元素自动赋0
• 动态数组的初始化
auto int c[5]; *动态存储的数组如果没有初始化,所有元素为随机值
一维数组的初始化(续)
• 部分元素初始化
int b[5] = {1, 2, 3}; 即:b[0]=1;b[1]=2;b[2]=3;
•数组的实际长度n
• 写出循环语句 for(i=0;i<n;i++)
{…a[i]…
}
遍历示例
• 输入n • 对数组中的n个元素赋值为
其下标
• 输入n个整数到整型数组a
sample01_01.cpp
scanf(“%d”,&n); for(i=0;i<n;i++)
a[i]=i; for(i=0;i<n;i++)
1.循环j从n-1到i,step -1
• 思路:将下标为i~n-1的 a[j+1]=a[j];
数组元素向后移一位, 然后将新数组元素x插
2.a[i]=x;
入到下标为i的位置
3.n++;
j指向需要移位的数 组元素。
main()
• 数组的实际长度 { int a[MAX];
int n; }
注:数组下标最大取值为MAX-1,否则数组出界; 在遍历操作中,最大取值为n-1
for(i=0;i<n;i++)
遍历数组
• 思路:下标从0开始,到n-1存储n个数组元素
• 遍历算法:
– 循环i从0到n-1
• 访问a[ i ]
访问数组元素(引用)
必须是整型
数组名[下标]
下标的表示形式:
• 下标的范围:
– 整型常量
a[9]
从0开始~数组长度-1
– 整型变量
a[i]
– 整型表达式 a[5+i]
012
9
a 3 5 2 8 1 22 89 0 -1 7
a[0] a[1]
a[9]
数组的长度
• 数组的定义长度 #define MAX 10
构造原则
• 构造原则一
– 相同数据类型的数据作为一个整体来处理——数组。 如,int a[3];
• 构造原则二
– 不同数据类型的数据作为一个整体来处理——结构体。 如,通讯录:姓名、电话、地址。
• 构造原则三
– 构造类型可以嵌套构造类型。如,地址:路名、门牌、 邮编等。
主要内容
• 第1讲 数值型数组 • 第2讲 二维数组 • 第3讲 字符数组 • 第4讲 结构类型
scanf(“%d”,&a[i]);
• 输出整型数组a中n个整数 for(i=0;i<n;i++)
printf(“%5d”,a[i]);
• 上机实验:从键盘输入数 每个元素输
组的n个整数并输出
出占5位,不
足左补空格
课堂练习1 sample01_02.cpp
• 从数据文件中读数据保存到数组中,求最 大值并显示结果。
相关文档
最新文档