1.1 程序的编译和执行
1.1.1 简述#include <>和#include " "的区别
#include <> 直接从编译器指定路径处搜索; 系统提供的头文件推荐使用#include <>这种方式引入。。
#include “” 首先在程序当前目录中进行搜索,然后再从编译器指定的路径处搜索;用户自定义的头文件
必须使用#include“”。。
1.1.2 简述#与##在define中的作用
宏定义中的#运算符将其后面的参数转换成字符串;
宏定义中的##运算符将前后的参数进行字符串连接。
1.1.3 简述assert断言的概念
assert是一个带参数的宏,并非一个函数,可以在assert.h找到assert宏的定义。
最好在每个assert中只检测一个条件,不要在assert中修改变量的值,因为assert只在DEBUG版本中起作用,
一旦使用了RELEASE版本,所有的assert都会被忽略,在assert内部变量的修改也随之失效,会造成同一变量
在不同程序版本中的取值不同。
assert用于在程序中的DEBUG版本中检测条件表达式,如果结果为假,则输出诊断信息并终止程序运行。
1.2 变量
1.2.1 简述i++和++i的区别
i++是先赋值后加一,而++i先加一后赋值。
1.2.2 简述C++的类型转换操作符
c++中提供了四种类型转换操作符:static_cast、dynamic_cast、const_cast和reinterpret_cast.
static_cast 可以将父类指针转换成子类指针,也可以将子类指针转换成父类指针,但是如果两个类是不相关的
,则无法相互转换。
dynamic_cast 只能用于对象指针之间的类型转换,可以将父类指针转换为子类指针,也可以将子类指针转换成
父类指针,此外转换结果也是可以引用的。
const_cast 可以在转换的过程中增加或删除const属性。一般情况下,无法将常量指针直接赋值给普通指针,
但是可以通过const_cast 可以移除常量指针的const属性,实线const指针到非const指针的转换。
reinterpret_cast 可以将一种类型的指针转换成另一种类型的指针,不论两个类型之间是否有继承关系。此外
reinterpret_cast 可以把一个指针转换成一个整数,也可把一个整数转换成一个指针。
reinterpret_cast还经常用在不同函数指针之间的转换。
1.2.3 简述静态全局变量的概念
在全局变量前加上static关键字,就定义了一个静态全局变量。
静态全局变量的作用域仅限于定义静态全局变量所在的文件内部,普通全局变量的作用域是整个工程。
如果在头文件中声明静态全局变量,静态全局变量在声明的同时会被初始化,如果静态全局变量没有显示地初始
化则会被初始化为默认值,相当于在头文件中同时完成声明和定义,而普通全局变量不能直接定义在头文件中。
1.3 条件语句和循环语句
1.3.1 不使用break的switch语句
公司年底会给员工发一条关于年终奖的短信,奖品根据员工年度绩效考评结果而定,具体见表。请编写一个函数,
输入为员工年度考评结果,输出为短信内容,短信中需要罗列员工所获得的所有奖品。
考评结果 | 年终奖品 |
---|---|
优秀A | 英国或美国十日游、五千元超市卡、两千元亚马逊卡、一个月奖金 |
优秀B | 五千元超市卡、两千元亚马逊卡、一个月奖金 |
及格C | 两千元亚马逊卡、一个月奖金 |
未达标D | 一个月奖金 |
代码如下
string getMessage(char mamrk){
string message = "Your year award: ";
switch (mark){
case "A": message.append("10 day trip in USA or UK,");
case "B": message.append("5k shopping card of supermarket,");
case "C": message.append("2k coupon of Amazon,");
default : message.append("one month extra salary.");
}
return message;
}
例如,员工的年度考评结果是B,第一个分支case ‘A’不满足条件,因此不执行;第二个分支case'B'满足条件,
后面的语句会执行,由于没有break语句,之后所有分支的语句都会执行,也就是下面的三行代码都会执行:
message.append("5k shopping card of supermarket,");
message.append("2k coupon of Amazon,");
message.append("one month extra salary.");
1.3.2 for循环的三要素
写出下面程序的输出结果: 程序输出ABDCBDCB
bool foo(char c){
cout<<c;
reeturn true;
}
int main(){
int i = 0;
for(foo('A');foo('B')&&(i++ < 2);foo('C')){
foo('D')
}
getchar();
}
//等价的while语句:
foo('A');
while(foo('B')&&(i++ < 2)){
foo('D');
foo('C');
}
1.3.3 巧打乘法口诀表
编写一个函数,接受一个整型参数n表示输出规模
打印乘法表最简单的方法就是二重循环,外层对行做循环,内层对列做循环,循环体内只打印乘法口诀中的一项,
如 5*3=15 代码如