资源描述
.
计算机软件基础
一、填空题
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
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]
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.设有语句"chara[]="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;
elsex=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〔
{intk,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<>
{charsl<>=// 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
intb=l;
intf<int*a>
{b+=*a; return<b>; }
main<>
{inta=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个数中找出最大数,并输出最大数。
intmax<intx, int y, int z>
{intt;
t=x>y? x:y >;
retum<t>z? t:z >
}
main<>
{inta,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<>
{charstr[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;
longx;
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>; }
.
展开阅读全文