[C++]基础题目总结
C++期末复习
一、选择题考察的知识点(40分)
C++在C的基础上多了什么新特性
- 类和对象
- 继承
- 多态、虚函数和RTT1(运行阶段类型识别)
- 函数重载
- 引用变量
- 泛型(独立于类型的)编程,这种技术是由模版和标准模版库(STL)提供的
- 处理错误条件的异常机制
- 管理函数、类和变量名的名称空间
编写C++程序的步骤
1、用C++语言编写程序
用高级语言编写的程序称为“源程序”(source program)。C++的源程序是以.cpp作为后缀的(cpp是c plus plus 的缩写)。
2、对源程序进行编译
为了使计算机能执行高级语言源程序,必须先用一种称为“编译器(complier)”的软件(也称编译程序或编译系统),把源程序翻译成二进制形式的“目标程序(object program)”。
编译是以源程序文件为单位分别编译的。目标程序一般以.obj或.o作为后缀(object 的缩写)。编译的作用是对源程序进行词法检查和语法检查。编译时对文件中的全部内容进行检查,编译结束后会显示出所有的编译出错信息。一般编译系统给出的出错信息分为两种,一种是错误(error);一种是警告(warning) 。
3、将目标文件连接
在改正所有的错误并全部通过编译后,得到一个或多个目标文件。此时要用系统提供的“连接程序(linker)”将一个程序的所有目标程序和系统的库文件以及系统提供的其他信息连接起来,最终形成一个可执行的二进制文件,它的后缀是.exe,是可以直接执行的。
4、运行程序
运行最终形成的可执行的二进制文件(.exe文件),得到运行结果。
5、分析运行结果
如果运行结果不正确,应检查程序或算法是否有问题。
C++中合法标识符的特征
第一个字符必须是字母(不分大小写)或下划线(_);
后跟字母(不分大小写)、下划线(_)或数字组成;
标识符中的大小写字母有区别;
不能与c编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名。比如,不能将标识符命名为float,auto,break,case,this,try,for,while,int,char,short, unsigned,等等;
算符优先级(重点考察算术运算符、逻辑运算符和赋值运算符)
C++运算符优先级表,从上到下,从左到右,优先级依次减弱。 优先级 运算符 说明 结合性 1 :: 范围解析 自左向右 2 ++ — 后缀自增/后缀自减 () 括号 [] 数组下标 . 成员选择(对象) −> 成员选择(指针) 3 ++ — 前缀自增/前缀自减 自右向左 + − 加/减 ! ~ 逻辑非/按位取反 (type) 强制类型转换 * 取指针指向的值 & 某某的地址 sizeof 某某的大小 new,new[] 动态内存分配/动态数组内存分配 delete,delete[] 动态内存释放/动态数组内存释放 4 .* ->* 成员对象选择/成员指针选择 自左向右 5 * / % 乘法/除法/取余 6 + − 加号/减号 7 << >> 位左移/位右移 8 < <= 小于/小于等于 > >= 大于/大于等于 9 == != 等于/不等于 10 & 按位与 11 ^ 按位异或 12 | 按位或 13 && 与运算 14 || 或运算 15 ?: 三目运算符 自右向左 16 = 赋值 += −= 相加后赋值/相减后赋值 *= /= %= 相乘后赋值/相除后赋值/取余后赋值 <<= >>= 位左移赋值/位右移赋值 &= ^= |= 位与运算后赋值/位异或运算后赋值/位或运算后赋值 17 throw 抛出异常 18 , 逗号 自左向右
算术表达式、逻辑表达式
算术运算符
下表显示了 C++ 支持的算术运算符。
假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 – 从第一个操作数中减去第二个操作数 A – B 将得到 -10 * 把两个操作数相乘 A * B 将得到 200 / 分子除以分母 B / A 将得到 2 % 取模运算符,整除后的余数 B % A 将得到 0 ++ 自增运算符,整数值增加 1 A++ 将得到 11 — 自减运算符,整数值减少 1 A– 将得到 9 逻辑运算符
下表显示了 C++ 支持的关系逻辑运算符。
假设变量 A 的值为 1,变量 B 的值为 0,则:
运算符 描述 实例 && 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。 || 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A || B) 为真。 ! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 !(A && B) 为真。
条件判断语句if的使用方法
循环语句(while, for)的使用方法
while循环语法
C++ 中 while 循环的语法:
while(condition) { statement(s); }在这里,statement(s) 可以是一个单独的语句,也可以是几个语句组成的代码块。condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。
当条件为假时,程序流将继续执行紧接着循环的下一条语句。
流程图
在这里,while 循环的关键点是循环可能一次都不会执行。当条件被测试且结果为假时,会跳过循环主体,直接执行紧接着 while 循环的下一条语句。
for循环语法
C++ 中 for 循环的语法:
for ( init; condition; increment ) { statement(s); }下面是 for 循环的控制流:
- init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
- 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
- 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
- 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
流程图
函数默认参数的使用方法(注意默认参数和非默认参数的顺序)
① 有函数声明(原型)时,默认参数可以放在函数声明或者定义中,但只能放在二者之一
double sqrt(double f = 1.0); //函数声明 double sqrt(double f) //函数定义 { // .... }② 没有函数(原型)时,默认参数在函数定义时指定.
//没有 函数声明 double sqrt(double f = 1.0) //函数定义③ 在具有多个参数的函数中指定默认值时,默认参数都必须出现在不默认参数的右边,一旦某个参数开始指定默认值,它右边的所有参数都必须指定默认值.
int f (int i1, int i2 = 2, int i3 = 3); // 正确 int g (int i1, int i2 = 2, int i3); // 错误, i3未指定默认值 int h (int i1 = 1, int i2, int i3 = 3); // 错误, i2未指定默认值④ 在调用具有默认参数的函数时, 若某个实参默认,其右边的所有实参都应该默认。
//例如, 一个函数声明如下 int f(int i1 = 1, int i2 =2, int i3 = 3); //调用函数 f() f(); //正确, i1=1, i2=2, i3=3 f(3); //正确, i1=3, i2=2, i3=3 f(2, 3); //正确, i1=2, i2=3, i3=3 f(4, 5, 6); //正确, i1=4, i2=5, i3=6 f(, 2, 3); //错误, i1默认,其右边的i2和i3没有默认
重载函数的定义
数组的定义,数组下标的范围,数组元素的使用方法(下标引用,指针引用)
初始化字符数组的方法(注意字符串以’\0’结尾,多占一个字符)
引用的建立方法
面向对象中成员访问标签的使用方法:公有,私有,保护,注意三者的区别
静态数据成员初始化方法(注意,如果定义时没赋初值,对于静态成员会初始化为0)
构造函数、拷贝构造函数、析构函数的使用方法
虚函数的定义及使用方法(搞清楚虚函数的使用场景)
虚基类的使用方法,为什么要使用虚基类
继承有哪几种方式,每种方式的特点是什么?
如果在定义派生类时在基类前没有指定访问标签,默认情况下是哪种继承的方式?
输入输出流对象的使用方法
new, delete语句的使用方法
什么函数会有this指针?友元函数是成员函数吗?友元的作用是什么?
二、编程题(60分)
基本循环(1题)
编写程序,计算下式的值 1-3+5-7….-99
编写程序,计算并输出半径r = 1到r = 20之间半径为整数的圆形的面积,直到面积大于100为止
水仙花数怎么计算,完数怎么计算等,具体看一下循环章节的练习题
数组使用方法(1题)
有如下矩阵,编写三个函数,分别计算每行的和、每列的和,矩阵中最大元素所在的位置
编写函数,求矩阵Y的值
字符串操作(1题)
给定一个字符串,写函数判断字符串中每个数字字符出现的频率
给定一个字符串,写函数判断字符串中是否包含另一个字符串
给定一个字符串,写函数判断该字符串是否为回文字串(正读反读均相同)
面向对象编程(1题) —- 多态章节