
第4章 数组 思考与练习 一、思考题 1.思考分析如下程序,指出程序中的错误: 1:#include 2:void main() 3:{ 4: char x[5]="abcdefghij": cout<<x<<endl: 6 X="ZyxWv": 7: cout<<x<<endl: 8} 答案:应将第4行的xS政为x11]、将第6行改为strcpy(K,"yxwv"): 解析: 错误1:字符串"abcdefgh时”占11个字节的内存空间,故字符数组x的元素个数值应为11: 错误2:欲将字符串常量赋值给字符数组,需利用字符串拷贝函数。 2.思考分析如下语句,指出错误代码: (1)char a[]; (2)char a [5]; (3)a1]="abcd"; (4)char a[12]="I am a student."; 答案: (1)a下标不能为空 (2)正确 (3)应将语句改为strcpy(a"abcd” (4)应将语句中的a12]改为a16] 解析: 错误1:定义数组时,若未初始化,则数组的元素个数不能省略。 错误2:欲将字符串常量赋值给字符数组,需利用字符串拷贝函数。 错误3:数组空间容纳不下所赋予的字符串常量 二、填空题 1.数组是具有( )的若干变量按序进行存储的变量集合。 答案:相同数据类型 解析:C++语言中,数组是可以通过下标访问的同类型数据元素的集合,即相同数据类型元素的集合。 2.数组的元素通过( )来访问,一维数组的最小下标是()。 答案:下标0 解析:C++语言中,数组是可以通过下标访问的同类型数据元素的集合,一维数组的下标是从0开始 的。 3.已知数组b定义为itb[6=9,6,3;,则b的各元素的值分别是( ),最小下标是( 最大下标是()
第 4 章 数组 思考与练习 一、思考题 1. 思考分析如下程序,指出程序中的错误: 1: #include 2: void main() 3: { 4: char x[5]="abcdefghij"; 5: cout<<x<<endl; 6: x="zyxwv"; 7: cout<<x<<endl; 8: } 答案:应将第 4 行的 x[5]改为 x[11]、将第 6 行改为 strcpy(x, "zyxwv"); 解析: 错误 1:字符串"abcdefghij"占 11 个字节的内存空间,故字符数组 x 的元素个数值应为 11 ; 错误 2:欲将字符串常量赋值给字符数组,需利用字符串拷贝函数。 2. 思考分析如下语句,指出错误代码: (1)char a [ ]; (2)char a [5]; (3)a[1]= "abcd"; (4)char a[12]= "I am a student."; 答案: (1)a[]下标不能为空 (2)正确 (3)应将语句改为 strcpy(a,”abcd”) (4)应将语句中的 a[12]改为 a[16] 解析: 错误 1:定义数组时,若未初始化,则数组的元素个数不能省略。 错误 2:欲将字符串常量赋值给字符数组,需利用字符串拷贝函数。 错误 3:数组空间容纳不下所赋予的字符串常量 二、填空题 1. 数组是具有( )的若干变量按序进行存储的变量集合。 答案:相同数据类型 解析:C++语言中,数组是可以通过下标访问的同类型数据元素的集合,即相同数据类型元素的集合。 2. 数组的元素通过( )来访问,一维数组的最小下标是( )。 答案:下标 0 解析:C++语言中,数组是可以通过下标访问的同类型数据元素的集合,一维数组的下标是从 0 开始 的。 3. 已知数组 b 定义为 int b[6]={9,6,3};,则 b 的各元素的值分别是( ),最小下标是( ), 最大下标是( )

答案:9,6,3,0,0,005 解析:定义数组的同时进行部分初始化,编译器默认没有赋初值的都为0,且数组下标从0开始,最 大下标是元素个数-1。 4.假定一个一维数组的定义为“char str[8],”,则该数组所含元素的个数为()。 答案:8 解析:数组定义语句中的中括号中的数值是数组的元素个数 5.可以把二维数组看成数组名为一维数组的()数组。 答案:一维 6.己知数组A定义为intA[m[;,则A是一个()行()列的二维数组,总共有() 个元素,最大行下标是(),最大列下标是()。 答案:m n m*n m-ln-l 7.假定一个二维数组的定义为“ita3][5,”,则该数组所含元素的个数为()。 答案:15 解析:二维数组的元素个数为行数*列数 8.要使g成为具有如下初始值的二维it型数组: 12345 67800 00000 则最简单的定义g的语句是( )。 答案:imtg[3][5F{1,2,3,4,5},{6,7,8} 9.下面的语句实现按行显示输出M行N列的数组m的所有元素,请补充完整: for(int i<;) for(intj=_j水_;) cout<< << cout<<endl; 答案:0Mi计+0 N++ m时 10.已知sl、s2、s3是三个有足够元素个数的字符串变量,其值分别是"aaa"、"bbbb"、"ccccc",则执 行语句strcat(s1,strcat(s.2,s3);后,sl、s2、s3的值分别是( )。 答案:aaabbbbccccc bbbbccccc ccccc 解析:函数strcat(s2,s3),是将字符串s3拷贝到字符串s2的尾部,并返回s2。 11.已知sl、s2、s3是三个有足够元素个数的字符串变量,其值分别是"aaa"、"bbbb"、"cccce'",则执 行语句strcat(s1,strcpy(s3,s2),后,sl、s2、s3的值分别是( )。 答案:aaabbbb bbbb bbbb 解析:函数strcpy(s3,s2),是将字符串s2的字符(包括结束符)拷贝到字符串s3中,并返回s3: 函数strcat(s1,strcpy(s3,s2),是将字符串strcpy(s3,s2)拷贝到字符串s1的尾部,并返回s1. l2.己知sl、s2、s3是三个有足够元素个数的字符串变量,其值分别是"student"、"study"、"teacher'", 则执行语句strcat(s1,strcpy(s3,s2)后,s1、s2,s3的值分别是( )。 答案:student study teacherstudy 解析:函数strcpy(3,s2),是将字符串s2的字符(包括结束符)拷贝到字符串s3中,并返回s3: 函数strcat(s1,strcpy(s3,s2),是将字符串strcpy(s3,s2)拷贝到字符串s1的尾部,并返回s1. 三、选择题 1.下面错误的初始化语句是( )
答案:9,6,3,0,0,0 0 5 解析:定义数组的同时进行部分初始化,编译器默认没有赋初值的都为 0,且数组下标从 0 开始,最 大下标是元素个数-1。 4. 假定一个一维数组的定义为“char str[8];”,则该数组所含元素的个数为( )。 答案:8 解析:数组定义语句中的中括号中的数值是数组的元素个数 5. 可以把二维数组看成数组名为一维数组的( )数组。 答案:一维 6. 已知数组 A 定义为 int A[m][n];,则 A 是一个( )行( )列的二维数组,总共有( ) 个元素,最大行下标是( ),最大列下标是( )。 答案:m n m*n m-1 n-1 7. 假定一个二维数组的定义为“int a[3][5];”,则该数组所含元素的个数为( )。 答案:15 解析:二维数组的元素个数为行数*列数 8. 要使 g 成为具有如下初始值的二维 int 型数组: 1 2 3 4 5 6 7 8 0 0 0 0 0 0 0 则最简单的定义 g 的语句是( )。 答案:int g[3][5]={{1,2,3,4,5},{6,7,8}}; 9. 下面的语句实现按行显示输出 M 行 N 列的数组 m 的所有元素,请补充完整: for(int i=___;i<___;_______) { for(int j=____;j<____;______) cout<< ______________<<' '; cout<<endl; } 答案:0 M i++ 0 N j++ m[i][j] 10. 已知 s1、s2、s3 是三个有足够元素个数的字符串变量,其值分别是"aaa"、"bbbb"、"ccccc",则执 行语句 strcat(s1,strcat(s2,s3));后,s1、s2、s3 的值分别是( )。 答案:aaabbbbccccc bbbbccccc ccccc 解析:函数 strcat(s2,s3),是将字符串 s3 拷贝到字符串 s2 的尾部,并返回 s2。 11. 已知 s1、s2、s3 是三个有足够元素个数的字符串变量,其值分别是"aaa"、"bbbb"、"ccccc",则执 行语句 strcat(s1,strcpy(s3,s2));后,s1、s2、s3 的值分别是( )。 答案:aaabbbb bbbb bbbb 解析:函数 strcpy(s3,s2),是将字符串 s2 的字符(包括结束符)拷贝到字符串 s3 中,并返回 s3; 函数 strcat(s1,strcpy(s3,s2)),是将字符串 strcpy(s3,s2)拷贝到字符串 s1 的尾部,并返回 s1。 12. 已知 s1、s2、s3 是三个有足够元素个数的字符串变量,其值分别是"student"、"study"、"teacher", 则执行语句 strcat(s1,strcpy(s3,s2));后,s1、s2、s3 的值分别是( )。 答案:student study teacherstudy 解析:函数 strcpy(s3,s2),是将字符串 s2 的字符(包括结束符)拷贝到字符串 s3 中,并返回 s3; 函数 strcat(s1,strcpy(s3,s2)),是将字符串 strcpy(s3,s2)拷贝到字符串 s1 的尾部,并返回 s1。 三、选择题 1. 下面错误的初始化语句是( )

A.char str[="hello"; B.char str[100]="hello"; C.char str[=(h','e,'T,'T,'o D.char str[]=(hello); 答案:D 解析:选项D中的hello''书写错误。 2.在下面的一维数组定义中,哪一个有语法错误( ). A.inta0={l,2,3}; B.int al101=101: C.int al] D.int a[5]; 答案:C 解析:定义数组时若无初始化,则必须给定元素个数。 3.定义了一维int型数组a10]后,下面错误的语句是( A.a0=1: B.al10]=2,C.a0]=5*2,D.a1]=a2]*a0] 答案:B 解析:数组元素的最大下标是元素个数-1,选项B中的[10]下标越界,故B错。 4.下面程序的输出结果是()。 #include #define N 6 void main() { int aN={1,3,5,7,9: int sum=0; for(int i=2;i 2:void main() 3:{ 4: f1 loat al10]={0,0}: 5: int i; 6: for(i=0;i>a; 7: for(i=1;i<10;i++)cout<<a[i]; 8:} 的各行代码中,下列选项判断正确的是( ) A.没有错误 B.第4行有错误 C.第6行有错误 D.第7行有错误 答案:C 解析:数组名称是常量,不能用输入流对象cin为常量a赋值。 6.一维数组a的第三个元素应表示为( A.a3) B.a3] C.a(2) D.a2] 答案:D 解析:一维数组的第一个元素是下标为0的元素,即a[0],故一维数组a的第三个元素应为a2]. 7.在下面的二维数组定义语句中,正确的是()
A. char str[]="hello"; B. char str[100]="hello"; C. char str[]={'h','e','l','l','o'}; D. char str[]={'hello'}; 答案:D 解析:选项 D 中的'hello'书写错误。 2. 在下面的一维数组定义中,哪一个有语法错误( )。 A. int a[]={1,2,3}; B. int a[10]={0}; C. int a[]; D. int a[5]; 答案:C 解析:定义数组时若无初始化,则必须给定元素个数。 3. 定义了一维 int 型数组 a[10]后,下面错误的语句是( )。 A. a[0]=1; B. a[10]=2; C. a[0]=5*2; D. a[1]=a[2]*a[0]; 答案:B 解析:数组元素的最大下标是元素个数-1,选项 B 中的 a[10]下标越界,故 B 错。 4. 下面程序的输出结果是( )。 #include #define N 6 void main( ) { int a[N]={1,3,5,7,9}; int sum=0; for(int i=2;i 2: void main() 3: { 4: float a[10]={0,0}; 5: int i; 6: for(i=0;i>a; 7: for(i=1;i<10;i++) cout<<a[i]; 8:} 的各行代码中,下列选项判断正确的是( )。 A.没有错误 B.第 4 行有错误 C.第 6 行有错误 D.第 7 行有错误 答案:C 解析:数组名称是常量,不能用输入流对象 cin 为常量 a 赋值。 6. 一维数组 a 的第三个元素应表示为( )。 A. a(3) B. a[3] C.a(2) D. a[2] 答案:D 解析:一维数组的第一个元素是下标为 0 的元素,即 a[0],故一维数组 a 的第三个元素应为 a[2]。 7. 在下面的二维数组定义语句中,正确的是( )

A.int a[5]; B.int al][5]; C.int a; D.int a[3][5]; 答案:D 解析:若定义一个未初始化的二维数组,则二维数组的行数和列数不能省略。 8.定义了it型二维数组a6[7刀后,数组元素a3][4]前的数组元素个数为 A.24 B.25 C.18 D.176 答案:B 解析:数组元素a[3[4]前的数组元素个数为3*7+4=25。 9.下面程序的运行结果是()。 #include void main() inta0[4]={{1,2,3},{4,5,6}}: cout #include"string.h" void main() { char al="welcome",b="well"; strcpy(ab); cout void main() { int x[10]; int sum=0;
A. int a[5][]; B. int a[][5]; C. int a[][]; D. int a[3][5]; 答案:D 解析:若定义一个未初始化的二维数组,则二维数组的行数和列数不能省略。 8. 定义了 int 型二维数组 a[6][7]后,数组元素 a[3][4]前的数组元素个数为( )。 A. 24 B. 25 C. 18 D. 176 答案:B 解析:数组元素 a[3][4]前的数组元素个数为 3*7+4=25。 9. 下面程序的运行结果是( )。 #include void main() { int a[][4]={{1,2,3},{4,5,6}}; cout #include”string.h” void main( ) { char a[]=”welcome”,b[]=”well”; strcpy(a,b); cout void main() { int x[10]; int sum=0;

for(inti=0;i>xi]: int max=0; fori=1;ixil)max=i; i++: cout长 void main( int x[10]; int sum=0; for(inti=0;i>x[i]; for(i=9;i>=0;i-)cout void main() int count[101,ij,m; for(i=0:i>count[i]; coutcount[m])m=j; if(m>i)
for(int i=0;i>x[i]; } int max=0; for(i=1;ix[i]) max=i; i++; } cout void main() { int x[10]; int sum=0; for(int i=0;i>x[i]; for(i=9;i>=0;i--) cout void main() { int count[10],i,j,m; for(i=0;i>count[i]; coutcount[m]) m=j; if(m>i) {

int temp=count[]; count[i]=count m]: count m=temp; } ∥显示排序后的序列 cout void main() { float score[10],sum=0,ave; int i,x,y; cout>score[i]; for(i=0:i=ave)x++; else y++; cout void main() int i,i,a[3][3],sum=0; for(i=0:i<3:i计+) for(j=0;j<3;++)
int temp=count[i]; count[i]=count[m]; count[m]=temp; } } //显示排序后的序列 cout void main() { float score[10],sum=0,ave; int i,x,y; cout>score[i]; for(i=0;i=ave) x++; else y++; cout void main() { int i,j,a[3][3],sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++)

cin>>ai for(i=0: void main( int i,j.min,t,k; int a[5][5]: fori=0:i>a[i]]: fori=0:i<5;i++) { for(j=1;j<5;j++) { min=a[i]0]: t=0; if(alill<min) min=ai] j } for(k=0k<5,k++) if(min<a[k]t])break; if(k==5) cout<<"马鞍数为"<<a[<",在第"<it1<"行,第"<t+1<"列":
cin>>a[i][j]; for(i=0;i void main() { int i,j,min,t,k; int a[5][5]; for(i=0;i>a[i][j]; for(i=0;i<5;i++) { for(j=1;j<5;j++) { min=a[i][0]; t=0; if(a[i][j]<min) { min=a[i][j]; t=j; } } for(k=0;k<5;k++) { if(min<a[k][t]) break; } if(k==5) { cout<<"马鞍数为"<<a[i][t]<<",在第"<<i+1<<"行,第"<<t+1<<"列";

break; } } if(==5)c0ut长 #include void main() { char str[100]; cin>>str; int l=strlen(str); for(inti=0:i<l-2;i++) if(str[i]=='b'&&str[i+1]=='o'&&str[i+2]==y) cout<<'g'<<r'<<i'<<: i+=2; } else cout<<stri] }
break; } } if(i==5) cout #include void main() { char str[100]; cin>>str; int l=strlen(str); for(int i=0;i<l-2;i++) if(str[i]=='b' && str[i+1]=='o' && str[i+2]=='y') { cout<<'g'<<'r'<<'i'<<'l'; i+=2; } else cout<<str[i]; }