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类型数组的最后一个一定是’\0’,所以在创建数组时,要空间+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简答题总结