1、国家二级 C语言(数组)机试模拟试卷 5及答案与解析 一、选择题 1 若有定义: int x10, *pt=x;,则对 x数组元素的正确引用是 ( )。 ( A) pt+3 ( B) *&x10 ( C) *(pt+10) ( D) *(x+3) 2 有以下程序: #inelude stdio h main( ) int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i 9; i+=2) s+=*(t+i); prinff(“ d n“, s); 程序的运行结果是 ( )。 ( A) 20 ( B) 25 ( C) 45 ( D) 36 3 有以下
2、程序: #include stdio h main( ) int s12=1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=0, i; for(i=0; i 12; i+) esi+; for(i=1; i 5; i+) prinff(“ d“, ci); printf(“ n“); 程序的运行结果是 ( )。 ( A) 2 3 4 4 ( B) 4 3 3 2 ( C) 1 2 3 4 ( D) 1 1 2 3 4 下列定义数组的语句中正确的是 ( )。 ( A) #define N10 int xN; ( B) int N=10; int xN; ( C) in
3、t x0 10; ( D) int x; 5 下列选项中能正确定义数组的语句是 ( )。 ( A) int num02008 ; int numN; ( B) int num; int numN; ( C) int N=2008; ( D) #define N2008 6 若要求定义具有 10个 int型元素的一维数组 a,则以下定义语句中错误的是( )。 ( A) #define n5 int a2*n; ( B) int n=10, an; int aN; ( C) int a5+5; ( D) #define N10 7 设有定义: doublea10, *s=a;,以下能够代表数组元素
4、 a3的是 ( )。 ( A) (*s)3 ( B) *(s+3) ( C) *s3 ( D) *s+3 8 有以下程序: #include stdio h main( ) int i, t3=9, 8, 7, 6, 5, 4, 3, 2, 1; for(i=0; i 3; i+) printf(“ d“, t2-ii); 程序的运行结果是 ( )。 ( A) 3 5 7 ( B) 7 5 3 ( C) 3 6 9 ( D) 7 5 1 9 下列定义语句中错误的是 ( )。 ( A) int x43=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( B) int x4
5、=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( C) int x3=0, l, 1, 2, 3; ( D) int x3=1, 2, 3, 4; 10 下列定义数组的语句中错误的是 ( )。 ( A) int x23=1, 2, 3, 4, 5, 6; ( B) int x3=0; ( C) int x3=1, 2, 3, 4, 5, 6; ( D) int x23=1, 2, 3, 4, 5, 6; 11 下列定义数组的语句中错误的是 ( )。 ( A) int num3=1, 2, 3, 4, 5, 6; ( B) int num24=1, 2, 3, 4,
6、5, 6; ( C) int num=1, 2, 3, 4, 5, 6; ( D) int num4=1, 2, 3, 4, 5, 6; 12 若有定义语句: char s10=“1234567 0 0“;,则 strlen(s)的值是 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 13 有以下程序: #include stdio h #include string h main( ) char p20=a, b, c, d, q=“abc“, r=“abcde“; strcat(p, r); strcpy(p+strlen(q), q); prinff(“ d n“,
7、strlen(p); 程序的运行结果是 ( )。 ( A) 11 ( B) 9 ( C) 6 ( D) 7 14 有以下程序 (strcat函数用于连接两个字符串 ): #include stdio h #include string h main( ) char a20=“ABCD 0EFG 0“, b=“LIK“; strcat(a, b); prinff(“ s n“, a); 程序的运行结果是 ( )。 ( A) IJK ( B) ABCDE 0FG OIJK ( C) ABCDIJK ( D) EFGIJK 15 有以下程序: char name20; int num; scanf(
8、“name= s num= d“, name, &num); 当执行上述程序,并从键盘输入: name=Lili nun=1001回车后, name的值为( )。 ( A) name=Lili num=1001 ( B) name=Lili ( C) Lili num= ( D) Lili 16 有以下程序: #include stdio h main( ) char ch=“uvwxyz“, *pc; pc=ch; prinff(“ c n“, *(pc+5); 程序的运行结果是 ( )。 ( A) z ( B) 0 ( C)元素 ch5的地址 ( D)字符 y的地址 17 有以下程序: #
9、include stdio h main( ) char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si =a&si =z)n+; prinff(“ d n“, n); 程序运行结果是 ( )。 ( A) 0 ( B) 2 ( C) 3 ( D) 5 18 若有以下定义和语句: #include stdio h char s110=“abcd!“, *s2=“ n123 “; prinff(“ d d n“, strlen(s1), strlen(s2); 程序的运行结果是 ( )。 ( A) 10 7 ( B) 10 5 ( C) 5 5 (
10、 D) 5 8 19 有以下程序: #include stdio h main( ) char s=“abcde“; s+=2; prinff(“ d n“, s0); 程序的运行结果是 ( )。 ( A)输出字符 C的 ASCII码 ( B)程序出错 ( C)输出字符 c ( D)输出字符 a的 ASCII码 20 有以下程序: #include stdio h void fun(char*t, char*s) while(*t!=0)t+; while(*t+=*s+)!=0); main( ) char ss10=“acc“, aa10=“bbxxyy“; fun(ss, aa); pr
11、inff(“ s, s n“, ss, aa); 程序的运行结果是 ( )。 ( A) acc, bbxxyy ( B) accbbxxyy, bbxxyy ( C) accxxyy, bbxxyy ( D) accxyy, bbxxyy 21 设有定义: char p=1, 2, 3, *q=p;,以下不能计算出一个 char型数据所占字节数的表达式是 ( )。 ( A) sizeof(p) ( B) sizeof(char) ( C) sizeof(*q) ( D) sizeof(p0) 22 设有定义: char s81; int i=0;,以下不能将一行 (不超过 80个字符 )带有空
12、格的字符串正确读入的语句或语句组是 ( )。 ( A) gets(s); ( B) while(si+=getchar( )!= n); si= 0; ( C) scanf(“ s“, s); ( D) doscanf(“ C“, &si); while(si+!= n); si= 0; 23 若有定义语句: char*s1=“OK“, *s2=“ok“;,以下选项中,能够输出 “OK”的语句是 ( )。 ( A) if(stremp(s1, s2)!=0)puts(s2); ( B) if(stremp(s1, s2)!=0)puts(s1); ( C) if(strcmp(s1, s2)=
13、1)puts(s1); ( D) if(strcmp(s1, s2)=0)puts(s1); 24 若要求从键盘读入含有空格字符的字符串,应使用函数 ( )。 ( A) getchar( ) ( B) getc( ) ( C) gets( ) ( D) scanf( ) 25 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 sT”要求的是( )。 ( A) if(s1-s2=0)ST; ( B) if(s1=s2)ST; ( C) if(strepy(s1, s2)=1)ST; ( D) if(strcrnp(s2, s1)=0)ST; 国家二级 C语言(数组)机试模拟试卷
14、5答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 没有 A选项的引用形式。 *与 &放在一起作用抵消,但 x10下标10超出了数组下标范围,所以 B选项错误。最大只能引用到 x9,而 *(pt+i)表示引用指针 pt所指元素后的第 i个元素,所以 C选项错误,最大只能为 *(pt+9)。 D选项正确。 【知识模块】 数组 2 【正确答案】 B 【试题解析】 统计 1 9这 9个数中的奇数和,此题考查指向数组的指针。 C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此 *(t+i)代表数组的第 i+1个元素。程序的运行结果是 1+3+5+7+9=25。 【知识模块】 数组
15、 3 【正确答案】 B 【试题解析】 在 for(i=0; i 12; i+)csi+中,数组元素 si的值作为数组 c的下标,当退出循环时,数组 c的 4个元素的值分别为 4、 3、 3、 2,因此 B选项正确。 【知识模块】 数组 4 【正确答案】 A 【试题解析】 数组说明的一般形式为:类型说明符数组名 常量表达式 。 B选项中 N是变量,不能用变量定义数组长度。 C选项中数组长度是一串非法的数字。定义数组时必须为其指明长度, D选项中的数组长度为空,所 以非法。 【知识模块】 数组 5 【正确答案】 D 【试题解析】 C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误
16、, C语言中的数组没有此类型的定义方法; B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数; C选项错误, N为变量,不能用来定义数组大小。 D选项正确。 【知识模块】 数组 6 【正确答案】 B 【试题解析】 一维数组的定义方式为:类型说明符数组名 常量表达式 ;注意定义数组时,元素个数不能是变量,因此应该选择 B选项。 【知识模块】 数组 7 【正确答案】 B 【试题解析】 题中,首先定义了 double型的数组 a,并将数组首地址赋给指针s。 s3能够表示 a3,故选项 A、 C不能表示 a3;选项 D的 *s+3=a0+3。故本题答案为 B选项。 【知识模块】
17、 数组 8 【正确答案】 A 【试题解析】 二维数组 t3实际上指 t33=9, 8, 7, 6, 5, 4, 3, 2,1,通过循环语句 for语句可以得到 i=0, t20=3、 i=1, t11=5、 i=2,t02=7、 i=3时循环结束,即 t20=3、 t11=5、 t02=7,因此 A选项正确。 【知识模块】 数组 9 【正确答案】 B 【试题解析】 二维数组定义的一般形式是:类型说明符数组名 常量表达式 1常量表达式 2。其中常量表达式 1表示第一维下标的长度,常量表达式 2衷示第二维下标的长度。如对二维数组的全部元素赋初值,则第一维的长度可以不给出。但如果对 x4赋值,只确定
18、行数,丽不确定列数,就无法正确赋值。因此 B选项正确。 【知识模块】 数组 10 【正 确答案】 D 【试题解析】 D选项中 x23定义的是一个 2行 3列的二维数组,而在给数组元素赋值时却赋成了 3行,所以错误。 【知识模块】 数组 11 【正确答案】 B 【试题解析】 B选项中定义的数组为 2行 4列,而赋值时赋成了 3行,所以出错。 【知识模块】 数组 12 【正确答案】 A 【试题解析】 strlen( )函数是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中的字符串从第一个字符开始,遇到第一个结束标识 0为止,注意 0不占字符串 长度,所以字符串长度为 7,因此 A选
19、项正确。 【知识模块】 数组 13 【正确答案】 C 【试题解析】 strcpy:字符串复制函数; strlen:求字符串长度函数 (注意:不包含字符串结束标记字符 0); strcat:字符串连接函数。执行完语句 strcat(p,r);后, p数组中存储的元素为 a, b, c, d, a, b, c, d, e;执行语句strcpy(p+strlen(q), q);得到的结果是将 q所指向的字符串复制至 p+strlen(q)开始的存储位置,因为 strlen的值为 3,即 p+3开始存 储 q中的元素,所以执行完strcpy(p+strlen(q), q)语句后,字符数组 p20的存储
20、元素为 a, b, c, 【知识模块】 数组 14 【正确答案】 C 【试题解析】 字符数组 a中包含两个 0,遇到第一个 0时就表示字符串 a结束。字符串处理函数 strcat(字符数组 a,字符数组 b),功能是连接两个字符数组中的字符串,把字符串 b连接到字符串 a的后面,结果放在字符数组 a中。连接时将字符串 a后的 0取消,只在新串最后保留一个 0。本题相当于将 “AB-CD“和 “IJK“连接 ,因此 C选项正确。 【知识模块】 数组 15 【正确答案】 D 【试题解析】 在输入格式控制 “name= s num= d”中,普通字符 “name=num=”在输入时要原样输入,而格式
21、控制符 s和 d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入 “name=Lili num=1001回车 ”后,将字符串Lili赋给字符数组 name,整数 1001赋给变量 num,因此 D选项正确。 【知识模块】 数组 16 【正确答案】 A 【试题解析】 语句 pc=ch;使得指针变量 指向字符数组 ch的首地址,即指向字符 u,则 pc+5指向的是字符向后移动 5位,指向字符 z,所以输出的 *pc+5的值即为 z,因此 A选项正确。 【知识模块】 数组 17 【正确答案】 B 【试题解析】 程序首先给字符数组 s赋值为 “012xy“, for循环语句的功能是遍历字符串
22、,通过 if条件语句对字符串中的小写字母进行计数,字符串中小写字母为 2个,即 n=2,因此 B选项正确。 【知识模块】 数组 18 【正确答案】 C 【试题解析】 strlen函数返回字符串的长度,求 字符串长度时,遇到结束标志 0为止,但是长度不包括结束标识。字符数组 s1的后 5个元素没有赋值,都为 0,即 “abcd!“后为 0,所以 strlen(s1)的值为 5。字符指针 s2所指向的字符串中, n为转义字符换行符,表示 1个字符,也为转义字符,代表,也是 1个字符,其后为字符串结束标识 0,所以 strlen(s2)的值也为 5,因此 C选项正确。 【知识模块】 数组 19 【正
23、确答案】 B 【试题解析】 本题重点考查数组名的概念。在 C语言中,数组名类似于一个指向数组首地址的指 针常量,一旦定义就不能修改其内容。所以本题中的 “s+=2”;语句让数组名 s的内容加 2是错误的,编译无法通过,因此 B选项正确。 【知识模块】 数组 20 【正确答案】 B 【试题解析】 本题重点考查 while循环语句的简单应用。在函数。 fun( )中,前一个 while循环的作用是:如果形参指针 t所指内容不为 0,则让 t增 1,直到它指向0。后一个 while循环的作用是:将 s所指内容赋给 t所指地址,然后两者同时增1,直到赋给 t的内容为 0。由此可见,函数 fun( )的
24、作用就是将形参 s所指字符串连接到形 参 t所指字符串末尾,相当于库函数中的 strcat( )。主函数中使用 fun( )将数组 aa中的字符串连接到了数组 ss中原有字符串之后,所以执行完后, ss中的字符串为 “accbbxxyy”。程序 【知识模块】 数组 21 【正确答案】 A 【试题解析】 根据题目中的定义可知道 sizeof(p),计算的是数组 p中所有元素所占用的字节数,而不是 char型数据所占的字节数。 【知识模块】 数组 22 【正确答案】 C 【试题解析】 使用 scanf( )输入字符串时,空格和回车符 都作为输入数据的分隔符而不能被读入,而应该使用 gets(s)。
25、 【知识模块】 数组 23 【正确答案】 B 【试题解析】 strcmp(s1, s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比 (按照 ASCII码值大小 ),以第一个不相同字符的大小作为比较结果。因为 OK ok,所以 strcmp(s1, s2)为负值,只有 B选项正确。 【知识模块】 数组 24 【正确答案】 C 【试题解析】 scanf( )语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉, 所以用 scanf( )函数不能输入空格; getchar( )函数用于输入字符,其调用格式为: ch=getchar( ), getchar( )函数从终端读入一个字
26、符作为函数值,把读入的字符赋给变量 ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。 gets( )函数的调黾形式为: gets(str adr)其中 str adr且存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 gets函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为 止。 getc( )函数的调用形式为: ch=getc(pf),其中 pf是文件指针,函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。因此 C选项正确。 【知识模块】 数组 25 【正确答案】 D 【试题解析】 在 C语言中,要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等,因此D选项正确。 【知识模块】 数组