1、国家计算机二级(C+)67 及答案解析(总分:460.00,做题时间:120 分钟)一、选择题(每小题 2分,共 70分) 下列各(总题数:35,分数:70.00)1.有以下程序: main() int m,n,p; scanf(“m=%dn=%dp=%d“, printf(“%d%d%d/n“,m,n,p); 若想从键盘上输入数据,使变量 m 中的值为 123,n 中的值为 456,p 中的值为 789, 则正确的输入是_。(分数:2.00)A.m=123n=456p=789B.m=123 n=456 p=789C.m=123,n=456,p=789D.123 456 7892.下面程序的运
2、行结果是( )。 #ncludeiostream.h int fun(inta,int n) int result=1; for(int i=1;in;+) result=result*ai; return result; void main( ) int a3 =3,4,5; coutfun(a,3)endl; (分数:2.00)A.2B.0C.-2D.13.程序流程图中带有箭头的线段表示的是(分数:2.00)A.图元关系B.数据流C.控制流D.调用关系4.有如下说明 int a10=l,2,3,4,5,6,7,8,9,10,*p=a;则数值为 9的表达式是【 】(分数:2.00)A.*p+
3、9B.*(p+8)C.*p+=9D.p+85.如果利用 C+流进行输入输出,下面的叙述中正确的是(分数:2.00)A.只能借助于流对象进行输入输出B.只能进行格式化输入输出C.只能借助于 cin和 cout进行输入输出D.只能使用运算符和B.+ - + -C. = c,a+cb,b+ca。请填空。 main1 float a,b,c; scanf(“%f%f%f“, if(= 2)printf(“YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:30.00)填空项 1:_37.派生类的成员一般分为两部分,一
4、部分是 1,另一部分是自己定义的新成员。(分数:30.00)填空项 1:_38.以下程序的功能是输出如下形式的方阵: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 请填空。 main1 int i,j,x; for(j=4;j 2 ;j-) for(i=1;i和B.+ - + -C. = c,a+cb,b+ca。请填空。 main1 float a,b,c; scanf(“%f%f%f“, if(= 2)printf(“YES/n“); /*a、b、c 能构成三角形*/ else printf(“NO/n“); /*a、b、c 不能构成三角形*/ (分数:30.
5、00)填空项 1:_ (正确答案:(a+bc) for(j=4;j 2 ;j-) for(i=1;i=1 或 0 , i)解析:本程序有两重 for循环,外层 for循环控制输出数据的行数,故第 -|_|-空填“=1”或“0”,内层循环控制每行输出的个数。在内层 for循环中,用语句“x=(j-1)*4+ -|_|-;”控制输出方阵中的具体数据, 由于这些数据与其所在的行、列(j,i)有关系x=(j-1)*4+i,故此空填 i。39.用来派生新类的类称为 1,而派生出的新类称为它的子类或派生类。(分数:30.00)填空项 1:_ (正确答案:父类或基类)解析:在 c+语言中,用来派生新类的类称
6、为父类或基类而派生出的新类 i j称为它的子类或派生类。 40.C+语言中关键字运算符有 new,delete 和 1。(分数:30.00)填空项 1:_ (正确答案:sizeof)解析:C+语言中关键字运算符有 3个分别 new,delete 和 sizeof。new 是申请内存, delete 是释放内存,sizeof 是求字节数。41.算法复杂度主要包括时间复杂度和 1 复杂度。(分数:30.00)填空项 1:_ (正确答案:空间)解析:程序在计算机上运行时所耗费的时间由下列因素所决定:程序运行时所需输入的数据总量,对源程 序进行编译所需时间,计算机执行每条指令所需时间,程序中的指令重复
7、执行的次数。前一条取决于实现 算法的计算机软、硬件系统,习惯上常常把语句重复执行的次数作为算法运行时间的相对量度,称作算法 的时间复杂度。算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。42.以下程序的功能是计算:s=1+12+123+1234+12345。请填空。 main1 int t=0,s=0,i; for(i=1;i=5;i+) t=i+= 2; s=s+t; printf(“s=%d/n“,s); (分数:30.00)填空项 1:_ (正确答案:t*10)解析:本程序中变量 s 用于存放表达式“1+12+123+1234+12345”之和,变量 t 用于存放其表达式的各项
8、, 由于 i=1 时,要使得 t=1;i=2 时,要使得 t=12;i=3 时,要使得 t=123;依此类推。故每一次循环的 t 的值 与此次的 i 及上次的 t 密切相关,即每一次的 t 值可用上次的 t 乘以 10 再加上此次的 i 的值就可以了,所以 本题答案为 t*10。43. 以下程序的输出结果是 1。 #includeiostreamh class object private: int va1; public: object2; object(int i) object3; ; object:Object4 va1=0; cout “Default constructor for
9、 object“ end1; object:object(int i) va1=i cout “Constructor for object“ va1 end1; object:object5 cout “Destructor for object“ va1 end1; class container private: object one; object two; int data; public: container6; container(int i,int j,int k); container7; ; container:container8 data=0; cout “Defaul
10、t constructor for container“ end1; container:container(int i,int j,int k):two(i),one(j) data=k; cout “Constructor for container“ end1; container:container9 cout “Destructor for container“ end1; void main10 container anObj(5,6,10); (分数:30.00)填空项 1:_ (正确答案:Constructor for object6 Constructor for objec
11、t5 Constructor for container Destructor for container Destructor for object5 Destructor for object6)解析:+语言中的构造函数和析构函数分别是在声明对象时和对象调用完毕后调用,本题中的调用就是这样成对出现的。44.通过使用 new和 delete两个运算符进行的分配为 1 存储分配。(分数:30.00)填空项 1:_ (正确答案:动态)解析:本题考查的是对动态分配内存的掌握,在 C+语言中,使用关键字 new和 delete 进行动态内存申请和释放。 45.c+语言中的多态性分为编译时的多态性和
12、1 时的多态性。(分数:30.00)填空项 1:_ (正确答案:运行)解析:在 c+语言中,多态性分为编译时的多态性和运行时的多态性。 46.已知类 sample是一个抽象类,其成员函数 display是无形参、无返回类型的纯虚函 数,请完成其声明; class sample public: sample1); 2 );(分数:30.00)填空项 1:_ (正确答案:virtual void display-|_|-=O;)解析:本题考查的是纯虚函数与抽象类的声明。 47.以下程序的输出结果是 1。 #includeiostreamh unsignedfun(unsignednum) unsi
13、gnedk=1; do k * =num%10;num/=10;while(num); returnk; voidmain( ) unsignedn=26; coutfun(n)endl; (分数:30.00)填空项 1:_ (正确答案:12)解析:函数有一个形参 num,循环前变量 k置 1,循环中,表达式 num%10是取 num 的个位,将 num的个位值累乘于 k中,然后 num除以 10。循环直至 num为。结束,这是 逐一求出 num十进制表示的各位数字,并累乘于变量 k的循环。函数最后返回 k。函数 fun 的功能是求整数的各位十进数字积。 48.假设 int a=1,b=2;,则表达式(+a/b)*b-的值为 1。(分数:30.00)填空项 1:_ (正确答案:2)解析:运算符+的优先级高于双目运算符/,所以括号中的运算为 2/2,最后的结果为 2/2*2。