资源描述
计 算 机 软 件 基 础
一、填空题
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.在线性表的顺序存储构造中,其相邻的数据节点在物理位置上也是 相邻 的。
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语句跳出循环体
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
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 】
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
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;
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.良好的程序设计风格除了将程序文档化与格式化以外,还需要遵循哪些准那么?
答:良好的程序设计风格除了将程序文档化与格式化以外,还需要遵循以下准那么:
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
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
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
#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 )
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()
第 13 页
{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);
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/;
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); }
展开阅读全文