1、国家二级 C语言机试(函数和数组)模拟试卷 3及答案与解析 一、选择题 1 以下叙述中正确的是 ( A)用户自己定义的函数只能调用库函数 ( B)不同函数的形式参数不能使用相同名称的标识符 ( C)在 C语言的函数内部,可以定义局部嵌套函数 ( D)实用的 C语言源程序总是由一个或多个函数组成 2 若有定义语句: 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)pu
2、ts(s1); ( D) if(strcmp(sl, s2)=0)puts(s1); 3 有以下程序 #include int fun(int a, int b) if=0) return a; else return(fun(-a,-b); main() printf(“ d n“, fun(4, 2); 程序的运行结果是 ( A) 1 ( B) 2 ( C) 3 ( D) 4 4 以下叙述中正确的是 ( A)函数既可以直接调用自己,也可以间接调用自己 ( B)任何情况下都不能用函数名作为实参 ( C)函数的递归调用不需要额外开销,所以效率很高 ( D)简单递归不需要明确的结束递归的条件 5
3、 以下叙述中错误的是 ( A)用户定义的函数中可以没有 return语句 ( B)用户定义的函数中若没有 return语句,则应当定义函数为 void类型 ( C)用户定义的函数中可以有多个 return语句,以便可以调 用一次返回多个函数值 ( D)函数的 return语句中可以没有表达式 6 以下叙述中正确的是 ( A)函数调用时,不必区分函数名称的大小写 ( B)调用函数时,函数名必须与被调用的函数名完全一致 ( C)函数名允许用数字开头 ( D)在函数体中只能出现一次 return语句 7 有以下程序 int f(int x); main() int n=1, m; m=f(f(f(n
4、); printf(“ d n“, m); int flint x1 return x*2; 程序运行后的输出结果是 ( A) l ( B) 2 ( C) 4 ( D) 8 8 有以下程序 #include double f(double x); main() double a=0; int i; for(i=0; i 30; i+=1 0)a+=f(double)i); printf(“ 5 f n“, a); double f(double x) return X*X+1; 程序运行后的输出结果是 ( A) 401 ( B) 500 ( C) 503 ( D) 1404 9 有以下程序 #
5、include int f(int x); main() int a, b=0; for(a=0; a 3; a+) b=b+f(a); putchar(A+b); int f(int x) return x*x+1; ( A) BCD ( B) BDI ( C) ABE ( D) BCF 10 有以下程序 #include int fun(int n) int a; if(n=1)return 1; a=n+fun(n-1); return(a); main() printf(“ d n“, fun(5); 程序的输出结果是 ( A) 14 ( B) 10 ( C) 15 ( D) 9 11
6、 设有如下函数定义 int fun(int k) if(k 1)return 0; else if(k=1)return 1; else return fun(k-1)+1; 若执行调用语句: n=fun(3);,则函数 fun总共被调用的次数是 ( A) 2 ( B) 4 ( C) 3 ( D) 5 12 有以下程序 int fun(int n) if(n=1)retum 1; else return(n+fun(n-1); main() int x; scanf(“ d“&x); x=fun(x); printf(“ d n“, x); 执行程序时,给变量 x输入 10,程序的输出结果是
7、( A) 54 ( B) 65 ( C) 45 ( D) 55 13 以下叙述中正确的是 ( A)只有全局变量才有自己的作用域,函数中的局部变量没有作用域 ( B)只要是用户定义的标识符,都有一个有效的作用域 ( C)只有在函数内部定义的变量才是局部变量 ( D)局部变量不能被说明为 static 14 有以下程序 #include int a=1, b=2; void funl(int a, int b) printff“ d d“, a, b); ) void fun2() a=3; b=4; ) main() fun1(5, 6); fun2(); printf(“ d d n“, a,
8、 b); 程序运行后的输出结果是 ( A) 3 4 5 6 ( B) 1 2 5 6 ( C) 5 6 1 2 ( D) 5 6 3 4 15 有以下程序 #include fun(int a, int b) int static m=0, i=2; i=i+m+1; m=i+a+b; return m; ) main() int k=4, m=1, p; p=fun(k, m); printf(“ d, “, p); p=fun(k, m); printf(“ d n“, p); ) 程序运行后的输出结果是 ( A) 8, 17 ( B) 7, 16 ( C) 8, 8 ( D) 7, 17
9、 16 在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是 ( A) extern和 register ( B) auto和 static ( C) static和 register ( D) auto和 register 17 有以下程序 #include int fun() static int x=1; x+=1; return x; main() int i, s=1: for(i=1; i =5; i+)s+=fun(); printf(“ d n“, s); 程序运行后的输出结果是 ( A) 11 ( B) 21 ( C) 6 ( D) 120 18 有以下程序 #inc
10、lude int fun() static int x=1; x*=2; return x; main() int i, s=1; for(i: 1; i =2; i+) s=fun(); printf(“ d n“, s); 程序运行后的输出结果是 ( A) 4 ( B) 1 ( C) 0 ( D) 8 19 下列定义数组的语句中,正确的是 ( A) int N=10; int xN; ( B) #define N 10 int xN; ( C) int x0 10; ( D) int x; 20 有下列程序: main() int i,s=0, t=1, 2, 3, 4, 5, 6, 7,
11、 8, 9; for(i=0; i 9; i+=2)s+=*(t+i); printf(” d n”, s); 程序执行后的输出结果是 ( A) 20 ( B) 45 ( C) 36 ( D) 25 21 下列程序中函数 f的功能是:当 flag为 1时,进行由小到大排序;当 flag为 0时,进行由大到小排序。 void flint b, int n, int flag) int i,j, t; for(i=0; i n-1; i+) for(j=i+1 j n j+) if(flag?bibD: bi bj) t=bi; bi=bj; bD: t; ) main() int a10=5,
12、4, 3, 2, 1, 6, 7, 8, 9, 10, i; f(&a2, 5, 0); f(a, 5, 1); for(i=0; i 1 0; i+) printf(“ d, “, a); 程序运行后的输出结果是 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9 10, ( B) 3, 4, 5, 6, 7, 2, 1, 8, 9, 10, ( C) 5, 4, 3, 2, 1, 6, 7, 8, 9, 10, ( D) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 22 有以下程序 #include main() int c6=10, 20, 30, 40, 5
13、0, 60, *p, *s; p=c: S=&c5; printf(“ d n“, s-p); ) 程序运行后的输出结果是 ( A) 50 ( B) 6 ( C) 5 ( D) 60 23 如果定义 float a10, x;则以下叙述中正确的是 ( A)表达式 a+1是非法的 ( B)语句 a=&x;是非法的 ( C)三个表达式 a1、 *(a+1)、 *&a1表示的意思完全不同 ( D)表达式 *&a1是非法的,应该写成 *(&(a1) 24 若有以下程序 #include main() int i, j=0; char a=“How are you!“, b10; for(i=0; ai
14、; i+) if(ai=)bj+=ai+1; bj= 0; printf(“ s n“, b); ) 则程序的输出结果是 ( A) Howareyou ( B) Hay! ( C) Howareyou! ( D) ay 25 有以下程序 #include #define N 4 void fun(int aN, int b) int i; for(i=0; i N; i+)bi=aii-aiN-1-i; void main() int xNN=1, 2, 3, 4), 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16), yN, i; fun(x, y); fo
15、r(i=0; i N; i+)printf(“ d, “, yi); printf(“ n“); 程序运行后的输出结果是 ( A) -12, -3, 0, 0, ( B) -3, -1, 1, 3, ( C) 0, 1, 2, 3, ( D) -3, -3, -3, -3, 26 有下列程序: main() int x32=0, i; for(i=0; i 3; i+)scanf(“ d“, xi); printf(“ 3d 3d 3dkn“, x00, x01, x10); 若运行时输入: 2 4 6 CR,则输出结果为 ( A) 2 0 0 ( B) 2 4 0 ( C) 2 0 4 (
16、D) 2 4 6 27 有下列程序: 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 28 以下错误的定义语句是 ( A) int x43=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( B) int x3=0, 1, 1, 2, 3; ( C) int x3=1, 2, 3, 4; ( D) int x4=1, 2, 3, 1, 2, 3),
17、 1, 2, 3), 1, 2, 3); 29 有以下程序 #include stdio h #deftne N 3 void fun(int aN, int b) int ij; for(i=0; i N; i+) bi=ai0; for(j=1; j N; j+) if(bi aij)bi=aij; main() int xNN=1, 2, 3, 4, 5, 6, 7, 8, 9), yN, i; fun(x, y); for(i=0; i N; i+)printf(“ d, “, yi); printf(“ n“); ( A) 1, 3, 5, ( B) 2, 4, 8, ( C) 3,
18、 5, 7 ( D) 3, 6, 9, 30 以下选项中,能正确进行字符串赋值的是 ( A) char s5=A, B, C, D, E); ( B) char*S=“ABCDE“; ( C) char s45=“ABCDE“); ( D) char*s; gets(S); 31 以下叙述中正确的是 ( A)下面的语句用赋初值方式来定义字符串,其中, 0是必须的 char strl=s, t, r, 1, 0); ( B)有定义语句: char strl=”strl”;,数组 strl将包含 4个元素 ( C)字符串常量 ”strl”的类型是:字符串数据类型 ( D)字符数组的每个元素可存放一
19、个字符,并且最后一个元素必须是 0字符 32 以下叙述中正确的是 ( A)不能用字符串常量对字符数组名进行整体赋值操作 ( B)字符串常量 “Hello“会被隐含处理成一个无名字符型数组,它有 5个元素 ( C) char str7=“string!“;在语法上是合法的,运行也是安全的 ( D) char*str; str=“Hello“;与 char str; str=“Hello“;效果是一样的 33 设有定义语句: char*aa2=“abcd“,“ABCD“;则以下叙述正确的是 ( A) aa数组的两个元素只能存放含有 4个字符的一维数组的首地址 ( B) aa数组的值分别是字符串 “
20、abcd“和 “ABCD“ ( C) aa是指针变量,它指向含有两个元素的字符型数组 ( D) aa0存放了字符串 “abcd“的首地址 34 设有定义: char s81; int i=0;以下不能将一行 (不超过 80个字符 )带有空格的字符串正确读入的语句或语句组是 ( A) while(si+=getchar()!= n); si= 0; ( B) scanf(“ s“, s); ( C) gets(s); ( D) doscanf(“ c”, &si); )while(si+!= n); si= 0 35 有以下程序 #include void main() char s=“012x
21、y 08s34f4w2“; int i, n=0; for(i=0; si!=0; i+) if(si =0&si =9)n+; printf(“ d n“, n); 程序运行后的输出结果是 ( A) 0 ( B) 7 ( C) 3 ( D) 8 36 有以下程序 main() char ch=“uvwxyz“, *pc; pc=ch; print!(“ c n“, *(pc+5); 程序运行后的输出结果是 ( A) 0 ( B)元素 ch5的地址 ( C) z ( D)字符 y的地址 37 以下关于字符串的叙述中正确的是 ( A)两个字符串中的字符个数相同时才能进行字符串大小的比较 ( B)
22、可以用关系运算符对字符串的大小进行比较 ( C)空串比空格打头的字符串小 ( D) C语言中有字符串类型的常量和变量 38 有下列程序: fun(char p10) int n=O, i; for(i=0; i 7; i+) if(pi0=T)n+-; return n; main() char str10=“Mon“, “Tue“, “Wed“, “Thu“, “Fri“, “Sat“, “Sun“); printf(“ d n“ fun(str); 程序执行后的输出结果是 ( A) 1 ( B) 3 ( C) 0 ( D) 2 国家二级 C语言机试(函数和数组)模拟试卷 3答案与解析 一、
23、选择题 1 【正确答案】 D 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库 函数,各个函数之间没有主从关系,不能嵌套定义函数。 【知识模块】 函数和数组 2 【正确答案】 A 【试题解析】 字符串比较函数 strcmp的功能是对 s1和 s2所指字符串进行比较。如果 s1 s2,返回负数,如果 s1=s2,返回 0,如果 s1 s2,返回正数,所以对于本题来说,能够输出 “OK”的语句是选项 A)所指的语句。 【知识模块】 函数和数组 3 【正确答案】 B 【试题解析】 由程序可知函数 fun(int a,
24、int b)是一个递归函数。所以当主函数中调用 fun(4, 2)时,其执行过程如下: fun(4, 2)- fun(3, 1)- fun(2, 0),其返回值为 2。 【知识模块】 函数和数组 4 【正确答案】 A 【试题解析】 一个 C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至 C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地递增或递减,可以应用这个转化 过程使问题得到解决,同
25、时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项 C)和选项 D)不正确。函数名表名了函数的入口地址,如果函数的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项 B)错误。 【知识模块】 函数和数组 5 【正确答案】 C 【试题解析】 函数值通过 return语句返回, return语句的形式如下: return表达式或 return(表达式 );当程序执行到 return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内,可以根据需要,在多处出现retur
26、n语句,在函数体的不同部位退出函数。无论函数体中有多少个 return语句, return语句只可能执行一次,返回一个函数值。 return语句中也可以不含有表达式,这时必须定义函数为 void类型,它的作用只是使流程返回到调用函数,并没有确定的函数值。函数体内可以没有 return语句,这时也必须定义函数为void类型,程序的流程就一直执行到函数末尾的 “”,然后返回调用函数,也没有确定的函数值带回。 【知识模块】 函数和数组 6 【正确答案】 B 【试题解析】 在标准 C中,函数的定义形式为: 函数返回值的类型名 函数名 (类型名形式参数 1,类型名形式参数 2, ) 说明部分 语句部分
27、需要说明的是函数名和形式参数都是由用户命名的标识符,在同一程序中,函数名必须惟一,形式参数名只要在同一函数中惟一即可,与其他函数中的变量可以同名。 return语句的作用是返回函数的值,在函数中可以出现多个或者没有。 【知识模块】 函数和数组 7 【正确答案】 D 【试题解析】 程序考查了函数的调用。对于 m=f(f(n);首先计算最内层的函数调用 f(n),执行 f函数,得到返回值 2,然后计算 f(2),得到返回值为 4,最后计算f(4),得到计算结果为 8。 【知识模块】 函数和数组 8 【正确答案】 C 【试题解析】 由于函数 f的作用是对形参 x求平方再加 1,所以在主函数中,循环第
28、一次执行后变量 a的值等于 1,第二次执行后,变量 a的值等于 102,第三次执行后,变量 a的值等于 503。 【知识模块】 函数和数组 9 【正确答案】 B 【试题解析】 在函数 main()中,第一次执行 for循环时, b的值等于 1,此输出字母 B:第二次执行 for循环时, b的值等于 3,此时输出字母 D;第三次执行 for循环时, b的值等于 8,此时输出字母 I。 【知识模块】 函数和数组 10 【正确答案】 C 【试题解析】 函数 fun为递归定义的函数, 当调用fun(5)5+fun(4)5+4+fun(3)5+4+3+fun(2)5+4+3+2+fun(1) ,因此最后
29、的结果为 15。 【知识模块】 函数和数组 11 【正确答 案】 C 【试题解析】 这道题目考查了函数的递归调用,当执行调用语句 n=fun(3)时,返回 n=fun(2)+1,再执行 fun(2),返回 n: fun(1)+1+1,而 fun(1)等于 1,所以最后 n的值等于 3。而函数 fun总共被调用了 3次。即 fun(3), fun(2), fun(1)。 【知识模块】 函数和数组 12 【正确答案】 D 【试题解析】 在 C语言中函数可以递归调用,即直接或间接地自己调用自己。本题在函数 int fun(int n)的定义中又出现了对函数 fun的调用,所以函数 fun是递归函数。
30、因而在主函数中调用 x=fun(x)时,当输入 10赋给变量 x时,递归调用的过程为: fun(10)=10+fun(9)=10+9+fun(8)=10+9+8+fun(7)=10+9+8+7+fun(6) =10+9+8+7+6+fun(6)=10+9+8+7+6+5+fun(4)=10+9+8+7+6+5+4+fun(3) =10+9+8+7+6+5+4+3+fun(2)=10+9+8+7+6+5+4+3+2+fun(1) =10+9+8+7+6+5+4+3+2+1=55 【知识模块】 函数和数组 13 【正确答案】 B 【试题解析】 在函数内定义的变量是局部变量,而在函数之外定义的变量称
31、为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为 auto、 register以及 static。 【知识模块】 函数和数组 14 【正确答案】 D 【试题解析】 函数 fun1()的作用是输出局部变量 a和 b的值,在主函数中 执行fun1(5, 6)的结果是输出 5, 6:函数 fun2()的作用是给变量 a和 b分别赋值 3,4;执行 fun2()的作用是输出 3, 4。 【知识模块】 函数和数组 15 【正确答案】 A 【试题解析】 本题考查了静态变量以及局部变量的同
32、名问题。主函数中调用 fun函数两次,第一次调用 fun(4, 1),形参 a和 b接收以后, i值为 3, m的值为 8,调用结束返回 8存放到 p中并且输出 p的值为 8,除了静态变量 m和 i,变量 a,b撤销。第二次调用 fun(4, 1),接收实参值以后, i为 3+8+1,而 m为 12+4+1,即输出函数值 17。 【知识模块】 函数和数组 16 【正确答案】 D 【试题解析】 在 C语言中,动态变量 (auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量 (extern)一经定义,系统为其分配固定的内存单元;静态变
33、量 (static),编译系统为其分配固定的存储空间;寄存器变量 (register)不保存在内存上,而是直接存储在 CPU的寄存器中。 【知识模块】 函数和数组 17 【正确答案】 B 【试题解析】 这 道试题主要考查了局部静态变量的应用。在函数 fun()中定义了局部静态变量整型 x,其初值等于 1,在主函数中循环执行 5次,第一次变量 s的值等于 3,变量 x的值等于 2,第二次变量 s的值等于 6,变量 x的值等于 3,第三次变量 s的值等于 10,变量 x的值等于 4,第四次变量 s的值等于 15,变量 x的值等于 5,第五次变量 s的值等于 21,变量 x的值等于 6。 【知识模块
34、】 函数和数组 18 【正确答案】 A 【试题解析】 在子函数 fun()中定义局部静态变量 x,其初值等于 1,然后再把其值扩大 1倍后返回。在主函数中执行 for循环语句 2次,调用函数 fun()两次,所以变量 s的值等于 4。这里要强调的一点是当函数 fun()执行完毕后,局部静态变量 x的值不会丢失,仍然有效。 【知识模块】 函数和数组 19 【正确答案】 B 【试题解析】 数组说明的一般形式为:类型说明符数组名 常量表达式 ;其中类型说明符可以是任一种基本数据类型或构造数据类型,数组名是定义的数组标识符。常量表达式表示数据元素的个数,也就是数组的长度,必须是整型常量。 【知识模块】
35、 函数和数组 20 【正确答案】 D 【试题解析】 本题在主函数中定义了一维整型数组 t=1,2,3,4,5,6,7,8,9;然后在for循环语句中自变量 i从 0开始,每次自加 2,执行 s+=*(t+i)语句,因为 C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此 *(t+i)代表数组的第 i+1个元素。所以程序运行的结果是 1+3+5+7+9=25,即变量 s的值等于 25。 【知识模块】 函数和数组 21 【正确答案】 B 【试题解析】 主函数中进行了两次 f函数的调用。第一次传递给形参数组 b的地址为元素 a2】的地址, n接收数据位 5, 因此数组 b中元素为 3,2
36、,1,6,7,此时 flag的值为 0,进行由大到小排序,而数组 b和实参数组 a共用一段存储空间,第一次调用结束以后,数组 a的值为 5,4,7,6,3,2,1,8,9,10。第二次调用 f函数,形参数组接收实参数组 a的首地址,取 5个元素,由小到大排序,调用结束以后,数组 a的值为 3,4,5,6,7,2,1,8,9,10。 【知识模块】 函数和数组 22 【正确答案】 C 【试题解析】 主函数中指针变量 p指向数组 c, s保存了数组最后一个元素的地址,那么 s-p为两个地址之间的元素差 5。 【知识模块】 函数和数组 23 【正确答案】 B 【试题解析】 定义语句 float af1
37、0, x;以后,数组名 a表示了数组元素的首地址,是常量在程序中不能更改,因此选项 A)是的描述是正确的。而指向运算符和取址运算符,是互反运算符优先级相同, *&a1和 *(&a1)含义相同。 【知识模块】 函数和数组 24 【正确答案】 D 【试题解析】 主函数中利用 for循环访问字符串 a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组 b中 。在字符串 “How are you!“中,第一个空格后面字符为 a,第二个空格后面字符为y。 【知识模块】 函数和数组 25 【正确答案】 B 【试题解析】 fun函数的功能是求出二维数组 a中第 i行第
38、i个元素与第 N-1-i元素的差,赋给 bi。在主函数中,把实参二维数组 x和一维数组 y传递给形参 a和b,最后输出一维数组 y中元素的值。 【知识模块】 函数和数组 26 【正确答案】 C 【试题解析】 语句 x32=0表示将二维数组 x的所有元素赋初值 0,而循环语句 for=(i=0; i 3; i+)stallf(“ d“xi)表示对数组元素 x00、 x10、 x20赋值。所以当运行程序时,输入 246 CR时,数组元素 x00=2、 x10=4、x20=6,因此,输出数组元素 x00=2、 x01=0、 x10=4的值 204。 【知识模块】 函数和数组 27 【正确答案】 D
39、【试题解析】 由于在程序中定义了二维数组 t3=9, 8, 7, 6, 5, 4, 3, 2,1;由二维数组的存储方式按行 存储,即初始化完第一行的所有列再初始化下一行的元素。可知这是一个 3行 3列的二维数组,第一行的元素为 9, 8, 7,第二行的元素为 6, 5, 4),第三行的元素为 3, 2, 1。然后用 for循环输出 t20、t11、 t02,它们的值分别为 3、 5、 7。 【知识模块】 函数和数组 28 【正确答案】 D 【试题解析】 一维数组定义和初始化是允许省略行下标,不允许省略列下标。 【知识模块】 函数和数组 29 【正确答案】 D 【试题解析】 函数 fun()的作
40、用是求 出二维数组 aN中每一行中的最大元素,所以在 main()函数中执行完 fun(x,y)后,数组 y中的元素为二维数组 xNN每一行的最大元素。 【知识模块】 函数和数组 30 【正确答案】 B 【试题解析】 对于选项 A)字符串中无法存放字符串结束标志 0,选项 c)每行仅仅存放 5个字符,同样的不能存放字符串结束标志,选项 D)中指针变量 s没有实际的内存空间,无法存放输入的字符串。因此正确的选项为 B),相当于char*s: s=“ABCDE“,把字符串常量的首地址存放到指针变量中存储。 【知识模块】 函数和数组 31 【正确答案】 B 【试题解析】 选项 B)中除了字符串中实际
41、字符之外,还要存储字符串结束标志,应为 5个元素。在 C语言中没有字符串数据类型,因此选项 C)不正确,选项D)字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。 【知识模块】 函数和数组 32 【正确答案】 A 【试题解析】 字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,选项 B)错误,而选项 C)中,没有空间存放字符串结束标志,因此运行是不安全的。选项 D)中第一个 str为指针,可以赋值,而后面的为数组,在程序中赋值出错。 【知识模块】 函数和数组 33 【正确答案】 D 【试题解析】
42、题目中 char*aa2,定义了指针数组 aa,有两个元素, aa0存放“abcd“地址,而 aa1存放 “ABCD“地址。 【知识模块】 函数和数组 34 【正确答案】 B 【试题解析】 本题考查标准输入输出函数和循环语句。 gets(s)函数的作用是将输入的字符读入字符串 s,直到 遇到回车。而 scanf()函数接收字符串时的结束标志为回车或者空格。 【知识模块】 函数和数组 35 【正确答案】 C 【试题解析】 在主函数中的 for循环语句中,当 si的值不等于 09之间的数字时,结束循环语句的执行。由字符数组 s的初值可以得到 for循环语句执行了三次,所以变量 n的值等于 3。 【
43、知识模块】 函数和数组 36 【正确答案】 C 【试题解析】 在程序中语句 pc=ch;的功能是字符指针 pc指向字符串数组 ch的地址,而 *(ps+5)表示字符串数组 ch中第 6个字符 z。 【知识模块】 函数和数组 37 【正确答案】 C 【试题解析】 C语言本身并没有设置一种类型来定义字符串变量,却允许使用“字符串常量 ”。字符串常量是由双引号括起来的一串字符。任意两个字符串的大小比较要调用字符串比较函数 strcmp(s1, s2)来进行,其比较的方法是依次对 s1和 s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小 (比较字符大小的依据是其 ASCII码值 )。 【知识模块】 函数和数组 38 【正确答案】 D 【试题解析】 本题在主函数中定义了一个字符二维数组 str10,并用“Mon”, “Tue”, “Wed” , “Thu”, “Fri”, “Sat”, “Sun”初始化。函数fun(charp10)的功能是统计出 p10中 pi0等于字符 T的个数。所以 fun(str)的功能是统计一周七天中英文名称首字母为 “T”的个数。因为字符串 “Tue”和“Thu”的首字符是 “T”, 所以 n=2。 【知识模块】 函数和数组