1、国家二级 C语言(函数和数组)机试模拟试卷 16及答案与解析 一、选择题 1 有以下程序 #include stdio.h void fun(int a, int b) int t; t=a; a=b; b=t; main() int c10=1,2,3,4,5,6,7,8,9,0), i; for (i=0; i 10; i+=2) fun(ci, ci+l); for (i=0; i 10; i+) printf(“%d,“, ci); printf(“n“); 程序的运行结果是 ( A) 2,1,4,3,6,5,8,7,0,9, ( B) 0,9,8,7,6,5,4,3,2,1, ( C
2、) 1,2,3,4,5,6,7,8,9,0, ( D) 0,1,2,3,4,5,6,7,8,9, 2 有下列程序: main( ) int i,s=0,t =l,2,3,4,5,6,7,8,9; for(i=0;i 9;i+ =2) s+ =*(t+i); printf(“%dn“,s); 程序执行后的输出结果是 ( A) 20 ( B) 45 ( C) 36 ( D) 25 3 下列选项中,能正确定义数组的语句是 ( A) int num; ( B) int N=2008; int numN; ( C) int num02008; ( D) #define N 2008 int numN;
3、4 若要求定义具有 10个 int型元素的一维数组 a,则以下定义语句中错误的是 ( A) #define n 5 int a 2*n; ( B) int a5+5; ( C) #define N 10 int aN; ( D) int n=10,an; 5 下列程序中函数 f的功能是:当 flag为 1时,进行由小到大排序;当 flag为 0时,进行由大到小排序。 void f(int 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? bi bj:bi bj) t=bi;bi=bj;b
4、j=t; main( ) int a10=5,4,3,2,1,6,7,8,9,10,i; f( f(a,5,1); for(i=0;i 10;i+ +) printf(“%d,“,ai); 程序运行后的输出结果是 ( 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, 6 有以下程序 #include stdio.h main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i 12;
5、i+)csi+; for(i=1;i 5;i+)printf(“%d“,ci); printf(“n“); ( A) 4 3 3 2 ( B) 2 3 4 4 ( C) 1 2 3 4 ( D) 1 1 2 3 7 有下列程序: #include stdio.h void fun(int *a,int n)/*fun函数的功能是将 a所指数组元素从大到小排序 */ int t,i,j; for(i=0;i n-1;j+ +) for(j=i+1;j n;j+ +) if(ai aj) t=ai;ai=aj;aj=t; main( ) int c10=1,2,3,4,5,6,7,8,9,0,i;
6、 fun(c+4,6); for(i=0;i 10;i+ +) printf(“%d,“,ci); printf(“n“); 程序的运行结果是 ( A) 1,2,3,4,9,8,7,6,5,0, ( B) 0,9,8,7,6,5,1,2,3,4, ( C) 0,9,8,7,6,5,4,3,2,1, ( D) 1,2,3,4,5,6,7,8,9,0, 8 有以下程序 #include stdio.h main() int c6=10,20,30,40,50,60, *p,*s; p = c; s = printf(“%dn“, s-p ); 程序运行后的输出结果是 ( A) 50 ( B) 6
7、( C) 5 ( D) 60 9 以下叙述中正确的是 ( A)一条语句只能定义一个数组 ( B)数组说明符的一对方括号中只能使用整型常量,而 不能使用表达式 ( C)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元 ( D)在引用数组元素时,下标表达式可以使用浮点数 10 以下叙述中正确的是 ( A)语句 int a = 0;是不合法的,遗漏了数组的大小 ( B)语句 char a2 = “A“, “B“; 是合法的,定义了一个包含两个字符的数组 ( C)语句 int a8 = 0; 是合法的 ( D)语句 char a3; a = “AB“; 是合法的,因为数组有三个字
8、符空间的容量,可以保存两 个字符 11 如果定义 float a10, x; 则以下叙述中正确的是 ( A)表达式 a+1 是非法的 ( B)语句 a = 是非法的 ( C)三个表达式 a1、 *(a+1)、 * for(i=0;i =3;i+)ai=*p;p+; printf(“%dn“,a2); 程序运行后的输出结果是 ( A) 20 ( B) 30 ( C) 10 ( D) 40 13 若有以下程序 main() int i,j=0; char a=“How are you!“; for (i=0; ai; i+) if (ai != ) aj+=ai; aj=0; printf(“%s
9、n“,a); 则程序的输出结果是 ( A) Howareyou ( B) Hay! ( C) Howareyou! ( D) How are you! 14 若有以下程序 #include 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(“%sn“,b); 则程序的输出结果是 ( A) Howareyou ( B) Hay! ( C) Howareyou! ( D) ay 15 若有以下程序 #include char *a=
10、“you“, b =“welcome#you#to#China!“; main() int i,j=0; char *p; for ( i=0; bi!=0; i+ ) if (*a = bi) p= for (j=0; aj!=0; j+) if (aj != *p) break; p+; if (aj=0) break; printf(“%sn“, p); 则程序的输出结果是 ( A) #you#to#China! ( B) me#you#to#China! ( C) #China! ( D) #to#China! 16 以下数组定义中错误的是 ( A) int x3=0; ( B) in
11、t x23=1,2,3,4,5,6; ( C) int x3=1,2,3,4,5,6; ( D) int x23=1,2,3,4,5,6; 17 有以下程序 #include stdio.h #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); for(i=0;i N;i+) printf(“%d,“,yi); printf(“n“); 程序运行后的输出
12、结果是 ( A) -12,-3,0,0, ( B) -3,-1,1,3, ( C) 0,1,2,3, ( D) -3,-3,-3,-3, 18 有以下程序 #include main() int b33=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0; i =i;j+) t+=bibji; printf(“%dn“,t); 程序运行后的输出结果是 ( A) 3 ( B) 1 ( C) 9 ( D) 4 19 以下定义数组的语句中错误的是 ( A) int num3= 1,2,3,4,5,6 ; ( B) int num= 1,2,3,4,5,6 ; ( C) int nu
13、m4=1,2,3,4,5,6; ( D) int num24= 1,2,3,4,5,6 ; 20 有下列程序: main( ) int x32=0,i; for(i=0;i 3;i+ +) scanf(“%d“,xi); printf(“%3d%3d%3dn“,x00,x01,x10); 若运行时输入: 2 4 6 CR,则输出 结果为 ( A) 2 0 0 ( B) 2 4 0 ( C) 2 0 4 ( D) 2 4 6 21 有以下程序 #include stdio.h int fun(int (*s)4,int n, int k) int m, i; m=s0k; for(i=l; i
14、n; i+) if(sik m) m=sik; return m; main() int a44=1,2,3,4),11,12,13,14,2l,22,23,24,31,32,33,34; printf(“%dn“, fun(a,4,0); 程序的运行结果是 ( A) 31 ( B) 34 ( C) 4 ( D) 32 22 有下列程序: main( ) int a44=l,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,j,k,t; for(i=0;i 4;i+ +) for(j=0;j 3;j+ +) for(k=j+1;k 4;k+ +) if(aji aki)t=aji
15、;aji=aki;aki=t; /*按列排序 */ for(i=0;i 4;i+ +)printf(“%d,“,aii); 程序运行后的输出结果是 ( A) 8, 7, 3, 1, ( B) 1, 6, 5, 7, ( C) 4, 7, 5, 2, ( D) 1, 6, 2, 1, 23 有下列程序: main( ) int i,t 3=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 24 有下列程序: main( )
16、 int a44=1,4,3,2,8,6,5,7,3,7,2,5,4,8,6,1,i,k,t; for(i=0;i 3;i+ +) for(k=i+l;k 4;k+ +)if(aii akk)t=aii;aii=akk;akk=t; for(i=0;i 4;i+ +)printf(“%d,“,a0i); 程序运行后的输出结果是 ( A) 6,2,1,1, ( B) 1,1,2,6, ( C) 2,3,4,6, ( D) 6,4,3,2, 25 若有定义: int w35; 则以下不能正确表示该数组元素的表达式是 ( A) *(*w+3) ( B) *(*(w+1) ( C) *(w+1)4 (
17、 D) *( ( B) int x3=0,1,1,2,3; ( C) int x3=1,2,3,4; ( D) int x4= 1,2,3,1,2,3,1,2,3,1,2,3; 27 以下叙述中正确的是 ( A)语句 int a43 = 1,2,4,5; 是错误的初始化形式 ( B)语句 int a3 = 1,2,4,5; 是错误的初始化形式 ( C)在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵 ( D)语句 int a43 = 1,2, 4,5; 是错误的初始化形式 28 设有定义: int x23; 则以下关于二维数组 x的叙述错误的是 ( A)数组 x可以看作是由 x0和 x
18、1两个元素组成的一维数组 ( B)可以用 x0=0;的形式为数组所有元素赋初值 0 ( C)元素 x0可看作是由 3个整型元素组成的一维数组 ( D) x0和 x1是数组名,分别代表一个地址常量 国家二级 C语言(函数和数组)机试模拟试卷 16答案与解析 一、选择题 1 【正确答案】 C 【试题解析】 C语 言规定,实参变量对形参变量的数据传递是 “值传递 ”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。由此可知,在本题中,函数 fun(int a,int b)的功能
19、是实现形参整形变量 a和 b值的互换。当在主函数中调用 fun(ci,ci+1)时,把实参变量 ci和 ci+1的值赋给形参变量 a和 b,执行完函数 fun(ci,ci+1)时,形参变量 a和 b的值发生了互换,实参变量 ci和 ci+1的值并没有发生互换,所以输出的值为 1, 2, 3, 4, 5, 6, 7, 8, 9, 0。 【知识模块】 函数和数组 2 【正确答案】 D 【试题解析】 本题在主函数中定义了一维整型数组 t =1,2,3,4,5,6,7,8,9;然后在 for循环语句中自变量 i从 0开始,每次自加 2,执行 s+=*(t+i)语句,因为 C语言规定数组名代表数组的首地
20、址,也就是第一个元素的地址。因此 *(t+i)代表数组的第 i+1个元素。所以程序运行的结果是 1+3+5+7+9=25,即变量 s的值等于 25。 【知识模块】 函数和数组 3 【正确答案】 D 【试题解析】 在定义一维数组时,数组的下标应该是一个确定的整数值。要注意的是在定义二维数组时,其第一维下标可以省略,但第二维下标不能省略。 【知识模块】 函数和数组 4 【正确答案】 D 【试题解析】 在 C语言中,定义一维数组的语句形式为:类型名 数组名 整型常量表达式 。在选项 D中, n是一个整型的变量。 【知识模块】 函数和数组 5 【正确答案】 B 【试题解析】 主函数中进行了两次 f函数
21、的调用。第一次传递给形 参数组 b的地址为元素 a2的地址, n接收数据位 5,因此数组 b中元素为 3,2,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。 【知识模块】 函数和数组 6 【正确答案】 A 【试题解析】 本题考查 for语句的循环控制,首先定义了两个数 组并赋予了初始值,第一个 for循环语句循环
22、12次遍历 s数组的各个元素,将 s中的原素值作为c数组中的下标,使相应的值自加。例如当 i=0, cs0+为 c1+,其值变为1,当执行 i=1,2,11 后, c1、 c2、 c3、 c4分别为 4、 3、 3、 2,故选项 A为正确的运行结果。 【知识模块】 函数和数组 7 【正确答案】 A 【试题解析】 fun()函数的功能是对数组 a 的元素从大到小进行排序。所以在主函数执行 fun(c+4,6)语句时,将从数组 c的第 5个元素开始 的后 6个元素进行从大到小排序。排序之后,数组 c的内容变为 1,2,3,4,9,8,7,6,5,0。 【知识模块】 函数和数组 8 【正确答案】 C
23、 【试题解析】 主函数中指针变量 p指向数组 c, s保存了数组最后一个元素的地址,那么 s-p为两个地址之间的元素差 5。 【知识模块】 函数和数组 9 【正确答案】 C 【试题解析】 数组的定义格式: 类型说明符 数组名 整型常量表达式 ,; 可以同时定义多个类型相同的数组,之间以逗号分隔开,数组的类型表明了数组中元素的数据类型,数组 中所有元素的类型相同,数组经过定义以后就可使用,编译程序将对其分配一片连续的存储空间进行连续存储。 C语言中只能单个引用数组元素而不能一次引用整个数组。引用格式为:数组名 下标 ,引用元素时,需要注意下标只能为整型常量或整型表达式。 【知识模块】 函数和数组
24、 10 【正确答案】 C 【试题解析】 当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。 数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形 式为: 类型说明符 数组名 常量表达式 =值,值 , 值 ; 需要注意的是当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初值必定赋给下标为 0的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。 【知识模块】 函数和数组 11 【正
25、确答案】 B 【试题解析】 定义语句 float a10, x;以后,数组名 a表示了数组元素的首地址,是常量在程序中不能更改,因此选项 A是的描述是正确的。而指向运算符和取址运算符,是互反运算符优先级相同, *i 3;i+) scanf(“%d“,xi)表示对数组元素 x00、 x10、 x20赋值。所以当运行程序时,输入 246 CR时 ,数组元素 x00=2、 x10=4、x20=6,因此,输出数组 元素 x00=2、 x01=0、 x10=4的值 204。 【知识模块】 函数和数组 21 【正确答案】 A 【试题解析】 函数 fun(int (*s)4,int n,int k)的功能是
26、返回二维数组第 k列的最大元素。在主函数中由于二维数组 a44已经初始化,所以 fun(a,4,0)的值是二维数组 a 第 1列中的最大元素 31。 【知识模块】 函数和数组 22 【正确答案】 B 【试题解析】 最外层的 for语句的自变量 i是列下标,而内部的两个 for语句的自变量 j和 k是行下标。所以由程序段可知,这是利用三重循环对二维数组 a44的元素按列从小到大进行排序,所以最后排完序的结果为a44=1,4,2,1,3,6,3,2,4,7,5,5,8,8,6,7,最后一个 for语句的功能是输出数组a44主对角线上的元素,因而输出为 1,6,5,7。 【知识模块】 函数和数组 2
27、3 【正确答案】 D 【试题解析】 由于在程序中定义了二维数组 t 3 =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。 【知识模块】 函数和数组 24 【正确答案】 D 【试题解析】 利用二重 for循环对二维数组 a44的主对角线上的元素 1,6,2,1实现按列从大到小排序,所以数组 a44的值变为6,4,3,2,8,2,5
28、,7,3,7,1,5,4,8,6,1,最后输出数组 a44第一行上的元素,所以输出结果为 6,4,3,2。 【知识模块】 函数和数组 25 【正确答案】 C 【试题解析】 在 C语言中,二维数组的名字表示的是二维数组的地址,对于二维数组 int w35,可以认为 w为一个一维数组,含有 3个元素,而每个元素为一个含有 5个元素的一维数组。而 (w+1)为一个含有两个元素的一维数组,首先和(w+1)4结合非法, 4超出了二维数组的边界,取值也就是非法的了。 【知识模块】 函数和数组 26 【正确答案】 D 【试题解析】 一维数组定义和初始化是允许省略行下标,不允许省略列下标。 【知识模块】 函数
29、和数组 27 【正确答案】 C 【试题解析】 在理解二维数组的时候,可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组,也就是具有行列的结构,二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。 【知识模块】 函数和数组 28 【正确答案】 B 【试题解析】 二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第 0行的元素,再存放第 1行的元素 称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如, int a43=1,2,4,5;在编译时,系统将按 a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值 0。以上将给 a数组第一行的元素和第二行的第一个元素依次赋予 1、2、 4、 5,其他元素的初值都为 0。 【知识模块】 函数和数组
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1