国家二级C语言机试(函数和数组)模拟试卷16
(总分:58.00,做题时间:90分钟)
一、 选择题(总题数:29,分数:58.00)
1.以下语句中存在语法错误的是
(分数:2.00)
 A.char ss[][20]={"right?"}; 
 B.char*ss[6];ss[1]="right?";
 C.char*ss[]={"right?"};
 D.char ss[6][20];ss[1]="right?";
解析:解析:选项A中定义了二维数组ss,可以用于存储字符串,但是字符串的存储不能通过赋值,仅可以初始化或者输入得到,而选项C和A)不同,选项C为指针数组,对于指针变量可以保存常量字符串的地址。
2.下面是有关C语言字符数组的描述,其中错误的是
(分数:2.00)
 A.不可以用赋值语句给字符数组名赋字符串
 B.可以用输入语句把字符串整体输入给字符数组
 C.字符数组中的内容不一定是字符串
 D.字符数组只能存放字符串 
解析:解析:本题考查字符数组。选项A、B)和C)都是正确的,字符数组存放其他数据。
3.以下选项中有语法错误的是
(分数:2.00)
 A.char str[3][10];str[1]="guest"; 
 B.char str[][10]={"guest"};
 C.char*str[3];str[1]="guest";
 D.char*str[]={"guest"};
解析:解析:本题考查字符数组的定义和使用。选项A定义了一个二维字符数组,第二句是直接给字符数组赋值错误,C语言中不能直接给字符数组赋值;选项B、C)和D)都是正确的。
4.下列叙述中正确的是
(分数:2.00)
 A.两个连续的单引号(")是合法的字符常量
 B.可以对字符串进行关系运算
 C.两个连续的双引号("")是合法的字符串常量 
 D.空字符串不占用内存,其内存空间大小是0
解析:解析:两个连续的双引号:"",是一个字符串常量,称为“空串”。
5.以下选项中,能正确进行字符串赋值的是
(分数:2.00)
 A.char siS]={'A','B','C','D','E'};
 B.char*s="ABCDE"; 
 C.char s[4][5]={"ABCDE"};
 D.char*S;gets(s);
解析:解析:对于选项A字符串中无法存放字符串结束标志'\0',选项C每行仅仅存放5个字符,同样的不能存放字符串结束标志,选项D中指针变量s没有实际的内存空间,无法存放输入的字符串。因此正确的选项为B),相当于char*s:s="ABCDE",把字符串常量的首地址存放到指针变量中存储。
6.有以下程序 #include int fun(char s[]){char*p=s; while(*p!=0)p++; return(p-s);} main(){printf("%d\n",fun("0ABCDEF"));} 程序运行后的输出结果是
(分数:2.00)
 A.6
 B.7 
 C.1
 D.0
解析:解析:函数fun的主要功能是计算字符串中实际字符的个数,因此主函数中调用fun得到结果为7。
7.若有以下程序段 char str[4][12]={"aa","bbb","ccccc","d"},*strp[4]; int i; for(i=0;i
(分数:2.00)
 A.strp 
 B.str[0]
 C.strp[3]
 D.*strp
解析:解析:程序段中定义指针数组*strp,含有4个元素,for循环strp分别保存了二维数组str中的4个字符串的首地址,因此strp为二级地址,不能保存字符串的首地址,*strp或者strp[0]中存放了字符串”aa”的首地址。所以不能正确引用字符串的为选项A。
8.以下叙述中正确的是
(分数:2.00)
 A.下面的语句用赋初值方式来定义字符串,其中,“'\0'”是必须的char strl []={'s','t','r','l','\0'};
 B.有定义语句:char strl[]="strl";,数组strl将包含4个元素 
 C.字符串常量“strl”的类型是:字符串数据类型
 D.字符数组的每个元素可存放一个字符,并且最后一个元素必须是“'\0'”字符
解析:解析:选项B中除了字符串中实际字符之外,还要存储字符串结束标志,应为5个元
素。在C语言中没有字符串数据类型,因此选项C不正确,选项D字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。
9.以下叙述中正确的是
(分数:2.00)
 A.char ca[3][5]={"A","BB","CCC"};是不合语法的
 B.字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组 
 C.char ca[][5]={"A","BB","CCC"};是不合语法的
 D.char*ca[3]={"A","BB","CCC"};是不合语法的
解析:解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B的说法正确。选项A和C)对于ca的定义是正确的。选项D定义一个指针数组,可以保存多个字符串的首地址。
10.以下叙述中正确的是
(分数:2.00)
 A.函数调用“strlen(s);”会返回字符串s实际占用内存的大小(以字节为单位)
 B.两个字符串可以用关系运算符进行大小比较
 C.当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和
 D.C语言本身没有提供对字符串进行整体操作的运算符 
解析:解析:C语言中没有运算符可以处理字符串,要调用“string”库中的函数来处理字符串,其中strlen函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。Strcat(s1,s2)函数用于连接两个字符串,是把字符串s2连接到s1的后面。
11.以下叙述中正确的是
(分数:2.00)
 A.不能用字符串常量对字符数组名进行整体赋值操作 
 B.字符串常量“Hello”会被隐含处理成一个无名字符型数组,它有5个元素
 C.“char str[7]="string!";”在语法上是合法的,运行也是安全的
 D.“char*str;str="Hello";”与“char str[];str="Hello";"效果是一样的
解析:解析:字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,选项B错误,而选项C中,没有空间存放字符串结束标志,因此运行是不安全的。选项D中第一个str为指针。可以赋值,而后面的为数组,在程序中赋值出错。
12.以下叙述中正确的是
(分数:2.00)
 A.语句“char str[10]="string!";”和“char str[10]={"string!"};”并不等价
 B.对于一维字符数组,不能使用字符串常量来赋初值
 C.对于字符串常量“string!”,系统已自动在最后加入了“'\0'”字符,表示串结尾 
 D.在语句char str[1]="string!";中,数组str的大小等于字符串的长度
解析:解析:在C语言中,字符串是借助于字符型一维数组来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符'\0'作为“字符串结束标志”。'\0'是一个转义字符,称为空值,它的ASCII码值为0。'\0'作为标志占用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最后自动加入一个字符('\0')作为字符串的结束标志。
13.设有定义char str[]="Hello";则语句printf("%d%d",sizeof(str),strlen(str));的输出结果是
(分数:2.00)
 A.6 6
 B.6 5 
 C.5 5
 D.5 6
解析:解析:sizeof主要用于测试变量所占的实际内存,而strlen函数主要测试字符串中实际字符的个数,字符串"Hello"占有内存6个字节。而字符串中共有5个字符。
14.设有定义语句: char*aa[2]={"abcd","ABCD"};则以下叙述正确的是
(分数:2.00)
 A.aa数组的两个元素只能存放含有4个字符的一维数组的首地址
 B.aa数组的值分别是字符串"abcd"和"ABCD"
 C.aa是指针变量,它指向含有两个元素的字符型数组
 D.aa[0]存放了字符串"abcd"的首地址 
解析:解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放"abcd".地址,而aa[1]存放"ABCD"地址。
15.以下选项中,没有编译错误的是
(分数:2.00)
 A.char str3[]={'d','e','b','u','g','\0'}: 一维数组的定义和初始化
 B.char strl[5]="pass",str2[6];str2=strl;
 C.char name[10];name="china";
 D.char str4[];str4="hello world";
解析:解析:选项A是定义了字符数组str3[],并对其赋初值。选项B中语句str2=str1非法,字符数组不能直接赋值。选项C,D)和选项B一致。
16.有以下程序 main() {char a[5][10]={"one","two","three","four","five"}; int i,j; char t; for(i=0;ia[j][0]) {t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;} puts(a[1]); } 程序运行后的输出结果是
(分数:2.00)
 A.fwo 
 B.owo
 C.two
 D.fix
解析:解析:这个程序的执行过程是当i=0时,j=1,a[0][0]=0a[3][0]=f;置换a[2][0]=f,a[3][0]=t;此时,a[2][0]=f,a[1][0]=t,再置换a[2][0]=t,a[1][0]=f,;;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fw0。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。