1、全国计算机等级考试二级公共基础知识课后习题及答案 1第一章 数据结构与算法 一.选择题 1.算法的时间复杂度是指( ) A. 执行算法程序所需要的时间 B. 算法程序的长度 C. 算法执行过程中所需要的基本运算次数 D. 算法程序中的指令条数 2.算法的空间复杂度是指( ) A. 算法程序的长度 B. 算法程序中的指令条数 C. 算法程序所占的存储空间 D. 算法执行过程中所需要的存储空间 3.下列叙述中正确的是( ) A. 线性表是线性结构 B. 栈与队列是非线性结构 C. 线性链表是非线性结构 D. 二叉树是线性结构 4.数据的存储结构是指( ) A. 数据所占的存储空间量 B. 数据的逻
2、辑结构在计算机中的表示 C. 数据在计算机中的顺序存储方式 D. 存储在外存中的数据 5.下列关于队列的叙述中正确的是( ) A. 在队列中只能插入数据 B. 在队列中只能删除数据 C. 队列是先进先出的线性表 D. 队列是先进后出的线性表 6.下列关于栈的叙述中正确的是( ) A. 在栈中只能插入数据 B. 在栈中只能删除数据 C. 栈是先进先出的线性表 D. 栈是先进后出的线性表 8.在深度为 5 的满二叉树中,叶子结点的个数为( ) A. 32 B. 31 C. 16 D. 15 9.对长度为 N 的线性表进行顺序查找,在最坏情况下所需要的比较次数为( ) A. N+1 B. N C .
3、(N+1)/2 D. N/2 10.设树 T 的度为 4,其中度为 1,2,3,4 的结点个数分别为 4,2,1,1 .则T 的叶子结点数为 A. 8 B. 7 C . 6 D. 5 二.填空题 1. 对长度为 n 的有序线性表中进行二分查找,需要的比较次数为( ) 2. 设一棵完全二叉树共有 700 个结点,则在该二叉树中有( )个叶子结点 3. 设一棵二叉树的中序遍历结果为 DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为 ( ) 4. 在最坏情况下,冒泡排序的时间复杂度为( ) 5. 在一个容量为 15 的循环队列中,若头指针 front=6,尾指针rear=9,则该循环队列中
4、共有( )个元素第一章参考答案 一选择题 1C 2. D 3. A 4. B 5. C 6. D 7. B 8. B 9. B 10. A 二. 填空题 1) log2n 2) 350 3) DEBFCA 4) N(N-1)/2 5) 3 第二章 程序设计基础 一. 选择题 1.结构化程序设计主要强调的是( ) A. 程序的规模 B. 程序的易读性 C. 程序的执行效率 D. 程序的可移植性 2对建立良好的程序设计风格,下面描述正确的是( ) A.程序应简单、清晰、可读性好 B符号名的命名只要符合语法 C 充分考虑程序的执行效率 D 程序的注释可有可无 3在面向对象方法中,一个对象请求另一对象
5、为其服务的方式是通过发送( ) A 调用语句 B 命令 C 口令 D 消息 4信息隐蔽的概念与下述哪一种概念直接相关?( ) A 软件结构定义 B 模块独立性 C 模块类型划分 D 模块耦合度 5下面对对象概念描述错误的是( ) A 任何对象都必须有继承性 B 对象是属性和方法的封装体 C 对象间的通讯靠消息传递 D 操作是对象的动态属性 二填空题 1结构化程序设计的三种基本逻辑结构为顺序、选择和( ) 2源程序文档化要求程序应加注释。注释一般分为序言性注释和( ) 3在面向对象方法中,信息隐蔽是通过对象的( )性来实现的 4类是一个支持集成的抽象数据类型,而对象是类的( ) 5在面向对象方法
6、中,类之间共享属性和操作的机制称为( )第二章参考答案 一选择题 1B 2. A 3. D 4. B 5. A 二填空题 1) 重复(或循环) 2) 功能性 3) 封装 4) 实例 5) 继承 转贴 第三章 软件工程基础 一. 选择题 1.在软件生命令周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( ) A.概要设计 B.详细设计 C.可行性研究 D.需求分析 2.下面不属于软件工程的 3 个要素的是( ) A.工具 B.过程 C.方法 D 环境 3.检查软件产品是否符合需求定义的过程称为( ) A.确认测试 B.集成测试 C.验证测试 D.验收测试 4.数据流图用于抽象描述
7、一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是( ) A.控制流 B.加工 C.数据存储 D.源和潭 5.下面不属于软件设计原则的是 A.抽象 B.模块化 C.自底向上 D.信息隐蔽 6.程序流程图(PFD)中的箭头代表的是( ) A.数据流 B.控制流 C.调用关系 D.组成关系 7.下列工具中为需求分析的常用工具的是( ) A. PAD B. PFD C. N-S D. DFD 8.在结构化方法中,软件功能分解属于下列软件开发中的阶段是( ) A.详细设计 B.需求分析 C.总体设计 D.编程调试 9.软件调试的目的是( ) A. 发现错误
8、 B.改正错误 C.改善软件的性能 D.挖掘软件的潜能 10.软件需求分析阶段的工作,可以分为四个方面:需求获取,需求分析,编写需求规格说明书,以及( ) A.阶段性报告 B.需求评审 C.总结 D.都不正确 二.填空题 1.软件是程序、数据和( )的集合. 2.Jackson 方法是一种面向( )的结构化方法 3.软件工程研究的内容主要包括( )技术和软件工程管理 4.数据流图的类型有( )和事务型 5.软件开发环境是全面支持软件开发全过程的( )集合。 第三章参考答案 一选择题 1D 2. D 3. A 4. A 5. C 6. B 7. D 8. C 9. B 10. B 二填空题 1)
9、 文档 2) 数据流 3) 软件开发 4) 变换型 5) 软件工具 转贴 第四章 数据库设计基础 一选择题 1.在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是( ) A.数据库系统 B.文件系统 C.人工管理 D.数据项管理 2.下述关于数据库系统的叙述正确的是( ) A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余 C.数据库系统中数据的一致性是指数据类型一致 D.数据库系统比文件系统能管理更多的数据 3.数据库系统的核心是( ) A. 数据库 B.数据库管理系统 C.数据模型 D.软件工具 4.用树形结构来表示实体之间联系
10、的模型称为( ) A. 关系模型 B.层次模型 C.网状模型 D.数据模型 5.关系表中的每一横行称为一个( ) A. 元组 B.字段 C.属性 D.码 6.按条件 f 对关系 R 进行选择,其关系代数表达式是( ) A. R|R B. R|R C. f(R) D. f(R) 7关系数据管理系统能实现的专门关系运包括( ) A.排序、索引、统计 B.选择、投影、连接C.关联、更新、排序 D.显示、打印、制表 8在关系数据库中,用来表示实体之间联系的是( ) A.树结构 B.网结构 C.线性表 D.二维表 9数据库设计包括两个方面的设计内容,它们是( ) A.概念设计和逻辑设计 B.模式设计和内
11、模式设计 C.内模式设计和物理设计 D.结构特性设计和行为特性设计 10 将 E-R 图转换到关系模式时,实体与联系都可以表示成( ) A.属性 B.关系 C.键 D.域 二 填空题 1.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体”项目主管”与实体”项目”的联系属于( ) 的联系. 2.数据独立性分为逻辑独立性和物理独立性.当数据的存储结构改变时,其逻辑结构可以不变。因此,基于逻辑结构的应用程序不必修改,称为( ) 3.数据库系统中实现各种数据管理功能的核心软件称为( ) 4.关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、( ) 和自定义完整性. 5.在关系模型
12、中,把数据看成一个二维表,每一个二维表称为一个( )转贴于 第四章参考答案 一选择题 1A 2. A 3. B 4. B 5. A 6. C 7. B 8. D 9. A 10. B 三. 填空题 1) 一对多( 或 1:N) 2) 逻辑独立性 3) 数据库管理系统 4) 参照完整性 5) 关系 转贴于 一、选择题 ()下列关于栈的叙述正确的是A) 栈是非线性结构 B)栈是一种树状结构 C) 栈具有先进先出的特征 D)栈具有后进先出的特征 ()结构化程序设计所规定的三种基本控制结构是A) 输入、处理、输出 B)树形、网形、环形 C)顺序、选择、循环 D)主程序、子程序、函数 ()结构化程序设计
13、的一种基本方法是A) 筛选法 B)递归法 C)归纳法 D)逐步求精法 ()如果对一个关系实施了一种关系运算后得到了一个新的关系,而且新的关系中属性个数少于原来关系中属性个数,这说明所实施的运算关系是:A)选择 B)投影 C)连接 D)并二、填空题 .对于输入为 N 个数进行快速排序算法的平均时间复杂度是( ) .在面向对象方法学中,直接反映了用户对目标系统的要求的模型是( ) .软件测试方法中,黑盒测试个白盒测试法是常用的方法,其中黑盒测试法主要是用于测试( ) .关系型数据库管理系统中存储与管理数据的基本形式是( )C 语言程序设计 一、选择题 (1)以下程序的输入结果是main( ) in
14、t i=010,j=10,k=x10; printf(“%d,%d,%d “,i,j,k);A)8,10,16 B)8,10,10 C)10,10,10 D)10,10,16 (2)指针 s 所指字符串的长度 char *s=“ “Name Address “;A) 说法不合法 B)19 C)18 D)15 (3)C 语言中最简单的数据类型包括A) 整型、实型、逻辑型 B)整型、实型、字符型 C) 整型、字符型、逻辑型 D)整型、实型、逻辑型、字符型 (4)为表示关系 x 大于等于 y 大于等于 z,应使用 C 语言表达式A) (x=Y)do printf(“%3d“,x-=2); while
15、(!(- -x);A)1 B)30 C)1 -2 D)死循环 (8)设有如下定义:char *aa2=“abcd“,“ABCD“; 则以下说法中正确的是A)aa 数组元素的值分别是“abcd“和“ABCD“ B)aa 是指针变量,它指向含有两个数组元素的字符型一维数组C)aa 数组的两个元素分别存放的是含有 4 个字符的一维字符数组的首地址 D)aa 数组的两个元素中各自存放了字符a和A的地址 (9)设有以下定义:int a43=1,2,3,4,5,6,7,8,9,10,11,12;int (*prt)3=a, * p=a0; 则下列能够正确表示数组元素 a12的表达式是A)* (* prt
16、+ 1)2) B)*(*(p+5) C)(* prt + 1)+2 D)*(*(a+1)+2) (10)以下程序的输出结果是fut( int * *s,int p23) * *s=p11; main( ) int a23=1,3,5,7,9,11,*P; p=(int * )malloc(sizeof(int); fut( print(“% “,*p);A)1 B)7 C)9 D)11 二、填空题 (1)表示条件:10 (2)下列程序的输出结果是( )#includemain( ) char b =“ABCDEFG“; char *chp= while(- -chp putchar(“ “);
17、 (3)下列程序的输出结果是( ) int ast( int x,int Y,int * cp,int * dp) * cp=x+y; * dp=x-y;main( ) int a,b,c,d; a=4;b=3; ast(a,b, print(“% d % d n“,c,d); (4)阅读程序: main( ) char str1 =“how do you do“,str210; char *p1=str1,*p2=str2; scanf(“% s“,p2); printf(“%s“,p2); printf(“%s “,p1); 运行上面的程序,输入字符串 HOW DO YOU DO 则程序的
18、输出结果是( ) (5)以下程序由终端键盘输入一个文件名,然后把从终端键盘输入的字符依次存放到该文件中,用#作为结束输入的标志。请填空。#includemain( ) FILE * fp; char ch,fname 10; printf(“Input the name of file “); gets(fname); gets(fname); if(fp=5)= =NULL) printf(“Cannot open “); exit(0); printf(“Enter data “); while(ch=getchar()!=#) fputc(6,fp); fclose(fp); 三、上机操
19、作题1. 改错题 下列给定程序中,函数 fun 的功能是:逐个比较 a、b 两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到c 数组中,形成一个新的字符串。例如:若 a 中的字符串为:aBCDeFgH,b 中的字符串为:ABcd,则 c 中的字符串应为:aBcdeFgH.请改正程序中的错误,使它能得到正确结果,注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序:#include#includevoid fun (char *p, char *q, char *c) int k=1; while(*p! = *q) if ( *p!# incl
20、ude void fun ( int *a, int *n)main( ) int aa1000,n,k; clrscr( ); fun (aa, for (k=0;k if(k+1)%10= = 0) printf (“ “); else printf(“%5d“,aak); 二级(C 语言程序设计)样题参考答案 一、选择题 (1)D (2)C (3)D (4)B 二、填空题(1)1O(Nlog2 N)(2)2 功能模型(3)3 软件外部功能(4)4 二维表C 语言程序设计 一、选择题 (1)A (2)D (3)B (4)A (5)C (6)C (7)C (8)D (9)D (10)C 二、
21、填空题 (1)1 (x10 则执行 a+=a-=a*a;语句后,a 的值为A)36 B)0 C)-24 D)-60正确答案: D (14)下面各选项中,均是 C 语言标识符的选项组是A)forchinato B)long_123short56_do C)voidunion_342 D)text.txt _023_3ew正确答案: B (15)下列表达式中,结果为 5 的是A)6*5%6 B)5*-2+15C)5+75%10 D)6+-2/3正确答案: B (16)下列常量中,为不合法的实型常量表示的是A).0032 B)0.0C)0.3242E8 D).E3正确答案: D (17)关于 C 语
22、言的主函数描述正确的是A)C 程序可以有多个 main 函数B)C 程序必有一个而且只能有一个 main函数C)C 程序可以没有 main 函数D)C 程序的执行不一定在 main 函数开始执行正确答案: B (18)已知 int a=1,b=-1;则语句printf(“%dn“,(a-,+b );的输出结果是A)-1 B)0 C)1 D)语句错误正确答案: B (19)已知 int a,b;double c;则以下语句中错误的函数调用是A)scanf(“%d,%x,%lf“,B)scanf(“%d,%d,%le“,C)scanf(“%o,%x,%o“,D)scanf(“%d,%o,%e“,正
23、确答案: D (20)已知 x,y,z 均为整型变量,且值均为 1,则执行语句+x|+y后,表达式 x+y 的值为 正确答案: CA)1 B)2 C)3 D)4(30)阅读下面程序,则程序执行后的结果为#include “stdio.h“main()int a=4,b=6,c=7;double d,fun(int,int,int );d=fun(a,b,c);printf(“%lf n“,d);double fun(int a,int b,int c)double s;s=a%b*c;return s;A)27 B)27.000000C)28 D)28.000000正确答案: D (31)下列
24、不合法的指针变量的定义是A)int *_k; B)char *_245;C)int *p; D)double *5_is正确答案: D (32)下列关于指针变量赋空值的说法错误的是A)当赋空值的时候,变量指向地址为 0的存储单元B)赋值语句可以表达为变量名=0 ;C)赋值语句可以表达为变量名=0;D)一个指针变量可以被赋空值正确答案: A (33)阅读下面程序,则执行后输出的结果为#include “stdio.h“void fun(int *a,int *b)int m;m=(*a+*b)*( *a+*b);m+=(*a-*b)*(*a-*b);printf(“%dn“,m);main()
25、int a=5,b=6,*x=fun(x,y);A)120 B)121 C)122D)123 正确答案: C (34)阅读下面程序,则输出结果是#include “stdio.h“void fun(int *a,int *b)int c=20,d=25;*a=c/3;*b=d/5;main() int a=3,b=5;fun(printf(“%d,%d n“,a,b);A)6,5 B)5,6 C)20,25 D)3,5正确答案: A (35)以下对一维数组 c 进行正确的定义初始化的语句是A)int c 10=0; B)int c10=0*10;C)int c1=0,0,0,0,0,0,0;D
26、)int c 10=0; 正确答案: D (36)以下二维数组 c 的定义形式是A)int c 3 B)float c3,4C)double c34 D)float c (3)(4)正确答案: C (37)阅读下列程序,则执行后输出的结果是#include “stdio.h“int k=1;main()fun(k);printf(“%dn“,k);fun(int k) k+;k=k*6; 正确答案 : A A)1 B)2 C)6 D)12(38)已知#define M 2;的宏定义,执行语句 k=M*5;后, k 的值是A)10 B)5 C)2 D)以上答案都不对 正确答案: D (39)已知
27、:int c34;则对数组元素引用正确的是A)c 1 4 B)c 1.50C)c 1+0 0 D)以上表达都错误正确答案: C (40)现有如下程序段#include “stdio.h“void fun(int *a,int *b,int *c )*c=*a+*b;main()int a2=12,23,c;fun(a,a+1,printf(“%dn“,c);则程序的输出结果为A)23 B)12C)0 D)35正确答案: D (41)若有以下语句,则正确的描述是char a =“toyou“;char b=t,o,y,o,u;A)a 数组和 b 数组的长度相同B)a 数组长度小于 b 数组长度C
28、)a 数组长度大于 b 数组长度D)a 数组等价于 b 数组正确答案: C (42)已知:char a15,b15=“I love china“;则在程序中能将字符串 I love china 赋给数组 a 的正确语句是A)a=“I love china“; B)strcpy( b,a);C)a=b; D)strcpy(a,b); 正确答案:D (44)阅读下面程序,则执行后的结果为#include “stdio.h“main() char *str=“abcdefghijklmnopq“;while(*str+!=e);printf(“%c n“,*str);A)f B)a C)eD)q 正
29、确答案: A (45)现有如下程序段#include “stdio.h“int fun(int k,int *m)if( k%3)*m=k*k;else *m=k/3;main() int (*p)(int,int *),m;p=fun;(*p)(78,printf(“%dn“,m);则程序段的输出结果为A)24 B)25 C)26D)27 正确答案: C (46)阅读下列程序,则执行后的输出结果为#include “stdio.h“fun(int x)if( x/20)fun(x/2);printf(“%d“,x%2);main() fun(20);putchar(n );A)11100 B
30、)10100 C)10101D)10110 正确答案: B (47)阅读如下程序段,则执行后程序的输出结果是#include main()structaint x; int y;num2=20,5,6,7;printf(“%dn“,num0.x/num 0.y*num1.y);A)0 B)28 C)20 D)5 正确答案: B (48)阅读程序段,则执行后的输出结果为#include “stdio.h“typedef union long x2;int y4;char z8 ; atx;typedef struct aa long x2;int y4;char z8 ; stx;main()p
31、rintf( “union=%d,struct aa=%dn“,sizeof(atx),sizeof(stx);A)union=8,struct aa=8B)union=8,struct aa=24C)union=24,struct aa=8D)union=24,struct aa=24正确答案: B (49)阅读下列程序段#include “stdio.h“typedef struct aa int a;struct aa *next; M;void set(M *k,int i,int *b) int j,d=0;for(j=1;jnext-a B)+p-aC)(*p).a+ D)p+-a
32、正确答案: A (50)阅读下面程序,程序实现的功能是(a123.txt 在当前盘符下已经存在)#include “stdio.h“void main()FILE *fp;int a10 ,*p=a;fp=fopen(“a123.txt“,“w“);while( strlen(gets(p)0 ) fputs(a,fp);fputs(“n“,fp);fclose(fp);A)从键盘输入若干行字符,按行号倒序写入文本文件 a123.txt 中B)从键盘输入若干行字符,取前 2 行写入文本文件 a123.txt 中C)从键盘输入若干行字符,第一行写入文本文件 a123.txt 中D)从键盘输入若干
33、行字符,依次写入文本文件 a123.txt 中正确答案: D 二 、填空题(1)排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、 【1】 和选择排序等。 正确答案 : 1.(交换排序 ) (2)当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为 【2】 。 正确答案: 1.(上溢) (3) 【3】 是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。 正确答案: 1.(封装)(4)为了便于对照检查,测试用例应由输入数据和预期的 【4】 两部分组成。 正确答案: 1.(输出结果) (5) 【5】 是从二维表列的方向进行的运算。正确答
34、案: 1.(关系运算) (6)定义 int a=5,b=20;若执行语句printf(“%dn“,+a*-b/5%13);后,输出的结果为 【6】 。 正确答案: 1.(9) (7)执行程序时的输入为 123456789,则程序的运行结果为 【7】 。#include “stdio.h“main() int a,b;scanf(“%2d%*2d%1d“,printf(“%dn“,a-b);正确答案: 1.(7) (8)阅读下面程序,则在执行时候的输出为 【8】 。#include “stdio.h“main()int x=1,y=2,z=0;if(x=2 ) z=x,x=y,y=z;print
35、f(“%d,%d n“,x,y);正确答案: 1.(2,2) (9)语句 printf( “%dn“,H-0+64);的执行结果为 【9】 。正确答案: 1.(88) (10)阅读下面程序,则程序的执行结果为 【10】 。#include “stdio.h“main() int a=10;fun(a);printf(“%dn“,a);fun(int x) x=50;正确答案: 1.(10) (11)以下程序的输出结果是 【11】 。int fun(int x,int y,int *p,int *q) *p=x*y;*q=x/y;main()int a,b,c,d;a=4;b=3;fun(a,b
36、,printf(“%d,%d n“,c,d);正确答案: 1.(12,1) (12)下面程序是求出数组 arr 的两条对角线上元素之和,请填空。#include “stdio.h“main()int arr 33=2,3,4,8,3,2,7,9,8,a=0,b=0,i,j;for(i=0;i=0;j-)if( 【14】 )b=b+ arrij;printf(“%d,%d n“,a,b);正确答案: 1.(i=j ) 2.(j=2) 3.(i+j=2) (13)下面程序的功能是:对字符串从小到大进行排序并输出,请填空。#include “string.h“#include “stdio.h“so
37、rt(char *a,int n) int i,j;char *p;for(j=1;j0) p=ai;ai =ai+1;ai+1=p;main() int i;char *book=“itisme“,“itisyou“,“howareyou“,“fine“,“goodnight“,“goodbye“;sort( 【17】 );for(i=0;inext=NULL;head=q;else q-next=head;head=q;main()char ch;struct node *p;head = NULL;while( ch=getchar()!=n)p=(struct node *)mallo
38、c(sizeof(struct node) ;p-data=ch;fun(p); p=head;while(p!=NULL )printf( “%c“,p-data);p=p-next; 正确答案: 1.(从键盘输入一行字符串,调用函数建立反序的链表,然后输出整个链表) (1)最简单的交换排序方法是A)快速排序 B)选择排序C)堆排序 D)冒泡排序 正确答案: D (2)栈通常采用的两种存储结构是A)线性存储结构和链表存储结构B)散列方式和索引方式C)链表存储结构和数组D)线性存储结构和非线性存储结构 正确答案: A (3)线性表的顺序存储结构和线性表的链式存储结构分别是A)顺序存取的存储结构
39、、顺序存取的存储结构B)随机存取的存储结构、顺序存取的存储结构C)随机存取的存储结构、随机存取的存储结构D)任意存取的存储结构、任意存取的存储结构 正确答案: B (4)完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例的测试方法是A)黑箱测试法 B)白箱测试法C)错误推测法 D)安装测试法 正确答案: A (5)在结构化设计方法中,生成的结构图(SC)中,带有箭头的连线表示A)模块之间的调用关系 B)程序的组成成分 C)控制程序的执行顺序 D)数据的流向 正确答案: A (6)下列选项中,不属于模块间耦合的是A)数据耦合 B)同构耦合C)异构耦合 D)公用耦合 正确答案: C (7)一个关系中属性个数为 1 时,称此关系为A)对应关系 B)单一关系C)一元关系 D)二元关系 正确答案: C (8)为用户与数据库系统提供接口的语言是A)高级语言 B)数据描述语言(DDL)C)数据操纵语言(DML) D)汇编语言 正确答案: C (9)相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和A)可重用性差 B)安全性差C)非持久性 D)冗余性 正确答案: D (10)需求分析阶段的任务是确定A)软件开发方法 B)软件开发工具C)软件开发费用 D)软件系统功能 正确答案: D