您的位置:首页 > 编程语言 > C语言/C++

C/C++专项练习 (二)

2015-10-25 13:44 357 查看
1.若有以下程序

#include <stdio.h>
int f(int a[ ],int n)
{
if(n > 1)
{
int t;
t=f(a, n-1);
return t > a[ n -1 ] ? t:a[n-1];
}
else
return a[0];
}
main()
{
int a[ ]= {8,2,9,1,3,6,4,7,5};
printf("%d\n", f(a, 9));
}

则程序的输出结果是?

9

1

8

5

答案:A

主要考察函数的递归调用

2.关于函数模板,描述错误的是? 

函数模板必须由程序员实例化为可执行的函数模板

函数模板的实例化由编译器实现

一个类定义中,只要有一个函数模板,则这个类是类模板

类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化

答案:A

函数模板是 编译器 按照程序员的要求 实例化为函数

3.下面有关malloc和new,说法错误的是? 

new 建立的是一个对象, malloc分配的是一块内存.

new 初始化对象,调用对象的构造函数,对应的delete调用相应的析构函数,malloc仅仅分配内存,free仅仅回收内存

new和malloc都是保留字,不需要头文件支持

new和malloc都可用于申请动态内存,new是一个操作符,malloc是是一个函数

答案: C

new和delete是保留字,而malloc和free需要头文件支持

4.以下程序的结果? 

void foo(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void main()
{
int a = 1, b = 2, c = 3;
foo(&a, &b);
foo(&b, &c);
foo(&c, &a);
printf("%d, %d, %d", a, b, c);
}


1,2,3

1,3,2

2,1,3

3,2,1

答案:B

经典水题,函数foo()的功能是交换a和b的值

5.两个等价线程并发的执行下列程序,a为全局变量,初始为0,假设printf、++、--操作都是原子性的,则输出肯定不是哪个?

void foo() {
if(a <= 0) {
a++;
}
else {
a--;
}
printf("%d", a);
}


0 1

1 0

1 2

2 2

答案:A

os学的太烂,这个题不会,下去要恶补啊!!

6.以下哪些对象可用于Windows进程间通信?

事件

临界区

互斥量

共享内存

答案: D

进程间通信方法有:文件映射、共享内存、匿名管道、命名管道、邮件槽、剪切板、动态数据交换、对象连接与嵌入、动态连接库、远程过程调用等

7.下面对静态数据成员的描述中,正确的是?

静态数据成员可以在类体内进行初始化

静态数据成员不可以被类的对象调用

静态数据成员不受private控制符的作用

静态数据成员可以直接用类名调用

答案:D

A: const修饰的静态成员可以在类体内初始化 (有些编译器会错误的不允许)

B:可以调用,但要注意的是,所有对象调用的都是同一个静态成员

C:类中所有成员变量都受private、public限制

8.若char是一字节,int是4字节,指针类型是4字节,代码如下:

class CTest
{
public:
CTest():m_chData(‘\0’),m_nData(0)
{
}
virtual void mem_fun(){}
private:
char m_chData;
int m_nData;
static char s_chData;
};
char CTest::s_chData=’\0’;


问:

(1)若按4字节对齐sizeof(CTest)的值是多少?

(2)若按1字节对齐sizeof(CTest)的值是多少?

请选择正确的答案。

16 4

16 10

12 9

10 10

答案:C

碰到过好几次了。。。

9.定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?

int (*(*F)(int, int))(int)

int (*F)(int, int)

int (*(*F)(int, int))

*(*F)(int, int)(int)

答案:A

分2步来做,第1步,“指向的函数有两个int形参并且返回一个函数指针”,可得到 (*F)(int,
int)

第2步,“返回的指针指向一个有一个int形参且返回int的函数”,将(*F)(int,int)作为一个指针,可知 int
(*(*F)(int, int))(int)符合要求

10.如下程序用于输出“Welcome to Huawei Test”,请指出其中的两处错误。

char * GetWelcome(void){
char * pcWelcome;
char * pcNewWelcome;
pcWelcome="Welcome to Huawei Test";
pcNewWelcome=(char *)malloc(strlen(pcWelcome));    //1
if(NULL==pcNewWelcome){
return NULL;        //2
free(pcNewWelcome);
}
strcpy(pcNewWelcome, pcWelcome);    //3
return pcNewWelcome;            //4
}


1

2

3

4

答案:A B

A:strlen()函数和sizeof()的区别在于,前者不包含结束符'\0'

B:应该先释放,再退出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++