第七章 数组.docx
《第七章 数组.docx》由会员分享,可在线阅读,更多相关《第七章 数组.docx(42页珍藏版)》请在冰豆网上搜索。
第七章数组
第七章数组
数组是程序设计语言中最基本,最重要的组成部分,本章的习题将从C语言数组的基本概念出发,讨论C语言数组的特点和使用方法,并通过典型的例题和常见算法研究数组的一般应用,本章的主要内容包括:
●数组基本概念。
包括:
数组的定义,数组的类型,数组维数,体积,数组元素和数组下标的概念,数组说明,对数组进行初始化的方法,多维数组中元素的排列次序及初始化等问题。
●字符型数组。
包括:
字符型数组与其它数组的区别,字符串及其特点,对字符型数组进行初始化,使用不同的库函数输入输出字符串,对字符串的简单处理(求串长,串复制,串连接,串比较,串反向等)等。
●数组与函数之间的关系。
包括:
将数组作为组与函数之间进行传递等。
●常见的使用数组的算法。
包括:
排序算法,查找算法等。
7.1选择题
【7.1】错误的说明语句是。
A)staticcharword[]={‘T’,’u’,’r’,’b’,’o’,’\0’};
B)staticcharword[]={“Turbo\0”};
C)staticcharword[]=”Turbo\0”;
D)staticcharword[]=‘Turbo\0’;
【7.2】已知:
chars[5],c;registerintb;则调用函数scanf的正确语句是。
A)scanf(“%s%c”,s,c);
B)scanf(“%d%c,&b,&c);
C)scanf(“%d%c”,b,&c);
D)scanf(“%s%c”,s,&c);
【7.3】要说明一个有10个int元素的数组,应当选择语句
。
A)inta[10];B)inta[2,5];
C)inta[];D)int*a[10];
【7.4】合法的数组说明语句是。
A)inta[]=”string”;
B)inta[5]={0,1,2,3,4,5,};
C)chara=”string”;
D)chara[]={0,1,2,3,4,5,};
【7.5】在下述对C语言字符数组的描述中错误的是。
A)字符数组可以存放字符串
B)字符数组中的字符串可以进行整体输入输出
C)可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D)字符数组的下标从0开始
【7.6】调用strlen(“abcd\0ef\0g”)的返回值为。
A)4B)5C)8D)9
【7.7】若有以下语句,则正确的描述是。
staticcharx[]=”12345”;
staticchary[]={‘1’,’2’,’3’,’4’,’5’};
A)x数组和y数组的长度相同
B)x数组长度大于y数组长度
C)x数组长度小于y的数组长度
D)x数组等价于y数组
【7.8】已知:
charstr1[10],str2[10]={“books”};则在程序中能够将字符串“books”赋给数组str1的正确语句是。
A)str1={“Books”};
B)strcpy(str1,str2);
C)str1=str2;
D)strcpy(str2,str1);
【7.9】以下程序段的输出是。
staticchara[]=“-12345”;
intk=0,symbol,m;
if(a[k]==‘+’||a[k]==‘-’)
symbol=(a[k++]==‘+’)?
1:
-1;
for(m=0;a[k]>=‘0’&&a[k]<=‘9’;k++)
m=m*10+a[k]-’0’;
printf(“number=&d\n”,symbol*m);
A)number=-12345
B)number=12345
C)number=-1000
D)number=1000
【7.10】若用数组名作为函数调用时的实参,则实际上传递给形参的是。
A)数组首地址
B)数组的第一个元素值
C)数组中的全部元素的值
C)数组元素的个数
【7.11】已知:
charstr1[20]=”abcde”,str2[20]=”xyz”;则执行语句:
printf(“&d”,strlen(strcpy(str1,str2)));
输出结果是。
A)9B)3C)5D)8
【7.12】下面关于字符串的说明中,错误的是。
A)charstr[7]=”FORTRAN”;
B)charstr[]=”FORTRAN”;
C)char*str=”FORTRAN”;
D)charstr[]={‘F’,’0’,’R’,’T’,‘R’,’A’,’N’,’\0’};
【7.13】已知:
inti,x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是。
for(i=0;i<3;i++)
printf(“&d”,x[i][2-i]);
A)159B)147C)357D)369
【7.14】已知:
charstr[]=”ab\n\012\\\””;则执行语句:
printf(“&d”,strlen(str));
A)3B)4C)6D)12
【7.15】在C语言中,引用数组元素时,其数组下标的数据类型允许是。
A)整型常量
B)整型表达式
C)整型常量或整型表达式
D)任何类型的表达式
【7.16】以下对一维整型数组a的正确说明是。
A)inta(10);
B)intn=10,a[n];
C)intn;
scanf(“&d”,&n);
inta[n];
D)#defineSIZE10
inta[SIZE];
【7.17】已知:
inta[10];则对a数组元素的正确引用是。
A)a[10]B)a[3.5]
C)a(5)D)a[10-10]
【7.18】在C语言中,一维数组的说明方式为:
类型说明符数组名。
A)[常量表达式]
B)[整型表达式]
C)[整型常量]或[整型表达式]
D)[整型变量]
【7.19】以下对外部的一维数组a进行正确初始化的语句是
。
A)inta[10]=(0,0,0,0,0);
B)inta[10]={};
C)inta[]={0};
D)inta[10]={10*1};
【7.20】以下对二维数组a的正确说明是。
A)inta[3][];
B)floata(3,4);
C)doublea[1][4];
D)floata(3)(4);
【7.21】已知:
inta[3][4];则对数组元素引用正确的是。
A)a[2][4]B)[1,3]
C)a[1+1][0]D)a
(2)
(1)
【7.22】已知:
inta[3][4];则对数组元素的非法引用是。
A)a[0][2*1]B)a[1][3]
C)a[4-2][0]D)a[0][4]
【7.23】以下能对外部的二维数组a进行正确初始化的语句是。
A)inta[2][]={{1,0,1},{5,2,3}};
B)inta[][3]={{1,2,3},{4,5,6}};
C)inta[2][4]={{1,2,3},{4,5},{6}};
D)inta[][3]={{1,0,1},{},{1,1}};
【7.24】以下不能对二维数组a进行正确初始化的语句是。
A)inta[2][3]={0};
B)inta[][3]={{1,2},{0}};
C)inta[2][3]={{1,2},{3,4},{5,6}};
D)inta[][3]={1,2,3,4,5,6};
【7.25】已知:
staticinta[3][4]={0};则下面正确的叙述是。
A)只有元素a[0][0]可得到初值0
B)此说明语句是错误的
C)数组a中每个元素都可得到初值,但其值不一定为0
D)数组a中每个元素均可得到初值0
【7.26】已知在函数的外面有:
inta[][4]={0,0};则下面
叙述中错误的是。
A)数组a的每个元素都可得到初值0
B)二维数组a的第一维大小为1
C)因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1
D)只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
【7.27】已知:
staticinta[3][4];则数组a中各元素。
A)可在程序的运行阶段得到初值0
B)可在程序的编译阶段得到初值0
C)不能得到确定的初值
D)可在程序的编译或运行阶段得到初值0
【7.28】以下各组中选项中,均能正确说明二维实型数组a的是。
A)floata[3][4];
floata[][4];
floata[3][]={{1},{0}};
B)floata(3,4);
floata[3][4];
floata[][]={{0},{0}};
C)floata[3][4];
floata[][4]={{0},{0}};
autofloata[][4]={{0},{0},{0}}
E)floata[3][4];
floata[3][];
floata[][4];
【7.29】在C语言中,二维数组元素在内存中的存放顺序是。
A)按行存放B)按列存放
C)由用户自己定义D)由编译器决定
【7.30】对以下说明语句的正确理解是。
inta[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)因为数组长度与初值的个数不相同,所以此语句不正确
【7.31】下列数组说明语句中错误的是。
A)doublex[5]={2.0,4.0,6.0,8.0,10.0};
B)inty[5]={0,1,3,5,7,9};
C)charc1[]={‘1’,‘2’,‘3’,‘4’,‘5’};
D)charc2[]={‘\x10’,‘\xa’,‘\x8’};
【7.32】已知:
inta[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是。
A)2B)3C)4D)无确定值
【7.33】若二维数组a有m列,则在a[i][j]之前的元素各数为。
A)j*m+iB)i*m+j
C)i*m+j-1D)i*m+j+1
【7.34】以下正确的语句是。
A)inta[1][4]={1,2,3,4,5};
B)floatx[3][]={{1},{2},{3}};
C)longb[2][3]={{1},{1,2},{1,2,3}};
D)doubley[][3]={0};
【7.35】下面是对外部变量s的初始化,其中错误的是。
A)chars[5]={“abc”};
B)chars[5]={‘a’,‘b’,‘c’};
C)chars[5]=“”;
D)chars[5]=”abcdef”;
【7.36】已知:
chara[20],b[20];则以下不正确的输入语句是。
A)gets(a,b);
B)scanf(“%s%s”,a[],b[]);
C)scanf(“%s%s”,&a,&b);
D)gets(“a”),gets(“b”);
【7.37】有字符数组a[80]和b[80],则正确的输出语句是。
A)puts(a,b);
B)printf(“%s,%s”,a[],b[]);
C)putchar(a,b);
D)puts(a),puts(b);
【7.38】若要求:
如果字符串s1大于字符串s2则要执行if语句的语句1应当使用。
A)if(s1>s2)
B)if(strcmp(s1,s2))
C)if(strcmp(s2,s1)>0)
D)if(strcmp(s1,s2)>0)
【7.39】下面描述正确的是。
A)两个字符串所包含的字符个数相同时,才能比较字符串
B)字符个数多的字符串比字符少的字符串大
C)字符串”STOP”与”STOP”相等
D)字符串“That”小于字符串”The”
【7.40】下面程序的运行结果是。
charc[5]={‘a’,‘b’,‘\0’,‘c’,‘\0’};
printf(“%s”,c);
A)‘a’’b’B)\0
C)abcD)以上三个答案均有错误
【7.41】下面程序段的运行结果是(其中~表示空格)。
chara[7]=“abcdef”,b[4]=”ABC”;
strcpy(a,b);
printf(“%c”,a[5]);
A)~B)\0C)eD)f
【7.42】已知以下程序段,则。
chara[3],b[]=”China”;
a=b;
printf(“%s”,a);
A)运行后将输出China
B)运行后将输出Ch
C)运行后将输出Chi
1.D)程序出错
【7.43】下面程序段的运行结果是。
charc[]=”\t\v\\\0will\n”;
printf(“%d”,strlen(c));
A)14
B)3
C)9
D)字符串中有非法字符,输出值不确定
【7.44】若有以下程序段:
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--;}
a[j+1]=t;
}
则该程序段的功能是。
A)对数组a进行插入排序(升序)
B)对数组a进行插入排序(降序)
C)对数组a进行选择排序(升序)
D)对数组a进行选择排序(降序)
【7.45】下面程序(程序每行前面的数字表示行号)。
1main()
2{
3floata[10];
4inti;
5for(i=0;i<3;i++)scanf(“%d”,&a[i]);
6for(i=1;i<3;i++)a[0]=a[0]+a[i];
7.printf(“%f\n”,a[0];
8.}
A)没有错误B)第3行有错误
C)第五行有错误D)第7行有错误
【7.46】下面程序中有错误的行是(程序每行前面的数字表示行号)。
1main()
2{
3inta[3];
4inti;
5canf(“%d”,&a);
6for(i=0;i<3;i++)a[0]=a[0]+a[i];
7printf(“a[0]=%d”,a[0];
}
A)3B)6C)7D)5
【7.47】下面程序(程序每行前面的数字表示行号)。
1main()
2{
3inta[3];
4inti;
5for(i=0;i<3;i++)scanf(“%d”,&a[i]);
6for(i=1;i<3;i++)a[0]=a[0]+a[i];
7printf(“%d\n”,a);
8{
A)没有错误B)第5行有错误
C)第6行有错误D)第7行有错误
【7.48】下面程序(程序每行前面的数字表示行号)。
1main()
2{
3inta[3]={3*0};
4inti;
5for(i=0;i<3;i++)scanf(“%d”,&a[i]);
6for(i=0;i<3;i++)a[0]=a[0]+a[i];
7printf(“%d\n”,a[0]);
8}
A)第3行有错误B)第7行有错误
C)第5行有错误D)没有错误
7.2阅读程序
【7.49】阅读下列程序,选择程序的运行结果。
intm[3][3]={{1},{2},{3}};
intn[3][3]={1,2,3};
main()
{printf(“%d\n”,m[1][0]+n[0][0]);
/*①*/
printf(“%d\n”,m[0][1]+n[1][0]);
/*②*/
}
①A)0B)1C)2D)3
②A)0B)1C)2D)3
【7.50】阅读下列程序,选择程序的运行结果。
#defineFMT“%X\n”
#include
main( )
{staticinta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
printf(FMT,a[2][2]);/*①*/
printf(FMT,*(*(a+1)+1));/*②*/
}
①A)9B)AC)BD)前面三个答案均是错误的
②A)6B)7C)8D)前面三个答案均是错误的
【7.51】选择下列程序的运行结果。
#include
main()
{intn[3][3],i,j;
for(i=0;i<3;i++)
for(j=0;j<3;i++)
n[i][j]=i+j;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
n[i+1][j+1]+=n[i][j];
printf(“%d\n”,n[i][j];
}
A)14B)0C)6D)不确定
【7.52】阅读下列程序,选择程序的运行结果。
main()
{inta[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”);
}
}
A)11111B)00001
1111100010
1111100100
1111101000
1111110000
C)10000D)10001
0100001010
0010000100
0001001010
0000110001
【7.53】阅读下列程序,选择程序的运行结果。
main()
{inta[6],i;
for(i=0;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf(“%2d”,a[i]);
}
}
A)-3-40404
B)-3-40403
C)-3-40443
D)-3-40440
【7.54】阅读下列程序,选择程序的运行结果。
#include
main()
{inti,k,a[10],p[3];
k=5;
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);
}
A)20B)21C)22D)23
【7.55】阅读程序,写出执行结果。
#include
main()
{charstr[30];
scanf(“%s”,str);
printf(“%s”,str);
}
运行程序,输入:
FortranLanguage
【7.56】阅读程序,写出执行结果。
#include“stdio.h”
main()
{charstr[30];
gets(str);
printf(“%s\n”,str);
{
运行程序,输入:
FortranLanguage
【7.57】阅读程序,写出执行结果。
#include“stdio.h”
func(intb[])
{intj;
for(j=0;j<4;j++)
b[j]=j;
}
main()
{inta[4],i;
func(a);
for(i=0;i<4;j++)
printf(“%d”,a[i]);
}
【7.58】写出程序的运行结果。
#include
#include
main()
{charstr[100]=“Howdoyoudo”;
strcopy(str+strlen(str)/2,”esshe”);
printf(“%s\n”,str);
}
【7.59】运行下面的程序,如果从键盘上输入字符串“qwerty”和字符串“abcd“,请写出程序的运行结果。
#include
strle(chara[],charb[])
{intnum=0,n=0;
while(a[num]!
=’\0’)num++;
while(b[n])
{a[num]=b[n];
num++;n++;
}
return(num);
}
main()
{charstr1[81],str2[81];
gets(str1);
gets(str2);
printf(“%d\n”,strle(str1,str2));
}
7.3程序选择填空
【7.60】下面程序输出两个字符串中对应位置相同的字符。
请选择填空。
#include
charx[]=”programming”;
chary[]=”Fortran”;
main()
{inti=0;
while(x[i]!
=’\0’&&y[i]!
=’\0’)
if(x[i]==y[i])printf(“%c”,①);
elsei++;
}
A)x[i++]B)y[++i]C)x[i]D)y[i]
【7.61】有已按升序排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规则插到数组a中。
#include
#include
main