您现在的位置:首页 > >

计算机软件基础[一]高等教育自学考试试题及答案解析


WORD 格式整理版
计算机软件基础
一、填空题 1.程序设计的关键在于设计出一个好的算法 。 2.数据、数据节点和数据项构成了数据组织的三个层次。其中数据项 是具有独立含义的最小 标识单位。 3.数据的逻辑结构和物理结构之间的相互运算是通过算法 来实现的。 4.所有节点按 1 对 1 的邻接关系构成的整体就是线性 结构。 5.表长为 0 的线性表称为 空 表。 6.直接插入排序最好情况的时间复杂度为 O(n) 。 7.程序段“i=l;while(i<=n)i=i*2”的时间复杂度为 O(log2n) 。 8.c 语言属于计算机高级语言,既可以用来写系统软件,也可以用来写应用软件 。 9.算法是有穷的,而程序可以是 无穷的 。 10.实型常量在一般微型机中占用 4 个字节。 11.char 型和 int 型的运算结果为 int 型。 12.Getchar()和 putchar()函数只能输入、输出 1 个字符。 13.源程序必须翻译成机器指令即机器语言,这一工作由编译系统 来完成。 14.字符串的长度为串中字符的个数,但在内存中所占的字节数应比长度多 1 。 15.执行:a=3,b=4,a=a+b,b=a+b 后,则 a 和 b 的值分别为 7 和 11。 16.对于 scanf(“%2d%3d%4d”,&a,&b,&c)语句,若键入:l 23456789,则变量 b 的值为 345 。 17.设 intx=10,y,z;执行 y=z=x;x=y=-Z 后,变量 x 的结果是 1 。 18.若有说明:Int a[][5]={1,2,3,4,5,6,7,8,9,10),则数组第一维的大小为 2 。 19.在函数定义中,若没有返回值,其类型定义为 空类型 。 20.c 语言规定不能嵌套定义函数,但可以嵌套调用 函数。 21.程序中出现的/*…...*/表示注释,可以出现在程序的任何 地方。 22.c 语言的数据结构是以 数据类型 的形式描述出来的。 23.%运算符的运算对象就为 整数 。 24.getchar()函数只能出现在 表达式 的位置,接收该函数的值时可以用字符型或整型变量。 25.请将│x│≤a,写成一个逻辑表达式: x<=a&&x>=-a 。 26.在结构化程序的三种基本结构是指 顺序结构 、选择结构和循环结构。 27.在 c 语言中,二维数组在内存中的排列顺序是按 行 存入。 28.一个完整的 c 程序可由 1 个主函数或由 1 个主函数和 若干个 子函数组成。 29.在 c 语言中,变量的使用一般遵守 “先定义,而使用 ”的原则。 30.c 语言中有两个专门的指针运算符*和&,它们都是 单 目运算符。 31.在计算机的数据处理中,将字符、声音、 光 、图形和图像均称为数据。 32.在线性表的顺序存储结构中,其相邻的数据节点在物理位置上也是 相邻 的。
专业学习 参考资料

WORD 格式整理版
33.若在数据处理中,需要经常对数据进行插入、删除运算,则宜将该数据设置为 链式 存储。 34.二叉树的遍历方法有:先序遍历、后序遍历和 中序遍历 。 35.单链表表示法的基本思想是用指针 表示结点间的逻辑关系。 36.C 语言规定,数组元素的下标从 0 开始,最大值为长度减 1。 37.在 C 语言中,引用数组元素时,其数组下标的数据类型允许是整型常量或整型 表达式。 38.一个变量的作用域是指该变量在程序中的有效范围,局部变量的作用域就是其所在的 函数 。 39.C 语言中访问地址的方式有两种即直接存取方式和 间接存取 方式。 40.运行下列语句:int*p,*q,x[5];p=x;q=p+3;则 q 指向数值元素 x[3] 。 41.若某问题的空间复杂度为 o(1),则认为该问题所耗空间与问题的 规模 无关。 42.在线性表的链式存储结构中,单链表中每个节点是一个 结构类型 。 43.在三对角阵的压缩存储中,已知 Aij=Bk,试建立 k 与 i,j 之间的关系为: k=2i+j 。 44.在软件的开发模型中,螺旋模型是一种 风险驱动 模型,它将瀑布模型和原型模型结合起来。 45.设有 100 个元素,用折半查找法进行查找时,最大比较次数是 7 。

二、选择题

1.下列是 C 语言正确的标识符的是【 D 】

A.? a B.a=2 C.a.3 D.a_3

2.下列表达式中,值为 1 的表达式是 【 D 】

A.3%5 B.3/5.0 C.3/5 D.3<5

3.设变量 a,b,c,d 依次为字符型、整型、单精度型、双精度型,则表达式“a+b/c*d”的数据类

型为【 D 】

A.整型 B.字符型 C.单精度型 D.双精度型

4.能正确表达“0≤a≤10”的表达式是【 A 】

A.10>=a&&a>=0

B. (10>=a)ll(a>=0)

C.0<=a<=10

D.(!a<0)&&(!a>10)

5.在 C 语言中,main()函数的位置 【 C 】

A.必须作为第一个函数

B.必须作为最后一个函数

C.可以任意,但必须要在函数之外 D.必须放在它所调用的函数之后

6.对于输入语句“scanf(“%d,%d”,&a,&b)”,下面正确的输入方法是【 A 】

A.1,2 回车 B.12 回车 C.1 回车 2 回车 D.1;2 回车

7.下列程序段“int i=j=10;printf(“&d,%d\n”,--I,j--);”的输出结果是【 B 】

A.11,10

B.9,10

C.11,9

D.10,9

8.下面有关 for 循环正确的描述是【 D 】

A.for 循环只能用语句循环次数已经确定的情况

B.for 循环是先执行循环体语句,后判定表达式

C.在 for 循环中,不能用 break 语句跳出循环体

专业学习 参考资料

WORD 格式整理版

D.for 语句的循环体中,可以包含多条语句,但要用花括号括起来

9.设有定义“int x[5]={l,2,3);”,则数组 x 占用的内存字节数是【 D 】

A.3 B.5 C.6 D.10

10.若有定义语句“int m, n=2, *p=&m;”,则能完成 m=n 功能的语句为 【 B 】

A.m=*p; B.*p=*&n; C.m=&n

D.m=&p

11.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为【 C 】

A.存储结构 B.逻辑结构

C.链式存储结构 D.顺序存储结构

12.单链表的一个存储结点包含 【 D 】

A.数据域或指针域

B.指针域或链域

C.指针域和链域

D.数据域和链域

13.循环队列的队满条件为【 C 】

A.sq.rear+1)%maxsize==(sq.front+1)%maxsize

B.(sq.rear+1)%maxsize==sq.front+l

C.(sq.rear+1)%maxsize==sq.front

D.sq.rear==sq.front

14.深度为 6 的二叉树最多有( )个结点【 B 】

A.64 B.63 C.32 D.31

15.用顺序查找法对具有 n 个结点的线性表查找的时间复杂性量级为【 C 】

A.O(n2)

B.O(nlog2n)

C.O(n)

D.O(log2n)

16.设有语句“intx[6]={5,4,3,2,1,0),*p=x;”,则值 2 的表达式为【 A 】

A.*(p+4)

B.*(p+5)

C.*p+4

D.*p+5

17.算法分析的两个主要方面是【 A 】

A.空间复杂度和时间复杂度

B.正确性和简明性

C.可读性和文档性

D.数据复杂性和程序复杂性

18.带头结点的单链表 Head 为空的判定条件是【 B 】

A.Head=NULL;

B.Head->next=NULL:

C.Head->next=Head; D.均不正确;

19.一个队列的输入列序为 1,2,3,4,则该队列的输出序列是【 B 】

A.4,3,2,l

B.1,2,3,4

C.1,4,3,2

D.3,2,4,1

20.堆(Heap)是 【 B 】

A.完全二叉树 B.线性表 C.满二叉树 D.都不正确

21.在表长为 n 的顺序表中,实施顺序查找,在查找不成功时,与关键字比较的次数为【 C 】

A.n

B.1

C.n+1

D.n-1

22.下列选项中,合法的 C 语言保留字是【 C 】

A.AUTO B.SWIT C.else D.integer

23.下列选项中非法的实型常数是【 A 】

专业学习 参考资料

WORD 格式整理版

A.3E1.0 B.1.0E3 C..3E-2

D.3E-2

24.设有定义“float a=5.0,b=2.5;”,则表达式(int)b+a/b 的值是 【 D 】

A.3

B.4

C.3.0

D.4.0

25.设 int a=10,b=20,c=30;条件表达式 a<b?a=15:c 的值是【 B 】

A.10

B.15

C.20

D.30

26.一个 C 程序是由【 B 】

A.一个主程序和若干子程序组成 B.一个或多个函数组成

C.若干过程组成

D.若干子程序组成

27.下列给出的符号串中,可以作为 C 语言标识符是的【 C 】

A.printf B.do C.GOTO D.while

28.在 c 语言中,合法的字符常量是【 B 】

A.//A//

B./\x10/

C./0a/

D.a

29.以下表达式中与表达式“m=n++”功能完全相同的是 【 A 】

A.m=n,n=n+l B.n=n+l,m=n C.m=++n D.m+=n+1

30.若变量 a, i 已正确定义,且 i 已正确赋值,非法的表达式是 【 C 】

A.a= =1

B.++i C.a=a++=5 D.a= (int)(i)

32.当调用函数时,实参是一个数组名,则向对应形参传送的是【 B 】

A.数组的长度

B.数组的首地址

C.数组中每一个元素的地址 D.数组中每个元素的值

33.假定的数据定义语句“floatx;”,能为 x 输入数据的正确语句是【 D 】

A.scanf(“%f,’,3.5);

B.scanf(“x=%f ”);

C.scanf(“%4.2f”,&X); D.scanf(“%f'”,&x);

34.下列程序段的输出结果是【 D 】

int x=2;

do prinff(“%d,”,x 一);

while(!(--x));

A.2, B.1,0, C.2,1, D.2,0,

35.选用数组元素下标时,可能造成程序运行出错的下标是【 B 】

A.0 B.-1

C.正实数 D.整型变量

36.设有语句“char a[]=“123”,b[]={‘1’,’2’,’3’);”,下列说法正确的是 【 D 】

A.a[3]是不可知的任意字符 B.数组 a,b 的长度相同

C.b[3]的值为’\0’

D.数组 a 的长度大于数组 b 的长度

37.执行程序段“int x=8;while(--x>6)sprintf(“*”)后的输出结果是【 A 】

A.* B.**

C.***

D.****

38.设有定义语句:int a=l,b=2,c=3,d=4;执行下列程序段后 x 的值是 【 A 】

if(a<b)if(c<d)x=10;

专业学习 参考资料

WORD 格式整理版

else if(a<c)if(b<d)x=20;

else x=30;

else x=40;

else x=50;

A.10

B. 20 C. 30 D. 40

39.C 语言中【 C 】

A.不能使用 do—while 语句构成循环体。

B.do-while 语句构成的循环必须用 break 语句才能退出。

C.do-while 语句构成的循环,当 while 语句中的表达式值为零时结束循环。

D.do.while 语句构成的循环,当 while 语句中的表达式值为非零时结束循环。

40.以下数组语句中,正确的是【 C 】

A.int a[][3];

B.int b[3][]={0,l,2,3};

C.int c[10][10]= {0};

D.int d[3][]={{l,2}, {1,3,0), {l}};

41.设有语句“int x[8]={5,4,3,2,1},*p=x;”,则*(p+3)的值为【 C 】

A.5

B.4

C.3

D.2

42.计算机内部数据处理的基本单位是【 B 】

A.数据 B.数据元素 C.数据项 D.数据库

43.在一个具有 n 个结点的有序顺序表中插入一个新结点并仍然有序的时间复杂度是【 B 】

A.O(1)

B.O(n2)

C.O(n)

D.O(nlog2n)

44.设 C 语言数组 Data[m+1]作为循环队列 SQ 的存储空间,front 为队头指针,real 为队尾指针,

则执行出队操作的语句为【 D 】

A.frint=front+1;,

B.front=(front+1)%m:

C.rear=(rear+1)%m;

D.front= (front+1)%(m+1);

45.树最适合用( )来表示【 C 】

A.有序数据元素

B.无序数据元素

C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据

46.长度为 12 的有序表:Apt, Aug, Dec, Feb, Jan, Jul, Jun, Mar, May, Nov, Oct, Sep,按

对半查找法对该表进行查找。在表内各元素等概率情况下查找成功所需要的平均比较次数为

【B】

A. 35/12 B. 37/12 C. 39/12 D 43/12

三、简答题 1.软件维护工作可分为哪几类维护工作?
答:软件维护工作可分如下四类维护工作: 1)改正性维护;2)适应性维护;3)完善性维护;4)预防性维护。 2.良好的程序设计风格除了将程序文档化和格式化以外,还需要遵循哪些准则?
专业学习 参考资料

WORD 格式整理版
答:良好的程序设计风格除了将程序文档化和格式化以外,还需要遵循以下准则: 1)节俭化;2)模块化;3)简单化;4)结构化 3.用文字简述数据 x 进栈和退栈操作的基本步骤。 答:进栈操作的基本步骤为: 1)先判断栈是否已满,若满,则进行上溢处理,否则进行 2)。 2)栈项指针上移 1 个节点。 3)将 x 加入到 top 所指位置。 ‘ 退栈操作的基本步骤为: 1)检查栈是否为空,若栈空,则进行下溢处理,否则进行 2)。 2)保留被删除元素到变量 x 中(若不需要保存,则舍去这一步)。 3)栈顶指针下移 1 个节点。 4.软件测试时,程序中尚未发现的错误的数量往往与在该段程序中己发现的错误的数量成正比。 所以软件测试时,除尽早地、不断地进行软件测试外,还应遵循的其它基本原则是什么? 答:软件测试时,还应遵循的其它基本原则是: 1)设计测试用例时,要给出测试的预期结果。 2)开发小组和测试小组分开。 3)要设计非法输入的测试用例。 4)在对程序修改之后要进行回归测试。 5.简述哈夫曼树的性质。 答:由哈夫曼树的生成过程可得如下性质: 1)给定权值的哈夫曼树不唯一,但是 WPL,为定值。 2)权值越大的节点离根节点就越近。 3)哈夫曼树中无度为 l 的节点。 4)哈夫曼树节点总个数刀=2×叶子节点个数一 1=2×权值个数.1=2n,.一 1。 6.用文字简述将内容为 x 节点加入顺序队列和出队操作的基本步骤。 答:将内容为 x 节点加入顺序队列的基本步骤为: 1)先判断队列是否已满,若满则退出,否则进行 2)。 2)队尾指针下移 1 个节点位置。 3)在队尾指针位置加入 x。 出队操作的基本步骤为: 1)先判断队列是否己空,若空则退出,否则进行 2)。 2)保留队头元素到 x 变量中。 3)队头指针下移 1 个节点位置。
四、程序分析题 1.下列程序运行后的输出结果是 m=3
专业学习 参考资料

WORD 格式整理版
Main() {int k,m=0; for(k=0;k<2;k++)
{m++; if(m/2)continue; m++: } printf(//m=%d\n//,m);} 2.下列程序运行后的输出结果是 1,6 #inlcude<stdio.h> Main() {int a[]={l,2,3,4,5,6}, *p; p=a; *(p+3)+=2; printf(//%d, %d\n//, *p, *(p+3));} 3.下列程序运行后的输出结果是 s=55 #inlcude<stdio.h> Main() {int S, i=l,sum(); for(; i<=10;)i++,s=sum(i); printf(//S=%d\n//,s); } sum(int k){int x=0;return(x+=k); } 4.下列程序运行后的输出结果是 abcd main() {char sl()=// abcdABCD//,s2[10]; int k=0,j=0; while (s l[k]!=/A/)s2[j++]=s 1[k++]; s2[j]=0; printf(//%s\n”,s2);} 5.下列程序运行后的输出结果是 DCBAEF void fun(char*pl,int n) {chart,*p2; p2=pl+n-1; while(p1<p2) {1=*pl;*p1++=*p2;*p2--=t
专业学习 参考资料

WORD 格式整理版
} Main() {char*p=//ABCDEF//; fun(p,4); printf{%s\n//,p); } 6.下列程序运行后的输出结果是 13 Main() { intx=11; while(x>10&&x<50)
{x++ if(x/3){x++; break;} else continue;}
printf(//%d\n//,x); } 7.下列程序运行后的输出结果是 6
int b=l; int f(int*a) { b+=*a; return(b); } main() { int a=2,b=3:
a+=f(&b); printf(//%d\n//,a); } 8.下列程序运行后的输出结果是 23 Main() {int x[][4]={1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6},s=0,k=0; for(;k<4; k++) s+=x[k][k]; printf(//%d\n//, s) ;} 9.下列程序段的功能是: 计算单链表的表长 int L_lklist(1klist head) { p=head; j=0; while(p->next!=NULL) {p=p->next; j++; } return(j);} 10.下列程序运行后的输出结果是 1,6,3,2,3
专业学习 参考资料

WORD 格式整理版
#include<stdio.h> main() {int j=1 j=3; printf(//%d,//,i++); {int i=0; I+=j*2; printf(//%d,%d,//,i,j); } printf(//%d,%d//,i,j);} 11.下列程序运行后的输出结果是 10 int f(int n) {if(n==1)return(1); else return(f(n-1)+1); } main() {int i,j=0; for(i=1;i<5;i++)j+=f(i); printf(//%d\n//,j); } 12.阅读下列算法,写出其完成的功能是 借助栈将一个带头结点的单链表倒置 void list(LinkedListTP*head) {LStackTPIs,p; DataType x; InitStack(&ls); p=head->next; while(p!=NULL) {Push(&ls,p->data);p=p->next;} p=head->next; while(!EmptyStaek(&JS)) {Pop(&ls,&x);p->data=x;p=p->next; }}
五、程序填空题 1.下面程序是从输入 3 个数中找出最大数,并输出最大数。
int max(intx, int y, int z) {int t;
t=x>y? x:y ); retum(t>z? t:z )
专业学习 参考资料

WORD 格式整理版

}

main()

{int a,b,c;

scanf(//%d,%d,%d//,&a,&b,&c);

prinf(//max=%d\n",max( a,b,c ));

}

2.以下为冒泡排序的算法,请分析算法,并在

处填充适当的语句。

void bubblesort(int n, list r)

{for(i=l;i<= n-1 ;i++)

{flag=1 ;

for(j=l;j<=n-1 ;j++)

if(r[j+1].key<r[j].key){flag=0;p=r[j];r[j]=r[j+1];r[j+1]=p;)

if(flag)return;

}

}

3.下列程序的功能是将输入的 10 个整型数存入一维数组中,并求其中所有素数之和并输出。

main()

{int x[10],

sum=0,flag,k,j;

for(k=0;k<10;k++)scanf(//%d //,&x[k]);

for(k=0;k<l0;k++)

{ if(x[k]==1) continue



flag=l;

for(j=2;j<= x[k]/2 ;j++)

if(x[k]%j= =0)

{ flag=0 ;break;}

if(flag==1) sum+=x[k];}

printf(//%d \n//,s);}

4.下面程序的功能是输入 10 个字符和 1 个字符 X,从 10 个字符中查找 x,找到则输出其序号,

找不到则输出 0。

main()

{ char str[10],x,*p;

int flag=0;

for(p=str;p<str+10;p++)scanf(//%c//,p);

scanf(//%c//,&x);

专业学习 参考资料

WORD 格式整理版

for( p=str ;p<str+10;p++)

if(*p==x)

{ flag=1 ;break;}

if(flag)

prinf(//0\n//, p-str+1 );

else

prinf(//0\n//)}

5.以下运算实现在循环队上的出队列,请在 处用适当的语句予以填充。

int OutCyeQueue(Cycqueue Tp*sq,DataType*x)

{if(sq->fron==sq->rear ){error(//队空//);return(o);}

else{sq->front=(sq->front+1)%maxsize



*x=sq->data[sq->front]

;

Return(1);

}}

6.以下运算实现在链队上的入队列,请在 处用适当的语句予以填充。

void EnQueue(Queptr Tp*lq,data Type x)

{LqueueTp*p;

p=(Lqueue Tp*)malloc(sizeof(Lqueue Tp));

p->data =x;

p->next=NULL;

(1q->rear)->next= p ;

lq->rear=p ; }

六、编程题 1.输入一个长整型正整数,将其转换成对应八进制整数的字符串,然后输出该字符串。要求 用指向字符串的指针变量来处理求出的八进制数字字符。
解: main() {char s[10],*p; long x; int y; p=s+8; *(p+1)=/\0/; scanf(//%ld//,&x); while(x!=0L); *y=x%8;
专业学习 参考资料

*p=y+/\0/;

WORD 格式整理版

p--;

x=x/8

}

P++

Printf(//%s\n//,p);}

2.以二叉链表作为存储结构,用类 C 语言编写求二叉树中叶子数的算法。

解:先求左子树的叶子数,再求右子树的叶子数,两者相加就是根结点叶子数,也就是对应

二叉树的叶子数。

Int leafcount(bitreptr T)

{if(T= =NULL)leaf=0;

else if((T->Ichild=NULL)&&(T->rchild==NULL))leaf=1;

else{L=leafcount(T->lchild);

R=leafcount(T->rchild);

leaf=-L+R;

}

return(leaf);}

3.编程序,输入 10 个短整型正整数存入一维数组,求其中所有素数之和并输出。.

解:

main ()

{short x[10], s=0, flag, k,j;

for(k=0;k<l0;k++)scanf(//%d//, &x[k]);

for(k=0;k<l0;k++)

{if(x[k]==1)continue;

flag=l;

for (j=2;j<=x[k]/2;j++)

if(x[k]%j==0)

{flag=0;break;}

if(flag==1)

s+=x[k];

}

printf(//%d\n//, s); }

专业学习 参考资料



友情链接: 简历 面试求职范文 职业规划 自我管理 社交礼仪 76242百科