zoukankan      html  css  js  c++  java
  • 2012年 浙工大考研计算机专业课试题C++(专硕)

    2012年 浙工大考研计算机专业课试题C++(专硕)

    个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流。

    1读程序写结果(5*9=45)

    1-1

    // zgdyjs.cpp : 定义控制台应用程序的入口点。

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    using namespace std;

    int a[8]={1,2,3,4,5,6,7};

    void fun(int *pa,int n);

    int main()

    {

           intm=8;

           fun(a,m);

           cout<<a[7]<<endl;

           return0;

    }

    void fun (int *pa,int n)

    {

           for(intj=0;j<n-1;j++)

                  *(pa+7)+=*(pa+j);

    }

    结果

    28

    1-2

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    using namespace std;

    class A

    {

    public:

           A(inti,int j)

           {

                  a=i;b=j;

           }

           voidMove(int x,int y)

           {

                  a+=x;b+=y;

           }

           voidShow()

           {

                  cout<<"("<<a<<","<<b<<")"<<endl;

           }

    private:

           inta,b;

    };

    class B:public A

    {

    public:

           B(inti,int j,int k,int l):A(i,j),x(k),y(l){}

           voidShow()

           {

                  cout<<x<<","<<y<<endl;

           }

           voidF1()

           {

                  Move(3,5);

                  A::Show();

           }

    private:

           intx,y;

    };

    void main()

    {

           Aa(1,2);

           a.Show();

           Bb(3,4,5,6);

           b.A::Show();

           b.B::Show();

           b.F1();

    }

    结果

    (1,2)

    (3,4)

    5,6

    (6,9)

    1-3

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include "math.h"

    using namespace std;

    class Point

    {

    private:

           doubleX,Y;

    public:

           Point(doublexx=0,double yy=0)

           {

                  X=xx;Y=yy;

                  cout<<"Point("<<X<<","<<Y<<")"<<endl;

           }

           Point(Point&p)

           {

                  X=p.X;

                  Y=p.Y;

                  cout<<"Pointis copied."<<endl;

           }

           doubleDistance (Point &p);        

    };

    double Point::Distance(Point &p)

    {

           doubledx,dy;

           dx=X-p.X;

           dy=Y-p.Y;

           returnsqrt(dx*dx+dy*dy);

    }

    Point f(double x,double y)

    {

           Pointp(x,y);

           returnp;

    }

    void main()

    {

           PointA(0,0);

           Point&B=f(3,4);

           cout<<"Distanceis"<<A.Distance(B)<<endl;

    }

    结果

    Point(0,0)

    Point(3,4)

    Distance is5

    1-4

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include "math.h"

    using namespace std;

    class A

    {

    public:

           A(){}

           A(constA &){cout<<"A::A(const A&)"<<endl;}

           A& operator = (const A &)

           {

                  cout<<"A::operator="<<endl;

                  return*this;

           }

    };

    int main()

    {

           Aa;

           Ab=a;

           b=b;

           return0;

    }

    结果:

    A::A(const A&)

    A::operator=

    1-5

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include "math.h"

    using namespace std;

    class Sample

    {

           intA;

           staticint B;

    public:

           Sample(inta)

           {A=a,B+=a;}

           staticvoid func(Sample& s);

    };

    int Sample::B=0;

    void Sample::func(Sample& s)

    {

           cout<<"A="<<s.A<<",B="<<B<<endl;

    }

    int main()

    {

           Samples1(2),s2(7);

           Sample::func(s1);

           Sample::func(s2);

    }

    A=2,B=9

    A=7,B=9

    2改错(5*6=30分)

    2-1

    #include <iostream>

    using namespace std;

    f(int *a[],int *b[],int n)

    // int f(double a[],double b[],int n)

    {

    int s=0;

    for(int i=0;i<n;i++)

    s+=a[i]*b[i];

    return s;

    }

    void main()

    {

    doublec[4]={1.1,2.2,3.3,4.4},d[4]={10,0,100,0};

    cout<<f(c,d,4)<<endl;

    }

    结果:

    341

    2-2

    #include <iostream>

    using namespace std;

    class AA

    {

    public:

    AA(int i,int j)

    {

    A=i;B=j;

    cout<<"Constructor.\n";

    }

    ~AA()

    {

    cout<<"Destructor.\n";

    }

    void Print();

    private:

    int A=0,B=0;

    }

    void AA::Print()

    {

    cout<<A<<","<<B<<endl;

    }

    void main()

    {

    AA *a1,*a2;

    a1=new AA(1,2);

    a2=new AA(3,4);

    a1.Print();  // a1->Print();

    a2.Print();  // a2->Print();

    delete a1;

    delete a2;

    }

    结果:

    Constructor.

    Constructor

    1,2

    3,4

    Destructor

    Destructor

    2-3

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include <string>

    #include <iomanip>

    using namespace std;

    void f(char *p)  // void f(char p)

    {

    //p++;本身就是要操作当前指针,在操作前执行p++,让指针指向下一个char字符,那么当前的字符就被跳过了。

    char &c=*p;

    c+='A'-'a';

    }

    void main()

    {

    char str[]="abcde";

    //f(str+3); for循环中,终止条件改为i < sizeof(str) - 1
    sizeof(str)在这里面是6,因为还包含了结尾的'\0',所以要-1,否则会造成数组越界,结果就是显示乱码。

    for(int i=0;i<sizeof(str)-1;i++)

    {

           f(str+i);

    }

    cout<<str<<endl;

    //return 0;  

    }

    结果:

    ABCDE

    2-4

    #include <iostream>

    using namespace std;

    class local

    {     intx,y;

           intprintY(cout<<y;)  //删掉

    public:

           voidinit(){x=0;y=1}

    // 改为:void init() {x=0;y=1;}

           intprintX(){cout<<x;}

    //改为:

    void printX(){cout<<x;}

    void printY(){cout<<y;}

    }

    void main(void)

    {

    local a,b,c;

    a.init();

    a.printX();

    b.printY();// a.printY();

    }

    结果:

    01

    原结果b.printY();:

    01753358978

    2-5

    #include <iostream>

    using namespace std;

    class Base

    {

    public:

           Base(){}

           Base(intc):count(c){}

           virtualvoid print() const=0;

    private:

           intcount;

    }

    class Derived:public Base

    {

    public:

           Derived(){}

           Derived(intc):Base(c){}

           voidprint() const{cout<<"Derived"<<endl;}

    };

    void main( )

    {

    Derived d(10);

    Base dd(1);

    Base *pb;

    pb=&d;

    pb->print();

    Base &cb=d;

    Derived ddd=*pb;

    }

    3,编程题(30+45=75分)

    3-1

    设计一个时间类time,包括三个数据成员,时(h),分(m),秒(s),另外包括存取各个数据成员和设置时间的成员函数,按12小时输出时间设计成员函数disp12,以及默认构造函数,默认时间为0时0分0秒。运行结果按如下格式输出。

    main函数部分代码和运行输出如下所示:

    int main()

    {

    Time t1(13,45,12),t2(9,30,50);

    t1.disp12();

    t2.disp12();

    }

    运行结果为:

    01:45:12PM

    09:30:50AM

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include <string>

    #include <iomanip>

    using namespace std;

    class Time

    {

    public:

           inth,m,s,dx;

           stringstr;

           Time():h(00),m(00),s(00)

           {    

           }

           Time(inth1,int m1,int s1)

           {

                  getTime(h1,m1,s1);

                  setTime(h1,m1,s1);

                  voiddisp12();

           }

           voidgetTime(int h1,int m1,int s1)

           {

                  h=h1;m=m1;s=s1;

           }

           intsetTime(int h1,int m1,int s1)

           {

                  dx=h%12;

                  if(h>=12)

                  {

                         str="PM";

                  }

                  else

                  {

                         str="AM";

                  }

                  returndx;

           }

           voiddisp12()

           {                          cout<<setw(2)<<setfill('0')<<dx<<":"<<m<<":"<<s<<str<<endl;

           }

    };

    void main()

    {

    Time t1(13,45,12),t2(9,30,50);

    t1.disp12();

    t2.disp12();

    }

    3-2

    编写一个按照平均分对学生进行排名的程序。

    输入数据放在名为abc.txt的文件中,学生数量<=100。输出时按学生成绩平均分递减排好序的学生序号和名字,每个学生占一行。输入和输出格式如下:

    输入格式:

    <学生个数> <课程数目>

    <学生姓名> <课程1成绩> <课程2成绩> ...<课程n成绩>...

    输出格式:

    <名次> <学生姓名>

    ...

    例如输入:

    2 3

    smith 60 50 80

    frank 80 60 70

    输出

    1 frank

    2 smith

    我用STL给你写了个。
    如果你不想用C++里面的任何东西,
    就把类变成结构体 struct Student,
    vector变成数组 Struct Student *students,
    string变成char*
    ifstream 变成 File*

    #include "StdAfx.h"

    #include "stdlib.h "

    #include <iostream>

    #include <string>

    #include <fstream>

    #include <iomanip>

    #include <vector>

    #include <algorithm>

    using namespace std;

    class Student

    {

    public:

       string name;

       double avg;   

    };

    vector<Student > students;  //存放学生的信息

    void Input()

    {

       ifstream in("c:\\abc.txt");        //文件可以用绝对地址

       if( !in )                    //如果找不到文件,就提醒

        {

           cout << "Can not find file abc.txt" <<endl;

           return;

        }

       int numStu, numCourse;

       in >> numStu >> numCourse;

       for( int i=0; i<numStu; i++)

        {

           Student stu;

           in >> stu.name;

           double sum=0;

           for( int j=0; j<numCourse; j++ )

           {

               double score;

               in >> score;

               sum += score;

           }

           stu.avg = sum/numCourse;

           students.push_back( stu );        //存入数据

        }

    }

    bool fun( Student a, Student b )

    {

       return a.avg>b.avg;

    }

    void Sort()

    {

       sort(students.begin(), students.end(), fun );     //使用STL algorithm,也可以使用下面自己写的

       /*

       //选择排序

       int numStu = students.size();

       for( int i=0; i<numStu; i++)

        {

           int max = i;

           //找到最大的,已平均值为关键字比较

           for( int j=i; j<numStu; j++)

           {

               if( students[j].avg > students[i].avg )

                    max=j;

           }

           if( max != i )      //交换

           {

               Student temp;

               temp = students[i];

               students[i] = students[max];

               students[max] = temp;

           }

        }

       */

    }

    void Output()

    {

       ofstream out("c:\\result.txt");

       for( int i=0; i<(int)students.size(); i++)

        {

           out << i+1 << ""<<students[i].name<<endl;

        }

    }

    int main()

    {

       Input();

       Sort();

    Output();

    }


    undoner

    LSOFT.CN (琅软中国) - 创造玉石般的软件,完美的用户体验!


  • 相关阅读:
    4.深入k8s:容器持久化存储
    3.深入k8s:Deployment控制器
    深入k8s:Pod对象中重要概念及用法
    深入k8s:k8s部署&在k8s中运行第一个程序
    博文大纲
    文字渲染一探
    搭建sonarqube分析golang代码
    MSSQL系列 (四):系统函数之日期和时间函数
    MSSQL系列 (三):系统函数之字符串函数
    MSSQL系列 (二):表相关操作、列操作、(唯一、主键、默认、检查、外键、非空)约束、临时表
  • 原文地址:https://www.cnblogs.com/wuyida/p/6301034.html
Copyright © 2011-2022 走看看