数组的定义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维数组元素的引用举例
例7.1 数组元素的引用 main() { int i ,a[10]; for( i =0; i<=9; i ++) a[ i ]= i ; for(i=9;i>=0;i--) for(i=0;i<=9;i++) printf(“%d”,a[i]); printf(“%d,”,a[i]) ; } 运行结果: 9,8,7,6,5,4,3,2,1,0, 0, 1, 2, 3, 4, 5, 6,7,8,9, 程序使a[0]到a[9]的值为0~9, 程序使a[0]到a[9]的值为0~9, a[0] 的值为 然后按顺序输出 如果按逆序输出
数组在内存的存放形式 int a[10];
合法标识符 表示元素个数 下标从0开始
a
1 2 3
4 数组名表示内存首地址, 5 是地址常量 6
a[0] a[1] a[2] a[3] a[4] a[5]
编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)
例 int i=15; int data[i];
一维数组的程序举例( ) 一维数组的程序举例(3.3)
算法的N-S结构流程图如下: 输入n个数给a[0]到a[n-1] for j=1 to n-1 for i =0 to n-j-1
a[ i]>a[ i+1]
源程序如下: main(){int a[10], i,j,t; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(j=0;j<10;j++) for(i=0;i<=10-j-1;j++) if(a[i]>a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t;} for(i=0;i<10;i++) printf(“%d”,a[i]); }
第七章 数组
1、概述 、 2、一维数组的定义和引用 、 3、二维数组的定义和引用 、 4、字符数组 、
章节总览
1. 基本类型之外,C语言还提供了构造类型的数据, 它们有:数组类型、结构体类型、共用体类型。构 造类型数据是由基本类型数据按一定规则组成的, 因此也可以称之为“导出类型”。 2. 数组是有序数据的集合 有序数据的集合。 有序数据的集合 (a)数组中的每一个元素都属于同一个数据类型。 (b)用一个统一的数组名和下标,唯一的确定数组 中的元素。
例(2) 输入10个数并从中找出最大者. 输入10个数并从中找出最大者. 10个数并从中找出最大者 main( ) { int a[10] ,i , j , max ; printf( “ input 10 numbers: \n ” ) ; for( i = 0 ; i < 10 ; i + + ) scanf( “ %d ” , & a [ i ] ) ; printf( “ \n ” ) ; max = a [ 0 ] ; i = 1 ; for( ; i < 10 ; ) { if ( max < a [ i ] ) max = a [ i ] ; i++; } printf(“\nmax=%d”,max); }
一维数组的程序举例( ) 一维数组的程序举例(3.1)
例 7.3 用起泡法对n个数排序(由小到大)。(见教材124页) 起泡法的思路是:将相邻两个数比较,将小的调到前头。 具体参见课本: 例如:对一个这样的序列排序:9,8,5,4,2,0(一共有6个数) (1) (2) (3) (4) (5) 第一轮结束
(×不能用变量定义数组维数)
一维数组元素的引用(1) 一维数组元素的引用
一、规则: 规则: 先定义, (1)数组必须先定义,后使用。 )数组必须先定义 后使用。 (2)数组元素的使用形式为: )数组元素的使用形式为: 数组名 [ 下标 ] 下标可以是整型常量或整型表达式, 下标可以是整型常量或整型表达式 整型常量或整型表达式 例如: 例如 a[0]=a[5]+a[7]-a[2*3]; 注意: 注意 C语言规定只能逐个引用数组元素 语言规定只能逐个引用数组元素, 语言规定只能逐个引用数组元素 不能一次引用整个数组. 不能一次引用整个数组
一维数组的初始化(1) 一维数组的初始化
1、在定义数组时对数组元素赋以初值。 、在定义数组时对数组元素赋以初值。 例如: 例如:int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 初始化之后:a[0]=0,a[1]=1, a[8]=8, 初始化之后:a[0]=0,a[1]=1,……a[8]=8,a[9]=9。 :a[0]=0,a[1]=1, a[8]=8 a[9]=9。 2、可以只给一部分元素赋值. 、可以只给一部分元素赋值 例如:int a[10]={0,1,2,3,4}; 例如: 只给前五个元素赋值,后五个元素为0。 只给前五个元素赋值,后五个元素为 。 初始化之后:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4, 初始化之后:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4, a[5]=0,……,a[8]=0,a[9]=0。 a[5]=0, ,a[8]=0,a[9]=0。 3、如果想使一个数组中全部元素值为0, 、如果想使一个数组中全部元素值为 , 可以写成 int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成 int a[10]={0*10};
一维数组的初始化(2) 一维数组的初始化
4、对全部数组元素赋初值时,可以不指定数组长度。 、对全部数组元素赋初值时,可以不指定数组长度。 例如: 例如:int a[]={1,2,3,4,5}; 上面的写法中,{ }中只有五个数,系统会据此自动定 上面的写法中, 中只有五个数, 中只有五个数 义数组的长度为5。 义数组的长度为 。 初始化之后:a[0]=1,a[1]=2,a[2]=3 a[4]=4,a[5]=5。 :a[0]=1,a[1]=2,a[2]=3, 初始化之后:a[0]=1,a[1]=2,a[2]=3,a[4]=4,a[5]=5。 如果被定义的数组长度与提供初值的个数不同, 如果被定义的数组长度与提供初值的个数不同, 则数组长度不能省略。 则数组长度不能省略。 例如:想定义数组长度为10,就不能省略数组长度的定义。 例如:想定义数组长度为 ,就不能省略数组长度的定义。 int a[10]={ 1,2,3,4,5}; 而必须写成 , , , , 只初始化前面5个元素 个元素, 个元素为0。 只初始化前面 个元素,后5个元素为 。 个元素为 不能写成 int a[ ]={1,2,3,4,5}; , , , , 注意:对部分元素赋初值时,长度不能省。 注意:对部分元素赋初值时,长度不能省。
第二轮交换: (1) 8 (2) 5 (3) 5 (4) 5 第二轮结束 5 5 4 4 2 2 2 0 0 0 0 9 9 9 9 /*8>5,交换*/ /*8>4,交换*/ /*8>2交换*/ /*8>0,交换*/
8
4 4 4
8
2 2
8
0
8
9
那么第二轮进行了 n-2=6-2=4 次比较即循环了4次 总结:第 i 轮进行了 n- i 比较即循环了n- i 次. 一共要n-1轮比较即外围循环n-1次
一维数组的程序举例( ) 一维数组的程序举例(1)
运行结果: 例 7.2 用数组来处理Fibonacci数列问题。(见教材124页) 1 1 2 3 5 程序如下: 8 13 21 34 55 89 144 233 377 610 /*行号1*/ main( ) { 987 1597 2584 4181 6765 /*行号2*/ int i; /*行号3*/ /*行号4*/ /*行号5*/ /*行号6*/ /*行号7*/ /*行号8*/ /*行号9*/ /*行号10*/ /*行号11*/ int f[20]={1,1}; for(i=2,i<=20;i++) f [ i ]=f [ i -1]+f [ i -2]; for(i=0,i<20;i++) { if( i %5= =0) printf(“\n”);/*控制换行,每行输出五个数*/ printf(“%12d”,f [ i ]); } }
一维数组的定义(2) 一维数组的定义
表示元素的个数, 数组长度。 (3)常量表达式表示元素的个数,即数组长度。 )常量表达式表示元素的个数 例如: 表示a数组中 个元素, 例如 在a[10]中,10表示 数组中有10个元素 中 表示 数组中有 个元素 下标从0开始 开始, 个元素是:a[0], a[1], a[2], a[3], a[4], 下标从 开始 这10个元素是 个元素是 a[5], a[6], a[7], a[8], a[9] 注意:不能使用数组元素 注意 不能使用数组元素a[10]; 不能使用数组元素 常量和 (4)常量表达式可以包括常量和符号常量,不能包含变 )常量表达式可以包括常量 符号常量, 不允许对数组的大小作动态定义 量。C不允许对数组的大小作动态定义,即数组的大小不 不允许对数组的大小作动态定义, 依赖于程序运行过程中变量的值。 依赖于程序运行过程中变量的值。 例如:下面这样定义数组是不行的 下面这样定义数组是不行的: 例如 下面这样定义数组是不行的 更准确的说法是 整型常量表达式 整型常量 int n; scanf(“%d”,&n); int a[n];
真 t=a[i];
a[ i]=a[i+1]; a[i+1]=t;
假
输出a[0]到a[n]
求2-100以内的素数 以内的素数 源程序: 源程序 题目分析:首先定义一个 型数组b[100],将b当作一个 题目分析:首先定义一个int型数组 型数组 , 当作一个 筛子,并规定当b[i]的值为非 时,表示整数 在筛中。2为素 的值为非0时 表示整数i在筛中 在筛中。 为素 筛子,并规定当 的值为非 main() 输出, 的倍数筛去, 数{int b[100],i,j; ,将2输出,然后将筛中 的倍数筛去,即将下标为 的倍 输出 然后将筛中2的倍数筛去 即将下标为2的倍 数的元素清零。此时,筛中下一个非零元素为b[3],说明 数的元素清零。此时,筛中下一个非零元素为 ,说明3 b[0]=b[1]=0; 为素数将其输出,然后再将下标为3的倍数的元素清零 筛去3 的倍数的元素清零(筛去 为素数将其输出,然后再将下标为 的倍数的元素清零 筛去 for(i=2;i<100;i++) 的倍数)。这样,在下一个元素为b[5],将5输出并筛去 的 输出并筛去5的 的倍数 。这样,在下一个元素为 , 输出并筛去 b[i]=1; ,直到筛中无非零元素为止。 倍数, 倍数,……,直到筛中无非零元素为止。 for(i=2;i<100;i++) if(b[i]!=0) {printf(“%4d”,i); for(j=i;j<100;j+=i) b[j]=0;}}
一维数组的定义(1) 一维数组的定义
一、定义方式: 定义方式: 类型说明符 数组名 [ 常量表达式 ] ; 二、说明: 说明: 定名规则和变量名相同, 标识符定名 (1)数组名定名规则和变量名相同,遵循标识符定名 )数组名定名规则和变量名相同 遵循标识符 规则。 规则。 例如: 例如 int a [ 10 ]; 表示数组名为a 此数组有 个元素,每个元素为整型数据 此数组有10个元素 每个元素为整型数据. 表示数组名为 ,此数组有 个元素 每个元素为整型数据 方括弧括起来的常量表达式, (2)数组名后是用方括弧括起来的常量表达式,不能用圆括 )数组名后是用方括弧括起来的常量表达式 弧。 下面的用法是错误的 下面的用法是错误的: 错误 int a(10);
9
8 8 8 8 8
8
9
5 5 5 5
5 5
9
4 4 4
4 4 4
9
2 2
2 2 2 2
9
0
0 0 0 0 0
/*9>8,交换*/ /*9>5,交换*/ /*9>4,交换*/ /*9>2,交换*/ /*9>0,交换*/
பைடு நூலகம்
9
那么第一轮进行了 n-1=6-1=5 次比较即循环了5次
一维数组的程序举例( ) 一维数组的程序举例(3.2)