第七章数组 学习目的与要求: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=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=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 ;
C语言程序设计上机指导与同步训练 (3)在对数组全部元素赋初值时,可以省略第一个常量表达式,但不能省略第二个常 量表达式。 基础训练(A) 选择题 1.在C语言中,二维数组元素在内存中的存放顺序是()。 A)按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定 2.以下对二维数组a的正确说明是 A)int a[30 ) float a(3, 4) C)double a[ 1 [4 D)float a(3)(4) 3.已知:inta[3[4则对数组元素引用正确的是() A)a[2][4I B)a[1,3 C)a[20 D)a(2)(1) 4.已知:inta[3I4}={0};则下面正确的叙述是() A)只有元素a[]0可得到初值0 B)此说明语句是错误的 C)数组a中的每个元素都可得到初值,但其值不一定为0 D)数组a中的每个元素均可得到初值0 5.以下正确的语句是()。 A)inta[l[4={1,2,34,5 B) float x[3l={{1},{2},{3} C) long b2[3={{1},{1,2},{1,2,3}; D)double y03]=(0) 6.以下能对二维数组元素a进行正确初始化的语句是() A)inta[2={{1,0,1},{5,2,3} B)inta[}={1,2,3},4,5,6} C)inta[24}={{1,2,3},14,5},{6}; D)inta[3}={1,0,1},{},{1,1}; 填空题 下面的程序是求出数组a的两条对角线上的元素之和。 #include " stdio. h inta[3][3]={1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0,i,j m1+a[i][j] for(i=0;i<3;i++ printf ("suml=gd, sum2=%d\n", suml, sum2)
·182· C 语言程序设计上机指导与同步训练 ·182· (3) 在对数组全部元素赋初值时,可以省略第一个常量表达式,但不能省略第二个常 量表达式。 基础训练(A) 一、选择题 1. 在 C 语言中,二维数组元素在内存中的存放顺序是( )。 A) 按行存放 B) 按列存放 C) 由用户自己定义 D) 由编译器决定 2. 以下对二维数组 a 的正确说明是 ( )。 A) int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4) 3. 已知:int a[3][4];则对数组元素引用正确的是( )。 A) a[2][4] B) a[1,3] C) a[2][0] D) a(2)(1) 4. 已知:int a[3][4]={0};则下面正确的叙述是( )。 A) 只有元素 a[0][0]可得到初值 0 B) 此说明语句是错误的 C) 数组 a 中的每个元素都可得到初值,但其值不一定为 0 D) 数组 a 中的每个元素均可得到初值 0 5. 以下正确的语句是( )。 A) int a[1][4]={1,2,3,4,5}; B) float x[3][]={{1},{2},{3}}; C) long b[2][3]={{1},{1,2},{1,2,3}}; D) double y[][3]={0}; 6. 以下能对二维数组元素 a 进行正确初始化的语句是( )。 A) int a[2][]={{1,0,1},{5,2,3}}; B) int a[][3]={1,2,3},{4,5,6}}; C) int a[2][4]={{1,2,3},{4,5},{6}}; D) int a[][3]={{1,0,1},{},{1,1}}; 二、填空题 下面的程序是求出数组 a 的两条对角线上的元素之和。 #include "stdio.h" main() { int a[3][3]={{1,3,6},{7,9,11},{14,15,17}},sum1=0,sum2=0,i,j; for (i=0;i<3;i++) for (j=0;j<3;j++) if (i==j) sum1=sum1+a[i][j]; for (i=0;i<3;i++) for ( ; ; j--) if (i+j==2) sum2=sum2+a[i][j]; printf("sum1=%d,sum2=%d\n",sum1,sum2); }
第二部分¢语言程序设计同步训练 183· 三、编程题 1.在一个二维数组中形成并输出如下矩阵 2.有一个3*4的矩阵,找出其中的最大元素。 能力提高(B) 、选择题 1.以下各组选项中,均能正确说明二维实型数组a的是() A)float a3[4]: B)float a(3, 4) float a0[4] float a[3[4: float a[3U={1},0}} float a[U={0},(0}} C)float a[3] D)float a34; float a[[4={0},0} float a[30; float a[[4F={0},0},{0}; 2.以下不能对二维数组a进行正确初始化的语句是()。 A)inta[2[3}={0} B) int a[3}={{1,2},{0}; C)nta[2[3}{{1,2},{34},{5,6} D)inta[3}={1,2,3,4,56} 3.已知:inta[3]={1,2,3,4.56,7};则数组a的第一维的大小是() A)2 B)3 D)无确定值 4.若二维数组a有m列,则在a[之前的元素个数为 A)jm+ B)Im D)i*m+j+I 、写出程序的运行结果 1.下面程序的运行结果是_。 main() inta[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6,j++) a[i][=(1/j)*(j/i); for(i=1;i<6;i++) for(j=1;j<6;j++) printf("82d",a[i][j]) printf("\n”);} 三、填空题 1.下面的程序段的功能是产生如下形式的杨辉三角形
第二部分 C 语言程序设计同步训练 ·183· ·183· 三、编程题 1. 在一个二维数组中形成并输出如下矩阵。 1 2 3 3 2 1 1 1 1 2. 有一个 3*4 的矩阵,找出其中的最大元素。 能力提高(B) 一、选择题 1. 以下各组选项中,均能正确说明二维实型数组 a 的是 ( )。 A) float a[3][4]; B) float a(3,4); float a[][4]; float a[3][4]; float a[3][]={{1},{0}}; float a[][]={{0},{0}}; C) float a[3][4]; D) float a[3][4]; float a[][4]={{0},{0}}; float a[3][]; float a[][4]={{0},{0},{0}}; float a[][4]; 2. 以下不能对二维数组 a 进行正确初始化的语句是( )。 A) int a[2][3]={0}; B) int a[][3]={{1,2},{0}}; C) int a[2][3]={{1,2},{3,4},{5,6}}; D) int a[][3]={1,2,3,4,5,6}; 3. 已知:int a[][3]={1,2,3,4,5,6,7};则数组 a 的第一维的大小是 ( )。 A) 2 B) 3 C) 4 D) 无确定值 4. 若二维数组 a 有 m 列,则在 a[i][j]之前的元素个数为 ( )。 A) j*m+I B) i*m+j C) i*m+j-1 D) i*m+j+1 二、写出程序的运行结果 1. 下面程序的运行结果是__。 main() { int a[6][6],i,j; for(i=1;i<6;i++) for(j=1;j<6,j++) a[i][j]=(i/j)*(j/i); for(i=1;i<6;i++) {for(j=1;j<6;j++) printf("%2d",a[i][j]); printf("\n"_); } } 三、填空题 1. 下面的程序段的功能是产生如下形式的杨辉三角形
C语言程序设计上机指导与同步训练 136 1 #define N 11 main () I int a[N] [N],i, j a[i[1]=1; a[i][i]=1; i<N;i++) for a[i][j]= +a[i-1][j]; 四、编程题 1.设计一程序,它要求输入一个5行5列的矩阵,计算并显示输出该矩阵最外圈元素 的和值。 2.输入二维数组a[3J[5],打印其中最小值和最大值及其对应的行列位置 第3讲 知识归纳 1.字符数组的定义与引用 类型说明符数组名[常量表达式] (1)与一维数组、二维数组定义、引用相同,只是类型说明符固定为:char 2.字符数组的初始化 (1)逐字符赋值 如 char cl[10={W,e',"l’e,’o,m','e”} 但下面这样是错误的: char cl [101 cl={W",e,l',co’,'m',’e’} (2)字符串赋值和字符串结束标志 如 char cl[10]=“ Welcome”; 但下面这样是错误 char cl [10 cl=“ Welcome”; 注意:系统会自动在字符串末尾加一个结束标志”0°,所以,定义字符数组时需要在字 符个数基础上,多定义一个字节存储空间,用于存放结束标志
·184· C 语言程序设计上机指导与同步训练 ·184· 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… …… #define N 11 main() { int a[N][N],i,j; for (i=1;i<N;i++) { a[i][1]=1; a[i][i]=1; } for ( ; i<N; i++) for (j=2; ;j++) a[i][j]= +a[i-1][j]; …… …… } 四、编程题 1. 设计一程序,它要求输入一个 5 行 5 列的矩阵,计算并显示输出该矩阵最外圈元素 的和值。 2. 输入二维数组 a[3][5],打印其中最小值和最大值及其对应的行列位置。 第 3 讲 知识归纳 1. 字符数组的定义与引用 类型说明符 数组名[常量表达式]; (1) 与一维数组、二维数组定义、引用相同,只是类型说明符固定为 :char 2. 字符数组的初始化 (1) 逐字符赋值 如 char c1 [10] = { ‘ W’,’e’,’l’,’c’,’o’,’m’,’e’} ; 但下面这样是错误的: char c1 [10] ; c1 = { ‘ W’,’e’,’l’,’c’,’o’,’m’,’e’} ; (2) 字符串赋值和字符串结束标志 如 char c1[10 ] = “ Welcome ” ; 但下面这样是错误的: char c1 [10] ; c1 = “ Welcome ” ; 注意:系统会自动在字符串末尾加一个结束标志’\0’ , 所以,定义字符数组时需要在字 符个数基础上,多定义一个字节存储空间,用于存放结束标志
第二部分¢语言程序设计同步训练 3.字符数组的输入输出 (1)逐个字符输入输出。用格式符%输入或输出一个字符,往往与循环结合使用 如: char cl10]; for(i=0; K<7; i++)scanf(%c",&cl[i); for(1=0; 1<; 1++) printf("%c", clli) (2)将整个字符串一次输入输出,用格式符%s 如: char cl[10 scanf(“%s”,cl);∥数组名代表数组的首地址 基础训练(A 选择题 1.要使字符数组s存放一个字符串" ABCDEFGH",正确的定义语句是()。 A)char str[ 8=('A, B,C, D, E, F,G, H: B)char str[8="ABCDEFGH C)char str[=(A, B, C, D, E, F,'G, H,) D)char str[="ABCDEFGH 2.下面是对数组s的初始化,其中错误的是() A)char s[5]=f"abc") B) char s[5}={a,bc’}; C)char s5= D)char s[="abcde 3.对两个数组a和b进行如下初始化 char a[="ABCDEf char bl=('A,'B, C, 'D, E, F) 则以下叙述正确的是()。 A)a与b数组完全相同 B)a与b长度相同 C)a和b中都存放字符串 D)a数组比b数组长度长 4.下面程序的运行结果是 char c[5]={"a',"b','\0','c',"\0}; printf("%s",c) C)abcD)以上三个答案均有错误 填空题 1.字符数组是用来存放 的数组。字符数组中一个元素存放 个字符。 2.在C语言中存放字符A需要占用 个字节,存放字符串"A"需要占用 字节。 3.以下语句的输出结果是 printf("%sIn","c: llwin98\cmd. exe")
第二部分 C 语言程序设计同步训练 ·185· ·185· 3. 字符数组的输入输出 (1) 逐个字符输入输出。用格式符%c 输入或输出一个字符,往往与循环结合使用; 如: char c1[10]; for ( i=0 ; i<7 ; i ++ ) scanf ( “%c” , &c1[ i ]); ……. for ( i =0 ; i<7 ; i ++ ) printf( “%c” , c1[ i ] ); (2) 将整个字符串一次输入输出,用格式符%s ; 如:char c1[10]; scanf ( “ %s”, c1) ; //数组名代表数组的首地址 …… printf( “%s” , c1); 基础训练(A) 一、选择题 1. 要使字符数组 str 存放一个字符串"ABCDEFGH",正确的定义语句是( )。 A) char str[8]={'A','B','C','D','E','F','G','H'}; B) char str[8]="ABCDEFGH"; C) char str[ ]={'A','B','C','D','E','F','G','H'}; D) char str[ ]="ABCDEFGH"; 2. 下面是对数组 s 的初始化,其中错误的是 ( )。 A) char s[5]={"abc"} B) char s[5]={'a','b','c'}; C) char s[5]=""; D) char s[5]="abcde"; 3. 对两个数组 a 和 b 进行如下初始化 char a[]="ABCDEF"; char b[]={'A','B','C','D','E','F'}; 则以下叙述正确的是( )。 A) a 与 b 数组完全相同 B) a 与 b 长度相同 C) a 和 b 中都存放字符串 D) a 数组比 b 数组长度长 4. 下面程序的运行结果是 ( )。 char c[5]={'a','b','\0','c','\0'}; printf("%s",c); A) 'a''b' B) ab C) ab c D) 以上三个答案均有错误 二、填空题 1. 字符数组是用来存放 的数组。字符数组中一个元素存放 个字符。 2. 在 C 语言中存放字符'A'需要占用 个字节,存放字符串"A"需要占用 个 字节。 3. 以下语句的输出结果是 。 printf("%s\n","c:\\win98\\cmd.exe");
·186 C语言程序设计上机指导与同步训练 三、程序填空 1.下列程序最多从键盘上输入99个字符,遇到n'后则退出,遇到空格则换成字符#', 对其他字符依次原样送入数组c中。 #include stdio. h) main( i int i; char ch, c[1001 for (i=0 I if ((ch=getchar())=='\n') f ch c[il=ch c[i]=1\0';puts(c); 能力提高(B) 、选择题 1.下面程序段运行结果是()。 char s[]="a book! printf("旨.4s",s); a bool B)a bo C)aboo D)格式描述不正确,没有确定的输出 2.合法的数组定义是() A)int a[F="string"; B)inta[5}={0,1,2,34,5} C)char a="string D) char a={01"223y;45} 3.要使字符串数组STR含有"ABCD","EFG"和"xy"三个字符串,不正确的定义语句 有() A)char STRD4]=("ABCD"," EFG", XY": B)char STR[5=("ABCD", EFG", XY") C)char Str=("ABCD", EFG","XY) D)char STRIIf'A, B, C, D, \0, EFG", "XY") 、阅读程序写出执行结果 #include I char str[30] printf("旨s",str)
·186· C 语言程序设计上机指导与同步训练 ·186· 三、程序填空 1. 下列程序最多从键盘上输入 99 个字符,遇到'\n'后则退出,遇到空格则换成字符' # ', 对其他字符依次原样送入数组 c 中。 #include 〈stdio.h〉 main() { int i; char ch,c[100]; for (i=0; ;i++) { if ((ch=getchar())=='\n') ; if ( ch==' ') ; c[i]=ch; } c[i]='\0'; puts(c); } 能力提高(B) 一、选择题 1. 下面程序段运行结果是 ( )。 char s[]="a book!"; printf("%.4s",s); A) a book! B) a bo C) a boo D) 格式描述不正确,没有确定的输出 2. 合法的数组定义是( )。 A) int a[]="string"; B) int a[5]={0,1,2,3,4,5}; C) char a="string"; D) char a[]={'0','1','2','3','4','5'}; 3. 要使字符串数组 STR 含有"ABCD","EFG"和"xy"三个字符串,不正确的定义语句 有( )。 A) char STR[ ][4]={"ABCD","EFG","XY"}; B) char STR[ ][5]= {"ABCD","EFG","XY"}; C) char STR[ ][6]= {"ABCD","EFG","XY"}; D) char STR[ ][7]={{'A','B','C','D','\0'},"EFG","XY"}; 二、阅读程序写出执行结果 1. #include main() { char str[30]; scanf ("%s",str); printf("%s",str); }