资源描述
第七章 数 组
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的选项是( )
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) double 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.以下正确的二维数组定义是( )
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,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};则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中第二维大小的值的商为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数组的长度 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"}; 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 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",&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 (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)两个字符串所包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符个数少的字符串大
C)字符串"STOP︼"与"STOP"相等
D)字符串"That"小于字符串"That"
27.有以下程序:
# include <stdio.h>
# include <string.h>
void main( )
{ char p[ ]={'a','b','c'},q[10]={'a','b','c'};
printf ("%d %d",strlen(p), strlen(q));
}
以下叙述正确的是( )
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
D)由于p和q数组中都没有字符串结束符,故长度都不能确定
28.下面程序运行时从键盘上输入:123 456 789↙,其输出结果是( )
# include <stdio.h>
void main( )
{ char s[100];int c, i;
scanf ("%c",&c);scanf ("%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 <stdio.h>
# include <string.h>
void main( )
{ char ss[10]="12345";
gets (ss);strcat(ss,"6789");printf("%s",ss);
}
A)ABC6789 B)ABC67 C)12345ABC6 D)ABC456789
30.下面程序执行后的输出结果是( )
# include <stdio.h>
#include <string.h>
void main( )
{ char arr[2][4];
strcpy (arr,"you");strcpy(arr[1],"me");
arr[0][3]='&';
printf("%s",arr);
}
A)you&me B)you C)me D)错误
31.下面程序执行后的输出结果是( )
# include <stdio.h>
void main( )
{ char ch[7]="12ab56";int i,s=0;
for (i=0;ch[i]>'0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d",s);
}
A)1 B)1256 C)12ab56 D)ab
32.下面程序执行后的输出结果是( )
# include <stdio.h>
void main( )
{ char str[ ]="SSWLIA", c;int k;
for (k=2;( c=str[k] )!='\0';k++) {
switch ( c ) {
case 'I':++k;break;
case'L':continue;
default:putchar( c );continue;
}
putchar( ' * ' );
}
}
A)SSW B)SW* C)SW*A D)SW
33.下面程序执行后的输出结果是( )
# include <stdio.h>
void main( )
{ int a[3][3]={ {1,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 <stdio.h>
void main( )
{ char w[ ][10]={"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 <stdio.h>
void main( )
{ int aa[4][4]={ {1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,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语言中,一个二维数组可以看成若干个________________数组.
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”,sizeof(a),sizeof(b));.”执行后的输出结果是_____________.
9.若要求从键盘读入含有空格的字符串,应使用_______函数.
10.欲为字符串s1输入”hello world”,其语句是_________________
11.欲为字符串s1复制到字符串S2中,其语句是_________________
12,如果在程序中调用了strcat函数,则需要预处理命令__________________。如果在程序中调用了gets函数,则需要预处理命令__________________。
13.如果在程序中调用了isupper函数,则需要预处理命令__________________。
14.若定义:char a[]=”windows”,b[]=”9x”;则执行语句printf(“%s”,strcat(a,b));”后的输出结果为:____________________。
15.下面程序执行后的输出结果是
#include <stdio.h>
Void main( )
{int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while (i++<7) if(p[i]%2) j+=p[i];
printf(“%d”,j);
}
16.下面程序执行后的输出结果是
#include <stdio.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 <stdio.h>
void main( )
{char 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<stdio.h>
void main()
{ int i,n[]={0,0,0,0,0};
for(i=1;i<=4;i++) {
n[i]=n[i-1]*2+1;
printf("%d",n[i]);
}
}
2./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int i,a[5];
for(i=0;i<5;i++)
a[i]=9*(i-2+4*(i>2))%5;
for(i=4;i>=0;i--)
printf("%d",a[i]);
}
3./*下面程序运行时从键盘上输入:7 4 8 9 1 5 ,写出程序的运行结果。*/
#include<stdio.h>
void main()
{ int a[6],i,j,k,m;//int a[6]={7,4,8,9,1,5},i,j,k,m;
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=5;i>=0;i--) {
k=a[5];
for(j=4;j>=0;j--)
a[j+1]=a[j];
a[0]=k;
for(m=0;m<6;m++)
printf("%d",a[m]);
printf("\n");
}
}
4./*下面程序运行时从键盘上输入:1 2 3 -4 ,写出程序的运行结果。*/
#include<stdio.h>
void main()
{ int i,k=0,s=0,a[10];
while(1) {
scanf("%d",&a[k]);
if(a[k]<=0) break;
s=s+a[k++];
}
for(i=0;i<k;i++) printf("%d",a[i]);
printf("%d",s);
}
5./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int i,k=5,a[10],p[3];
for(i=0;i<10;i++) a[i]=i;
for(i=0;i<3;i++) p[i]=a[i*(i+1)];
for(i=0;i<3;i++) k+=p[i]*2;
printf("%d\n",k);
}
6./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int x[]={1,3,5,7,2,4,6,0},i,j,k;
for(i=0;i<3;i++)
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]);
}
7./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void 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");
}
}
8./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ 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<stdio.h>
void main(
{ int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
int i=0;j=0;s=0;
while(i++<4) {
if(i==2||i==4) continue;
j=0;
do { s+=a[i][j];j++} while(j<4);
}
printf("%d",s);
}
10./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int a[3][3]={1,4,17,3,6,19,2,5,18},i,s=0;
for(i=0;i<=2;i++)
s=s+a[i][2-i];
printf("s=%d",s);
}
11./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void 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<stdio.h>
void main()
{ int i,j,a[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++) a[i][j]=1+i-j;
for(i=0;i<4;i++) {
for(j=0;j<4;j++)
if(a[i][j]>0) printf("%3d",a[i][j]);
putchar('\n');
}
}
13./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int a[4][3]={{1,2,3},{-2,0,2},{1,0,1},{-1,2,-3}};
int b[3][2]={{-1,3},{-2,2},{2,1}};
int c[4][2],i,j,k,s;
for(i=0;i<4;i++) {
for(k=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<stdio.h>
void main()
{ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
for(j=i+1;j<3;j++) a[j][i]=0;
for(i=0;i<3;i++) {
for(j=0;j<3;j++) printf("%d",a[i][j]);
printf("\n");
}
}
15. /*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ char a[8]={' '},t;
int j,k;
for(j=0;j<5;j++) a[j]=(char)('a'+j);
for(j=0;j<4;j++) {
t=a[4];
for(k=4;k>0;k--) a[k]=a[k-1];
a[0]=t;
}
printf("%s",a);
}
16. /*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ char s[80]; int i=0;
gets(s);
while(s[i]!='\0') {
if(s[i]<='z'&&s[i]>='a')
s[i]='z'+'a'-s[i];
i++;
}
puts(s);
}
17. /*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ 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<stdio.h>
void main()
{ int i=0;
char c,s[]="SABC";
while(c=s[i]) {
switch(c) {
case 'A':i++;break;
case 'B':++i;
default:putchar(c);i++;
}
putchar('*');
}
}
19. /*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ int i,c; char s[2][5]={"1980","9876"};
for(i=3;i>=0;i--) {
c=s[0][i]=s[1][i]-2*'0';
s[0][i]=c%10;
}
for(i=0;i<=1;i++) puts(s[i]);
}
20./*写出下面程序执行后的运行结果*/
#include<stdio.h>
void main()
{ char ch[]="abc",x[3][4];int i;
for(i=0;i<3;i++) strcpy(x[i],ch);
for(i=0;i<3;i++) printf("%s",x[i][i]);
}
四、程序填空题1-20
/*1.下面程序的功能是将十进制整数n转换成base进制。请填空使程序完整、正确*/
#include<stdio.h>
void main()
{int i=0,base,n,j,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<stdio.h>
void main()
{
int a[10],max,min,i,j,k;
for(i=0;i<10;i++) scanf("%d",&a[i]);
max=min=a[0],j=k=0;
for(i=0;i<10;i++) {
if(a[i]<min) {min=a[i];【1】;}
if(a[i]>max) {max=a[i];【2】;}
}
【3】;
for(i=0;i<10;i++) printf("%d",a[i]);
}
/*3.下面程序的功能是将数组输入数据,逆序置换后输出。逆序置换是指数组的首元素和末元素置换,第二个元素和倒数第二个元素置换……请填空使用程序完整、正确。*/
#include<stdio.h>
#define N 8
void main()
{ int i,j,t,a[M];
for(i=0;i<N;i++) scanf("%d",a[i]);
i=0;j=N-1;
while(i<j) {
t=a[i],【1】,a[i]=t;
i++,【2】;
}
for(i=0;i<N;i++) printf("%5d",a[i]);
}
/*4.下面程序的功能是用“两路合并法”把两个已按升序(由小到大)排列的数组合并成一个新的升序数组。请填空使程序完整、正确。*/
#include<stdio.h>
void main()
{ int c[10],i=0,j=0,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<k;i++) printf("%d",c[i]);
}
/*5.下面程序的功能是读入n(n<=10)个整数并放入一个数组r中,统计并输出比相邻元素小的数组元素的个数。请填空使程序完整、正确。*/
#include<stdio.h>
void main()
{ int k,count,n,r[10];
scanf("%d",&n):
for(k=0;k<n;k++)
scanf("%d",&r[k]);
【1】;
for(k=1;k<n-1;k++)
if(【2】) count++;
if(【3】) count++;
if(r[n-1]<r[n-2]) count++;
printf("count=%d",count);
}
/*6.下面程序的功能是用“顺序查找法”查找数组a中是否存在某一关键字。请填空使程序完整、正确。*/
#include<stdio.h>
void main()
{ int a[10]={2557,48,371,123,291,18,22,44}; int i=0,x;
scanf("%d",&x);
【1】;
while(a[i]!=x) i++;
if(【2】) printf("找到在%d",i);
else printf("找不到!");
}
/*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]<a[k],则a[k]插入到a[j]之后,否则a[k]维持原位不变。*/
#include<stdio.h>
void main()
{ int a[10]={191,3,6,4,11,7,25,13,89,
展开阅读全文