CC++

it2023-11-22  9

All the persistenceis,because love!

1. 使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐 30个字符,4位精度。以下哪个选项是正确的?

A %-30.4e B %4.30e C %-30.4f D %-4.30f 正确答案:C

解析: -: 左对齐 30: 最小字段宽度 .4: 精确度保留小数4位 f: double精度浮点数 e: 科学计数法

2. malloc函数进行内存分配是在什么阶段?

A 编译阶段 B 链接阶段 C 装载阶段 D 执行阶段 正确答案:D

3. 函数作用:将整型数组p中n个数据增大

void increment_ints (int p [ ], int n){ assert(p != NULL); /* 确保p不为空指针 */ assert(n >= 0); /* 确保n不为负数 */ while (n){ /* 循环n次. */ *p++; /* 增大p*/ p++, n--; /* p指向下一位,n减1 */ } } 以上代码的实现有错误,下面哪句话的表述是正确的? A *p++使得p在解引用之前增大,应该改为(*p)++ B 数组的值是一个不能改变的值,所以p不能直接被修改。应该使用一个和p相关联 的指针来完成这个操 作。 C while循环的条件必须是一个布尔类型的表达式,表达式应该为n!=0. D p不应该定义为变长的数组,参数中不应该包含参数n。 正确答案:A

解析: A同级运算符,自右向左,p++相当于(p++),正确的应该是(*p)++;

4. 如下函数的f(1)的值为()

int f(int n){ static int i=1; if(n>=5){ return n; } n=n+i; i++; return f(n); } A 5 B 6 C 7 D 8 正确答案:C

解析: 该函数为递归调用。 f(1):n=2;i=2;调用f(2) f(2):n=4;i=3;调用f(4) f(4):n=7;i=4;调用f(7) f(7):返回7 即最终函数返回结果为7;

5. 下列给定程序中,函数fun的功能是:把形参a所指数组中的最小值放在元素a[0] 中,接着把a所指数组中的 最大值放在a[1]元素中;再把a所指数组元素中的次小值 放在a[2]中,把a索取数组元素中的次大值放在a[3],以 此类推。例如:若a所指 数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;按规则移动后,数据排列为: 1,9,2,8,3,7,4,6,5。形参 n中存放a所指数组中数据的个数。规定fun函数中的max 存放的当前所找的最大值,px存放当前所找最大值得下标。请在程序的下画线处填入 正确的内容并将下画线删除,使程序得出正确的结果。试题程序。

#include<stdio.h> #define N 9 void fun(int a[ ], int n){ int i, j, max, min, px, pn, t; for (i = 0; i < n - 1; i += 2){ max = min = __; px = pn = i; for (j = i + 1; j < n; j++){ if (max < __){ max = a[j]; px = j; } if (min > __ ){ min = a[j]; pn = j; } } if (pn != i){ t = a[i]; a[i] = min; a[pn] = t; if (px == i){ px = pn; } } if (px != i + 1){ t = a[i + 1]; a[i + 1] = max; a[px] = t; } } } int main( ){ int b[N] = {9, 1, 4, 2, 3, 6, 5, 8, 7}; printf("\nThe original data:\n"); for (int i = 0; i < N; i++) printf("% 4d", b[i]); printf("\n"); fun(b, N); printf("\nThe data after mocinng \n"); for (int i = 0; i < N; i++){ printf("% 4d", b[i]); } printf("\n"); } A 0 a[i] a[i] B a[i] a[j] a[j] C 0 a[j] a[j] D a[i] a[i] a[i] 正确答案:B

解析: 第一空是把a中的一个元素赋给max和min 此时i=0 即填a[i] 第二空是判断max和a[j]的大小关系 第三空是判断min和a[j]的大小关系 ;

6. 下面说法正确的是()

A C++已有的任何运算符都可以重载 B const对象只能调用const类型成员函数 C 构造函数和析构函数都可以是虚函数 D 函数重载返回值类型必须相同 正确答案:B

解析: A 不能重载‘.’,因为‘.’在类中对任何成员都有意义,已经成为标准用法。 不能重载 ?: ,因为这个运算符对于类对象来说没有实际意义,相反还会引起歧义 还有:: C 构造函数 不能是虚函数。 D 函数重载只跟 参数类型和参数个数有关。

7. 下面关于迭代器失效的描述哪个是错误的()

A vector的插入操作不会导致迭代器失效 B map的插入操作不会导致迭代器失效 C vector的删除操作只会导致指向被删除元素及后面的迭代器失效 D map的删除操作只会导致指向被删除元素的迭代器失效 正确答案:A

解析: vector是顺序存储的,只有在尾部插入才不会导致迭代器失效,在头部插入或者中间插入都会导致插入的部位以及其后的所有迭代器都失效; map是映射,key和value是一一对应的,在内存中是零散存在的,迭代器通过key找到value,无论怎么插入都不会让迭代器失效,当然删除只会使得被删除元素的迭代器失效;

8. 下面哪一个是sort的template的正确写法

A void sort(class A first,class A last,class B pred) B void template(class A,class B)sort(A first,A last,B pred) C template<class A><class B> void sort(A first,A last,B pred) D template<class A,class B> void sort(A first,A last,B pred) 正确答案:D

解析: 模板函数格式是先声明模板类型,然后才能使用 格式是 template<class T1, class T2, …> 返回值 函数名(参数列表)

9. 以下程序的运行结果是

main(){ char a[]=”programming”,b[]=”language”; char *p1,*p2; int l; p1=a,p2=b; for(i=0;i<7;i++){ if(*(p1+i)==*(p2+i)){ printf(“%c”,*(p1+i)); } } } A gm B rg C or D ga 正确答案:D

解析: 因为函数一一比较前7个字符的每一个对应的字符,如果相同则输出该字符,不同就不做处理。故答案为D。

10. 下列程序的输出结果:

#include <iostream> using namespace std; class A { public: void print(){ cout << "A:print()"; } }; class B: private A{ public: void print(){ cout << "B:print()"; } }; class C: public B{ public: void print(){ A:: print(); } }; int main(){ C b; b.print(); } A A:print() B B:print() C 编译出错 正确答案:C

解析: 此题考查的是 派生类继承(public,private)基类成员后,继承的基类成员在派生类中的相应权限的 改变。 例如public继承, 基类的各类(public,protected,private)成员在派生类中权限与原来在 基类时保持一致; 而private继承,基类的各类成员在派生类中权限均变为private, 譬如C类中的print 调用A::print(),因为A::print()此时在C类中为private等级,不能被C类任何成员所访问,故不能通过 编译。

最新回复(0)