常见C/C++笔试题目整理(含答案)6(最终弹)
来源:互联网 发布:angularjs循环数组 编辑:程序博客网 时间:2024/05/21 08:46
网上流传的一份常见C++笔试题目汇总,供各位有找工作需要的同学参考之用,因为原文较长,遂采用连载形式,本文是该系列的最后一期,希望大家能有所收获。提前说明一点,题目来在网络,答案是网上资料配的仅供参考,已经有许多大侠发现了其中的问题,如有同学觉得哪道题目有异议,欢迎讨论!
题目71-75
71. 分析一下这段程序的输出
class B{public: B() { cout<<"default constructor"<<endl; } ~B() { cout<<"destructed"<<endl; } B(int i):data(i) //B(int) works as a converter ( int -> instance of B) { cout<<"constructed by parameter " << data <<endl; }private: int data;};B Play( B b){ return b ;}
(a) results:
int main(int argc, char* argv[]) constructed by parameter 5
{ destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(t1); destructed t1形参析构
return 0; destructed t2 注意顺序!
} destructed t1
(b) results:
int main(int argc, char* argv[]) constructed by parameter 5
{ destructed B(5)形参析构
B t1 = Play(5); B t2 = Play(10); constructed by parameter 10
return 0; destructed B(10)形参析构
} destructed t2 注意顺序!
--------------------------------------------------------------------------
72.
union a { int a_int1; double a_double; int a_int2;};typedef struct{ a a1; char y;} b;class c{ double c_double; b b1; a a2;};
输出cout<<sizeof(c)<<endl;的结果?
答: 32
-------------------------------------------------------------
73.
struct A{char t:4;char k:4;unsigned short i:8;unsigned long m;}
sizeof(A)=?(不考虑边界对齐)
答:7
struct CELL // Declare CELL bit field
{
unsigned character : 8; // 00000000 ????????
unsigned foreground : 3; // 00000??? 00000000
unsigned intensity : 1; // 0000?000 00000000
unsigned background : 3; // 0???0000 00000000
unsigned blink : 1; // ?0000000 00000000
} screen[25][80]; // Array of bit fields
二、位结构
位结构是一种特殊的结构, 在需按位访问一个字节或字的多个位时, 位结构
比按位运算符更加方便。
位结构定义的一般形式为:
struct位结构名{
数据类型 变量名: 整型常数;
数据类型 变量名: 整型常数;
} 位结构变量;
其中: 数据类型必须是int(unsigned或signed)。 整型常数必须是非负的整
数, 范围是0~15, 表示二进制位的个数, 即表示有多少位。
变量名是选择项, 可以不命名, 这样规定是为了排列需要。
例如: 下面定义了一个位结构。
struct{ unsigned incon: 8; /*incon占用低字节的0~7共8位*/ unsigned txcolor: 4;/*txcolor占用高字节的0~3位共4位*/ unsigned bgcolor: 3;/*bgcolor占用高字节的4~6位共3位*/ unsigned blink: 1; /*blink占用高字节的第7位*/}ch;
位结构成员的访问与结构成员的访问相同。例如: 访问上例位结构中的bgcolor成员可写成:ch.bgcolor
注意:
1. 位结构中的成员可以定义为unsigned, 也可定义为signed, 但当成员长
度为1时, 会被认为是unsigned类型。因为单个位不可能具有符号。
2. 位结构中的成员不能使用数组和指针, 但位结构变量可以是数组和指针,
如果是指针, 其成员访问方式同结构指针。
3. 位结构总长度(位数), 是各个位成员定义的位数之和, 可以超过两个字
节。
4. 位结构成员可以与其它结构成员一起使用。
例如:
struct info{ char name[8]; int age; struct addr address; float pay; unsigned state: 1; unsigned pay: 1; }workers;
上例的结构定义了关于一个工人的信息。其中有两个位结构成员, 每个位结构成员只有一位, 因此只占一个字节但保存了两个信息, 该字节中第一位表示工人的状态, 第二位表示工资是否已发放。由此可见使用位结构可以节省存贮空间。
-------------------------------------------------------------
74.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的,来看看C++中对类似C的函数是怎样编译的:
void foo( int x, int y );该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。
同 样地,C++中的变量除支持局部变量外,还支持类成员变量和全局变量。用户所编写程序的类成员变量可能与全局变量同名,我们以"."来区分。而本质上,编 译器在进行编译时,与函数的处理相似,也为类中的变量取了一个独一无二的名字,这个名字与用户程序中同名的全局变量名字不同。
假设在C++中,模块A的头文件如下:
// 模块A头文件 moduleA.h#ifndef MODULE_A_H#define MODULE_A_Hint foo( int x, int y );#endif在模块B中引用该函数:
//模块B实现文件 moduleB.cpp#include "moduleA.h"foo(2,3);
实际上,在连接阶段,连接器会从模块A生成的目标文件moduleA.obj中寻找_foo_int_int这样的符号!
// 模块A头文件 moduleA.h#ifndef MODULE_A_H#define MODULE_A_Hextern "C" int foo( int x, int y );#endif在模块B的实现文件中仍然调用foo( 2,3 ),其结果是:
(1)模块A编译生成foo的目标代码时,没有对其名字进行特殊处理,采用了C语言的方式;
(2)连接器在为模块B的目标代码寻找foo(2,3)调用时,寻找的是未经修改的符号名_foo。
所 以,可以用一句话概括extern “C”这个声明的真实目的(任何语言中的任何语法特性的诞生都不是随意而为的,来源于真实世界的需求驱动。我们在思考问题时,不能只停留在这个语言是怎么 做的,还要问一问它为什么要这么做,动机是什么,这样我们可以更深入地理解许多问题):实现C++与C及其它语言的混合编程。
extern "C"的惯用法
extern "C"{#include "cExample.h"}而在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。
/* c语言头文件:cExample.h */#ifndef C_EXAMPLE_H#define C_EXAMPLE_Hextern int add(int x,int y);#endif
/* c语言实现文件:cExample.c */#include "cExample.h"int add( int x, int y ){return x + y;}
// c++实现文件,调用add:cppFile.cppextern "C"{#include "cExample.h"}int main(int argc, char* argv[]){ add(2,3); return 0;}
如果C++调用一个C语言编写的.DLL时,当包括.DLL的头文件或声明接口函数时,应加extern "C" { }。
C引用C++函数例子工程中包含的三个文件的源代码如下:
//C++头文件 cppExample.h#ifndef CPP_EXAMPLE_H#define CPP_EXAMPLE_Hextern "C" int add( int x, int y );#endif
//C++实现文件 cppExample.cpp#include "cppExample.h"int add( int x, int y ){ return x + y;}
/* C实现文件 cFile.c/* 这样会编译出错:#i nclude "cExample.h" */extern int add( int x, int y );int main( int argc, char* argv[] ){ add( 2, 3 ); return 0;}
75.101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。
答:
101个先取出2堆:{33,33},第一次称,如果不相等,说明有一堆重或轻。那么把重的那堆拿下来,再放另外35个中的33。如果相等,说明假的重,如果不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻)。第一次称,如果相等的话,这66个肯定都是真的,从这66个中取出35个来,与剩下的没称过的35个比。下面就不用说了。
方法(二):
第3题也可以拿A(50),B(50)比一下,一样的话拿剩下的一个和真的比一下。如果不一样,就拿其中的一堆。比如A(50)再分成两堆25比一下,一样的话就在B(50)中,不一样就在A(50)中,结合第一次的结果就知道了。
(全文完)
- 常见C/C++笔试题目整理(含答案)6(最终弹)
- 常见C/C++笔试题目整理(含答案)1
- 常见C/C++笔试题目整理(含答案)2
- 常见C/C++笔试题目整理(含答案)3
- 常见C/C++笔试题目整理(含答案)4
- 常见C/C++笔试题目整理(含答案)5
- 常见C++笔试题目整理(含答案)10
- 常见C++笔试题目整理(含答案)
- 常见C++笔试题目整理(含答案)0
- 十分常见的C/C++笔试题整理(含答案)
- MS-ATC笔试 题目 (含部分答案)
- 常见(经典)程序练习题(含算法,c答案,java答案)
- Linux 笔试面试常见题目(整理)
- C语言的一些题目(最终)
- C语言笔试面试常见编程题目(更新中)
- c语言常见笔试题目
- 雅虎笔试(含答案)
- c面试题总结(含答案)
- 人生的列车开出了
- 14. 页高速缓存
- 八个必须掌握的DOC命令
- 常见C/C++笔试题目整理(含答案)4
- 常见C/C++笔试题目整理(含答案)5
- 常见C/C++笔试题目整理(含答案)6(最终弹)
- 15. 访问文件
- 16. 页框回收
- 拓扑排序
- CSDN现在是我的家了
- 这是密教图腾上的文字。
- 虎年继续瞎掰:希望如此
- 创造性生存
- Spring中的IOC原理