1、国家二级 C语言(数组)机试模拟试卷 4及答案与解析 一、选择题 1 若有定义: int x10, *pt=x;,则对 x数组元素的正确引用是 ( )。 ( A) pt+3 ( B) *&x10 ( C) *(pt+10) ( D) *(x+3) 2 有以下程序: #include 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); printf(“ 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+) printf(“ 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) int
3、x0 10; ( D) int x; 5 下列选项中能正确定义数组的语句是 ( )。 ( A) int hum02008 ; ( B) int num; ( C) int N=2008; int numN; ( D) #define N2008 int numN; 6 若要求定义具有 10个 int型 元素的一维数组 a,则以下定义语句中错误的是( )。 ( A) #define n5 int a2*n; ( B) int n=10, an; ( C) int a5+5; ( D) #define N10 int aN; 7 设有定义: double a10, *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, 1, 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, 5
6、, 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); pfinff(“ d n“, st
7、rlen(p); 程序的运行结果是 ( )。 ( A) 11 ( B) 9 ( C) 6 ( D) 7 14 有以下程序 (strcat函数用于连接两个字符串 ): #include stdio h #include string h main() char a20=“ABCD 0EFG 0“, b=“IJK“; strcat(a, b); printf(“ s n“, a); 程序的运行结果是 ( )。 ( A) IJK ( B) ABCDE 0FG 0IJK ( C) ABCDIJK ( D) EFGIJK 15 有以下程序: char name20; int num; scanf(“na
8、me= s num= d“, name, &num); 当执行上述程序,并从键盘输入: name=Lili hum=1001回车后, name的值为( )。 ( A) name=Lili Bum=1001 ( B) name=Lili ( C) Lili hum= ( D) Lili 16 有以下程序: #include stdio h main() char ch=“uvwxyz“, *pc; pc=ch; printf(“ c n“, *(pc+5); 程序的运行结果是 ( )。 ( A) z ( B) 0 ( C)元素 ch5的地址 ( D)字符 y的地址 17 有以下程序: #incl
9、ude stdio h main() char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si =a&si =z)n+; pfinff(“ d n“, n); 程序的运行结果是 ( )。 ( A) 0 ( B) 2 ( C) 3 ( D) 5 18 若有以下定义和语句: #include stdio h char s110=“abcd!“, *s2=“ n123 “; pfinff(“ d d n“, strlen(s1), strlen(s2); 程序的运行结果是 ( )。 ( A) 10 7 ( B) 10 5 ( C) 5 5 ( D)
10、5 8 19 有以下程序: #include stdio h main() char s=“abcde“; s+=2: printf(“ 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); printf(“
11、 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(strcmp(s1, s2)!=0)puts(s2); ( B) if(strcmp(s1, s2)!=0)puts(s1); ( C) if(strcmp(s1, s2)=1)puts(
13、s1); ( D) if(stremp(s1, s2)=0)puts(s1); 24 若要求从键盘读入含有空格字符的字符串,应使用函数 ( )。 ( A) getchar() ( B) getc() ( C) gets() ( D) seanf() 25 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 sT”要求的是( )。 ( A) if(s1-s2=0)ST; ( B) if(s1=s2)ST; ( C) if(strcpy(s1, s2)=1)ST; ( D) if(stremp(s2, s1)=0)ST; 国家二级 C语言(数组)机试模拟试卷 4答案与解析 一、选择题
14、 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。 【知识模块】 数组 3 【正确答案】 B
15、【试题解析】 在 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选项错误, C语言中的数组没有此
16、类型的定义方法; B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数; C选项错误, N为变量,不能用来定义数组大小。 D选项正确。 【知识模块】 数组 6 【正确答案】 B 【试题解析】 一维数组的定义方式为:类型说明符数组名 常量表达式 ;注意定义数组时,元素个数不能是变量,因此应该选择 B选项。 【知识模块】 数组 7 【正确答案】 B 【试题解析】 题中,首先定义了 double型的数组 a,并将数组首地址赋给指针s。 s3能够表示 a3,故选项 A、 C不能表示 a3;选项 D的, *s+3=a0+3。故本题答案为 B选项。 【知识模块】 数组 8 【正确答案
17、】 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 【试题解析】 stden()函数是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中的字符串从第一个字符开始,遇到第一个结束标识 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的存储元素为 a, b, c, 【
20、知识模块】 数组 14 【正确答案】 C 【试题解析】 字符数组 a中包含两个 0,遇到第一个 0时就表示字符串 a结束。字符串处理函数 strcat(字符数组 a,字符数组 b),功能是连接两个字符数组中的字符串,把字符串 b连接到字符串 a的后面,结果放在字符数组 a中。连接时将字符串 a后的 0取消,只在新串最后保留一个 0。本题相当于将“ABCD“和 “UK“连接,因此 C选项正确。 【知识模块】 数组 15 【正确答案】 D 【试题解析】 在输入格式控制 “name= s num= d”中,普通字符 “name=num=”在输入时要原样输入,而格式控制符 s和 d对应各自的输入项,将
21、输入的数据赋给相应的输入项。本题中输入 “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循环语句的功能是遍历字符串,通过 if条件语句对字符串中的小写
22、字母进行计数,字符串中小写字母为 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 【正确答案】 B 【试题解析】 本题重点
23、考查数组名的概念。在 C语言中,数组名类似于一个指向数组首地址的指针常量,一 旦定义就不能修改其内容。所以本题中的 “s+=2”;语句让数组名 s的内容加 2是错误的,编译无法通过,因此 B选项正确。 【知识模块】 数组 20 【正确答案】 B 【试题解析】 本题重点考查 while循环语句的简单应用。在函数 fun()中,前一个while循环的作用是:如果形参指针 t所指内容不为 0,则让 t增 1,直到它指向0。后一个 while循环的作用是:将 s所指内容赋给 t所指地址,然后两者同时增1,直到赋给 t的内容为 0。由此可见,函数 fun()的作用就是将形参 s所指字符串连接到形参 t所
24、指字符串末 尾,相当于库函数中的 strcat()。主函数中使用 fun()将数组 aa中的字符串连接到了数组 ss中原有字符串之后,所以执行完后, ss中的字符串为 “accbbxxyy”。程序最后输出的结果是 【知识模块】 数组 21 【正确答案】 A 【试题解析】 根据题目中的定义可知道 sizeof(p),计算的是数组 p中所有元素所占用的字节数,而不是 char型数据所占的字节数。 【知识模块】 数组 22 【正确答案】 C 【试题解析】 使用 scanf()输入字符串时,空格和回车符都作为输入数 据的分隔符而不能被读入,而应该使用 gets(s)。 【知识模块】 数组 23 【正确
25、答案】 B 【试题解析】 strcmp(s1, s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比 (按照 ASCII码值大小 ),以第一个不相同字符的大小作为比较结果。因为 OK ok,所以 strcmp(s1, s2)为负值,只有 B选项正确。 【知识模块】 数组 24 【正确答案】 C 【试题解析】 scanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用格式为:ch=getchar(), getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入
26、时,空格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才开始执行。 gets()函数的调用形式为: gets(str_adr),其中 str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 gets函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为止。 getc()函数的调 用形式为: ch=getc(pf),其中 pf是文件指针,函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。因此 C选项正确。 【知识模块】 数组 25 【正确答案】 D 【试题解析】 在 C语言中,要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等,因此 D选项正确。 【知识模块】 数组
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1