1、国家二级 C语言(数组)机试模拟试卷 3及答案与解析 一、选择题 1 若有定义: int x10, *pt=x;,则对 x数组元素的正确引用是 ( )。 ( A) pt+3 ( B) &x10 ( C) *(pt+10) ( D) *(x+3) 2 有以下程序: #include main() int i, s=0, t=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i main() int s12=1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=0, i; for(i=0; i #define N 4 void fun(int aN,
2、int b) int i; for(i=0; i main() int i, t3=9, 8, 7, 6, 5, 4, 3, 2, 1; for(i=0; i main() int a44=l, 4, 3, 2, 8, 6, 5, 7, 3, 7, 2, 5, 4, 8, 6, 1, i,k, t; for(i=0; i main() int x32=0, i; for(i=0; i,则程序的运行结果为 ( )。 ( A) 2 0 4 ( B) 2 0 0 ( C) 2 4 0 ( D) 2 4 6 15 若有定义语句: char s10=“1234567 0 0”;,则 strlen(s)的
3、值是 ( )。 ( A) 7 ( B) 8 ( C) 9 ( D) 10 16 有以下 程序: #include #include main() char P20=a, b,c, d, q=“abc”, r=“abcde”; strcat(P, r); strcpy(P+strlen(q), q); prinff(“ d n”, strlen(P); 程序的运行结果是 ( )。 ( A) 11 ( B) 9 ( C) 6 ( D) 7 17 有以下程 序 (streat函数用于连接两个字符串 ): #include #include main() char a20=“ABCD 0EFG 0”,
4、 b=“LIK”; strcat(a, b); prinff(“ s n”, a); 程序的运行结果是 ( )。 ( A) IJK ( B) ABCDE OFG OUK ( C) ABCDIJK ( D) EFGIJK 18 有以下程序: char name20; int Bum; scanf(“name= s Bum= d”, name, &num); 当执行上述程序,并从键盘输入: name=Lili num=1001后, name的值为( )。 ( A) name=Lili Bum=1001 ( B) name=Lili ( C) Lili Bum= ( D) Lili 19 有以下程序
5、: #include main() char ch=“uvwxyz”, *pc; pc=ch; prinff(“ c n”, *(pc+5); 程序的运行结果是 ( )。 ( A) z ( B) 0 ( C)元素 ch5的地址 ( D)字符 Y的地址 20 有以下程序: #include main() char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si=a&si char s110=“abcd!”, * s2=“ n123 “; prinff(“ d d n”, strlen(s1), strlen(s2); 程序的运行结果是 ( )。
6、( A) 10 7 ( B) 10 5 ( C) 5 5 ( D) 5 8 22 设有如下程序: #include char s20=“Beijing”, *P; P=s: 则执行 P=s;语句后,以下叙述正确的是 ( )。 ( A) s和 P都是指针变量 ( B) s数组中元素的个数和 P所指字符串长度相等 ( C)可以用 *P表示 s0 ( D)数组 s中的内容和指针变量 P中的内容相同 23 有以下程序: #include main() char s=“abode”; s+=2; prinff(“ d n”, s0); 程序的运行结果是 ( )。 ( A)输出字符 c的 ASC 码 (
7、B)程序出错 ( C)输出字符 c ( D)输出字符 a的 ASC 码 24 有以下程序: #include int fun(char P10) int n=0, i; for(i m=0; i void fun(char*t, char*s) while(*t!=0)t+; while(* t+=*s+)!=0); main() char 8510=“acc”, aa10=“bbxxyy”; fun(ss, aa); prinff(“ s, s n”, ss, aa); 程序的运行结果是 ( )。 ( A) ace, bbxxyy ( B) accbbxxyy, bbxxyy ( C) ac
8、cxxyy, bbxxyy ( D) accxyy, bbxxyy 26 设有定义: char P=1, 2, 3, *q=p;,以下不能计算出一个 char型数据所 占字节数的表达式是 ( )。 ( A) sizeof(P) ( B) sizeof(char) ( C) sizeof(半 q) ( D) sizeof(P0) 27 设有定义 char s=81, Int 1=0,以下不能将一行 (不超过 80个字符 )带自空格的字符串正确读入的语句或语句组是 ( )。 ( A) gets(s); ( B) while(si+=getchar()!= n); Si= 0; ( C) scanf
9、(“ s”, s); ( D) doseanf(“ c”, &si); while(si+!= n); si= 0; 28 若有定义语句: char*s1=“OK”, *s2=“ok”;,以下选项中,能够输出 “OK”的语句是 ( )。 ( A) if(stremp(s1, s2)!=0)puts(s2); ( B) if(strcmp(s1, s2)!=0)puts(s1); ( C) if(strcmp(s1, s2)=1)puts(s1); ( D) if(stremp(s1, s2)=0)puts(s1); 29 若要求从键盘读人含有空格字符的字符串,应使用函数 ( )。 ( A) g
10、etchar() ( B) getc() ( C) gets() ( D) seanf() 30 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST”要求的是( )。 ( A) if(s1一 s2=0)ST; ( B) if(s1=s2)ST; ( C) if(strcpy(s1, s2)=1)ST; ( D) if(strcmp(s2, s1)=0)ST; 国家二级 C语言(数组)机试模拟试卷 3答案与解析 一、选 择题 1 【正确答案】 D 【试题解析】 没有 A选项的引用形式。 *与 &放在一起作用抵消,所以 B选项错误。最大只能引用到 x9,而 *(pt+i)表示引
11、用指针 pt所指元素后的第 i个元素,所以 C选项错误,最大只能为 *(pt+9)。 D选项正确。 【知识模块】 数组 2 【正确答案】 B 【试题解析】 统计 1 9这 9个数中的奇数和,此题考查指向数组的指针。 C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此 *(t+i)代表数组的第 i+1个元素。程序的运行结果是 1+2+3+4+5+6+7+8+9=25。 【知识模块】 数组 3 【正确答案】 B 【试题解析】 在 for(i=0; i”后,将字符串 Lili赋给字符数组 name,整数 1001赋给变量 ntlm,因此 D选项正确。 【知识模块】 数组 19 【正确答案
12、】 A 【试题解析】 语句 pc=ch;使得指针变量指向字符数组 ch的首地址,即指向字符 u,则 pc+5指向的是字符向后移动 5位,指向字符 z,所以输出的 *pc+5的值即为 z,因此 A选项正确。 【知识模块】 数组 20 【正确答案】 B 【试题解析】 程序首先给字符数组 s赋值为 “012xy”, for循环语句的功能是遍历字符串,通过 if条件语句对字符串中的小写字母进行计数,字符串中小写字母为 2个,即 n=2,因此 B选项正确。 【知识模块】 数组 21 【正确答案】 C 【试题解析】 strlen函数返回字符串的长度,求字符串长度时,遇到结束标志 0为止,但是长度不包括结束
13、标识。字符数组 s1的后 5个元素没有赋值,都为 0,即 ”abed!”后为 0,所以 strlen(s1)的值为 5。字符指针 s2所指向的字符串中, n为转义字符换行符,表示 1个字符,也为转义字符,代表,也是 1个字符其后为字符串结束标识 0,所以 strlen(s2)的值也为 5,因此 C选项正确。 【知识模块】 数组 22 【正确答案】 C 【试题解析】 程序定义了字符数组 s和字符型指针变量 p,并且使得 p指向数组,执行 p=s;语句后, *p即表示 s0; s数组中元素的个数和 p所指字符串长度不相等,因为 s数组中元素的个数包括字符串结束标志 “ 0”,而 p所指字符串长度不
14、包括 “ 0”; s是字符型数组, p是指针变量,数组 s中的内容和指针变量 p中的内容不相同,数组中存放的是字符串,而指针变量 p存放的是数组的首地址,因此 C选项正确。 【知识模块】 数组 23 【正确答案】 B 【试题 解析】 本题重点考查数组名的概念。在 C语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的 “s+=2”;语句让数组名 s的内容加 2是错误的,编译无法通过,因此 B选项正确。 【知识模块】 数组 24 【正确答案】 B 【试题解析】 此程序是统计一周 7天中英文名称首字母为 “T”的个数。 Pi0是字符串的首字符,一共有两个 “T”
15、,所以 n=2,因此 B选项正确。 【知识模块】 数组 25 【正确答案】 B 【试题解析】 本题重点考查 while循环 语句的简单应用。在函数 fun()中,前一个while循环的作用是:如果形参指针 t所指内容不为 0,则让 t增 1,直到它指向0。后一个 while循环的作用是:将 s所指内容赋给 t所指地址,然后两者同时增1,直到赋给 t的内容为 0。由此可见,函数 fun()的作用就是将形参 s所指字符串连接到形参 t所指字符串末尾,相当于库函数中的 streat()。主函数中使用 fun()将数组 aa中的字符串连接到了数组 ss中原有字符串之后,所以执行完后, ss中的字符串为
16、 “aeebbxxyy”。程序最后输出的结果是: accbbxxyy, bbxxyy,因此 B选项正确。 【知识模块】 数组 26 【正确答案】 A 【试题解析】 根据题目中的定义可知道 sizeof(p),计算的是数组 p中所有元素所占用的字节数,而不是 char型数据所占的字节数。 【知识模块】 数组 27 【正确答案】 C 【试题解析】 字符串的输入不能使用 seanf(“ s”, s),而应该使用 gets(s)。 【知识模块】 数组 28 【正确答案】 B 【试题解析】 strcmp(s1, s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比 (按照 ASC 码值大小
17、),以第一个不相同字符的大小作为比较结果。因为 OKok,所以 strcmp(s1, s2)为负值,只有 B选项正确。 【知识模块】 数组 29 【正确答案】 C 【试题解析】 seanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getehar()函数用于输入字符,其调用格式为:ch=getchar(), getehar()函数从终端读入一个字符作为函数值,把读人的字符赋给变量 ch。在输入时,空格、回车 符都将作为字符读入,而且只有在用户敲入回车键时,读人才开始执行。 gets()函数的调用形式为: gets(str_adr),其中 stLadr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。 gets函数用来从终端键盘读入字符串 (包括空格符 ),直到读人一个换行符为止。 getc()函数的调用形式为: ch=getc(pf),其中 pf是文件指针,函数的功能是从 pf指定的文件中读人一个字符,并把它作为函数值返回。因此 C选项正确。 【知识模块】 数组 30 【正确答案】 D 【试题解析】 在 C语言中,要对两个字符串的大小进行比较,就需要调用字符串比较函数 strcmp,如果这个函数的返回值等于 0,说明两个字符串相等,因此D选项正确。 【知识模块】 数组
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1