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