前言
承蒙各位厚爱,我并不是什么大佬,可能很多人都不理解我为什么要无私分享这些资料,这不是帮助竞争对手吗,其实并非如此,因为有各位的关注,我将我的思路公之于众,很多我自己没有发现的错误,大家会发现同时好心的会向我指出来,大家每一次的指正这对于我来说都是一次提升,如果没有发博客,可能很多知识点我还是秉持则我错误的想法,可能到时候考完后看到分数都不知道为什么会那么低,可能就怪学校压分了,还有我也算半个程序员吧,之前在某厂实习半年,每天忙于业务开发,需求永远源源不断,而我自己又想对自己感兴趣的方向去做研究,所以就辞职考研了,希望回到校园这种没有那么忙于业务的环境,去静下心来研究研究。当然我准备的时间也比较晚,所以可能也是炮灰,~说远了,其实就是程序员天生对开源很感兴趣,对重复造*这种事情比较反感,然后再复习的时候找资料发现没有满意的,所以就决定自己做。
选择题
对于选择题其实918的难度是逐年上升的,分数是45分快到总分的三分之一了,所以建议大家多加重视,可以多看两遍【918c++选择和填空题归纳总结】点击,有时间的话可以自己画一下思维导图,把知识点连起来,我认为45分里面起码有18分以上是对概念的辨析,所以我觉得最有效的办法就是打开目录,看着每个小标题问自己,这个是什么,想不起来的就是你需要去复习的,这个阶段可能比较麻烦,但是这应该是解决这18分最有效的方法(我感觉这个比刷题快!!!),其次就是去刷题就是看上面那个总结,我感觉如果今年要往难的出,可能就是向一下这几个方向,如果大家觉得还有可以在评论补充:
- 指针和引用:其实这一块也是c++基础的难点
EX:
int &a[3]; // 错误
int &*p; // 错误
int &&r; // 错误
- 指针和常量:这一块我们书上是分开写的,但是他们结合到一块就比较恶心了
EX:
const int *p //整形常量的指针,它的值不能修改
int *const p //整形的常量指针,它不能指向别的变量,但值可以修改
const int *const p //整形常量的常量指针,它不能指向别的向量,也不能修改
- 友元:书上篇幅比较少,但是这个东西很容易搞混,所以要重视
- 运算符重载:概念比较难记忆,容易遗漏
//运算符重载函数可以是所重载的这个类的成员函数或全局函数
//运算符的重载不能改变运算符的运算对象数。
//一个一元运算符重载成成员函数时,该函数没有形参
//如果将重载函数设计成类的成员函数,它的形参个数比运算符的运算对象数少1
- 继承:这个不是难,是必考考点,记住这幅图就行
口诀:private权限永不变,public继承权不变,protect继承都protect,private继承都private。 - 动态联编和静态联编:这个把书上是没有怎么讲的,但是它又属于虚函数,是必考点之一,所以建议好好理解这两个
- 多重继承:这个也是没有讲的,但是属于继承的考点,可以留意一下
- 虚基类:这个书上没有的,但是考纲明文规定了这是考点,在考纲8.4 这里,所以必须会
这题我想说一下就是虚基类定义需要virtual关键字,但是它是不一定需要使用虚函数的,不要把关键字和虚函数搞混了
编程题
对于编程题,基本上每年都会考个文件操作, 所以这部分还可以重点看看,把文件操作背熟了,这10分就是送的了,其次我想说的就是一些我的个人观点了,我觉得编程题手写,我们是可以有很多发挥空间的,同时老师也是可以中看出一个人写代码的好坏,因为每个人写代码的思路是不一样的,面对同一个问题有的人可以用递归或者其他比较好的方法去解决,而有的人只会暴力(这个人就是我本人了),当然这个并不会决定你的分数,但是我想说的是,那么多人,改卷老师要一份份去看代码,你要是用的方法比较常见,老师一眼就看的出来那还好,如果你的代码比较长,那改卷人需要去仔细读你的逻辑,最后要是发现还是错的,这时估计就是零分了,所以我觉得编程规范是一个很好解决这个问题的办法,首先注释是一个非常好的东西(虽然平时不会去写,但是考试嘛,拿分嘛,不寒蝉),通过注释把每个函数的purpose写出来,其次在每个判断语句和循环语句前也把purpose写出来,这样可以提高阅卷人的效率,可能他看你的purpose对了,代码中的小瑕疵就不看了,第二我觉得编程规范中比较重要的一点是统一命名,命名规则我也在之前的博客中提过,【小驼峰命名法】点击这是我之前实习时公司的命名规则,可以参考,最后我以2021年编程题第一题为例
#include <iostream>
using namespace std;
//1. 编程找出满足ABCD*E=DCBA的互不相同A B C D E的五个数字
//互不相同A B C D E
//purpose:bdifferent这个函数是来判断ABCD是否各不相同
bool bdifferent(int aryList[4]){
/*
这里采用了数组的方式来表示nArr[0]就代表A,nArr[1]就代表B,nArr[2]就代表C,nArr[3]就代表D
代码中用了最朴素的方式来看ABCD是否各个都不同。这里提供另一种思路,但时间复杂度高不如最朴素的
for(int i=0;i<4;i++){
int j=0;
for(j=i;j<4;j++){
if(aryList[i]==aryList[j]){
return true
}
}
}
return false
*/
if(aryList[0]==aryList[1]||aryList[0]==aryList[2]||aryList[0]==aryList[3]||aryList[1]==aryList[2]||aryList[1]==aryList[3]||aryList[2]==aryList[3]) return true;
return false;
}
//purpose:打印ABCDE
void aryprint(int aryList[4],int nE){
cout<<"ABCDE为:"<<endl;
for(int i=0;i<4;i++){
cout<<aryList[i]<<" ";
}
cout<<nE<<endl;
}
int main()
{
int aryList[4];//创建一个数组用于存放ABCD
for(int i=1000;i<9999;i++){//循环获取全部的四位数
int y = 3;//用于方便表示数组下标arrList[3]就是表示D
int nTmp1 = i;//获取当前四位数
//purpose:这个循环用于将i去摸获取最后一位数放入数组中,然后对nTmp1除十,直到四位数都放入数组中
while(nTmp1!=0){
aryList[y]=nTmp1%10;
nTmp1/=10;
y--;
}
//purpose:判断当前数组ABCD是否各不相同,如果相同则continue进入下一个循环,不同则继续执行下面的代码
if(bdifferent(aryList)){
continue;
}
//purpose:将数字倒序放入nTmp3,nTmp3的数表示DCBA
int nTmp2 = i;
int nTmp3 = 0;
while(nTmp2!=0){
int nNum=nTmp2%10;
nTmp2/=10;
nTmp3 = nTmp3*10 + nNum;
}
//purpose:模拟ABCD*E=DCBA
for(int e=1;e<=9;e++){
if((i*e)==nTmp3){
aryprint(aryList,e);
break;
}
}
}
return 0;
}
最后
以上内容是第一期,如果对大家有用的话在做第二期吧
发起一个投票吧,下一篇博客大家是想看19年试卷解析还是918编程题总结