1、国家二级 C语言机试(函数和数组)模拟试卷 11及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)两个连续的单引号 (“)是合法的字符常量 ( B)可以对字符串进行关系运算 ( C)两个连续的双引号 (“)是合法的字符串常量 ( D)空字符串不占用内存,其内存空间大小是 0 2 以下选项中,能正确进行字符串赋值的是 ( A) char s5=A, B, C, D, E; ( B) char*s=“ABCDE“; ( C) char s45=“ABCDE“; ( D) char*s; gets(s); 3 有以下程序 #include stdio h int fun(char s)cha
2、r*p=s; while(*P!=0)p+; return(p-s); main()printf(“ d n“, fun(“0ABCDEF“); 程序运行后的输出结果是 ( A) 6 ( B) 7 ( C) 1 ( D) 0 4 若有以下程序段 char str412=“aa“, “bbb“, ”ccccc“, “d“, *strp4; int i: for(i=0; i 4; i+)strpi=stri; 不能正确引用字符串的选项是 ( A) strp ( B) str0 ( C) strp3 ( D) *strp 5 以下叙述中正确的是 ( A)下面的语句用赋初值方式来定义字符串,其中,
3、“ 0“是必须的 char str1=s, t, r, 1, 0); ( B)有定义语句: char str1=“str1“;,数组 str1将包含 4个元素 ( C)字符串常量 “str1”的类型是:字符串数据类型 ( D)字符数组的每个元素可存放一个字符,并且最后一个元素必须是 “ 0”字符 6 以下叙述中正确的是 ( A) char ca35=“A“, “BB“, “CCC“;是不合语法的 ( B)字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组 ( C) char ca5=“A“, “BB“, “CCC“;是不合语法的 ( D) char*ca3=“A“, “BB“, “C
4、CC“;是不合语法 的 7 以下叙述中正确的是 ( A)函数调用 “strlen(s); ”会返回字符串 s实际占用内存的大小 (以字节为单位 ) ( B)两个字符串可以用关系运算符进行大小比较 ( C)当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和 ( D) C语言本身没有提供对字符串进行整体操作的运算符 8 以下叙述中正确的是 ( A)不能用字符串常量对字符数组名进行整体赋值操作 ( B)字符串常量 “Hello”会被隐含处理成一个无名字符型数组,它有 5个元素 ( C) “char str7=”string!”; ”在语法上是合法的,运行也是安全的 ( D) “cha
5、r*str; str=“Hello“; ”与 “char str; str=“Hello“; ”效果是一样的 9 以下叙述中正确的是 ( A)语句 “char str10=“string!“; ”和 “char str10=“string!“; ”并不等价 ( B)对于一维字符数组,不能使用字符串常量来赋初值 ( C)对于字符串常量 “string!“,系统已自动在最后加入了 “ 0”字符,表示串结尾 ( D)在语句 char str=“string!“;中,数组 str的大小等于字符串的长度 10 设有定义 char str=“Hello“;则语句 printf(“ d d“, sizeof
6、(str), strlen(str);的输出结果是 ( A) 6 6 ( B) 6 5 ( C) 5 5 ( D) 5 6 11 设有定义语句: char*aa2=“abcd“, “ABCD“;则以下叙述正确的是 ( A) aa数组的两个元素只能存放含有 4个字符的一维数组的首地址 ( B) aa数组的值分别是字符串 “abcd“和 “ABCD“ ( C) aa是指针变量,它指向含有两个元素的字符型数组 ( D) aa0存放了字符串 “abcd“的首地址 12 以下选项中,没有编译错误的是 ( A) char str3=d, e, b, u, g, 0; ( B) char strl5=“pa
7、ss“, str26; str2=str1; ( C) char name10; name=“china“; ( D) char str4; str4=“hello world“; 13 有以下程序 main() char a510=“one“, “two“, “three“, “four“,“five“; int i, j; char t: for(i=0; i 4; i+) for(j=i+1; j 5; j+) if(ai0 aj0) t=ai0; ai0=aj0; aj0=t; puts(a1); 程序运行后的输出结果是 ( A) fwo ( B) owo ( C) two ( D)
8、fix 14 设有定义: char s81; int i=0;以下不能将一行 (不超过 80个字符 )带有空格的字符串正确读入的语句或语句组是 ( A) while(si+=getchar()!= n); si= 0; ( B) scanf(“ s“, s); ( C) gets(s); ( D) doscanf(“ c“, &si); while(si+!= n); si= 0; 15 设有定义: char p=1, 2, 3), *q=p;以下不能计算出一个 char型数据所占字节数的表达式是 ( A) sizeof(p) ( B) sizeof(char) ( C) sizeof(*q)
9、 ( D) sizeof(p0) 16 有以下程序 #include stdio h #include string h 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) 10, One*World 17 有以下程序 #include stdio h void main() char s=“0
10、12xy 08s34f4w2“; int i, n=0; for(i=0; si!=0; i+) if(si =0&si =9)n+; printf(“ d n“, n); 程序运行后的输出结果是 ( A) 0 ( B) 7 ( C) 3 ( D) 8 18 以下不能将 s所指字符串正确复制到 t所指存储空间的是 ( A) for(i=0; ti=si; i+); ( B) while(*t=*s)t+; s+; ( C) for(i=0, j=0; ti+=sj+; ); ( D) do*t+=*s+; while(*s); 19 下列语句组中,正确的是 ( A) char*s; s=“Ol
11、ympic“; ( B) char s7; s=“Olympic“; ( C) char*s; s=“Olympic“); ( D) char s7; s=“Olympic“; 20 有以下程序 main() char ch=“uvwxyz“, *pc; pc=ch; printf(“ c n“, *(pc+5); 程序运行后的输出结果是 ( A) 0 ( B)元素 ch5的地址 ( C) z ( D)字符 y的地址 21 有以下程序 #include stdio h void main() char s=“012xy“; int i, n=0; for(i=0; si!=0; i+) if(
12、si =a&si =z)n+; printf(“ d n“, n); 程序运行后的输出结果是 ( A) 0 ( B) 3 ( C) 5 ( D) 2 22 以下能正确定义字符串的语句是 ( A) char str=“ x43“; ( B) char str=“ 0“; ( C) char str=“; ( D) char str= 064; 23 以下关于字符串的叙述中正确的是 ( A)两个字符串中的字符个数相同时才能进行字符串大小的比较 ( B)可以用关系运算符对字符串的大小进行比较 ( C)空串比空格打头的字符串小 ( D) C语言中有字符串类型的常量和变量 24 若要求从键盘读入含有空格
13、字符的字符串,应使用函数 ( A) getc() ( B) gets() ( C) getchar() ( D) scanf() 25 有以下程序,执行后的结果是 #include stdio h main() char s=“abcde“; s+=2; printf(“ d n“, s0); ( A)输出字符 C的 ASCII码 ( B)输出字符 c ( C)输出字符 a的 ASCII码 ( D)程序出错 26 有下列程序,程序执行后的输出结果是 fun(char P10) int n=0, i; for(i=0; i 7; i+) if(pi0=T)n+; return n; main()
14、 char str10=“Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat, “Sun“; printf(“ d n“, fun(str) ; ( A) 1 ( B) 3 ( C) 0 ( D) 2 国家二级 C语言机试(函数和数组)模拟试卷 11答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 两个连续的双引号: “,是一个字符串常量,称为 “空串 ”。 【知识模块】 函数和数组 2 【正确答案】 B 【试题解析】 对于选项 A)字符串中无法存放字符串结束标志 0,选项 C)每行仅仅存放 5个字符,同样的不能存放字符串结束标志,选项 D)中指针变量 s没
15、有实际的内存空间,无法存放输入的字符串。因此正确的选项为 B),相当于char*s: s=“ABCDE“,把字符串常量的首地址存放到指针变量中存储。 【知识模块】 函数和数组 3 【正确答案】 B 【试题解析】 函数 fun的主要功能是计算字符串中实际字符的个数,因此主函数中调用 fun得到结果为 7。 【知识模块】 函数和数组 4 【正确答案】 A 【试题解析】 程序段中定义指针数组 *strp,含有 4个元素, for循环 strp分别保存了二维数组 str中的 4个字符串的首地址,因此 strp为二级地址,不能保存字符串的首地址, *strp或者 strp0中存放了字符串 “aa“的首地
16、址。所以不能正确引用字符串的为选项 A)。 【知识模块】 函数和数组 5 【正确答案】 B 【试题解析】 选项 B)中除了字符串中实际字符之外,还要存储字符串结束标志,应为 5个元素。在 c语言中没有字符串数据类型,因此选项 C)不正确,选项D)字符数 组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。 【知识模块】 函数和数组 6 【正确答案】 B 【试题解析】 字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项 B)的说法正确。选项 A)和 C)对于 ca的定义是正确的。选项 D)定义一个指针数组,可以保存多个字符串的首地址。 【知识模块】 函数和数组 7 【正
17、确答案】 D 【试题解析】 C语言中没有运算符可以处理字符串,要调用 “string”库中的函数来处理字符串,其中 strlen函数主要测试字符串中 实际字符的个数,比实际占用的内存至少要少一个。 Strcat(s1, s2)函数用于连接两个字符串,是把字符串 s2连接到 s1的后面。 【知识模块】 函数和数组 8 【正确答案】 A 【试题解析】 字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,选项 B)错误,而选项 C)中,没有空间存放字符串结束标志,因此运行是不安全的。选项 D)中第一个 str为指针,可以赋值,
18、而后面的为数组,在程序中赋值出错。 【知识模块】 函数和 数组 9 【正确答案】 C 【试题解析】 在 C语言中,字符串是借助于字符型一维数组来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符 0作为 “字符串结束标志 ”。 0是一个转义字符,称为空值,它的 ASCII码值为 0。 0作为标志占用存储空间,但不计入字符串的实际长度。在 C语言中,系统在每个字符串的最后自动加入一个字符 ( 0)作为字符串的结束标志。 【知识模块】 函数和数组 10 【正确答案】 B 【试题解析】 sizeof主要用于测试变量所占的实 际内存,而 strlen函数主要测试字符串中实际字符的个
19、数,字符串 “Hello“占有内存 6个字节,而字符串中共有 5个字符。 【知识模块】 函数和数组 11 【正确答案】 D 【试题解析】 题目中 char*aa2,定义了指针教组 aa,有两个元素, aa0存放“abcd“地址,而 aa1存放 “ABCD“地址。 【知识模块】 函数和数组 12 【正确答案】 A 【试题解析】 选项 A)是定义了字符数组 str3并对其赋初值。选项 B)中语句str2=str1非法,字符数组不能直 接赋值。选项 C), D)和选项 B)一致。 【知识模块】 函数和数组 13 【正确答案】 A 【试题解析】 这个程序的执行过程是当 i=0时, j=1, a00=0
20、 a10=t;不置换;当 i=1时, j=2, a10=t=a20=t;不置换;当 i=2时, j=3, a20=ta30=f;置换 a20=f, a30=t;此时, a20=f, a10=t,再置换a20=t, a10=f,;当 i=3时, j=4, a30=f=a430=f;不置换;所以 a1的结果为 fwo。 【知识模块】 函数和数组 14 【正确答案】 B 【试题解析】 本题考查标准输入输出函数和循环语句。 gets(s)函数的作用是将输入的字符读入字符串 s,直到遇到回车。而 scanf()函数接收字符串时的结束标志为回车或者空格。 【知识模块】 函数和数组 15 【正确答案】 A
21、【试题解析】 选项 A)计算的是 p字符数组首地址所占的内存字节数,返回值数组中所有元素占有的空间。 *q和 p0分别表示数组 p中下标为 0的字符 元素,选项 B)和 D)都可以计算 char型数据占有的字节数。 【知识模块】 函数和数组 16 【正确答案】 B 【试题解析】 在主函数中定义了二维字符数组 str,并对它赋初值。定义字符指针 p,并把字符串 str1的地址赋给它。所以这时字符指针 p指向字符串“One*Dream!”,然后在两个输出语句中,分别输出这个字符串的长度 10和字符串本身。 【知识模块】 函数和数组 17 【正确答案】 C 【试题解析】 在主函数中的 for循环语句
22、中,当 si的值不等于 0 9之间的数字时, 结束循环语句的执行。由字符数组 s的初值可以得到 for循环语句执行了三次,所以变量 n的值等于 3。 【知识模块】 函数和数组 18 【正确答案】 D 【试题解析】 在选项 D)中,不能把 s所指字符串的结束标志符赋给字符串 t。 【知识模块】 函数和数组 19 【正确答案】 A 【试题解析】 选项 A)中定义了指针变量 s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。 【知识模块】 函数和数组 20 【正确答案】 C 【试题解析】 在程序 中语句 pc=ch;的功能是字符指针 pc指向字符串数组 ch的地址,
23、而 *(ps+5)表示字符串数组 ch中第 6个字符 z。 【知识模块】 函数和数组 21 【正确答案】 D 【试题解析】 这段程序的功能求出字符串 s中字符在小写字符 a到 z之间字符的个数。在程序中字符串 s的值为 “012xy”,所以在字符串 s中符合要求的字符的个数等于 2。 【知识模块】 函数和数组 22 【正确答案】 B 【试题解析】 字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括 起来。 【知识模块】 函数和数组 23 【正确答案】 C 【试题解析】 C语言本身并没有设置一种类型来定义字符串变量,却允许使用“字符串常量 ”。字符串常量是由双引号括
24、起来的一串字符。任意两个字符串的大小比较要调用字符串比较函数 strcmp(s1, s2)来进行,其比较的方法是依次对 s1和 s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小 (比较字符大小的依据是其 ASCII码值 )。 【知识模块】 函数和数组 24 【正确答案】 B 【试题 解析】 scanf()语句中用 “空格 ”间隔不同的字符串,空格将被全部忽略掉,所以用 scanf()函数不能输入空格; getchar()函数用于输入字符,其调用形式为:ch=getchar(), getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋
25、给变量 ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。 gets()函数的调用形式为: gets(str adr),其中 str adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针 变量。 gets()函数用来从终端键盘读入字符串 (包括空格符 ),直到读入一个换行符为止。 getc()函数的调用形式为: ch=getc(pf)其中 pf是文件指针。函数的功能是从 pf指定的文件中读入一个字符,并把它作为函数值返回。 【知识模块】 函数和数组 25 【正确答案】 D 【试题解析】 因为字符数组 s中的数组名 s表示的是一个地址常量。所以语句“s+=2; ”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。 【知识模块】 函数和数组 26 【正确答案】 D 【试题解析】 本题在主函数中定义了一个字符二维数组 str10,并用“Mon“, “Tue“, “Wed“, “Tbu“, “Fri“, “Sat“, “Sun“初始化。函数fun(char p10)的功能是统计出 p10中 pi0等于字符 T的个数。所以 fun(str)的功能是统计一周七天中英文名称首字母为 “T”的个数。因为字符串 “Tue”和“Thu”的首字符是 “T”,所以 n=2。 【知识模块】 函数和数组