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