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

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

前言

第二期主要是对918编程题进行总结归纳,其实我个人觉得编程题的提升空间比较小,我自己对编程题的看法就是尽可能的拿分,说白了就是尽人事听天命,每个人的思维程度不同,对代码的熟悉程度也不相同,到了考场上那个题要是没有想法那就是没有想法,那你对代码再熟悉也于事无补,但是如果你对那个题有思路,但写的时候不会写,那我下面的方法你可以好好看看了,不一定有用,主要看改卷老师,毕竟我也不知道他的评分细则,但只要它不是全对才给分,那么这应该就是有用的。

近四年编程题汇总

21年

1、假设 ABCD X E = DCBA,其中 A,B,C,D,E 分别代表不同的数字、编程找出 A,B,C,D,E 分别是

多少?(考点:for循环,if条件)

2、定义一个函数 char * itos(int n); 实现整形转字符。(考点:ASCII码,字符串,for循环,if条件,%取模)

3、定义一个复数类 CComplex,定义一个两个参数的构造函数(其中一个有默认值) 显示 ,

函数 Show,重载+(使用成员函数) 用 main 函数测试。(考点:运算符重载,类)

4、从键盘连续输入多行字符保存到 D:a.txt 文件中,并从文件中读取显示出来。(考点:文件操作,循环)

20年

1.利用泰勒公式求sinx(10的-6次方的精度 )(考点:泰勒公式,循环)

2.利用函数模板,形参数组,进行对数组从小到大的排序(考点:函数模板,排序)

3.设计并实现一个有序表类,保存一组正整数。提供的功能有:插入一个正整数,删除一个正整数,输出表中第n小的数,按序输出表中的所有数据。(考点:有序表,类)

4.一个时间类,有三个数据成员,时分秒,运用运算符重载实现两个时间对象或一个对象的运算。(都以秒为单位)(考点:类,运算符重载)

19年

1.用穷举法输入1-100的素数。(考点:for循环,素数定义)

2.用递归的方法求1+2+…+n。(考点:递归,if条件)

3.请完成函数int index(char *s,char *t) 函数的作用是返回字符串t出现在字符串s第一次最左边的下标,若t不是s的子串则返回-1。(考点:字符串)

4.请编写抽象类shape,然后派生出Rectangle和Circle类,要求完成计算面积。(考点:类,抽象类)

5.每次从键盘读取一行文本,输出到文件”a.txt”中,当用户输入空行时结束。(考点:文件操作)

18年

1.编程计算300以内的素数(考点:for循环,素数定义)

2.将一个整数反转,例如123->321,(考点:while循环,%取模)

3.将一个数组转置后输出(考点:二维数组,for循环)

4.写一个类,包括一些数据成员,还有静态成员num,用于记录个数,有静态函数getHowMuch()返回实例化的个数(考点:类,静态成员,静态成员函数)

5.统计一个一篇英文小说的单词数,从文件读取小说(考点:循环,文件操作,字符串)

17年感觉没有参考意义

技巧

知道思路,但是有些地方写不出来可以用注释把你的思路写在上面,然后下面乱写都行但是一定要写

总结

年份 考点
21年 for循环if条件,ASCII码,%取模字符串运算符重载文件操作
20年 泰勒公式,循环,函数模板,排序,有序表,运算符重载
19年 for循环素数定义,递归,if条件字符串,抽象类,文件操作
18年 for循环素数定义while循环%取模,二维数组,,静态成员函数,循环,文件操作字符串

我们从统计中不难看出,编程题考点的重复还是挺高的,但是原题再现是绝对没有的,所以我们对重点再现考点进行复习总结还是非常有意义的

循环

for循环

for(初始化语句;循环条件语句;循环后执行语句)

for循环的定义什么的,大家都知道,但是对于循环,除了数值循环,字符串也是可以循环的,

如输出字母A~Z的内码和输出A,B,C的全排列:

#include<iostream>
using namespace std;
//输出字母A~Z的内码
int main(){
    for(char chTmp ='A';chTmp<'Z';chTmp++){
        cout<<chTmp<<":"<<int(chTmp)<<endl;
    }
    return 0;
}

#include<iostream>
using namespace std;
//输出A,B,C的全排列
int main(){
    char chA,chB,chC;
    for(chA ='A';chA<'C';chA++){
        for(chB ='A';chB<'C';chB++){
            if(chA==chB) continue;
            for(chC='A';chC<'C';chC++){
                if(chA==chB||chB==chC) continue;
                cout<<chA<<chB<<chC<<endl;
            }
        }
    }
    return 0;
}

while循环

while(循环条件){执行语句}

先检查循环条件true还是false,如果是false就不会运行执行语句,直接跳过while循环,如果是true就执行下面循环体的执行语句。

押一道和sinx类似的题:

利用泰勒公式求e的x次方(10的-6次方的精度 )

#include <iostream>
#include<cmath>
using namespace std;
//利用泰勒公式求e的x(10的-6次方的精度 )
//purpose:求n分之一的阶乘
double doubleNtest(int nCount){
    double douAll=1.0;
    for(double i=1;i<=nCount;i++){
        douAll = douAll*(1/i);
    }
    return douAll;
}
int main(){
    double douX,douSum=1.0;
    int nCount=1;
    cout<<"请输入x:"<<endl;
    cin>>douX;
    while(pow(douX,nCount)*doubleNtest(nCount)>1e-6){//这里可以用1e-6也可以用pow(10,-6)
        douSum = douSum + pow(douX,nCount)*doubleNtest(nCount);
        ++nCount;
    }
    cout<<"e的"<<douX<<"次方等于:"<<douSum<<endl;

    return 0;
}

条件与取模

如何获取一个数的最后一位,那就是让它对10取模

这里押一题:判断闰年

#include <iostream>
#include<cmath>
using namespace std;
//判断闰年
int main(){
    int nYear;
    cout<<"请输入年份:"<<endl;
    cin>>nYear;
    if((nYear % 400==0) || (nYear % 4 ==0&&nYear % 100 != 0)){
        cout<<"是闰年";
    }else{
        cout<<"不是闰年";
    }
    return 0;
}

字符串

1.获取字符串长度可以用strlen()这个函数,前提是要加**#include cstring>**

2.返回字符串中首次出现子串的地址可以用strstr()这个函数,前提是要加**#include cstring>**

#include <iostream>
#include <string.h>
using namespace std;
//3.请完成函数int index(char *s,char *t) 函数的作用是返回字符串t出现在字符串s第一次最左边的下标,若t不是s的子串则返回-1。
int index(char *s,char *t){
    if (!s || !t) return -1;
    char *p = strstr(s,t);
    if (!p) return -1;
    return p - s;
}
int main()
{
    char a[100];
    char b[100];
    cout<<"01"<<endl;
    cin>>a;
    cout<<"02"<<endl;
    cin>>b;
    cout << index(a,b) << endl;
    return 0;
}


3.ASCII码大小: “A”为65;“a”为97;“0”为 48。所以字母大写改小写就是+32,同理小写改大写-32,还有数字转字符类型就+48

4.char类型数组的最后一个一定是’’,所以在创建数组时,要空间+1

文件操作

1.使用文件操作必须包含**#include fstream>**

2.写文件是ofstream fout(“a.txt”);默认是out,打开文件做写操作

3.读文件是ifstream fin(“a.txt”);默认是in,打开文件做读操作、

4.从键盘多行写入文件,以空行结束

	char strword[1024];
    cin.getline(strword,1024);
    ofstream outfile("a.txt");
    while(strlen(strword)>0){//前提是要加#include<cstring>
        outfile << strword << endl;
        cin.getline(strword,1024);
    }

5.输出多行文件

    ifstream input;
    input.open("a.txt");
    char strout[1024];
    input.getline(strout,1024,'n');//注意最后一个参数
    while(strlen(strout)>0){
        cout<<strout<<endl;
        input.getline(strout,1024,'n');
    }

运算符重载

CComplex operator +(CComplex &obj){
        CComplex tmp(re + obj.re,im+obj.im);
        return tmp;
    }

记住这个格式

素数定义

素数又叫质数,质数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。

for(int i=0;i<=100;i++){
        int j =0;
        for(j =2;j<=i;j++){
            if(i%j==0){
                break;
            }
        }
        if(i==j){
            cout<<i<<endl;
        }
    }

押一道类似的题:输入整数的最大因子

#include<iostream>
using namespace std;
//求输入整数的最大因子
int main(){
    int nNum,nFac;
    cout<<"请输入一个数:"<<endl;
    cin>>nNum;
    for(nFac=nNum/2;nNum%nFac!=0;--nFac);
    cout<<nNum<<"的最大因子是:"<<nFac<<endl;
    
    return 0;
}

整数的最大因子就记住这个for(nFac=nNum/2;nNum%nFac!=0;–nFac);

最后

以上内容是第二期,如果对大家有用的话在做第三期吧
发起一个投票吧,下一篇博客大家是想看19年试卷解析还是918简答题总结

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>