2022华南师范大学C++程序设计(918)硕士研究生考试最后提分tips第一期

前言

承蒙各位厚爱,我并不是什么大佬,可能很多人都不理解我为什么要无私分享这些资料,这不是帮助竞争对手吗,其实并非如此,因为有各位的关注,我将我的思路公之于众,很多我自己没有发现的错误,大家会发现同时好心的会向我指出来,大家每一次的指正这对于我来说都是一次提升,如果没有发博客,可能很多知识点我还是秉持则我错误的想法,可能到时候考完后看到分数都不知道为什么会那么低,可能就怪学校压分了,还有我也算半个程序员吧,之前在某厂实习半年,每天忙于业务开发,需求永远源源不断,而我自己又想对自己感兴趣的方向去做研究,所以就辞职考研了,希望回到校园这种没有那么忙于业务的环境,去静下心来研究研究。当然我准备的时间也比较晚,所以可能也是炮灰,~说远了,其实就是程序员天生对开源很感兴趣,对重复造*这种事情比较反感,然后再复习的时候找资料发现没有满意的,所以就决定自己做。

选择题

对于选择题其实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
  • 继承:这个不是难,是必考考点,记住这幅图就行
    2022华南师范大学C++程序设计(918)硕士研究生考试最后提分tips第一期
    口诀:private权限永不变,public继承权不变,protect继承都protect,private继承都private。
  • 动态联编和静态联编:这个把书上是没有怎么讲的,但是它又属于虚函数,是必考点之一,所以建议好好理解这两个
  • 多重继承:这个也是没有讲的,但是属于继承的考点,可以留意一下
  • 虚基类:这个书上没有的,但是考纲明文规定了这是考点,在考纲8.4 这里,所以必须会
    2022华南师范大学C++程序设计(918)硕士研究生考试最后提分tips第一期

这题我想说一下就是虚基类定义需要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编程题总结

上一篇:DeDeCMS v5.7 SP2正式版 前台任意用户密码修改 漏洞复现


下一篇:织梦怎么去掉index.html