1、全国自考(计算机软件基础)-试卷 1 及答案解析(总分:70.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.一个完整的 C 程序由【 】构成。(分数:2.00)A.一个主程序和一个子程序B.一个主函数和若干个子函数C.一个主函数和一个其他函数D.一个主函数和若干个子程序2.下列叙述中错误的是 【 】(分数:2.00)A.一个 C 程序至少包含一个函数B.一个 C 程序可以包含一个主函数和若干个其他函数C.主函数和其他函数之间可以相互调用D.C 程序的基本单位是函数3.有以下程序: #include int fun(int a,int b) if(b=0) re
2、turn a; else return(fun(-a,-b); main() printf(“dn“,fun(4,2); 程序的运行结果是 【 】(分数:2.00)A.1B.2C.3D.44.局部变量的作用域是 【 】(分数:2.00)A.该变量所在的程序B.该变量所在的文件C.主函数D.该变量所在的函数5.下列程序的输出结果是 【 】 #include fun(int x) int p; if(x=0x=1)return(3); p=xfun(x 一 2); return p; main() printf(“dn“,fun(9); (分数:2.00)A.7B.2C.0D.36.下列关于 C
3、语言程序的叙述,正确的是 【 】(分数:2.00)A.main()所在行的末尾必须有“;”B.主函数的函数体不一定用花括号()括起来C.一个完整的 C 程序可以没有任何函数D.C 语言程序的简单语句必须用分号(;)作为语句的结束符7.以下程序的输出结果是 【 】 #include int f() (static int i=0; int s=1: s+=i; i+; return(s); main() (int i,a=0; for(i=0;iA.1B.0C.15D.58.已知 int a100,*d=a;,下列语句错误的是 【 】(分数:2.00)A.a=d;B.*d=a10;C.d=a+1
4、;D.d=a2;9.已知 char str130,*str2=“student_no“;,执行语句 strcpy(str1,str2);后,str1en(str1)的值是 【 】(分数:2.00)A.9B.10C.29D.3010.已知 int a=5,b=3,*p=b,*q=a;,下列赋值语句中与 b=a;等价的是 【 】(分数:2.00)A.*p=*q;B.p=q;C.*p=&q;D.*p=*b;11.设有语句 int x=1,2,3,4,5,6,*p=x;,则值为 3 的表达式是 【 】(分数:2.00)A.p+=2,*+pB.p+=2,*p+C.p+=2,+*pD.p+=3,*p12.
5、指针变量是指 【 】(分数:2.00)A.整型变量B.下标变量C.变量的地址D.存放变量地址的变量13.设有数据定义语句 struct xyzint x;float y;char z;xyz1;,则下面的说法中错误的是 【 】(分数:2.00)A.struct xyz 可以看成一种数据类型符B.xyz 是用户定义的结构类型名称C.xyz1 可以用来定义该结构类型变量D.X 是结构类型的成员名14.下列说法错误的是 【 】(分数:2.00)A.在定义结构变量时不能给其赋初值B.可以取结构变量的地址C.可以取结构变量成员的地址D.结构类型的成员可以定义成该结构类型的指针类型15.有以下程序: #i
6、nclude struct st int x,y; )data2=1,10,2,20; main() struct st*p=data; printf(“d,“,p 一y); printf(“dn“,(+p)一x); 程序的运行结果是 【 】(分数:2.00)A.10,1B.20,1C.10,2D.20,2二、填空题(总题数:10,分数:20.00)16.若有语句:int a=5,y=6;y=a+;,则 y 的值是 1。(分数:2.00)填空项 1:_17.表示整数 x 的绝对值大于 5 时值为“真的 C 语言表达式是 1。(分数:2.00)填空项 1:_18.以下程序运行后的输出结果是 1。
7、 #includestdioh main() int p=30; printf(“dn“,(p30? p10:p3); (分数:2.00)填空项 1:_19.若有定义:int a=10,b=9,c=8;,接着顺序执行下列语句,执行后变量 b 的值是 1。 c=(a 一=(b一 5); c=(a11)+(b 一 3);(分数:2.00)填空项 1:_20.若有定义语句:int m=5,y=2;,则执行表达式 y+=y 一=m*=y 后,y 的值为 1。(分数:2.00)填空项 1:_21.do-while 语句中 while 后的表达式的值最终应达到 1,才能正常退出循环。(分数:2.00)填空
8、项 1:_22.下列程序的输出结果是 1。 #include main() char b=“Hello you“; b5=0; printf(“sn“,b); (分数:2.00)填空项 1:_23.下列程序的输出结果为 1。 #include main() (int x=1,y=2,z=0; if(x=2) z=x,x=y,y=z; printf(“d,oA dn“,x,y); (分数:2.00)填空项 1:_24.已知:int a10=9,7,1,5,6;,则数组元素 aa2/= 1。(分数:2.00)填空项 1:_25.已知:char str15;,str 数组的最后一个元素是 1。(分数
9、:2.00)填空项 1:_三、简答题(总题数:4,分数:8.00)26.某公司货运收费标准是:本地货运每吨运费 10 元。外地货运每吨运费 20 元,距离 500 公里(含)以上每吨运费增加 5 元。外地货运量 100 吨(含)以上时运费增加 5。 用判定树表达运费的计算方法。 注:设货运量为 N 吨,距离为 L 公里,运费为 W 元。(分数:2.00)_27.写出如下图所示的二叉树的中序遍历序列。 (分数:2.00)_28.对于图 G-1 (1)从顶点 1 出发,按邻接顶点序号由小到大顺序给出广度优先遍历的顶点序列。 (2)给出用克鲁斯卡尔法构造的最小生成树。 (分数:2.00)_29.已知
10、关键字序列为46,57,84,32,73,36,15,48,90,20,要求: (1)按照已给关键字的先后次序构造一棵二叉排序树。 (2)在等概率的情况下,计算已构造的二叉排序树查找成功的平均查找长度(ASL)。(分数:2.00)_四、程序分析题(总题数:4,分数:8.00)30.写出下列程序的功能。 #includestdioh main() (int u =1,5,6,8,3,5,2,6,8,9;int i; float x: x=0: for(i=0;i10;i+) x+=ui: x=x10; printf(“f“,x); (分数:2.00)_31.阅读下列程序,写出程序的运行结果。 #
11、define sqstack_maxsize 40 typedef struct sqstack char datasqstack_maxsize; int top; SqStackTp; main() SqStackTp sq; int i; char ch; InitStack(&sq); for(ch=A;chnext; while( ) Push(&ls,pdata); ; p=headnext; while(!EmptyStaek(ls) Pop(&ls,x); p 一data=x; p=p 一next; (分数:2.00)_五、程序设计题(总题数:2,分数:4.00)34.已知银行
12、整存整取存款不同期限的月利息率分别为: (分数:2.00)_35.设二维数组 A66表示 6 节点无向图的邻接矩阵,编写程序,从键盘上输入邻接矩阵的数据,求出该无向图的边数以及各个节点的度,输出所求结果。(分数:2.00)_全国自考(计算机软件基础)-试卷 1 答案解析(总分:70.00,做题时间:90 分钟)一、单项选择题(总题数:15,分数:30.00)1.一个完整的 C 程序由【 】构成。(分数:2.00)A.一个主程序和一个子程序B.一个主函数和若干个子函数 C.一个主函数和一个其他函数D.一个主函数和若干个子程序解析:解析:一个完整的 C 程序是由一个主函数和若干个子函数构成的,并且
13、程序的执行总是从主函数开始。2.下列叙述中错误的是 【 】(分数:2.00)A.一个 C 程序至少包含一个函数B.一个 C 程序可以包含一个主函数和若干个其他函数C.主函数和其他函数之间可以相互调用 D.C 程序的基本单位是函数解析:解析:主函数可以调用其他函数,但是其他函数不能调用主函数。3.有以下程序: #include int fun(int a,int b) if(b=0) return a; else return(fun(-a,-b); main() printf(“dn“,fun(4,2); 程序的运行结果是 【 】(分数:2.00)A.1B.2 C.3D.4解析:解析:因为题中
14、实参为 4 和 2,所以在函数 fun 中,形参 a=4,形参 b=2,不满足 if 语句的判定条件,所以执行 else 子句,继续调用函数 fun,在此过程中 a、b 的值总是每调用一次函数则都减 1,直至a=2,b=0 为止,所以程序最后的结果为 2。4.局部变量的作用域是 【 】(分数:2.00)A.该变量所在的程序B.该变量所在的文件C.主函数D.该变量所在的函数 解析:解析:在函数内部定义的变量称为局部变量,局部变量的作用城就是其所在的函数。5.下列程序的输出结果是 【 】 #include fun(int x) int p; if(x=0x=1)return(3); p=xfun(
15、x 一 2); return p; main() printf(“dn“,fun(9); (分数:2.00)A.7 B.2C.0D.3解析:6.下列关于 C 语言程序的叙述,正确的是 【 】(分数:2.00)A.main()所在行的末尾必须有“;”B.主函数的函数体不一定用花括号()括起来C.一个完整的 C 程序可以没有任何函数D.C 语言程序的简单语句必须用分号(;)作为语句的结束符 解析:解析:一个完整的 C 程序可由一个主函数 main 组成,或由一个主函数和若干个子函数构成,main()所在行的末尾没有“;”,主函数的函数体必须用花括号括起来。7.以下程序的输出结果是 【 】 #inc
16、lude int f() (static int i=0; int s=1: s+=i; i+; return(s); main() (int i,a=0; for(i=0;iA.1B.0C.15 D.5解析:8.已知 int a100,*d=a;,下列语句错误的是 【 】(分数:2.00)A.a=d; B.*d=a10;C.d=a+1;D.d=a2;解析:9.已知 char str130,*str2=“student_no“;,执行语句 strcpy(str1,str2);后,str1en(str1)的值是 【 】(分数:2.00)A.9B.10 C.29D.30解析:解析:strcov(s
17、tr1,str2)的功能是将 str2 的内容复制到 str1 中;str1en(str1)的功能是求字符数组所表示串的长度。10.已知 int a=5,b=3,*p=b,*q=a;,下列赋值语句中与 b=a;等价的是 【 】(分数:2.00)A.*p=*q; B.p=q;C.*p=&q;D.*p=*b;解析:解析:*p=&b,*q=a;使指针 p 指向 b,指针 q 指向 a,则*p 和 b 为同一个存储空间,则*q 和 a为同一个存储空间,所以与 b=a;等价的语句是*p=*q;。11.设有语句 int x=1,2,3,4,5,6,*p=x;,则值为 3 的表达式是 【 】(分数:2.00
18、)A.p+=2,*+pB.p+=2,*p+ C.p+=2,+*pD.p+=3,*p解析:解析:选项 A、B、C 中的“p+=2”使 p 指向敖组元素 x2(其值为 3)。选项 A 中的“*+p”是先使p 指向数组元素 x3,再取其值 4。选项 B 中的“*p+”是先取 P 指向的数组元素 x2,其值为 3,然后使 p 指向数组元素 x3。选项 c 和 D 中的表达式的值均为 4。12.指针变量是指 【 】(分数:2.00)A.整型变量B.下标变量C.变量的地址D.存放变量地址的变量 解析:解析:指针就是它所指对象的地址。指针变量就是用来存放指针(地址)的变量。13.设有数据定义语句 struc
19、t xyzint x;float y;char z;xyz1;,则下面的说法中错误的是 【 】(分数:2.00)A.struct xyz 可以看成一种数据类型符B.xyz 是用户定义的结构类型名称C.xyz1 可以用来定义该结构类型变量 D.X 是结构类型的成员名解析:解析:在给定的结构类型的数据定义语句申,struct 是定义结构类型时的系统保留字(关键字);xyz 是用户任意选取的标识符,作为结构类型的名称;struct xyz 可以看成是用户定义的一种结构类型的数据类型符,以后可以用它来定义这种结构类型的变量、数组、指针变量等;x、y、z 是这种结构类型的成员名;“xyz1”是这种结构类
20、型的变量名。14.下列说法错误的是 【 】(分数:2.00)A.在定义结构变量时不能给其赋初值 B.可以取结构变量的地址C.可以取结构变量成员的地址D.结构类型的成员可以定义成该结构类型的指针类型解析:15.有以下程序: #include struct st int x,y; )data2=1,10,2,20; main() struct st*p=data; printf(“d,“,p 一y); printf(“dn“,(+p)一x); 程序的运行结果是 【 】(分数:2.00)A.10,1B.20,1C.10,2 D.20,2解析:二、填空题(总题数:10,分数:20.00)16.若有语句
21、:int a=5,y=6;y=a+;,则 y 的值是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:5)解析:17.表示整数 x 的绝对值大于 5 时值为“真的 C 语言表达式是 1。(分数:2.00)填空项 1:_ (正确答案:正确答案:x5“xnext; while( ) Push(&ls,pdata); ; p=headnext; while(!EmptyStaek(ls) Pop(&ls,x); p 一data=x; p=p 一next; (分数:2.00)_正确答案:(正确答案:p!=NULL p=p 一next)解析:五、程序设计题(总题数:2,分数:4.00)34.
22、已知银行整存整取存款不同期限的月利息率分别为: (分数:2.00)_正确答案:(正确答案:#include main() int money,year; float n; printf(“input money and year:“); scanf(“d,d“,&money,&year); switch(year) case 1:n=063;break; case 2:n=066;break; case 3:n=069;break; case 5:n=075;break; case 8:n=084bteak; default:n=1: if(n=1)printf(“data error!“);
23、 else printf(“total=2fn“,money*(1+n); )解析:35.设二维数组 A66表示 6 节点无向图的邻接矩阵,编写程序,从键盘上输入邻接矩阵的数据,求出该无向图的边数以及各个节点的度,输出所求结果。(分数:2.00)_正确答案:(正确答案:#includestdioh main() int a66,i,jb,s; for(i=0;i6;i+) for(j=0;j6;j+) scsnf(“d“,&aij); s=0; for(i=0;i6;i+) b=0; for(j=0;j6;j+) if(aiEj=1)b=b+1; printf(“d node degree:dn“,i,b); s=s+b; printf(“The sum isdn“,s2); )解析: