华南师大计算机学院软件工程专硕机试(2017考研)

前言

前两天考研公布成绩,看成绩结合群里人的分数大概率是进复试了,于是就翻出之前的机试题来看下难度,查缺补漏再去找一些类似的题目。

所有题目代码用C++编写

题目均为回忆版

1.输入一个数字,为其高,一个符号*,输出该符号组成的平行四边形形状

源码

#include<iostream>
using namespace std;
int main(){
    int n;
    cout<<"please input a number:";
    cin>>n;
    for(int i=0;i<n;i++){
        for(int j=n-i-1;j>=0;j--){
            cout<<"  ";
        }
        for(int k=0;k<n;k++){
            cout<<"*";
        }
        cout<<endl;
    }
    return 0;
}

结果:

please input a number:5
          *****
        *****
      *****
    *****
  *****

二、是猴子吃桃问题,每天都吃剩下的一半,再多吃一个,直到第十天剩下一个桃子,问第一天猴子有多少个桃。

源码:

(递归)

#include<iostream>
using namespace std;

int function(int i){
    if(i==1)
        return 1;
    return 2*(function(i-1)+1);
}

int main()
{
    cout<<function(10)<<endl;
}

(for循环)

#include<iostream>
using namespace std;
int main(){
    int number = 1; //第十天的数量
    for(int i=0;i<9;i++){
        number = (number + 1) * 2;
    }
    cout<<number<<endl;
    return 0;
}

结果:

1534

三、输入一系列的数字,输出他们正负数个数,输入0截止,要用函数实现 

源码

#include<iostream>
using namespace std;

int LargerThanZero = 0;     //大于零的个数
int SmallerThanZero = 0;    //小于零的个数

void Function(int n){
    if(n>0)
        LargerThanZero++;
    else if(n<0)
        SmallerThanZero++;
}

int main(){
    cout<<"please input numbers:";
    int n;
    cin>>n;
    while(n!=0){
        Function(n);
        cin>>n;
    }

    cout<<"Stop"<<endl;
    cout<<"Larger Than Zero:"<<LargerThanZero<<endl;
    cout<<"Smaller Than Zero:"<<SmallerThanZero<<endl;
}

结果:

please input numbers:1 9 2 3 -7 6 -6 -1 0
Stop
Larger Than Zero:5
Smaller Than Zero:3

四、是用一个类来记录学生成绩和他班级,里面有几个函数,静态成员和动态成员都有

因为题目是回忆版的,题目概述不清,根据之前看过的教材大概自己设置几个函数与静态成员

#include<iostream>
#include<string>
using namespace std;

class Student{
    public:
        Student(string n,int c,double sco){
            name=n;
            Class=c;
            score=sco;
            num++;
            total+=sco;
            average=total/(double)num;
        }
        static double Got_Total(){
            return total;
        }
        static int Got_num(){
            return num;
        }
        static double Got_Ave(){
            return average;
        }
        void display();                 //显示个人信息
        void Change_Score(double n);    //更改分数
        void Change_Class(int c);       //更改班级
    private:
        string name;
        int Class;
        double score;
        static double total;
        static int num;
        static double average;
};


void Student::display(){
    cout<<"Name:"<<name<<endl;
    cout<<"Class:"<<Class<<endl;
    cout<<"Score:"<<score<<endl;
}

void Student::Change_Class(int c){
    Class=c;
    cout<<"After Change:"<<endl;
    display();
}

void Student::Change_Score(double s){
    total-=score;
    score=s;
    total+=score;
    average=total/(double)num;
    cout<<"After Change:"<<endl;
    display();
}

double Student::total = 0;
int Student::num = 0;
double Student::average = 0;


int main(){
    Student Stu[5]={
        Student("Obama",1,99.0),
        Student("Mike",1,77.5),
        Student("Jackson",2,87.0),
        Student("Cherry",3,93.5),
        Student("Oscar",4,89.0)
    };

    for(int i=0;i<5;i++)
    {
        cout<<endl;
        Stu[i].display();
    }

    cout<<endl<<"Total:"<<Student::Got_Total()<<endl;
    cout<<"Numbers of Student:"<<Student::Got_num()<<endl;
    cout<<"Average:"<<Student::Got_Ave()<<endl;

    cout<<endl;
    Stu[0].Change_Score(100);
    cout<<endl<<"Total:"<<Student::Got_Total()<<endl;
    cout<<"Numbers of Student:"<<Student::Got_num()<<endl;
    cout<<"Average:"<<Student::Got_Ave()<<endl;
        
}

结果:

Name:Obama  
Class:1     
Score:99    

Name:Mike   
Class:1     
Score:77.5  

Name:Jackson
Class:2     
Score:87    

Name:Cherry
Class:3
Score:93.5

Name:Oscar
Class:4
Score:89

Total:446
Numbers of Student:5
Average:89.2

After Change:
Name:Obama
Class:1
Score:100

Total:447
Numbers of Student:5
Average:89.4

五、重载+,++,=等简单运算符

这题跟上面一样也是不太清楚,所以我以时间为例写一个重载运算符

#include<iostream>
using namespace std;


class Time{
    private:
        int sec;
        int min;
    public:
        Time(int m=0,int s=0){
            min=m;
            sec=s;
        }

        void operator = (Time a){
            min=a.min;
            sec=a.sec;
        }

        void display(){
            cout<<min<<":"<<sec<<endl;
        }

        friend Time operator +(Time &a,Time &b);
        Time operator ++ ();    //前置
        Time operator ++ (int); //后置
};

Time operator +(Time &a,Time &b){
    Time t;
    t.sec=a.sec+b.sec;
    t.min=a.min+b.min;
    if(t.sec>=60)
    {
        t.sec-=60;
        t.min++;
    }
    return t;
}

Time Time::operator++(){
    this->sec++;
    if(this->sec>=60)
    {
        this->sec-=60;
        this->min++;
    }
    return *this;
}

Time Time::operator++(int){
    Time t=*this;
    this->sec++;
    if(this->sec>=60)
    {
        this->sec-=60;
        this->min++;
    }
    return t;
}

int main(){
    Time a;
    cout<<"a:";
    a.display();
    cout<<"++a:";
    ++a;
    a.display();
    cout<<endl;

    cout<<"a++ (b) :";
    Time b=a++;
    b.display();
    cout<<"a:";
    a.display();

    cout<<"a+b:";
    Time c;
    c=a+b;
    c.display();

}

结果:

a:0:0
++a:0:1

a++ (b) :0:1
a:0:2
a+b:0:3
发布了24 篇原创文章 · 获赞 1 · 访问量 957

猜你喜欢

转载自blog.csdn.net/SampsonTse/article/details/104440280