1、国家二级 C语言机试(函数和数组)模拟试卷 16及答案与解析 一、选择题 1 以下语句中存在语法错误的是 ( A) char ss20=“right?“; ( B) char*ss6; ss1=“right?“; ( C) char*ss=“right?“; ( D) char ss620; ss1=“right?“; 2 下面是有关 C语言字符数组的描述,其中错误的是 ( A)不可以用赋值语句给字符数组名赋字符串 ( B)可以用输入语句把字符串整体输入给字符数组 ( C)字 符数组中的内容不一定是字符串 ( D)字符数组只能存放字符串 3 以下选项中有语法错误的是 ( A) char str
2、310; str1=“guest“; ( B) char str10=“guest“; ( C) char*str3; str1=“guest“; ( D) char*str=“guest“; 4 下列叙述中正确的是 ( A)两个连续的单引号 (“)是合法的字符常量 ( B)可以对字符串进行关系运算 ( C)两个连续的双引号 (“)是合法的字符串常量 ( D)空字符串不占用内存,其内存空间大小是 0 5 以下选项中,能正确进行字符串赋值的是 ( A) char siS=A, B, C, D, E; ( B) char*s=“ABCDE“; ( C) char s45=“ABCDE“; ( D)
3、 char*S; gets(s); 6 有以下程序 #include int fun(char s)char*p=s; while(*p!=0)p+; return(p-s); main()printf(“ d n“, fun(“0ABCDEF“); 程序运行后的输出结果是 ( A) 6 ( B) 7 ( C) 1 ( D) 0 7 若有以下程序段 char str412=“aa“, “bbb“, “ccccc“, “d“, *strp4; int i; for(i=0; iaj0) t=ai0; ai0=aj0; aj0=t; puts(a1); 程序运行后的输出结果是 ( A) fwo (
4、 B) owo ( C) two ( D) fix 17 设有定义: char s81; int i=0;以下不能将一行 (不超过 80个字符 )带有空格的字符串正确读入的语句或语句组是 ( A) while(si+=getchar0)!= n); si= 0; ( B) scanf(“ s“, s); ( C) gets(s); ( D), doscanf(“ c“, si); while(si+!= n); si=0 ; 18 设有定义: char p=1, 2, 3, *q=p;以下不能计算出一个 char型数据所占字节数的表达式是 ( A) sizeof(p) ( B) sizeof(
5、char) ( C) sizeof(*q) ( D) sizeof(p0) 19 有以下程序 #include #include void main() char str20=“One*World“, “One*Dream!“), “p=str1; printf(“ d, “, strlen(p); printf(“ s n“, p); 程序运行后的输出结果是 ( A) 9, One*Dream! ( B) 10 One*Dream! ( C) 9, One*World ( D) l 0 One*World 20 有以下程序 #include void main() char s=“012xy
6、 08s34f4w2“; int i, n=0; for(i=0; si!=0: i+) if(si=n0 si void main() char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(si=a&si main() char s=“abcde“; s+=2; printf(“ d n“, s0); ( A)输出字符 c的 ASCII码 ( B)输出字符 C ( C)输出字符 a的 ASCII码 ( D)程序出错 29 有下列程序,程序执行后的输出结果是 fun(char P10) int n=0, i; for(i=0; ia30=f;置换
7、 a20=f, a30=t;此时, a20=f, a10=t,再置换 a20=t, a10=f,;当 i=3时, j=4, a30=f=a430=f;不置换;所以a1的结果为 fw0。 【知识模块】 函数和数组 17 【正确答案】 B 【试题解析】 本题考查标准输入输出函数和循环语句。 gets(s)函数的作用是将输入的字符读入字符串 s,直到遇到回车。而 scanf()函数 接收字符串时的结束标志为回车或者空格。 【知识模块】 函数和数组 18 【正确答案】 A 【试题解析】 选项 A计算的是 p字符数组首地址所占的内存字节数,返回值数组中所有元素占有的空间。 *q和 p0分别表示数组 p中
8、下标为 0的字符元素,选项 B和 D)都可以计算 char型数据占有的字节数。 【知识模块】 函数和数组 19 【正确答案】 B 【试题解析】 在主函数中定义了二维字符数组 str,并对它赋初值。定义字符指针 p,并把字符串 str1的地址赋给它。所以这时字符指针 p指向字 符串“One*Drram!”,然后在两个输出语句中,分别输出这个字符串的长度 10和字符串本身。 【知识模块】 函数和数组 20 【正确答案】 C 【试题解析】 在主函数中的 for循环语句中,当 si的值不等于 0 9之间的数字时,结束循环语句的执行。由字符数组 s的初值可以得到 for循环语句执行了三次,所以变量 n的
9、值等于 3。 【知识模块】 函数和数组 21 【正确答案】 D 【试题解析】 在选项 D中,不能把 s所指字符串的结束标志符赋给字符串 t。 【知识模块】 函数和数组 22 【正确答案】 A 【试题解析】 选项 A中定义了指针变量 s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。 【知识模块】 函数和数组 23 【正确答案】 C 【试题解析】 在程序中语句 pc=ch;的功能是字符指针 pc指向字符串数组 ch的地址,而 *(ps+5)表示字符串数组 ch中第 6个字符 z。 【知识模块】 函数和数组 24 【正确答案】 D 【试题解析】 这段程序的功能求出
10、字符串 s中字符在小写字符 a到 z之间字符的个数。在 程序中字符串 s的值为 “012xy”,所以在字符串 s中符合要求的字符的个数等于 2。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。 【知识模块】 函数和数组 26 【正确答案】 C 【试题解析】 C语言本身并没有设置一种类型来定义字符串变量,却允许使用“字符串常量 ”。字符串常量是由双引号括起来的一串字符。任意两个字符串的大小比较要调用字符串比较函赘 strcmp(s1, s2)来 进行,其比较的方法是依次对 s1和 s2中对应位
11、置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小 (比较字符大小的依据是其 ASCII码值 )。 【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 scanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用形式为:ch=getchar(), getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量 ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。 gets()函数的调用形式为: ge
12、ts(str adr),其中 str adr是存放输入字符串的起始地址。可以是字符数组名、字符数组元素的地址或字符指针变量。 gets()函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为止。 gctc()函数的调用形式为: ch=getc(pf)其中 pf是文件指针。函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。 【知识模块】 函数和数组 28 【 正确答案】 D 【试题解析】 因为字符数组 s中的数组名 s表示的是一个地址常量。所以语句“s+=2; ”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。 【知识模块】 函数和数组 29 【正确答案】 D 【试题解析】 本题在主函数中定义了一个字符二维数组 str10,并用“Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat“, “Sun“初始化。函数fun(chat p10)的功能是统计出 p10中 pi0等于字符 T的个数 。所以fun(str)的功能是统计一周七天中英文名称首字母为 “T”的个数。因为字符串 “Tue”和 “Thu”的首字符是 “T”,所以 n=2。 【知识模块】 函数和数组