1、全国自考(计算机软件基础)-试卷 9及答案解析(总分:62.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.不属于 C语言转义字符的是 【 】(分数:2.00)A.B.C.dddD.xhh2.若变量 a和 i已正确定义,且 i已正确赋值,则下列是合法的语句的是 【 】(分数:2.00)A.a=1B.+i;C.a=a+=5;D.a=int(i);3.执行下列程序段后的输出结果是 【 】 int a=3,b=2; printf(“d,d“,b=a0;k-) break;-k;后,变量 k的值是 【 】(分数:2.00)A.1B.2C.3D.45.下列叙述正确的是 【
2、 】(分数:2.00)A.while语句的循环体至少执行一次B.do-while语句的循环体至少执行一次C.do-while语句的循环体不能是复合语句D.continue语句能够从循环体内转到循环体外6.若有定义语句 int m=5,4,3,2,1,i=4;,则下面对数组 m的数组元素的引用中错误的是 【 】(分数:2.00)A.m-iB.m2*2C.mm0/D.mmi/7.已知 C语言函数 fun()的定义形式为 void fun(char ch,float x) 则正确调用函数 fun()的语句是 【 】(分数:2.00)A.fun(“a“,30);B.fun(abcd,195);C.t=
3、fun(z,36);D.fun(65,32);8.设有定义语句 int x=3,*p=&x;,则值不为 3的表达式是 【 】(分数:2.00)A.XB.*pC.p+0D.*&x9.设有以下定义语句,则下面的叙述中不正确的是 【 】 struct ex int x;float y;char z; example;(分数:2.00)A.struct是结构类型的关键字B.example是结构类型名C.x、y、z 都是结构类型成员名D.struct ex是结构类型10.以下程序段的时间复杂度是 【 】 i=1;k=0;n=100; do k=k+10*i: i+: while(i=n);(分数:2.0
4、0)A.O(1)B.O(n)C.O(i)D.0(i*n)11.在一个长度为 n的顺序存储的线性表中,向第 i个元素(1in+1)位置插入一个新元素时,需要从后向前依次后移【 】个元素。(分数:2.00)A.niB.ni+1C.ni1D.i12.往顺序栈中推入一个元素时,栈顶指针是 【 】(分数:2.00)A.加 1B.减 1C.不变D.清 013.某二叉树的先序序列是 abdgcefh,中序序列是 dgbaechf,则其后序序列是 【 】(分数:2.00)A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca14.从未排序序列中挑选元素,并将其依次放入已排序序列(初始
5、时为空)的一端的排序方法是 【 】(分数:2.00)A.希尔排序B.直接选择排序C.直接插入排序D.冒泡排序15.下面不属于软件设计原则的是 【 】(分数:2.00)A.抽象B.模块化C.自底向上D.信息隐蔽二、填空题(总题数:10,分数:20.00)16.从用户使用的角度来看,函数分为库函数和 1 函数。(分数:2.00)填空项 1:_17.若有以下函数调用语句: func(a+b,(x,y),fun(n+k,d,(a,b); 在此函数调用语句中实参的个数是 1。(分数:2.00)填空项 1:_18.函数的返回值是通过函数体中的 1 语句获得。(分数:2.00)填空项 1:_19.如果被调函
6、数定义为 1 类型,则被调函数不带回任何值。(分数:2.00)填空项 1:_20.只有先定义一个 1 型变量,才能将另外一个变量的地址存放到该变量中。(分数:2.00)填空项 1:_21.若指针变量 P指向整型变量 i,则 i变量又可用 1 表示。(分数:2.00)填空项 1:_22.已知:int a=1,3,5,7,9),*ip=a;,表达式*(ip+2)的值是 1。(分数:2.00)填空项 1:_23.下面程序的输出结果是 1。 #include main() char a=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(“dn“,*-p); (分数:2.00)填空项
7、 1:_24.有如下定义语句: struct stu int x; float y; char z; a3,*p=a; 则数组 a共占 1 个字节。(分数:2.00)填空项 1:_25.有如下定义语句: struct int x; int y; s2=1,2,3,4,*p=s; 则表达式(+p)一x的结果是 1。(分数:2.00)填空项 1:_三、程序分析题(总题数:4,分数:8.00)26.阅读下列程序,写出程序的运行结果。 #include sub(int x,int y,int*z) *z=yx; main() int a,b,c; sub(10,5,&a); sub(7,a,&b);
8、sub(a,b,&c); printf(“d,d,dn“,a,b,c); (分数:2.00)_27.写出下列程序的运行结果。 #include struct st int x; int*y; *p; int dt4=10,20,30,40; struct st aa4=50,&dt0,60,dt1,70,&dt2,80,dt3; main() (p=aa; printf(“dn“,+p 一x); printf(“dn“,(+p)一x); (分数:2.00)_28.以下程序的功能是将两个 3*4阶矩阵相加,并显示出结果。请填空完成程序。 #include main() (int a34=3,一
9、2,1,2,0,1,3,一 2,3,1,0,4); int b34=一 2,3,0,一 1,1,0,一 2,3,一 2,0,1,一 3; int i,j,c34; for(i=0;i_29.以下程序的功能是将字符数组 a中下标值为偶数的元素从小到大排列,其他元素不变。请填空完成程序。 #include #include main() ehar a =“clanguage“,t; int 1,j,k; k=str1en(a); for(i=0;i0;k-) break;-k;后,变量 k的值是 【 】(分数:2.00)A.1B.2C.3D.4 解析:解析:第 1次循环时,循环判断条件“40”为真
10、,执行循环体。由于循环体中第 1条语句就是“break;”,强型退出循环。此时的变量 k的值为 4。5.下列叙述正确的是 【 】(分数:2.00)A.while语句的循环体至少执行一次B.do-while语句的循环体至少执行一次 C.do-while语句的循环体不能是复合语句D.continue语句能够从循环体内转到循环体外解析:解析:while 语句的循环体可以一次也不执行;do-while 语句的循环体可以是复合语句;continue只结束本次循环重新进行下次循环判结束整个循环。6.若有定义语句 int m=5,4,3,2,1,i=4;,则下面对数组 m的数组元素的引用中错误的是 【 】(
11、分数:2.00)A.m-iB.m2*2C.mm0/ D.mmi/解析:解析:根据定义语句可知数组 m中有 5个元素,即 m0m4,在选项 C中,m0的值为5,mm0/即 m5,因为 m数组中的下标最大为 4,不存在 m5这个个元素,这种情况称为越界,所以选项 C是错误的。7.已知 C语言函数 fun()的定义形式为 void fun(char ch,float x) 则正确调用函数 fun()的语句是 【 】(分数:2.00)A.fun(“a“,30);B.fun(abcd,195);C.t=fun(z,36);D.fun(65,32); 解析:解析:fun()函数的第 1个形参为字符型变量,
12、字符型数据可以和整型数据通用,整型数据对应字符型数据的 ASCII码值,所以对应实参可以是字符型数据或者字符的 ASCII码值;函数的第 2个形参为单精度型变量,对应实参可以为单精度或者整型数据;函数定义没有返回值,因此选项 C错误;选项 A中的”a”是字符串常量,不能作为第一个实参,所以选项 A错误;选项 B中的abed格式不正确。8.设有定义语句 int x=3,*p=&x;,则值不为 3的表达式是 【 】(分数:2.00)A.XB.*pC.p+0 D.*&x解析:解析:选项 C中的 p+0就是 p,p 是 x的地址,地址型表达式的值不是变量的值。9.设有以下定义语句,则下面的叙述中不正确
13、的是 【 】 struct ex int x;float y;char z; example;(分数:2.00)A.struct是结构类型的关键字B.example是结构类型名 C.x、y、z 都是结构类型成员名D.struct ex是结构类型解析:10.以下程序段的时间复杂度是 【 】 i=1;k=0;n=100; do k=k+10*i: i+: while(i=n);(分数:2.00)A.O(1) B.O(n)C.O(i)D.0(i*n)解析:解析:do-while 循环执行一次后,i=2,n=100,循环判断条件就不满足了,所以只执行循环体一次,故时间复杂度为 O(1)。11.在一个长
14、度为 n的顺序存储的线性表中,向第 i个元素(1in+1)位置插入一个新元素时,需要从后向前依次后移【 】个元素。(分数:2.00)A.niB.ni+1 C.ni1D.i解析:12.往顺序栈中推入一个元素时,栈顶指针是 【 】(分数:2.00)A.加 1 B.减 1C.不变D.清 0解析:解析:在顺序栈中,栈顶指针是正向增长的,即进栈时将栈顶指针加 1,退栈时将栈顶指针减 1。13.某二叉树的先序序列是 abdgcefh,中序序列是 dgbaechf,则其后序序列是 【 】(分数:2.00)A.bdgcefhaB.gdbecfhaC.bdgaechfD.gdbehfca 解析:14.从未排序序
15、列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的排序方法是 【 】(分数:2.00)A.希尔排序B.直接选择排序 C.直接插入排序D.冒泡排序解析:15.下面不属于软件设计原则的是 【 】(分数:2.00)A.抽象B.模块化C.自底向上 D.信息隐蔽解析:二、填空题(总题数:10,分数:20.00)16.从用户使用的角度来看,函数分为库函数和 1 函数。(分数:2.00)填空项 1:_ (正确答案:正确答案:用户自定义)解析:17.若有以下函数调用语句: func(a+b,(x,y),fun(n+k,d,(a,b); 在此函数调用语句中实参的个数是 1。(分数:2.00)填空项 1
16、:_ (正确答案:正确答案:3)解析:18.函数的返回值是通过函数体中的 1 语句获得。(分数:2.00)填空项 1:_ (正确答案:正确答案:return)解析:19.如果被调函数定义为 1 类型,则被调函数不带回任何值。(分数:2.00)填空项 1:_ (正确答案:正确答案:void 或空)解析:20.只有先定义一个 1 型变量,才能将另外一个变量的地址存放到该变量中。(分数:2.00)填空项 1:_ (正确答案:正确答案:指针)解析:21.若指针变量 P指向整型变量 i,则 i变量又可用 1 表示。(分数:2.00)填空项 1:_ (正确答案:正确答案:*p)解析:22.已知:int a
17、=1,3,5,7,9),*ip=a;,表达式*(ip+2)的值是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:5)解析:23.下面程序的输出结果是 1。 #include main() char a=9,8,7,6,5,4,3,2,1,0,*p=a+5; printf(“dn“,*-p); (分数:2.00)填空项 1:_ (正确答案:正确答案:5)解析:24.有如下定义语句: struct stu int x; float y; char z; a3,*p=a; 则数组 a共占 1 个字节。(分数:2.00)填空项 1:_ (正确答案:正确答案:21)解析:25.有如下定义语
18、句: struct int x; int y; s2=1,2,3,4,*p=s; 则表达式(+p)一x的结果是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:3)解析:三、程序分析题(总题数:4,分数:8.00)26.阅读下列程序,写出程序的运行结果。 #include sub(int x,int y,int*z) *z=yx; main() int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(“d,d,dn“,a,b,c); (分数:2.00)_正确答案:(正确答案:一 5,一 12,一 7)解析:27.写出下列程
19、序的运行结果。 #include struct st int x; int*y; *p; int dt4=10,20,30,40; struct st aa4=50,&dt0,60,dt1,70,&dt2,80,dt3; main() (p=aa; printf(“dn“,+p 一x); printf(“dn“,(+p)一x); (分数:2.00)_正确答案:(正确答案:51 60)解析:28.以下程序的功能是将两个 3*4阶矩阵相加,并显示出结果。请填空完成程序。 #include main() (int a34=3,一 2,1,2,0,1,3,一 2,3,1,0,4); int b34=一
20、 2,3,0,一 1,1,0,一 2,3,一 2,0,1,一 3; int i,j,c34; for(i=0;i_正确答案:(正确答案:cij=aij+bij printf(“n“)解析:29.以下程序的功能是将字符数组 a中下标值为偶数的元素从小到大排列,其他元素不变。请填空完成程序。 #include #include main() ehar a =“clanguage“,t; int 1,j,k; k=str1en(a); for(i=0;iaj)解析:四、程序设计题(总题数:2,分数:4.00)30.编写一个程序,其功能是将输入的 4个整数按由小到大的顺序输出。(分数:2.00)_正确
21、答案:(正确答案:#include main() int t,a,b,c,d; printf(“请输入 4个整数:“); scanf(“d,d,d,dn“,8La,b,&c,&d); printf(“a=d,b=d,c=d,d=dn“,a,b,c,d); if(ab)t=a;a=b;b=t; if(ac)t=a;a=c;c=t; if(ad)t=a;a=d;d=t; if(bc)t=b;b=c;c=t; if(bd)t=bb=d;d=t; if(cd)t=c;c=d;d=t; printf(排序结果如下;n“); printf(“d,oAd,d,dn“,a,b,c,d); )解析:31.假设二叉树采用二叉链存储结构存储,试设计一个算法,计算一棵给定二叉树的所有叶子节点个数。(分数:2.00)_正确答案:(正确答案:int LeafNodes(BTNode*b) int num1,num2; if(b=NULL) return 0; else if(b一lchild=NULL&b 一 rchild=NULL) return 1; else numl=LeafNodes(b 一lchild); num2=LeafNodes(b一rchild); return(num1+num2); )解析: