1、国家二级 C语言(函数和数组)机试模拟试卷 6及答案与解析 一、选择题 1 若各选项中所用变量己正确定义,函数 fun中通过 return语句返回一个函数值,以下选项中错误的程序是 ( A) main()x=fun(2 , 10); )float fun(int a , int b) ( B) float fun(int a, int b)main()x=fun(i , j); ( C) float fun(int, int); main()x=fun(2 , 10); )float fun (int a, int b) ( D) main()float fun(int i, int j);
2、x=fun(i , j); float fun(int a , int b) 2 有以下程序,程序中库函数 islower(ch)用以判断 ch中的字母是否为小写字母 #include stdio h #include ctype h void fun(char*p) int i=0; while(pi) if(pi=&islower(pi-1)pi-1=pi-l=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!
3、( C) ab cd EFg! ( D) aB cD EFG! 3 以下关于函数的叙述中正确的是 ( A)每个函数都可以被其他函数调用 (包括 main函数 ) ( B)每个函数都可以被单独编译 ( C)每个函数都可以单独运行 ( D)在一个函数内部可以定义另 一个函数 4 以下叙述中正确的是 ( A)函数既可以直接调用自己,也可以间接调用自己 ( B)任何情况下都不能用函数名作为实参 ( C)函数的递归调用不需要额外开销,所以效率很高 ( D)简单递归不需要明确的结束递归的条件 5 在函数调用过程中,如果函数如 funA调用函数 funB,函数 funB又调用了函数如 funA,则 ( A)
4、称为函数的直接递归调用 ( B)称为函数的间接递归调用 ( C)称为函数的循环调用 ( D) C语言中不允许这样的递归调用 6 以下叙述中正确的是 ( A)函数调用时,不必 区分函数名称的大小写 ( B)调用函数时,函数名必须与被调用的函数名完全一致 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 7 有以下程序 #include stdio h main() int f(int x, int y) int a=3, b=4, c=5, d; return(y-x)*x); d=f(f(a, b), f(a, c); printf(“ d n“, d); 程序运
5、行后的输出结果是 ( A) 10 ( B) 8 ( C) 9 ( D) 7 8 若有以下程序 void f(int x) main()int z=123456; if(x =10) f(z); printf(“ d-“, x 10); f(x 10); else printf(“ d“, x); 则程序的输出结果是 ( 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- 9 有以下程序 #include stdio h int fun(int x)int p; if(x=0|x=1)return(3); p=x
6、-fun(x-2); return(p); main()printf(“ dkn“, fun(9); 程序运行后的输出结果是 ( A) 5 ( B) 9 ( C) 4 ( D) 7 10 有以下程序 #include stdio h int flint x) main() int y; int z; if(x=0|x=1)return(3); z=f(3); printf(“ d n“, z); y=x*x-f(x-2); return y; 程序的运行结果是 ( A) 9 ( B) 0 ( C) 6 ( D) 8 11 在一个 C源程序中所定义的全局变量,其作用域为 ( A)所在文件的全部范
7、围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)由具体定义位置和 extern说明来决定范围 12 在一个 C源程序文件中所定义的全局变量,其作用域为 ( A)由具体定义位置和 extern说明来决定范围 ( B)所在程序的全部范围 ( C)所在函数的全部范围 ( D)所在文件的全部范围 13 在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是 ( A) extern和 register ( B) auto和 static ( C) static和 register ( D) auto和 register 14 有以下程序 int f(int m) main()i
8、nt n=0; static int n=0; printf(“ d, “, f(+n); n+=m; return n; printf(“ d n“, f(n+); 程序运行后的输出结果是 ( A) 1, 1 ( B) 1, 2 ( C) 2, 3 ( D) 3, 3 15 若有定义语句: int m=5, 4, 3, 2, 1), i=4;,则下面对 m数组元素的引用中错误的是 ( A) m-i ( B) m2*2 ( C) mm0 ( D) mmi 16 下列定义数组的语句中,正确的是 ( A) int N=10; int xN; ( B) #define N10int xN; ( C)
9、 int x0 10; ( D) int x; 17 若要求定义具有 10个 int型元素的一维数组 a,则以下定义语句中错误的是 ( A) #define n 5 int a2*n; ( B) int a5+5; ( C) #define N 10 int aN; ( D) int n=10, an; 18 以下叙述中正确的是 ( A)一条语句只能定义一个数组 ( B)数组说明符的一对方括号中只能使用整型常量,而不能使用表达式 ( C)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( D)在引用数组元素时,下标表达式可以使用浮点数 19 若有以下程序 #includ
10、e stdio h main()int i, j=0; char a=“How are you!“, b10; for(i=0; ai; i+) if(ai=)bj+=ai+1; bj= 0; printf(“ s n“, b); 则程序的输出结果是 ( A) Howareyou ( B) Hay! ( C) Howareyou! ( D) ay 20 若有定义语句: int a36;,按在内存中的存放顺序, a数组的第 10个元素是 ( A) a04 ( B) a13 ( C) a03 ( D) a14 21 有以下程序 #include main()int b33=0, 1, 2, 0,
11、1, 2, 0, 1, 2), i, j, t=1; for(i=0; i =i; j+) t+=bibji; printf(“ d n“, t); 程序运行后的输出结果是 ( A) 3 ( B) 1 ( C) 9 ( D) 4 22 有下列程序: main() int i, t3=9, 8, 7, 6, 5, 4, 3, 2, 1; for(i=0; i 3; i+) printf(“ d“, t2-ii); 程序执行后的输出结果是 ( A) 7 5 3 ( B) 3 6 9 ( C) 7 5 1 ( D) 3 5 7 23 设有定义: int x23;则以下关于二维数组 x的叙述错误的是
12、( A)数组 x可以看作是由 x0和 x1两个元素组成的一维数组 ( B)可以用 x0=0;的形式为数组所有元素赋初值 0 ( C)元素 x0可看作是由 3个整型元素组成的一维数组 ( D) x0和 x1是数组名,分别代表一个地址常量 24 下列叙述中正确的是 ( A)两个连续的单引号 (“)是合法的字符常量 ( B)可以对字符串进行关系运算 ( C)两 个连续的双引号 (“)是合法的字符串常量 ( D)空字符串不占用内存,其内存空间大小是 0 25 以下叙述中正确的是 ( A) char ca35=“A“, “BB“, “CCC“;是不合语法的 ( B)字符串数组,是指数组中的每个元素都是一
13、个存放字符串的一维数组 ( C) char ca5=“A“, “BB“, “CCC“;是不合语法的 ( D) char*ca3=“A“, “BB“, “CCC“;是不合语法的 26 设有定义语句: char*aa2=“abcd“, “ABCD“; 则以下叙述正确的是 ( A) aa数组的两个元素只能存放含有 4个字符的一维数组的首地址 ( B) aa数组的值分别是字符串 “abcd“和 “ABCD“ ( C) aa是指针变量,它指向含有两个元素的字符型数组 ( D) aa0存放了字符串 “abcd“的首地址 27 有以下程序 #include stdio h #include string h
14、 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 28 有以下程序 #include stdio h void main() char s=“012xy“; int i, n=0; for(i=0; si!=0: i+) if(si =a&si =Z)n+; pr
15、intf(“ d n“, n); 程序运行后的 输出结果是 ( A) 0 ( B) 3 ( C) 5 ( D) 2 29 有下列程序,程序执行后的输出结果是 fun(char p10) int n=0, i; for(i=0; i 7; i+) if(pi0=T)n+; return n; main() char str10=“Mon“, “Tue“, “Wled“, “Thu“, “Fri“, “Sat“, “Sun“; printf(“ d n“, fun(str); ( A) 1 ( B) 3 ( C) 0 ( D) 2 国家二 级 C语言(函数和数组)机试模拟试卷 6答案与解析 一、选
16、择题 1 【正确答案】 A 【试题解析】 C语言规定,函数必须先定义,后调用 (函数的返回值类型为 int或cbar时除外 )。在选项 A)中,调用的子函数在调用后面定义,所以不正确。在选项B)、 C)中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项 D)中,在主函数中先对子函数 float fun(int i, int i)进行了声明,然后进行调用。 【知识模块】 函数和数组 2 【正确答案】 D 【试题解析】 函数 fun(char*p)的功能是如果 pi指向的字符为空字符并且其前一个字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行 fun(s1)后,小写
17、字母 b, d都改成大字母。 【知识模块】 函数和数组 3 【正确答案】 B 【试题解析】 本题主要考查函数的定义和使用。选项 A)错误, main函数可以调用其他函数,但是其他函数不能调用 main函数;选项 B)正确;选项 C)错误,只有 main函数可以单独运行,其他函数只能被调用;选项 D)错误, C语言中不能在函数内部定义函数。 【知识模块】 函数和数组 4 【正确答案】 A 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至 C语言中的函数可以直接或间接地自己调用自己,称之为递归
18、调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地涕增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归 调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项 C)和选项 D)不正确。函数名表名了函数的入口地址,如果函数的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项 B)错误。 【知识模块】 函数和数组 5 【正确答案】 B 【试题解析】 本题考查递归的概念, C语言中函数可以直接或间接调用自身,称为递归调用。本
19、题中: funA调用 funB,然后 funB又调用 funA,即 funA间接调用了自身。 【知识模块】 函数和数组 6 【正确答案】 B 【试题解析】 在标准 C中,函数的定义形式为: 函数返回值的类型名函数名 (类型名形式参数 1,类型名 形式参数 2, ) 说明部分 语句部分 需要说明的是函数名和形式参数都是由用户命名的标识符,在同一程序中,函数名必须惟一,形式参数名只要在同一函数中惟一即可,与其他函数中的变量可以同名。 return语句的作用是返回函数的值,在函数中可以出现多个或者没有。 【知识模块】 函数和数组 7 【正确答案】 C 【试题解析】 本题考查函数的嵌套调用。首先计算
20、f(a, b)与 f(a, c), f(a,b)=(b-a)*a=3, f(a, c)=(c-a)*a=6,然后计算 f(3, 6)=(6-3)*3=9。 【知识模块】 函数和数组 8 【正确答案】 A 【试题解析】 函数 f的主要功能为逆置输出整数 x的每一位数据,如果 z的值为123456,逆置输出的结果为 6-5-4-3-2-1。 【知识模块】 函数和数组 9 【正确答案】 D 【试题解析】 函数 fun的主要功能是: 初值 x的值为9,因此 fun(9)=9-fun(7)=9-(7-(5-(3-3),因此答案为 7。 【知识模块】 函 数和数组 10 【正确答案】 C 【试题解析】 主
21、函数调用 f()函数,将实参 3传递给 x,进行 if条件语句的判断不成立,接着执行 y=3*3-f(1),再执行 f(1),而 f(1)满足 if条件语句,所以 f(1)的值为 3,代入 y=3*3-f(1)=9-3=6。 【知识模块】 函数和数组 11 【正确答案】 D 【试题解析】 本题考查 C语言的作用域规则。在 C语言中,全局变量的有效范围从定义变量的位置开始到本源文件结束。如果需要在其他源文件中使用该全局变量,则可以在其他源文件中使用 extern关键字来声明该全局变量,这样该全局变量的作用域就被扩展到以 extern声明了该全局变量的位置开始到此源文件结束。 【知识模块】 函数和
22、数组 12 【正确答案】 A 【试题解析】 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用 extern说明符扩展全局变量的作用域 (当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用 extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存 储单元,不需要再为它分配存储单元。这时全局变量的作用域从 extern说明处起,延伸到该函数末尾 )。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量。而在其他用到这
23、些全局变量的文件中用 extern对这些变量进行说明。 【知识模块】 函数和数组 13 【正确答案】 D 【试题解析】 在 C语言中,动态变量 (auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时。系统才临时给变量分配内存单元:全局变量 (extern)一经定义,系统为其分配固定的内存单元;静态变量 (static),编译系统为其分配固定的存储空间;寄存器变量 (register)不保存在内存上,而是直接存储在 CPU的寄存器中。 【知识模块】 函数和数组 14 【正确答案】 B 【试题解析】 由于在函数 f中,变量 n为静态局部变量,所以在主函数中第一次调用函数 f
24、后,变量 n的值等于 1,当第二调用函数 f时,在函数 f的内部静态局部变量 n的值仍然保留等于 1,所以返回函数值等于 2。 【知识模块】 函数和数组 15 【正确答案】 C 【试题 解析】 本题考查数组的使用。 m是一个一维数组,长度为 5,因此下标范围是 0-4。选项 A)中 -i是先自减,然后使用 i,因此访问的是元素 m3;选项 B)访问的是元素 m4;选项 C)中内部的 m0值是 5,因此实际访问是的 m5,下标超出范围;选项 D)中 mi的值是 1,访问元素 m1。 【知识模块】 函数和数组 16 【正确答案】 B 【试题解析】 数组说明的一般形式为:类型说明符数组名 常量表达式
25、 :其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达 式表示数据元素的个数,也就是数组的长度,必须是整型常量。 【知识模块】 函数和数组 17 【正确答案】 D 【试题解析】 在 C语言中,定义一维数组的语句形式为:类型名数组名 整型常量表达式 :在选项 D)中, n是一个整型的变量。 【知识模块】 函数和数组 18 【正确答案】 C 【试题解析】 数组的定义格式: 类型说明符 数组名 整型常量表达式 , ; 可以同时定义多个类型相同的数组,之间以逗号分隔开,数组的类型表明了数组中元素的数据类型,数组中所有元素的类型相同,数组经过定义 以后就可使用,编译
26、程序将对其分配一片连续的存储空间进行连续存储。 C语言中只能单个引用数组元素而不能一次引用整个数组。引用格式为:数组名 下标 ,引用元素时,需要注意下标只能为整型常量或整型表达式。 【知识模块】 函数和数组 19 【正确答案】 D 【试题解析】 主函数中利用 for循环访问字符串 a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组 b中。在字符串 “How are you!“中,第一个空格后面字符为 a,第二个空格后厩字符为y。 【 知识模块】 函数和数组 20 【正确答案】 B 【试题解析】 本题考查多维数组的定义和使用。 a是一个二维数组,有 3行
27、6列,即每行 6个元素, a的第 10个元素位于第二行的第四个位置,即 a13。 【知识模块】 函数和数组 21 【正确答案】 D 【试题解析】 这道题主要考查的是二维数组的有关知识。在两层 for循环语句中,每次执行变量 t的累加时,二维数组元素 b的第二下标的值与第一下标相同的值,所以程序执行的过程为 t=1+b11+b22=1+1+2=4。 【知识 模块】 函数和数组 22 【正确答案】 D 【试题解析】 由于在程序中定义了二维数组 t3=9, 8, 7, 6, 5, 4, 3, 2,1);由二维数组的存储方式按行存储,即初始化完第一行的所有列再初始化下一行的元素。可知这是一个 3行 3
28、列的二维数组,第一行的元素为 9, 8, 7,第二行的元素为 6, 5, 4,第三行的元素为 3, 2, 1。然后用 for循环输出 t20、t11、 t02,它们的值分别为 3、 5、 7。 【知识模块】 函数和数组 23 【正确答案】 B 【试 题解析】 二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第 0行的元素,再存放第 1行的元素 称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如, inta43=1, 2, 4, 5;在编译时,系统将按 a数组元
29、素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值 0。以上将给 a数组第一行的元素和第二行的第一个元素依次赋予 1、 2、 4、 5,其他元素的初值都为 0。 【知识模块】 函数和数组 24 【正确答案】 C 【试题解析】 两个连续的双引号: “,是一个字符串常量,称为 “空串 ”。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 字符串数组,也就是二维字符数组。其中每个元素为一个字符串,选项 B)的说法正确。选项 A)和 C)对于 ca的定义是正确的。选项 D)定义一个指针数组,可以保存多个字符串的首地址。 【知识模块】
30、函数和数组 26 【正确答案】 D 【试题解析】 题 目中 char*aa2,定义了指针数组 aa,有两个元素, aa0存放“abcd“地址,而 aa1存放 “ABCD“地址。 【知识模块】 函数和数组 27 【正确答案】 B 【试题解析】 在主函数中定义了二维字符数组 str,并对它赋初值。定义字符指针 p,并把字符串 str1的地址赋给它。所以这时字符指针 p指向字符串“One*Dream!”,然后在两个输出语句中,分别输出这个字符串的长度 10和字符串本身。 【知识模块】 函数和数组 28 【正确答案】 D 【试题解析】 这段 程序的功能求出字符串 s中字符在小写字符 a到 z之间字符的个数。在程序中字符串 s的值为 “012xy”,所以在字符串 s中符合要求的字符的个数等于 2。 【知识模块】 函数和数组 29 【正确答案】 D 【试题解析】 本题在主函数中定义了一个字符二维数组 str10,并用“Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat“, “Sun“初始化。函数fun(char p10)的功能是统计出 p10中 pi0等于字符 T的个数。所以 fun(str)的功能是统 计一周七天中英文名称首字 *为 “T”的个数。因为字符串 “Tue”和 “Thu”的首字符是 “T”,所以 n=2。 【知识模块】 函数和数组
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1