国家二级C语言(函数和数组)机试模拟试卷14
选择题
1.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)
#include <stdio.h>
#include <string.h>
main()
{ char a[10]=\\(B)
A. bc2yz
B. a2yz
C. a12xyz
D. 12yz
解析:程序执行strcpy(a+1,b+2)后,字符数组a的值为“a2”,再进行字符串的连接strcat(a,c+1),此时字符数组a的值为“a2yz”。
2.若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是
A
解析:C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char时除外)。在选项A中,调用的子函数在调用后面定义,所以不正确。在选项B、C中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项D中,在主函数中先对子函数float fun(int i,int j)进行了声明,然后进行调用。
3.以下叙述中正确的是(D)
A. 用户自己定义的函数只能调用库函数
B. 不同函数的形式参数不能使用相同名称的标识符
C. 在C语言的函数内部,可以定义局部嵌套函数
D. 实用的C语言源程序总是由一个或多个函数组成
解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能嵌套定义函数。
4.若有定义语句: char s[10]=\\(B)
A. 8
B. 7
C. 9
D. 10
解析:字符串长度函数strlen(s)表示计算出以s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志’\\\\0’。
5.有以下程序
# include <string.h>
main( )
{ char p[20]={’a’,’b’,’c’,’d’},q[ ]=\\(C)
A. 9
B. 11
C. 6
D. 7
解析:字符串连接函数strcat(p,r)的功能是把字符数组p[ ]和r[ ]连接起来,此时字符数组p[ ]的有效字符长度为9,再执行strcpy(p+strlen(q),q)字符串复制函数,把字符数组q[ ]复制到字符数组p[ ]从p[3]开始到p[5]数组位置中,由于字符数组q[ ]中的内容为字符串“abc”复制时把字符串结束标志’\\
ull’也复制到字符数组p[ ]中,这时字符函数strlen(p)返回字符数组p[ ]的有效字符长度为6。
6.若有定义语句: char *s1=\\(A)
A. if (strcmp(s1,s2)!=0) puts(s1);
B. if (strcmp(s1,s2)!=0) puts(s2);
C. if (strcmp(s1,s2)==1) puts(s1);
D. if ( strcmp(s1,s2)==0) puts(s1);
解析:字符串比较函数strcmp的功能是对s1和s2所指字符串进行比较。如果s1<s2,返回负数,如果s1==s2,返回0,如果s1>s2,返回正数,所以对于本题来说,能够输出“OK”的语句是选项A所指的语句。
7.有以下程序,程序中库函数islower (ch)用以判断ch中的字母是否为小写字母
#include <stdio.h>
#include <ctype.h>
void fun(char *p)
{ int i=0;
while (p[i])
{ if(p[i]==’ ’ &&islower(p[i-1])) p[i-1]=p[i-1]-’a’+’A’;
i++;
}
}
main()
{char sl[100]=\\(D)
A. Ab Cd EFg !
B. ab cd EFG !
C. ab cd EFg !
D. aB cD EFG !
解析:函数fun(char *p)的功能是如果p[i]指向的字符为空字符并且其前一个字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行fun (s1)后,小写字母b,d都改成大字母。
8.若有以下定义和语句
char s1[10]=\\(C)
A. 10 5
B. 10 7
C. 5 5
D. 5 8
解析:本题要注意的是转义字符的问题,在字符串s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于5。
9.有以下程序
#include <stdio.h>
int fun(int a,int b)
{ if(b==0) return a;
else return(fun(–a,–b));
}
main()
{
printf(\\(B)
A. 1
B. 2
C. 3
D. 4
解析:由程序可知函数fun(int a,int b)是一个递归函数。所以当主函数中调用fun(4,2)时,其执行过程如下:fun(4,2)-> fun(3,1)-> fun(2,0),其返回值为2。
10.下列选项中,能够满足“只要字符串s1等于字符串s2,则执行ST”要求的是(C)
A. if(s1==s2) ST;
B. if(strcpy(s1,s2)==1) ST;
C. if(strcmp(s2,s1)==0) ST;
D. if(s1-s2==0) ST;
解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp(),如果这个函数的返回值等于0,说明两个字符串相等。
11.以下叙述中正确的是(C)
A. 函数名代表该函数的入口地址
B. 所有函数均不能接受函数名作为实参传入
C. 函数体中的语句不能出现对自己的调用
D. 如果函数带有参数,就不能调用自己
解析:函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项B错误的,在C语言中允许进行递归调用,即自己调用自己,选项C和选项D是错误的。
12.以下叙述中正确的是(A)
A. 函数既可以直接调用自己,也可以间接调用自己
B. 任何情况下都不能用函数名作为实参
C. 函数的递归调用不需要额外开销,所以效率很高
D. 简单递归不需要明确的结束递归的条件
解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地递增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用
本文档预览:3600字符,共9545字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载