湖南省自考计算机软件基础2243.pdf
2243 一、填空题1程序设计的关键在于设计出一个好的算法。2数据、数据节点和数据项构成了数据组织的三个层次。其中数据项是具有独立含义的最小标识单位。3数据的逻辑结构和物理结构之间的相互运算是通过算法来实现的。4所有节点按1 对 1 的邻接关系构成的整体就是线性结构。5表长为0 的线性表称为空表。6直接插入排序最好情况的时间复杂度为O(n)。7程序段“i=l;while(i=n)i=i*2”的时间复杂度为O(log2n)。8c 语言属于计算机高级语言,既可以用来写系统软件,也可以用来写应用软件。9算法是有穷的,而程序可以是无穷的。10实型常量在一般微型机中占用4 个字节。11char 型和 int 型的运算结果为int 型。12Getchar()和 putchar()函数只能输入、输出1 个字符。13源程序必须翻译成机器指令即机器语言,这一工作由编译系统来完成。14字符串的长度为串中字符的个数,但在内存中所占的字节数应比长度多1。15执行:a=3,b=4,a=a+b,b=a+b 后,则 a 和 b 的值分别为7 和 11。16对于 scanf(“2d3d 4d”,&a,&b,&c)语句,若键入:l 23456789,则变量 b 的值为 345。17设 intx=10,y,z;执行 y=z=x;x=y=-Z 后,变量x 的结果是1。18若有说明:Int a5=1,2,3,4,5,6,7,8,9,10),则数组第一维的大小为2。19在函数定义中,若没有返回值,其类型定义为空类型。20c 语言规定不能嵌套定义函数,但可以嵌套调用函数。21程序中出现的/*.*表示注释,可以出现在程序的任何地方。22c 语言的数据结构是以数据类型的形式描述出来的。23运算符的运算对象就为整数。24getchar()函数只能出现在表达式的位置,接收该函数的值时可以用字符型或整型变量。25请将 x a,写成一个逻辑表达式:x=-a。26在结构化程序的三种基本结构是指顺序结构、选择结构和循环结构。27在 c 语言中,二维数组在内存中的排列顺序是按行存入。28一个完整的c 程序可由 1 个主函数或由1个主函数和若干个子函数组成。29在 c 语言中,变量的使用一般遵守“先定义,而使用”的原则。30c 语言中有两个专门的指针运算符*和&,它们都是单目运算符。31在计算机的数据处理中,将字符、声音、光、图形和图像均称为数据。32在线性表的顺序存储结构中,其相邻的数据节点在物理位置上也是相邻的。33若在数据处理中,需要经常对数据进行插入、删除运算,则宜将该数据设置为链式存储。34二叉树的遍历方法有:先序遍历、后序遍历和中序遍历。35单链表表示法的基本思想是用指针表示结点间的逻辑关系。36C 语言规定,数组元素的下标从0 开始,最大值为长度减1。37在 C 语言中,引用数组元素时,其数组下标的数据类型允许是整型常量或整型表达式。38一个变量的作用域是指该变量在程序中的有效范围,局部变量的作用域就是其所在的函数。39C 语言中访问地址的方式有两种即直接存取方式和间接存取方式。40运行下列语句:int*p,*q,x5;p=x;q=p+3;则 q 指向数值元素x3。41若某问题的空间复杂度为o(1),则认为该问题所耗空间与问题的规模无关。42在线性表的链式存储结构中,单链表中每个节点是一个结构类型。43在三对角阵的压缩存储中,已知Aij=Bk,试建立k 与 i,j 之间的关系为:k=2i+j。44 在软件的开发模型中,螺旋模型是一种风险驱动模型,它将瀑布模型和原型模型结合起来。45设有 100 个元素,用折半查找法进行查找时,最大比较次数是7。二、选择题1下列是C 语言正确的标识符的是【D】A?a Ba=2 Ca.3 D a_3 2下列表达式中,值为1 的表达式是【D】A35 B3/5.0 C3/5 D 3=a&a=0 B(10=a)ll(a=0)C0=a=10 D(!a10)5在 C 语言中,main()函数的位置【C】A必须作为第一个函数B必须作为最后一个函数C可以任意,但必须要在函数之外D必须放在它所调用的函数之后6对于输入语句“scanf(“d,d”,&a,&b)”,下面正确的输入方法是【A】A1,2 回车B 12 回车C1 回车 2回车D 1;2 回车7下列程序段“int i=j=10;printf(“&d,dn”,-I,j-);”的输出结果是【B】A11,10 B9,10 C 11,9 D10,9 8下面有关for 循环正确的描述是【D】Afor 循环只能用语句循环次数已经确定的情况Bfor 循环是先执行循环体语句,后判定表达式C在 for 循环中,不能用break 语句跳出循环体Dfor 语句的循环体中,可以包含多条语句,但要用花括号括起来9设有定义“int x5=l,2,3);”,则数组x 占用的内存字节数是【D】A3 B5 C6 D10 10若有定义语句“int m,n=2,*p=&m;”,则能完成m=n 功能的语句为【B】Am=*p;B*p=*&n;Cm=&n Dm=&p 11数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为【C】A存储结构B逻辑结构C链式存储结构D顺序存储结构12单链表的一个存储结点包含【D】A数据域或指针域B指针域或链域C指针域和链域D数据域和链域13循环队列的队满条件为【C】Asq.rear+1)maxsize=(sq.front+1)maxsize B(sq.rear+1)maxsize=sq.front+l C(sq.rear+1)maxsize=sq.front Dsq.rear=sq.front 14深度为6 的二叉树最多有()个结点【B】A64 B63 C32 D 31 15用顺序查找法对具有n 个结点的线性表查找的时间复杂性量级为【C】AO(n2)BO(nlog2n)CO(n)DO(log2n)16设有语句“intx6=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】AHead=NULL;BHead-next=NULL:CHead-next=Head;D均不正确;19一个队列的输入列序为1,2,3,4,则该队列的输出序列是【B】A4,3,2,l B1,2,3,4 C1,4,3,2 D3,2,4,1 20堆(Heap)是【B】A完全二叉树B线性表C满二叉树D都不正确21在表长为n 的顺序表中,实施顺序查找,在查找不成功时,与关键字比较的次数为【C】An B1 Cn+1 Dn-1 22下列选项中,合法的C 语言保留字是【C】AAUTO BSWIT Celse Dinteger 23下列选项中非法的实型常数是【A】A3E1.0 B1.0E3 C.3E-2 D3E-2 24设有定义“float a=5.0,b=2.5;”,则表达式(int)b+a/b 的值是【D】A3 B4 C3.0 D4.0 25设 int a=10,b=20,c=30;条件表达式a6)sprintf(“*”)后的输出结果是【A】A*B*C*D*38设有定义语句:int a=l,b=2,c=3,d=4;执行下列程序段后x 的值是【A】if(ab)if(cd)x=10;else if(ac)if(bd)x=20;else x=30;else x=40;else x=50;A10 B 20 C 30 D 40 39C 语言中【C】A不能使用dowhile 语句构成循环体。Bdo-while 语句构成的循环必须用break 语句才能退出。Cdo-while 语句构成的循环,当while 语句中的表达式值为零时结束循环。Ddowhile 语句构成的循环,当while 语句中的表达式值为非零时结束循环。40以下数组语句中,正确的是【C】Aint a3;Bint b3=0,l,2,3;Cint c1010=0;Dint d3=l,2,1,3,0),l;41设有语句“int x8=5,4,3,2,1,*p=x;”,则*(p+3)的值为【C】A5 B4 C3 D 2 42计算机内部数据处理的基本单位是【B】A数据B数据元素C数据项D数据库43在一个具有n 个结点的有序顺序表中插入一个新结点并仍然有序的时间复杂度是【B】AO(1)BO(n2)C O(n)DO(nlog2n)44设 C 语言数组Datam+1 作为循环队列SQ 的存储空间,front 为队头指针,real 为队尾指针,则执行出队操作的语句为【D】Afrint=front+1;,Bfront=(front+1)m:Crear=(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】A35/12 B37/12 C39/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;k2;k+)m+;if(m/2)continue;m+:printf(/m=%dn/,m);2下列程序运行后的输出结果是1,6#inlcude Main()int a=l,2,3,4,5,6,*p;p=a;*(p+3)+=2;printf(/d,%dn/,*p,*(p+3);3下列程序运行后的输出结果是s=55#inlcude 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/,s210;int k=0,j=0;while(s lk!=/A/)s2j+=s 1k+;s2j=0;printf(/sn”,s2);5下列程序运行后的输出结果是DCBAEF void fun(char*pl,int n)chart,*p2;p2=pl+n-1;while(p110&x50)x+if(x/3)x+;break;else continue;printf(/dn/,x);7下列程序运行后的输出结果是6 int b=l;int f(int*a)b+=*a;return(b);main()int a=2,b=3:a+=f(&b);printf(/%dn/,a);8下列程序运行后的输出结果是23 Main()int x4=1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6,s=0,k=0;for(;knext!=NULL)p=p-next;j+;return(j);10下列程序运行后的输出结果是1,6,3,2,3#include 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;inext;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=xy?x:y);retum(tz?t:z)main()int a,b,c;scanf(/d,d,d/,&a,&b,&c);prinf(/max=dn,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(rj+1.keyrj.key)flag=0;p=rj;rj=rj+1;rj+1=p;)if(flag)return;3下列程序的功能是将输入的10 个整型数存入一维数组中,并求其中所有素数之和并输出。main()int x10,sum=0,flag,k,j;for(k=0;k10;k+)scanf(/d/,&xk);for(k=0;kl0;k+)if(xk=1)continue;flag=l;for(j=2;j=xk/2;j+)if(xk j=0)flag=0;break;if(flag=1)sum+=xk;printf(/dn/,s);4下面程序的功能是输入10 个字符和1 个字符 X,从 10 个字符中查找x,找到则输出其序号,找不到则输出0。main()char str10,x,*p;int flag=0;for(p=str;pstr+10;p+)scanf(/c/,p);scanf(/c/,&x);for(p=str;pfron=sq-rear)error(/队空/);return(o);elsesq-front=(sq-front+1)maxsize;*x=sq-datasq-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 s10,*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(/sn/,p);2以二叉链表作为存储结构,用类C 语言编写求二叉树中叶子数的算法。解:先求左子树的叶子数,再求右子树的叶子数,两者相加就是根结点叶子数,也就是对应二叉树的叶子数。Int leafcount(bitreptr T)if(T=NULL)leaf=0;else if(T-Ichild=NULL)&(T-rchild=NULL)leaf=1;elseL=leafcount(T-lchild);R=leafcount(T-rchild);leaf=-L+R;return(leaf);3编程序,输入10 个短整型正整数存入一维数组,求其中所有素数之和并输出。解:main()short x10,s=0,flag,k,j;for(k=0;kl0;k+)scanf(/d/,&xk);for(k=0;kl0;k+)if(xk=1)continue;