1、第七章 数 组 1.在C语言中引用数组元素时,下面关于数组下表数据类型的说法错误的是( ) A)整型常量 B)整型表达式 C) 整型常量或整型表达式 D) 任何类型的表达式 2.以下能正确定义一维数组a的选项是( ) A)int a=[5]={0,1,2,3,4,5}; B) char a[ ]={0,1,2,3,4,5}; C)char a={ 'A','B','C',}; D) int a[5]= "0,1,2,3" 3.以下能正确定义一维数组a的选项是(
2、 ) A) int a(10); B) int n=10, a[n]; C) int n; D) #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 4.若有定义:int a[10];则正确引用数组a元素的是( ) A) a[10] B) a[3] C) a[5] D) a[-10] 5.以下不正确的数组定义是( ) A) doub
3、le x[5]={2.0,4.0,6.0,8.0,10.0}; B) int y[5]={0,1,3,5,7,9}; C) char c1[ ]={'1','2','3','4','5'}; D) char c2[ ]={'\x10','\xa','\x8'}; 6.以下叙述中错误的是( ) A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D)可以通过赋初值的方式确定数组元素的个数 7.以
4、下正确的二维数组定义是( ) A)int a[ ] [ ]={1,2,3,4,5,6}; B)int a[2][ ]={1,2,3,4,5,6}; C)int a[ ][3]={1,2,3,4,5,6}; D)int a[2,3]={1,2,3,4,5,6}; 8.以下对二维数组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
5、0,1},{ },{1,1}}; 9.以下不能对二维数组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}; 10.若有定义:int a[3][4];则正确引用数组a元素的是( ) A)a[2][4] B)a[3][3] C)a[0][0] D)a[3][4] 11.若定义了int b[ ][3]={1,2,3,4,5,6,7
6、};则b数组第一维的长度是( ) A)2 B)3 C)4 D)无确定值 12.若有定义:int a[3][4]={0};以下叙述中正确的是( ) A)只有元素a[0][0]可得到初值0 B)此说明语句不正确 C)数组a中各元素都可得到初值,但其值不一定为0 D)数组a中每个元素均可得到初值0 13.若有定义:int a[ ][4]={0,0};以下叙述中错误的是( ) A)数组a的每个元素都可得到初值0 B)二维数组a的第一维大小为1 C)因为初值个数除以a中第二维大小的值的
7、商为0,故数组a的行数为1 D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0 14.若二维数组a有m列,则计算元素a[ i ][ j ]在数组中相对位置的公式为( ) A)i*m+j B)j*m+i C)i*m+j—1 D)i*m+j+1 15.设char x[ ]="12345",y[ ]={'1','2','3','4','5','\0'};以下叙述中正确的是( ) A)x数组的长度等于y数组的长度 B)x数组的长度大于y数组的长度 C)x数组的长度少于y
8、数组的长度 D)x数组与y数组的存储区域相同 16.下面是对字符数组s进行初始化,其中不正确的是( ) A)char s[5]={"abc"}; B)char s[5]={'a','b','c'}; C)char s[5]=" "; D)char s[5]="abcde"; 17.字符数组s不能作为字符串使用的是( ) A)char s[ ]="happy"; B)char s[6]={'h','a','p','p','y','\0'}; C)char s[ ]={"happy"};
9、 D) char s[5]={ 'h','a','p','p','y','\0'}; 18.下面有关字符数组的描述中错误的是( ) A)字符数组可以存放字符串 B)字符串可以整体输入、输出 C)可以在赋值语句中通过赋值运算对字符数组整体赋值 D)不可以用关系运算符对字符数组中的字符串进行比较 19.下面程序段执行后的输出结果是( ) int k,a[3][3]={1,2,3,4,5,6,7,8,9}; for (k=0;k<3;k++) printf("%d",a[ k ][2-k]); A)3 5 7
10、 B)3 6 9 C)1 5 9 D)1 4 7 20.下面程序段执行后的输出结果是( ) char c[5]={'a','b','\0','c','\0'}; printf("%s",c); A)'a' 'b' B)ab C)ab c D)abc 21.有两个字符数组a、b,则以下( )是正确的输入语句 A)gets (a,b); B)scanf ("%s%s",a,b); C)scanf ("%s%s
11、",&a,&b); D)gets ("a");gets ("b"); 22.下面程序段执行后的输出结果是( ) char a[7]="abcdef"; char b[4]="ABC"; strcpy (a,b); printf ("%c",a[5]); A)空格 B)\0 C)e D)f 23.下面程序段执行后的输出结果是( ) char c[ ]="\t\b\\\0will\n"; printf ("%d",strlen
12、 (c) ); A)14 B)3 C)9 D)6 24.判断字符串a是否大于b,应当使用( ) A)if (a>b) B)if (strcmp (a,b) ) C)if (strcmp(b,a)>0) D)if (strcmp(a,b)>0) 25.表达式strcmp("3.14","3.278")的值是( ) A)非零整数 B)浮点数 C)0 D)字符 26.以下叙述中正确的是( ) A)两
13、个字符串所包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符个数少的字符串大
C)字符串"STOP︼"与"STOP"相等
D)字符串"That"小于字符串"That"
27.有以下程序:
# include
14、 )
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
D)由于p和q数组中都没有字符串结束符,故长度都不能确定
28.下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( )
# include
15、canf ("%d",&i);scanf ("%s",s);
printf("%c,%d,%s",c,i,s);
}
A)123,456,789 B)1,456,789 C)1,23,456,789 D)1,23,456
29.下面程序运行时从键盘上输入:ABC↙,其输出结果是( )
# include
16、s);strcat(ss,"6789");printf("%s",ss);
}
A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789
30.下面程序执行后的输出结果是( )
# include
17、 arr[0][3]='&';
printf("%s",arr);
}
A)you&me B)you C)me D)错误
31.下面程序执行后的输出结果是( )
# include
18、]-'0';
printf("%d",s);
}
A)1 B)1256 C)12ab56 D)ab
32.下面程序执行后的输出结果是( )
# include
19、ase 'I':++k;break;
case'L':continue;
default:putchar( c );continue;
}
putchar( ' * ' );
}
}
A)SSW B)SW* C)SW*A D)SW
33.下面程序执行后的输出结果是( )
# include
20、2 },{ 3,4 }.{ 5,6 } },i , j , s=0;
for (i=1;i<3;i++)
for (j=0;j<=i;j++) s+=a[i][j];
printf("%d",s);
}
A)18 B)19 C)20 D)21
34.下面程序执行后的输出结果是( )
# include
21、]={"ABCD","EFGH","IJKL","MNOP"} , k;
for (k=1;k<3;k++) printf("%s",w[k]);
}
A)ABCDFGHKL B)ABCDEFGIJM C)EFGJKO D)EFGHIJKL
35.下面程序执行后的输出结果是( )
# include
22、6} }; int i,s=0; for (i=0;i<4;i++) s+=aa[i][1]; printf("%d",s); } A)11 B)13 C)19 D)20 二、填空题 1、C语言数组的下标总是从_____开始,不可以为负数;数组各个元素具有相同的_____. 2. 在C语言中,二维数组的元素在内存中的存放顺序是_____________________. 3.在C语言中,一个二维数组可以看成若干个_______
23、数组. 4.若定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后a[1][2]的值为______,a[2][1]得到的值为_______ 5.若定义:double x[3][5];则x数组中行下标的上限为____,列下标的上限为_____ 6.字符串是以_____为结束标的一维字符数组.若有定义:char a[]=” “;则a数组的长度是_____. 7.字符串”ab\n\\012\\”的长度是________. 8.若定义:char a[]=”abcdefg”,b[10]=”abcdefg”;语句printf(“%d,%d”,s
24、izeof(a),sizeof(b));.”执行后的输出结果是_____________. 9.若要求从键盘读入含有空格的字符串,应使用_______函数. 10.欲为字符串s1输入”hello world”,其语句是_________________ 11.欲为字符串s1复制到字符串S2中,其语句是_________________ 12,如果在程序中调用了strcat函数,则需要预处理命令__________________。如果在程序中调用了gets函数,则需要预处理命令__________________。 13.如果在程序中调用了isupper函数,则需要预处理命令___
25、
14.若定义:char a[]=”windows”,b[]=”9x”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________。
15.下面程序执行后的输出结果是
#include 26、o.h>
void main( )
{inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},I,s=0;
for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf(“%d”,s);
}
17. 下面程序执行后的输出结果是
char x[]=”the teacher”;int i=0;
while(x[++i]!=’\0’)
if(x[i-1]= =’t’) printf(“%c”,x[i]);
18. 下面程序执行后的输出结果是
#include 27、har b[]=”hello,you”;
b[5]=0;
printf(“%s”,b);
}
19. 下面程序执行后的输出结果是
char a[7]=”a0\0a0\0”;int i,j;
i=sizeof(a);j=strlen(a);
printf(“%d,%d”,i,j);
}
20. 若定义:char a[80]=”95”,b[]=”windows”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________
三、程序阅读题1-20
1./*写出下面程序执行后的运行结果*/
#include 28、 29、行时从键盘上输入:7 4 8 9 1 5 ,写出程序的运行结果。*/
#include 30、
printf("\n");
}
}
4./*下面程序运行时从键盘上输入:1 2 3 -4 ,写出程序的运行结果。*/
#include 31、nclude 32、for(j=2;j>=i;j--)
if(x[j+1]>x[j]) {k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j+1]>x[j]) {k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]) {k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<8;i++) printf("%d",x[i]) 33、
}
7./*写出下面程序执行后的运行结果*/
#include 34、
{ int a[3][3]={{1},{2},{3}};
int b[3][3]={1,2,3};
printf("%d",a[1][0]+b[0][1]);
printf("%d\n",a[0][1]+b[1][0]);
}
9./*写出下面程序执行后的运行结果*/
#include 35、4) continue;
j=0;
do { s+=a[i][j];j++} while(j<4);
}
printf("%d",s);
}
10./*写出下面程序执行后的运行结果*/
#include 36、id main()
{ int b[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++) t=t+b[i][b[j][j]];
printf("%d",t);
}
12. /*写出下面程序执行后的运行结果*/
#include 37、
for(j=0;j<4;j++)
if(a[i][j]>0) printf("%3d",a[i][j]);
putchar('\n');
}
}
13./*写出下面程序执行后的运行结果*/
#include 38、0;k<2;k++) {
s=0;
for(j=0;j<3;j++)
s+=a[i][j]*b[j][k];
c[i][k]=s;
printf("%4d",s);
}
printf("\n");
}
}
14./*写出下面程序执行后的运行结果*/
#include 39、r(i=0;i<3;i++) {
for(j=0;j<3;j++) printf("%d",a[i][j]);
printf("\n");
}
}
15. /*写出下面程序执行后的运行结果*/
#include 40、
a[0]=t;
}
printf("%s",a);
}
16. /*写出下面程序执行后的运行结果*/
#include 41、 int i=0;
char a[]="abm",b[]="aqid",c[10];
while(a[i]!='\0'&& b[i]!='\0') {
if(a[i]>=b[i]) c[i]=a[i]-32;
else c[i]=b[i]-32;
i++;
}
c[i]='\0';
puts(c);
}
18./*写出下面程序执行后的运行结果*/
#include 42、tch(c) {
case 'A':i++;break;
case 'B':++i;
default:putchar(c);i++;
}
putchar('*');
}
}
19. /*写出下面程序执行后的运行结果*/
#include 43、 puts(s[i]);
}
20./*写出下面程序执行后的运行结果*/
#include 44、num[20];
scanf("%d",&n);
scanf("%d",&base);
do{
i++;
num[i]=【1】;
n=【2】;
}while(n!=0);
for(【3】)
printf("%d",num[j]);
}
/*2.下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。请填空使用程序完整、正确。*/
#include 45、i]);
max=min=a[0],j=k=0;
for(i=0;i<10;i++) {
if(a[i] 46、{ int i,j,t,a[M];
for(i=0;i 47、k=0;
int a[3]={5,9,10};int b[5]={12,24,26,37,48};
while(i<3 && j<5)
if(【1】) {
c[k]=b[j];k++;j++;
}
else {
c[k]=a[i];k++;i++;
}
while (【2】) {
c[k=ai];i++;k++;
}
while(【3】) {
c[k]=b[j];j++;k++;
}
for(i=0;i 48、d",c[i]);
}
/*5.下面程序的功能是读入n(n<=10)个整数并放入一个数组r中,统计并输出比相邻元素小的数组元素的个数。请填空使程序完整、正确。*/
#include 49、[n-2]) count++;
printf("count=%d",count);
}
/*6.下面程序的功能是用“顺序查找法”查找数组a中是否存在某一关键字。请填空使程序完整、正确。*/
#include 50、
}
/*7.下面程序的功能是用“插入法”对数组a进行由大到小的排序。请填空使程序完整、正确。
提示:简单插入排序算法的基本思想是将数组处理n-1,第k次处理时,前面的元素插入到目前的位置。第k次的元素是这样插入的:在第k次处理时,前面的元a[0],a[1],……a[k-1]必定已排成了升序,将a[k]与a[k-1],a[k-2],……a[0]逐个比较(由后向前),若有a[j]
void main()
{ int a[10]={191,3,6,4,11,7,25,13,89,






