第七章数组 学习目的与要求:1.重点掌握一维数组的定义和引用 2.基本掌握二维数组的定义和引用 3.重点掌握字符型数组的定义与引用 4.能正确使用字符串处理函数。 5.学会使用数组解决实际问题 重点 1.一维数组的定义与引用。 2.二维数组的定义与引用。 3.字符数组的定义与引用。 第1讲 知识归纳 1.一维数组的定义 类型说明符数组名[常量表达式j; (1)数组名后必须用方括弧[],用其他括弧均错误 (2)方括弧中的常量表达式表示数组的元素个数 (3)方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是 变量。 2.一维数组的引用 数组名[下标] ∥下标从0开始,可以是整型常量或整型表达式 注意:数组元素引用时,不要超出数组范围 如inta[10] 可以引用的数组元素为a0]-a9],a[10]不是本数组元素 3.一维数组的初始化 (1)可以在定义数组后,立刻赋值;如inta[3]={1,3,5} 但下面这样赋值是错误的 a[3] ={1,3,5 (2)可以给数组的部分元素赋值,不赋值的元素,如果类型为int,则默认值为0 如果类型为char,则默认值为‘’;如果类型为foat,则默认值为0.0;但希望在实际 编程时,应实际赋值为0或其他值
第七章 数 组 学习目的与要求:1. 重点掌握一维数组的定义和引用。 2. 基本掌握二维数组的定义和引用。 3. 重点掌握字符型数组的定义与引用。 4. 能正确使用字符串处理函数。 5. 学会使用数组解决实际问题。 重点: 1. 一维数组的定义与引用。 2. 二维数组的定义与引用。 3. 字符数组的定义与引用。 第 1 讲 知识归纳 1. 一维数组的定义 类型说明符 数组名[ 常量表达式 ]; (1) 数组名后必须用方括弧[ ],用其他括弧均错误; (2) 方括弧中的常量表达式表示数组的元素个数; (3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是 变量。 2. 一维数组的引用 数组名[ 下标 ] //下标从 0 开始,可以是整型常量或整型表达式; 注意:数组元素引用时,不要超出数组范围。 如 int a[10]; //可以引用的数组元素为 a[0]……a[9] , a[10] 不是本数组元素; 3. 一维数组的初始化 (1) 可以在定义数组后,立刻赋值;如 int a [3] = { 1,3, 5} ; 但下面这样赋值是错误的: int a[3] ; a = { 1,3, 5} ; (2) 可以给数组的部分元素赋值,不赋值的元素,如果类型为 int,则默认值为 0; 如果类型为 char,则默认值为‘’;如果类型为 float,则默认值为 0.0;但希望在实际 编程时,应实际赋值为 0 或其他值
178 C语言程序设计上机指导与同步训练 如inta[3={1,3};m则其对应值为a[0]=1;a[l=3;a[2]=0; (3)在对数组全部元素赋初值时,可以不指定元素个数 (4)可以在循环控制语句下,给数组各元素赋值 例如:inta[l0 for(i=0;1<10i++) liI 基础训练(A) 选择题 1.在c语言中,引用数组元素时,其数组下标的数据类型允许是( A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式 2.要说明一个有10个int元素的数组,应当选择语句()。 A)int a[ 101 B)int a(10) C)int a[9 D)int alll 3.以下对数组的正确定义是()。 A)float b[5.0] B) float b[5] C)float b(5) D)float bl 4.对以下语句的正确理解是()。 inta[10J={6,78,910} A)将5个初值依次赋给a[1至a5] B)将5个初值依次赋给a0至a[4 C)将5个初值依次赋给a6至a[10 D)因为数组长度与初值的个数不相同,所以此语句不正确 5.已知:inta[10;则对a数组元素的正确引用是()。 A)a[10 B)a[35] C)a(5) D)a[10-10 6.以下能对一维数组a进行正确初始化的语句是()。 A)inta[l10J=(0.00.0.0), B)int a[10]=0 C)int al=10 D)inta[10J={10*1} 7.以下能对一维数组a进行正确初始化的语句是() A)int a51 B)int a 3]; 0,1,2,3,4} r(=0;i<3;++) scanf(%od”,a) C)inta[3}={0,1,2,3} D)int a[5] for(i=0;i<5;计+ scanf("%d', &aiD) 二、填空题 1.构成数组的各个元素必须具有相同的 C语言中数组的下标必须是正整 数、0或。如果一维数组的长度为n,则数组下标的最小值为,最大值为 在C语言中,一维数组的定义方式为类型说明符数组名 3.已知数组b定义为intb[={9,6,3};,则b的各元素的值分别是
·178· C 语言程序设计上机指导与同步训练 ·178· 如 int a [3]= {1,3 } ; //则其对应值为 a[0] =1 ; a[1]= 3 ; a[2]= 0 ; (3) 在对数组全部元素赋初值时,可以不指定元素个数; (4) 可以在循环控制语句下,给数组各元素赋值。 例如:int a[10] ; for ( i=0 ; i <10 ;i ++ ) a [ i ] = i ; 基础训练(A) 一、选择题 1. 在 c 语言中,引用数组元素时,其数组下标的数据类型允许是( )。 A) 整型常量 B) 整型表达式 C) 整型常量或整型表达式 D) 任何类型的表达式 2. 要说明一个有 10 个 int 元素的数组,应当选择语句( )。 A) int a[10]; B) int a(10); C) int a[9] D) int a[11] 3. 以下对数组的正确定义是( )。 A) float b[5.0] B) float b[5] C) float b(5) D) float b[] 4. 对以下语句的正确理解是( )。 int a[10]={6,7,8,9,10}; A) 将 5 个初值依次赋给 a[1]至 a[5] B) 将 5 个初值依次赋给 a[0]至 a[4] C) 将 5 个初值依次赋给 a[6]至 a[10] D) 因为数组长度与初值的个数不相同,所以此语句不正确 5. 已知:int a[10];则对 a 数组元素的正确引用是( )。 A) a[10] B) a[3.5] C) a(5) D) a[10-10] 6. 以下能对一维数组 a 进行正确初始化的语句是( )。 A) int a[10]=(0,0,0,0,0); B) int a[10]={} C) int a[]={0}; D) int a[10]={10*1}; 7. 以下能对一维数组 a 进行正确初始化的语句是( )。 A) int a[5]; B)int a[3]; a={0,1,2,3,4}; for(i=0;i<3;i++) scanf(“%d”,a); C) int a[3]={0,1,2,3}; D) int a[5]; for(i=0;i<5;i++) scanf(“%d”,&a[i]); 二、填空题 1. 构成数组的各个元素必须具有相同的 。C 语言中数组的下标必须是正整 数、0 或 。如果一维数组的长度为 n ,则数组下标的最小值为 ,最大值为 。 2. 在 C 语言中,一维数组的定义方式为:类型说明符 数组名 。 3. 已知数组 b 定义为 int b[ ]={9,6,3};,则 b 的各元素的值分别是
第二部分¢语言程序设计同步训练 179 最小下标是 最大下标是 4.在C语言中数组名是一个 不能对其进行加、减及赋值操作 5.已知数组T为一有10个单元的整型数组,正序输出T中的10个元素的值的语句为: for(=0; j<10: j++) printf( %d,T[D) 下面的语句试图按相反的顺序显示输出T中的10个元素的相反数,请补充完整下面的 for( ;j-) printf(%d” 三、综合题 1.阅读下面程序,请指出存在错误。 int 1 for(i=0: i<3: i++) scanf("sd",&a[i]) for(i=1;i<3;i++)a[0]=a[0]+a[i printf("ga\n", a[o]) 2.阅读下面程序,请指出存在错误。 main() for(i=0;i<3;i++)a[0]=a[0]+a[i]; printf ("a[o]=%d", a[o]) 3.阅读下面程序,请指出存在错误。 ta[3] t 1 for(主=0;i<3;i++) scanf(”d",&a[i]) for(i=1;i<3;i++)a[0]=a[0]+a[i]) 能力提高(B) 选择题 以下对一维整型数组a的正确说明是()。 A)int a(10) B)int n=10, an]; C)int n D)#define SIZE 10 canf("%", &n) int aSIZe] 179
第二部分 C 语言程序设计同步训练 ·179· ·179· 最小下标是 ,最大下标是 。 4. 在 C 语言中数组名是一个 ,不能对其进行加、减及赋值操作。 5. 已知数组 T 为一有 10 个单元的整型数组,正序输出 T 中的 10 个元素的值的语句为: for (j=0;j<10;j++) printf(“%d”,T[j]); 下面的语句试图按相反的顺序显示输出 T 中的 10 个元素的相反数,请补充完整下面的 语句: for( ; ;j- -)printf(“%d”, ); 三、综合题 1. 阅读下面程序,请指出存在错误。 main() { int a[3]={3*0}; int i; for(i=0;i<3;i++) scanf("%d",&a[i]); for(i=1;i<3;i++) a[0]=a[0]+a[i]; printf("%d\n",a[0]); } 2. 阅读下面程序,请指出存在错误。 main() { int a[3]; int i; scanf(“%d”,&a); for(i=0;i<3;i++) a[0]=a[0]+a[i]; printf(“a[0]=%d”,a[0]); } 3. 阅读下面程序,请指出存在错误。 main() { int a[3]; int i; for (i=0;i<3;i++) scanf(“%d”,&a[i]); for(i=1;i<3;i++) a[0]=a[0]+a[i]); printf(“%d\n”,a); } 能力提高(B) 一、选择题 1. 以下对一维整型数组 a 的正确说明是( )。 A) int a(10); B) int n=10,a[n]; C) int n; D) #define SIZE 10; scanf("%",&n); int a[SIZE];
·180 C语言程序设计上机指导与同步训练 2.若有以下说明,则数值为4的表达式是() A)alg-cl )a[d-c’ D)a['d'-c] 要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确 的定义语句是() A) Int art[5}={89,-23} B) int artI={89,-23}; C) Int art[5}={89,-23,0,0,0}; D) int art={89,-23,0,0,0} 、填空题 1.读入20个整数,统计非负数个数,并计算非负数之和。 #include "stdio. h' main() i int i, a[20], s, count s=count= for(i=0;i<20;i++) scanf("a' 20;i++ if(a[i]<0) S+=a [i] printf("s count=d\n”,s, count) 2.下面程序段的功能是将一个数组中的值按逆序重新存放,例如:原来顺序是8,5, 3,2,要求改为2,3,5,8。 #define N 10 int i, 3, a[N] for (i=0, j= i<j; i++, 3-- I k=a[i] a [i]=a [j] a [j]=k; 3.若有以下程序段 inta[]={4,0,2,3,1},i,j,t for(i=1;i<5;i++) t=a【i];j=i-1; while(j>=0岳t>a[j]) a[j+1]=a[j;j--;}
·180· C 语言程序设计上机指导与同步训练 ·180· int a[n]; 2. 若有以下说明,则数值为 4 的表达式是( )。 A) a[g-c] B) a[4] C) a[‘d’-‘c’] D) a[‘d’-c] 3. 要定义一个 int 型一维数组 art,并使其各元素具有初值 89,-23,0,0,0,不正确 的定义语句是( )。 A) int art[5]={89,-23}; B) int art[ ]={89,-23}; C) int art[5]={89,-23,0,0,0}; D) int art[ ]={89,-23,0,0,0}; 二、填空题 1. 读入 20 个整数,统计非负数个数,并计算非负数之和。 #include “stdio.h” main() { int i,a[20],s,count; s=count=0; for ( i=0; i<20; i++) scanf(“%d”, ); for ( i=0; i<20; i++) { if (a[i]<0) ; s+=a[i]; count++; } printf(“s=%d\t count=%d\n”,s,count); } 2. 下面程序段的功能是将一个数组中的值按逆序重新存放,例如:原来顺序是 8,5, 3,2,要求改为 2,3,5,8。 …… #define N 10 int i,j,a[N]; …… for ( i=0, j= ; i<j; i++, j--) { k=a[i]; a[i]=a[j]; a[j]=k; } …… 3. 若有以下程序段 ...... int a[]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++) {t=a[i];j=i-1; while(j>=0&&t>a[j]) {a[j+1]=a[j];j--;}
第二部分¢语言程序设计同步训练 81 则该程序段的功能是( 三、编程题 1.有一个已经排好序的数组,现输入一个数,要求按原来排序的规律将它插入到数 组中 2.设计一程序,它输入20个正整数,然后重新安排这个序列的顺序,使得最小数位 于序列的首部,最大数位于序列的尾部。显示处理前后的这两个整数序列。 第2讲 知识归纳 1.二维数组的定义 类型说明符数组名常量表达式1常量表达式2] (1)常量表达式1一可以形象理解为行数 常量表达式2一可以形象理解为列数 米2)二维数组中元素存放顺序是:先存放第一行的元素,再存放第二行的元素,依次 2.二维数组的引用 数组名[下标][下标 下标从0开始,可以是整型常量或整型表达式; 注意:数组元素引用时,不要超出数组范围 a int a[]41 ∥可以引用的数组元素为ap[0]-…12[3],a[34和a[4等不是本数组 元素; (2)可以在循环控制下,给二维数组各元素赋值 如:inta3]4]; 3.二维数组的初始化 (1)可以在定义数组后,立刻赋值;例如inta[3][4]={1,3,5,7,9,11}; 但下面这样是错误的 a[341 (2)可以给数组的部分元素赋值,不赋值的元素,默认值为int0,cha float
第二部分 C 语言程序设计同步训练 ·181· ·181· ...... 则该程序段的功能是( )。 三、编程题 1. 有一个已经排好序的数组,现输入一个数,要求按原来排序的规律将它插入到数 组中。 2. 设计一程序,它输入 20 个正整数,然后重新安排这个序列的顺序,使得最小数位 于序列的首部,最大数位于序列的尾部。显示处理前后的这两个整数序列。 第 2 讲 知识归纳 1. 二维数组的定义 类型说明符 数组名[常量表达式 1 ][常量表达式 2] ; (1) 常量表达式 1—可以形象理解为行数。 常量表达式 2—可以形象理解为列数。 (2) 二维数组中元素存放顺序是:先存放第一行的元素,再存放第二行的元素,依次 类推。 2. 二维数组的引用 数组名[ 下标 ] [ 下标 ] //下标从 0 开始,可以是整型常量或整型表达式; 注意:数组元素引用时,不要超出数组范围。 如 int a[3 ] [4] ; //可以引用的数组元素为 a[0][0]……a[2][3],a[3][4]和 a[1][4]等不是本数组 元素; (2) 可以在循环控制下,给二维数组各元素赋值。 如:int a[3] [4]; for ( i=0 ; i <3 ;i ++ ) for ( j=0 ; j<4;j++) a [ i ] = i * j; 3. 二维数组的初始化 (1) 可以在定义数组后,立刻赋值;例如 int a [3][4] = {1,3,5,7,9,11} ; 但下面这样是错误的。 int a[3][4] ; a = { 1,3,5,7,9,11} ; (2) 可以给数组的部分元素赋值 ,不赋值的元素,默认值为 int 0, char, ‘’, float 0.0 ;