当前位置:文档之家› c语言第07章数组

c语言第07章数组


该语句执行: num[0]=1;num[1]=2;num[2]=3;num[3]=0;num[4]=0;
数组
注意:
放在{ }内的初始数据个数不一定要与数组大小一致。所以: 如果初始化数据个数少于数组元素的个数,剩余元素将被自动 初始化为0。因此可以采用语句 int cj[10]={0};将数组cj的元 素初始化为0。 特别地:数组的元素不能自动初始化,程序设计人员至少要将 第一个数组元素初始化为0才能使所有剩余元素自动被初始化为0。 如果初始化数据过多,会出现一条警告信息。
for (i=0;i<=SIZE-1;i++) if(a[i] == x)break; if (i< SIZE) printf(“%d,poster is %d\n”,x,i); else printf(“no find %d \n”,x); } 演示6_2.C
数组
【例13】已知一维数组中存放10个互不相同的整数,从键盘输入 一个数,并从数组中删除与该值相同的元素中的值。 #include<stdio.h> 说明: 做删除操作时,首先要 #define SIZE 10 找到删除元素的位置, main() 找到后,立即用break语 {int a[SIZE]={1,2,35,6,39,47,53,4,5,10}; int i,j,x; 句推出循环并进行删除 for (i=0;i<SIZE;i++) 操作,删除操作实质是 printf(“%4d”,a[i]); 把一些数组元素向前移 printf(“please enter a x:\n”); 动一位。最后一位的删 scanf(“%d”,&x); 除不必移位,直接输出 for (i=0;i<SIZE;i++) 前size-1位。 if(a[i]= =x)break; for (j=i;j<SIZE-1;j++) a[j]=a[j+1]; for (i=0;i<SIZE-1;i++) printf(“%4d”,a[i]); printf(“\n”); } 演示6_3.C
num[0] num[1] num[2] num[3] num[4]
该语句执行后: num[0]=1;num[1]=2;num[2]=3;num[3]=4;num[4]=5;
数组
注意:
如果在定义一维数组的同时给出全部元素的初始值,则数组 长度可以省略。C 语言编译系统将自动根据初始化数据的个数来 确定数组的长度。数组元素的个数就是初始化数据列表中数据的 个数。例如:int a[ ]={1,2,3,4,5};编译系统将确定数组a 的 长度为5。 2)对数组的部分元素赋初值。 例如: int num[5]={1,2,3} ; num 1 2 3 0 0 num[0] num[1] num[2] num[3] num[4]
数组
【例9】: int a[2]; scanf(“%d%d”, &a[1],&a[2]); ——??
错误: 在C语言中数组元素的下标由 0开始,一个数组的下标的合 法范围在0~n-1,因此该题正确的写法是: int a[2]; scanf(“%d%d”, &a[0],&a[1]);
【例10】:int a[10]; float i=3; a[i]=10; ——?? 错误: 数组元素是通过数组名[下标]来访问的,其中下标必须是 大于0的整数、整型变量或整型表达式,在这段程序中,i是浮 点数,不能做数组元素的下标。
数组元素名 指定该数组 的数据个数 数组长度 cj[0] cj[1] cj[2] ……………………cj[9] cj[10] 数组名: 数组中的所有元素具有相同的名字cj。
数组
使用下标的优点?
由于有了下标,元素在数组中的位置(或者说是排列顺序)就 被唯一的确定下来。我们采用数组名+[下标]就可以准确访问到数组 中的每一个元素。 如图所示: cj[0]代表cj数组中的第一个元素。cj[9]代表cj数组中的第十个元 素。一般地: cj[i-1]引用了数组cj的第i个元素。C语言是一个有 趣的语言,它喜欢从0开始计数,而不是从1开始,所以这10个元素 的编号是从0到9。
数组
什么是数组???
这些数据称为 数组元素
就是一组具有固定数目的、有序的、类型相同的数据 的集合。根据数组下标的多少,数组可以分为一维数组和 多维数组。
车厢号10

车名
车厢号2 车厢号1
火车
数组
一个数组就是一组连续的内存空间,用来保存数据, 数组中的每一项称为一个元素。
用于访问的、具有相 同的数据类型。在程 序设计中相当于变量 名的用法。 为标识数组中的每个 元素,C语言对其进 行编号。这个编号称 之为数组元素下标。 (C语言规定下标从0 数组元素下标 开始)。
C语言程序设计
数组
学习目标:
数组是程序设计语言中最基本、最重要的组成 部分。在本章中将学习数组的特点和使用方法,并 通过典型例题学习数组的一般应用。
• 清楚数组的基本概念 • 理解数组的声明、初始化及引用方式
• 学会数组的编程
数组
数组是C语言中较为简单和常用的一种构造型的数据类型。
用变量来解决: 例如: #include <stdio.h> 计算10个同学 main() 的成绩:计算 { float cj1,cj2,cj3, …cj10; /*定义10个变量*/ 平均成绩、打 float pj; 印低于平均成 scanf(“%f”,&cj1); /*输入10个数据*/ 绩的同学成绩。 scanf(“%f”,&cj2); … scanf(“%f”,&cj10); pj=cj1+cj2+…+cj10; pj=pj/10; /*求平均值*/ /*打印低于平均成绩的同学成绩*/ if (cj1<pj) printf(“%f\n”,cj1); if (cj1<pj) printf(“%f\n”,cj2); … if (cj1<pj) printf(“%f\n”,cj10); }
1)对整个数组的引用;只给出数组名即可。
2)对数组元素的引用;需要给出数组名[下标]的形式。 可以是整型常 量、整型变量 或整型表达式 数组元素的引用类似于单个变量,可以自由存取。但是它与一 般变量相比有以下几个特点: 1. 数组元素是通过数组名加上该元素在数组中的位置(既数组元素 下标)来访问的。例如:a[3]代表的是数组a的第4个元素。其中 下标是整数或整型表达式。
数组
【例11】:指出并改正下列程序段中的错误。 (1)#define SIZE 100; (2)正确 (2)int b[10]={0} ,i; (3)for (i=0;i<=10;i++) b[i]=1; (4)SIZE=10; (1) 错误:使用了“;” 改正:去掉“;”
(3) 错误:引用了越界元素b[10]; 改正:循环控制最终值为9。
(4)数组说明中的数组长度说明,在以下两种情况下不必或不能 予以说明:一种情况是数组作为函数的参数,在函数的参数 说明部分不必予以说明;第二种情况是在定义数组时,如果 直接对数组进行初始化赋值,则可以省略长度说明,数组的 长度由所赋初值的个数决定。
数组
(2)一维数组的初始化
在声明数组的同时可以对数组进行初始化赋值,其方法是将初 值放在定义中的{}内,初值相互之间“,”隔开。并用“=”将其赋给 数组。 1)对数组的全部元素赋初值。 例如: num 1 int num[5]={1,2,3,4,5}; 2 3 4 5
数组
2. 数组元素的下标是由0开始的,因此一个数组a[n]的合法下标范 围是0~n-1。 使用时超过这个范围的下标访问元素将得到数组 有效元素之外的一个随机值。例如:a[-1];a[n]等。 但是C语言编译系统不检查数组下标的越界的错误。所以在编程 时要注意避免这类问题发生。 常见的错误就是引用了超出数组范围的数组元素。 3. 数组元素的赋值是逐个元素的进行,不允许将一个数组作为一个 整体赋值给另外一个数组。例如:int a[3],b[5];语句 b=a; 的赋值方式是错误的,除了数组初始化外,也不允许采用在{} 中列表的方式对数组元素整体赋值。 例如:int a[5]; a={1,2,3,4,5};是错误的。 但: int a[5] ={1,2,3,4,5};是正确的。 4. 数组名num代表的是数组num在内存中的首地址,因此可以用数组名 num来代表数组元素num[0]的地址。 scanf(“%d”,&num[0]); scanf(“%d”,num);
初始化数据元素的个数允许少于数组的长度;但不 能多于数组的长度。 常见错误:
在应该对数组元素初始化时忘记了数组元素的初始化。从而导 致运行结果出错。
数组
【例6】:int a[ ]; ——?? 错误: 只有在进行初始化的数据说明是才 能允许省略长度。在仅进行说明而 没有初始化数据时,不能省略长度。 因为编译系统无法知道这个数组的 究竟有多大。
C语言的数组有两个特点:
(1)数组的个数必须确定,不允许变动,但数组元素的 值可以改变; (2)数组元素的类型必须是相同的,不允许混合的。
数组
一维数组:只有一个下标的数组。
(1)一维数组的定义 格式: 类型说明符
指明数组中每个 元素的数据类型
数组名[常量表达式];
数组大小: 指明数组中所包含 的元素的个数
【例7】:float f[10]={1.1,2.2}; ——?? 可以: 初始化数据的个数允许少于数组长 度,此时,未被初始化的数据部分 将被编译系统自动请0。语句执行 后:f[0]=1.1;f[1]=2.2; f[2]=f[3]=…=f[9]=0;
数组
(3)一维数组的引用
C语言对数组引用有两种形式:
相关主题