1、国家二级 C语言(函数和数组)机试模拟试卷 10及答案与解析 一、选择题 1 有以下程序 (strcpy为字符串复制函数, strcat为字符串连接函数 ) #include #include main() char a10=“abc“, b10=“012“, c10=“xyz“; strcpy(a+1, b+2); puts(strcat(a, c+1); 程序运行后的输出结果是 ( A) bc2yz ( B) a2yz ( C) a12xyz ( D) 12yz 2 若各选项中所用变量已正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是 ( A) main
2、()x=fun(2 , 10); float fun(int a , int b) ( B) float fun(int a, int b)main()x=fun(i , j); ( C) floatfun(int, int); main()x=fun(2 , 10); float fun(i nt a, int b) ( D) main()float fun(int i, intj); x=fun(i , j); float fun(int a , int b) 3 以下叙述中正确的是 ( A)用户自己定义的函数只能调用库函数 ( B)不同函数的形式参数不能使用相同名称的标识符 ( C)在
3、C语言的函数内部,可以定义局部嵌套函数 ( D)实用的 C语言源程序总是由一个或多个函数组成 4 若有定义语句: char s10=“1234567 0 0“;则 strlen(s)的值是 ( A) 8 ( B) 7 ( C) 9 ( D) 10 5 有以下程序 #include main() char P20=a, b, c, d, q=“abc“, r=“abcde“; strcat(p, r); strcpy(p+strlen(q), q); printf(“ d n“, strlen(p); 程序运行后的输出结果是 ( A) 9 ( B) 11 ( C) 6 ( D) 7 6 若有定义
4、语句: char*s1=“OK“, *s2=“ok“;以下选项中,能够输出 “OK“的语句是 ( 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(s 1); 7 有以下程序,程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字母 #include #include void fun(char *p) int i=0; while(pi) if(pi= &is
5、lower(pi-1) pi-1=pi-1-a+A; i+; main() char s1100=“ab cd EFG!“; fun(s1); printf(“ s n“, s1); 程序运行后的输出结果是 ( A) Ab Cd EFg! ( B) ab cd EFG! ( C) ab cd EFg! ( D) aB cD EFG! 8 若有以下定义和语句 char s110=“abcd!“, *s2=“ n123 “; printf(“ d d n“, strlen(s1), strlen(s2); 则输出结果是 ( A) 10 5 ( B) 10 7 ( C) 5 5 ( D) 5 8 9
6、 有以下程序 #include int fun(int a, int b) if(b=0) return a; else return(fun(-a, -b); main() Printf(“ d n“, fun(4, 2); 程序的运行结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 10 下列选项中,能够满足 “只要字符串 s1等于字符串 s2,则执行 ST”要求的是 ( A) if(s1=s2)ST; ( B) if(strcpy(s1, s2)=1)ST; ( C) if(strcmp(s2, s 1)=0)ST; ( D) if(s1-s2=0)ST; 11 以下叙述中
7、正确的是 ( A)函数名代表该函数的入口地址 ( B)所有函数均不能接受函数名作为实参传入 ( C)函数体中的语句不能出现对自己的调用 ( D)如果函数带有参数,就不能调用自己 12 以下叙述中正确的是 ( A)函数既可以直接调用自己,也可以间接调用自己 ( B)任何情况下都不能用函数名作为实参 ( C)函数的递归调用不需要额外开销,所以效率很高 ( D)简单递归不需要明确的结束递归的条件 13 以下关于 retum语句的叙述中正确的是 ( A)一个自定义函数中必须有一条 return语句 ( B)一个自定义函数中可以根据不同情况设置多条 return语句 ( C)定义成 void类型的函数中
8、可以有带返回值的 return语句 ( D)没有 return语句的自定义函数在执行结束时不能返回到调用处 14 已定义以下函数 int fun(int*p)return *p; fun函数返回值是 ( A)不确定的值 ( B)一个整数 ( C)形参 p中存放的值 ( D)形参 p的地址值 15 以下叙述中错 误的是 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( C)用户定义的函数中可以有多个 retum语句,以便可以调用一次返回多个函数值 ( D)函数的 retum语句中可以没有表达式 16 以下叙述
9、中错误的是 ( A)函数调用可以作为一个独立的语句存在 ( B)函数形参的值也可以传回给对应的实参 ( C)若函数有返回值,必须通过 return语句返回 ( D) C程序必须由一个或一个以上的函数组成 17 有以下程序 int add (int a, int b) return (a+b); main( ) int k, (*f)( ), a=5, b=10; f=add; 则以下函数调用语句错误的是 ( A) k=add(a, b); ( B) k=(*D(a, b); ( C) k=*f(a, b); ( D) k=f(ab); 18 以下叙述中正确的是 ( A)函数调用时,不必区分函数
10、名称的大小写 ( B)调用函数时,函数名必须与被调用的函数名完全一 致 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 19 若有以下函数首部 int fun(double x10, int*n)则下面针对此函数的函数声明语句中正确的是 ( A) int fun(double, int); ( B) int fun(double*x, int n); ( C) int fun(double*, int*); ( D) int fun(double x, int*n); 20 以下选项中叙述错误的是 ( A)在 C程序的同一函数中,各复合语句内可以定义变量 ,其作
11、用域仅限本复合语句内 ( B) C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 ( C) C程序函数中定义的自动变量,系统不自动赋确定的初值 ( D) C程序函数的形参不可以说明为 static型变量 21 有以下程序 int f(int x); main() int n=1, m; m=f(f(f(n); printf(“ d n“, m); int f(int x) return x*2 ; 程序运行 后的输出结果是 ( A) 1 ( B) 2 ( C) 4 ( D) 8 22 有以下程序 #include int fun(int x, int y) if(x=y)ret
12、urn(x); else return(x+y) 2); main() int a=4, b=5, c=6; printf(“ d n“, fun(2*a, fun (b, c); 程序运行后的输出结果是 ( A) 3 ( B) 6 ( C) 8 ( D) 12 23 有以下程序 #include int f(int x, int y) return(yx)*x); ) main() int a=3, b=4, c=5, d; d=f(f(a, b), f(a, c); printf(“ d n“, d); 程序运行后的输出结果是 ( A) 10 ( B) 8 ( C) 9 ( D) 7 24
13、 有以下程序 #include double f(double x); main() double a=0 ; int i; for(i=0; i int f(int x); main() int a, b=0; for(a=0; a=10) printf(“ d-“, x 10); f(x 10); ) else printf(“ d“, x); main() int z=123456; f(z), 则程序的输出结果是 ( A) 6-5-4-3-2-1 ( B) 6-5-4-3-2-1- ( C) 1-2-3-4-5-6 ( D) 1-2-3-4-5-6- 国家二级 C语言(函数和数组)机试
14、模拟试卷 10答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 程序执行 strcpy(a+1, b+2)后,字符数组 a的值为 “a2”,冉进行字符串的连接 strcat(a, c+1),此时字符数组 a的值为 “a2yz”。 【知识模块】 函数和数组 2 【正确答案】 A 【试题解析】 C语言规定,函数必须先定义,后调用 (雨数的返回值类型为 int或char时除外 )。在选项 A)中,调 用的子函数在调用后面定义,所以不正确。在选项B)、 C)中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,存主函数中先对子函数 float fun(int i,
15、intj)进行了声明,然后进行调用。 【知识模块】 函数和数组 3 【正确答案】 D 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能嵌套定义函数。 【知识模块】 函数和数组 4 【正确 答案】 B 【试题解析】 字符串长度函数 strlen(s)表示计算出以 s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志 0。 【知识模块】 函数和数组 5 【正确答案】 C 【试题解析】 字符串连接函数 strcat(p, r)的功能是把字符数组 p和 r连接起
16、来,此时字符数组 p的有效字符长度为 9。再执行 strcpy(p+strlen(q), q)字符串复制函数,把字符数组 q复制到字符数组 p从 p3开始到 p5数组位置中,由于字符数组 q中的内容为字符串 “abc”复制时把字符串结束标志 null也复制到字符数组 p中,这时字符函数 strlen(p)返回字符数组 p的有效字符长度为 6。 【知识模块】 函数和数组 6 【正确答案】 A 【试题解析】 字符串比较函数 strcmp的功能是对 s1和 s2所指字符串进行比较。如果 s1s2,返回正数,所以对于本题米说,能够输出 “OK”的语句是选项 A)所指的语句。 【知识模块】 函数和数组
17、7 【正确答案】 D 【试 题解析】 函数 fun(chai*p)的功能是如果 pi指向的字符为空字符并且其前一个字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行 fun(s1)后,小写字母 b, d都改成大字母。 【知识模块】 函数和数组 8 【正确答案】 C 【试题解析】 本题要注意的是转文字符的问题,在字符串 s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于 5。 【知识模块】 函数和数组 9 【正确答案】 B 【试题解析】 由程序可知函数 fun(int a, int b)是 一个递归函数。所以当 t函数中调用 fun(4, 2)时,其执行过程如下:
18、fun(4, 2)- fun(3, 1)-fun(2, 0),其返回值为 2。 【知识模块】 函数和数组 10 【正确答案】 C 【试题解析】 在 C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数 stremp(),如果这个函数的返回值等于 0,说明两个字符串相等。 【知识模块】 函数和数组 11 【正确答案】 A 【试题解析】 函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义 相心的形参为指向函数的指针变量来获得该函数的入口地址,囚此选项 B)错误的,在 C语言中允许进行递归调用,即自己调用自己,选项C)和选项 D)是错误的。 【知识模块】 函数和数
19、组 12 【正确答案】 A 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至 C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相 同,只是所处理的对象有规律地递增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项 C)和选项 D)不正确。函数名表名了函数的入口地址,如果函数
20、的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项 B)错误。 【知识模块】 函数和数组 13 【正确答案】 B 【试题解析】 return语句主要用于返回函数的值。在一个自定义函数中,可以根据不 同的情况设置多条 return语句返回函数的值。 【知识模块】 函数和数组 14 【正确答案】 B 【试题解析】 由函数 int fun(int*p)retum*p; 的定义可知,返回值为整型指针变量 p所指向的数据。 【知识模块】 函数和数组 15 【正确答案】 C 【试题解析】 函数值通过 return语句返回, return语句的形式如下: return表
21、达式或 return(表达式 );当程序执行到 return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内, 可以根据需要,在多处出现return语句,在函数体的不同部位退出函数。无论函数体中有多少个 retum语句, retum语句只可能执行一次,返回一个函数值。 retum语句中也可以不含有表达式,这时必须定义函数为 void类型,它的作用只是使流程返回到调用函数,并没有确定的函数值。函数体内可以没有 return语句,这时也必须定义函数为 void类型,程序的流程就一直执行到函数末尾的 “”,然后返回调用函数,也没有确定的函数值带回。 【知识模块】 函数和数组 1
22、6 【正确答案】 B 【试题解析】 一个 C程序中可以包含任意多个不同名的函数,但只能有一个主函数。一个 C程序总是从主函数开始执行。函数的值通过 retum语句返回,return语句中的表达式的值就是所求的函数值。在 C语言中,数据只能从实参单向传递给形参,称为 “按值 ”传递。也即是说,当简单变量作为实参时,用户不可能在函数中改变对应实参的值。 【知识模块】 函数和数组 17 【正确答案】 C 【试题解析】 在语句 “k=*f(a, b)”中,由于 “()”的优先级高于 “*”,所以 “*f(a,b); ”表示其返回类型为指针的带有两个整型参数的函数, 而不是整型数值,因此选项 C)为错误
23、的调用形式。 【知识模块】 函数和数组 18 【正确答案】 B 【试题解析】 在标准 C中,函数的定义形式为: 函数返回值的类型名 函数名 (类型名形式参数 1,类型名形式参数 2, ) 说明部分 语句部分 需要说明的是函数名和形式参数都是由用户命名的标识符,在同一程序中,函数名必须惟一,形式参数名只要在同一函数中惟一即可,与其他函数中的变量可以同名。 return语句的作用是返回函数的值,在函数中可以出现多个或者没 有。 【知识模块】 函数和数组 19 【正确答案】 C 【试题解析】 函数说明的一般形式为:类型名函数名 (参数类型 1,参数类型2, ) 。因为函数 int fun(doubl
24、e x10, int*n)的第 1个形式参数是一个双精度型的一维数组,第 2个参数是一个整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址。 【知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 在函数定义的静态变量,只需要赋值 1次,即可保存初始值,不需要每次调用时郜赋初始值。 【知识模块】 函数和数组 21 【正确答案】 D 【试题解析】 程序考查了函数的调用。对于 m=fi(f(f(n);首先计算最内层的函数调用 f(n),执行 f函数,得到返回值 2,然后计算 f(2),得到返回值为 4,最后计算 f(4),得到计算结果为 8。 【知识模块】 函数和数组 22
25、【正确答案】 B 【试题解析】 fun(b, c)即 fun(5, 6), 5!=6,所以返回 (5+6) 2=5; fun(2*a, 5)即 fun(8, 5), 8!=5,所以返回 (8+5) 2=6。 【知识模块 】 函数和数组 23 【正确答案】 C 【试题解析】 本题考查函数的嵌套调用。首先计算 f(a, b)与 f(a, c), f(a,b)=(b-a)*a=3, f(a, c)=(ca)*a=6,然后计算 f(3, 6)=(6 3)*3=9。 【知识模块】 函数和数组 24 【正确答案】 C 【试题解析】 由于函数 f的作用是对形参 x求平方再加 1,所以在主函数中,循环第一次执
26、行后变量 a的值等于 1,第二次执行后,变量 a的值等于 102,第三次执行后,变量 a的值等于 503。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 在 C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过 return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。 【知识模块】 函数和数组 26 【正确答案】 C 【试题解析】 函数 fun中采用了变量作为参数,那么参数传递以后,形参 a,b, c的变化对于实参 a, b, c是没有影响的,因此 主函数中 a, b, c的值经过 fun调用以后,值没有变化。 【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 在函数 main()中,第一次执行 for循环时, b的值等于 1,此时输出字母 B;第二次执行 for循环时, b的值等于 3,此时输出字母 D:第三次执行for循环时, b的值等于 8,此时输出字母 I。 【知识模块】 函数和数组 28 【正确答案】 A 【试题解析】 函数 f的主要功能为逆置输出整数 x的每一位数据,如果 z的值为123456,逆置输出的结果为 6-5-4-3-2-1。 【知识模块】 函数和数组