前言:如果你是HUNER,你可以用它来作为你的程序设计作业参考,加以学习,相信这档【官方题解】必能让你的编程学习轻松很多;对非HUNER的朋友,也可以用它作为参考,作为拓展,作为自我提高。
说明:

  1. 此文章最终将覆盖——我在HNU-CG遇到的题,这是我做出的承诺。但,我决定弄这件事时还在2021大一上,所以我会将一级目录分成每个学期,二级目录分成每个作业编号,三级目录分为每个题目名称——这样分步完成。其中:部分题解答分为A、B,A为首解,B为补充的解(会用基础的语法),当然片段编程题只有A解
  2. 对于每次CG作业,如果题目过于简单,我可能会晚一点更新——这是很正常的事情
  3. CG题目主要是程序设计题,面对全选择填空题的作业,我也会补充相应的知识点
  4. 由于HNU的老师从不给出作业的官方题解,所以我声明“官方”两字。老师不会拿我怎么样的
  5. 不做专栏的原因:HNU-CG上的题大部分是对语法考察多的模拟题,对算法考察难度较小,深入研究意义不大,且对非Hnuer的朋友帮不够友好
  6. 对校外朋友的HNUCG介绍:CG是HNU作业提交和考试的平台。目前看来,每次题目的前缀有“作业”、“实验”两种,还有突然跑出来的项目作业,以及可爱的考试,所以该官方题解也会有四种类型
  7. 关于每篇篇末的总结,到期末复习时会正式给出

HNUCG官方题解:

  • 大一上学期⋙
    • 实验九-结构题
      • 1. 评委打分
        • A解
      • 2. 选举
        • A解
      • 3. 招聘
        • A解
      • 4. 火星人足球赛
        • A解
      • 5. 看电影
        • A解
      • 6. 青蛙与蚊子
        • A解
      • 7. 公共钥匙盒
        • A解
      • 【实验九,结构体】总结
    • 作业九 构造函数
      • 1. 构造函数
      • 片段题1. 矩阵相加
      • 片段题2. “Book”的实现
      • 片段题3. 友元函数
      • 片段题4. “点”类的实现
      • 【作业九,构造函数】总结
    • 实验十-类和对象
      • 片段题1. 矩阵计算
      • 片段题2. 约瑟夫问题
      • 【实验十,类和对象】总结
    • 作业十-继承
      • 片段题1. 实现宠物叫声的多态性
      • 片段题2 设计圆类,并以圆类为基类,派生圆柱类、圆锥类和圆球类(分别求出其面积和体积)
      • 片段题3. 实现Point类对象与整数加法,实现两个Point类对象的加法
      • 片段题4.求两个三角形面积和
      • 【作业十,继承】总结
    • 大作业!《图书管理系统》
  • 后记⋙

大一上学期⋙

实验九-结构题

1. 评委打分


A解
#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
using  namespace  std;
class student{public:string name;int score;
};
int main(){int n;cin>>n;
student* ss=new student[n];
for(int i=0;i<n;i++){string tmp;cin>>tmp;ss[i].name=tmp;int a[7];int mx=-101;int mi=101;int sum=0;for(int i=0;i<7;i++){cin>>a[i];sum+=a[i];mx=max(a[i],mx); //依次输入7组数据,每次输入更新最大最小值mi=min(a[i],mi);}ss[i].score=(sum-mi-mx);
}
sort(ss,ss+n,[&](student a,student b){return a.score>b.score;//匿名表达式,对自定义类型定义排序规则
});
for(int i=0;i<n;i++)cout<<ss[i].name<<' '<<ss[i].score<<endl;
delete[]ss;
return 0;
}



2. 选举

A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class person{public:int id;int ws;person(int a):id(a),ws(0){}
};
int main(){int n,m;cin>>n>>m;
vector<person>tm;for(int i=0;i<n;i++){person tmp(i+1);tm.emplace_back(tmp);  //初始化候选人数组tm}
while(m--){int a[n];int mx=-1;int winner=-1;for(int i=0;i<n;i++){cin>>a[i];if(a[i]>mx){mx=a[i];winner=i;  }}tm[winner].ws++;  //记录赢得的城市数
}
stable_sort(tm.begin(),tm.end(),[&](person s1,person s2){return s1.ws>s2.ws;});//用stable_sort保证排序前后相对顺序不变,因为要按编号小的要放前面
cout<<tm[0].id<<endl;//输出第一名
return 0;
}



3. 招聘

A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct person{int K;int I;int E;
};
int main(){int n;cin>>n;person* ps=new person[n];int jie=0;
for(int i=0;i<n;i++)cin>>ps[i].K;
for(int i=0;i<n;i++)cin>>ps[i].I;
for(int i=0;i<n;i++)cin>>ps[i].E; //输入数据for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(j!=i){if(ps[j].K>ps[i].K&&ps[j].I>ps[i].I&&ps[j].E>ps[i].E){jie++;break;}}}
}      //循环两次,做一下BPcout<<jie<<endl;delete[]ps;
return 0;
}



4. 火星人足球赛


A解
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
class player{public:char team;int id;int time;player(char a_team,int a_id,int a_time):team(a_team),id(a_id),time(a_time){}bool operator==(player& p){return this->team==p.team&&this->id==p.id;}
};
bool myfind(vector<player>a,player target){for(auto it:a)if(it==target)return true;//自定义查找
return false;
}
int main(){pair<string,vector<player>>h;pair<string,vector<player>>a;//pair存储两队基本信息cin>>h.first>>a.first;vector<player>th;vector<player>ta;//创建数组th,ta,存放黄牌的队员
int n;
cin>>n;
while(n--){  //关键的犯规处理int a_time;char a_team;int a_id;char jd;cin>>a_time>>a_team>>a_id>>jd;player tmp(a_team,a_id,a_time);if(jd=='r'){//红牌直接放if(tmp.team=='h')h.second.emplace_back(tmp);else a.second.emplace_back(tmp);}else{//黄牌处理时,多加一下查找if(tmp.team=='h'){if(myfind(th,tmp))h.second.emplace_back(tmp);else th.emplace_back(tmp);}else{if(myfind(ta,tmp))a.second.emplace_back(tmp);else ta.emplace_back(tmp);}}
}
if(h.second.empty()&&a.second.empty())cout<<"No Red Card"<<endl;
else{//对处理后的数据进行处理,排序sort(h.second.begin(),h.second.end(),[&](player p1,player p2){if(p1.time!=p2.time)return p1.time<p2.time;else return p1.id>p2.id;
});sort(a.second.begin(),a.second.end(),[&](player p1,player p2){if(p1.time!=p2.time)return p1.time<p2.time;else return p1.id>p2.id;
});for(auto it:h.second){cout<<h.first<<' '<<it.id<<' '<<it.time<<endl;}for(auto it:a.second){cout<<a.first<<' '<<it.id<<' '<<it.time<<endl;}
}
return 0;
}



5. 看电影


A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct film{int id;int b;        //音频int c;        //字幕int fc;       //非常高兴int jb;       //基本满意
};
class cmp{//STL,自定义比较
public:bool operator()(film f1,film f2){if(f1.fc!=f2.fc)return f1.fc>f2.fc;else return f1.jb>f2.jb;}
};
int main(){int n;
cin>>n;
int a[n];for(int i=0;i<n;i++)cin>>a[i];
int m;
cin>>m;
film* fs=new film[m];for(int i=0;i<m;i++){cin>>fs[i].b;fs[i].fc=0;fs[i].jb=0;}for(int i=0;i<m;i++){fs[i].id=i+1;cin>>fs[i].c;}bool jd=1;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(fs[i].b==a[j]){fs[i].fc++;jd=0;}if(fs[i].c==a[j]){fs[i].jb++;jd=0;}}//两次循环,进行匹配}
if(jd)cout<<"unsatisfied"<<endl;
else{stable_sort(fs,fs+m,cmp());for(int i=0;i<m;i++){cout<<fs[i].id<<' ';if(i==m-1||fs[i].fc!=fs[i+1].fc||fs[i].jb!=fs[i+1].jb)break;}
}
delete[]fs;
return 0;
}



6. 青蛙与蚊子


A解
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct frog{int id;
int x;
int t;
int cd=0;//青蛙结构体
};
struct skeeter{int x;int b;bool iseaten=false;
};        //蚊子结构体
class cmp{public:
bool operator()(frog qw1,frog qw2){return qw1.id<qw2.id;  //伪函数,定义比较规则
}
};
int main(){int n,m;cin>>n>>m;vector<frog>qw(n);for(int i=0;i<n;i++){cin>>qw[i].x>>qw[i].t;qw[i].id=i;}sort(qw.begin(),qw.end(),[&](frog a1,frog a2){return a1.x<a2.x;});vector<skeeter>wz(m);for(int i=0;i<m;i++){cin>>wz[i].x>>wz[i].b;for(int j=0;j<=i;j++){if(wz[j].iseaten==false){//如果没被吃,则进行判断for(int k=0;k<n;k++){if(qw[k].x<=wz[j].x&&(qw[k].x+qw[k].t)>=wz[j].x){qw[k].cd++;qw[k].t+=wz[j].b;wz[j].iseaten=true;j=-1;//进入下一次循环时,j会变为0,从而开启下一次寻找break;//对前面没被吃的wz再进行检验}}//关键是这里“青蛙吃蚊子的模拟”}}}sort(qw.begin(),qw.end(),[&](frog a1,frog a2){return a1.id<a2.id;});for(auto it:qw)cout<<it.cd<<' '<<it.t<<endl;
return 0;
}



7. 公共钥匙盒




A解
#include <iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;//借钥匙的记录 结构体
//包含钥匙的id, 借的时间, 归还的时间(= 开始上课的时间+上课时长)
struct Borrows{int id;int borrow_time;int back_time;
};int borrow_num = 0;          //借钥匙的老师人数
int back_num = 0;          //还钥匙的老师人数int main(){//接收数据int n;cin >>n;
vector<int>keys(n);
for(int i=0; i<n; i++)keys[i] = i+1;    //1.初始化起始钥匙盒状态int b_num;cin >>b_num;
vector<int>borrow_teachers(b_num);    //借钥匙的老师
vector<int> back_teachers(b_num);     //还钥匙的老师int length; //时长
vector<Borrows>borrow(b_num); //借钥匙的记录
unordered_map<int,int>tmp;for(int i=0; i<b_num; i++){cin >>borrow[i].id;cin >>borrow[i].borrow_time;cin >>length;borrow[i].back_time = borrow[i].borrow_time + length;tmp[borrow[i].borrow_time]++;tmp[borrow[i].back_time]++;}
vector<int>time;
for(auto it:tmp)time.push_back(it.first);
sort(time.begin(),time.end());//从开始时间模拟到结束时间for(int i=0; i<time.size(); i++){//3.1 找出此时刻借钥匙和还钥匙的老师for(int j=0; j<b_num; j++){if(borrow[j].borrow_time == time[i]){borrow_teachers[borrow_num++] = j;//j,记录还钥匙老师的编号}if(borrow[j].back_time == time[i]){back_teachers[back_num++] = j;}}//3.2 先处理还钥匙事件if(back_num > 0){//3.2.1 先对还钥匙的老师进行冒泡排序,按钥匙号从小到大排序for(int j=0; j<back_num-1; j++){for(int k=0; k<back_num-j-1; k++){if(borrow[back_teachers[k]].id > borrow[back_teachers[k+1]].id){int temp = back_teachers[k];back_teachers[k] = back_teachers[k+1];back_teachers[k+1] = temp;}}}//3.2.2 依次归还钥匙for(int j=0; j<back_num; j++){for(int k=0; k<n; k++){if(keys[k] == 0){keys[k] = borrow[back_teachers[j]].id;break;}}}}//3.3 再处理借钥匙事件for(int j=0; j<borrow_num; j++){for(int k=0; k<n; k++){if(borrow[borrow_teachers[j]].id == keys[k]){keys[k] = 0;break;}}}//3.4 结束后,将借钥匙和还钥匙的老师都清空for(int j=0; j<borrow_num; j++){borrow_teachers[j] = 0;}for(int j=0; j<back_num; j++){back_teachers[j] = 0;}borrow_num = 0;back_num = 0;}//4.输出最后钥匙盒的状态
for(auto it:keys)cout<<it<<' ';return 0;
}



【实验九,结构体】总结

不得不得说,这次的题目要点难,最后一题竟然耗了我差不多三个小时。
但——
事不避难者进,志不求易者成。






作业九 构造函数

1. 构造函数

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
class mx{public:double len;double wid;
};
int main(){mx a;
cin>>a.len>>a.wid;
cout<<"length = "<<a.len<<','<<"width = "<<a.wid<<endl;
cout<<"C = "<<2*(a.len+a.wid)<<endl;
cout<<"S = "<<a.len*a.wid<<endl;
cout<<"The diagonal length = "<<setprecision(6)<<sqrt(a.len*a.len+a.wid*a.wid)<<endl;
if(a.len==a.wid)cout<<"Is square ? "<<"Yes"<<endl;
else cout<<"Is square ? "<<"No"<<endl;
return 0;
}


片段题1. 矩阵相加

#include <iostream>
using namespace std;class Matrix
{public:Matrix();void input();void display();friend Matrix operator + (Matrix&, Matrix&);friend istream & operator >> (istream &, Matrix &);friend ostream & operator   <<(ostream &,Matrix &);private:int mat[2][3];
};
Matrix::Matrix()
{for (int i = 0; i < 2; i++)for (int j = 0; j < 3; j++)mat[i][j] = 0;
}Matrix operator + (Matrix &a, Matrix &b)
{for(int i=0;i<2;i++)for(int j=0;j<3;j++)a.mat[i][j]+=b.mat[i][j];return a;
}istream & operator >> (istream &in, Matrix &m)
{for(int i=0;i<2;i++)for(int j=0;j<3;j++)in>>m.mat[i][j];
return in;}ostream & operator << (ostream &out, Matrix &m)
{for(int i=0;i<2;i++)for(int j=0;j<3;j++)if(j!=2)out<<m.mat[i][j]<<' ';else out<<m.mat[i][j]<<endl;return out;
}int main()
{Matrix a, b, c;cin >> a;cin >> b;c = a + b;cout << c;system("pause");return 0;
}


片段题2. “Book”的实现

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;class Book{public:Book();
void show();
void setInfo(){getline(cin,this->shelf_id);cin>>price;cin.get();
}private:float price;string shelf_id;
};Book::Book(){price = 0;shelf_id = "";}
void Book::show(){cout<<"Shelf_ID: "<<this->shelf_id<<"          "<<"Price: "<<this->price<<endl;
}int main(){int n;cin >> n;   //从键盘输入整数ncin.get();  //吸收整数输入后的回车Book library[n];   //声明对象数组for(int i=0;i<n;i++){library[i].setInfo();  //从键盘输入对象数组的每个元素}for(int i=0;i<n;i++){library[i].show();  //输出对象数组}return 0;}
片段题3. 友元函数

#include <iostream>
using namespace std;
class Complex
{private:double real,image;
public:Complex(){}Complex(double a,double b){real = a;image = b;}void setRI(double a, double b){real = a;image = b;}double getReal(){return real;}double getImage(){return image;}void print(){cout<<"complex: "<<this->real;if(image>0)cout<<'+';cout<<this->image<<'i'<<endl;}friend Complex add(Complex,Complex); //声明友元函数
};
Complex  add(Complex c1,Complex c2) //定义友元函数
{Complex c3;;c3.real=c1.real+c2.real; //访问Complex类中的私有成员c3.image=c1.image+c2.image;return c3;
}
int main()
{double a,b,c,d;cin>>a>>b>>c>>d;Complex c1(a, b), c2, c3;c2.setRI(c,d);c3=add(c1,c2);cout<<"c1:";c1.print();cout<<"c2:";c2.print();cout<<"c3:";c3.print();return 0;
}
片段题4. “点”类的实现

#include <iostream>
#include <iomanip>
#include <cmath>  //声明sqrt函数
using namespace std;
class Point //完成Point类的声明,包含数据成员和成员函数
{private:int x;int y;public :// 成员函数原型声明Point();void  setPoint(int  ,int  ) ;int  getX();int  getY();double  myDistance(  int  ,int  )  ;};
Point::Point()
{}
void Point::setPoint(int x1,int y1) //从键盘输入Point的坐标
{x=x1;
y=y1;
}
int Point::getX(){return this->x;
}
int Point::getY(){return this->y;
}double Point::myDistance( int x1,int y1)     //计算两个点的距离,并输出
{return sqrt(x1*x1+y1*y1);
}
int main()
{Point A,B;  //定义两个Point对象,A和B;double distance;//从键盘输入A和B的坐标int x,y;cin>>x>>y;A.setPoint(x,y);cin>>x>>y;B.setPoint(x,y);distance = A.myDistance(abs(A.getX()-B.getX())
,
abs(A.getY()-B.getY()));//输出结果cout<<fixed<<setprecision(3)<<distance <<endl;return 0;
}
【作业九,构造函数】总结

Just so easy



实验十-类和对象

片段题1. 矩阵计算






不得不说,这一题真的o( ̄▽ ̄)d好

#include  <iostream>
#include  <cstdlib>
using  namespace  std;
class  matrix{private:int  rows,  cols;int  **p;
public:matrix();matrix(int  &M,  int  &N);matrix(matrix  &A,  int  &&m,  int  &n);~matrix();matrix  multi(int  x);      //  数乘int  det();                      //  计算行列式void  out();        //输出矩阵void  input();matrix  operator+(matrix  &another);  //重载加法运算实现矩阵相加matrix  operator*(matrix  &another);  //重载乘法运算实现矩阵相乘
};
matrix::matrix(int  &M,  int  &N){rows=M,  cols=N;p=new  int*[rows];for(int  i=0;i<M;i++){p[i]=new  int[cols];}
}
matrix::matrix(matrix  &A,  int  &&m,  int  &n)      //从矩阵A中删除第m行第n列后得到新的矩阵
{//我一直以为int &&m,这个右值引用是写出来好看的cols=A.cols-1;rows=A.rows-1;//简单初始化p=new int*[rows];for(int i=0;i<rows;i++){p[i]=new int[cols];}for(int i=0; i<m; i++)for(int j=0; j<n; j++)p[i][j]=A.p[i][j];for(int i=0; i<m; i++)for(int j=n+1; j<A.cols; j++)p[i][j-1]=A.p[i][j];for(int i=m+1; i<A.rows; i++)for(int j=0; j<n; j++)p[i-1][j]=A.p[i][j];for(int i=m+1; i<A.rows; i++)for(int j=n+1; j<A.cols; j++)p[i-1][j-1]=A.p[i][j];
}
matrix::~matrix()
{for(int  i=0;  i<rows;  i++)delete[]  p[i];delete[]  p;
}
matrix  matrix::multi(int  x)      //  数乘
{matrix  tmp(rows,  cols);
for(int i=0;i<rows;i++)for(int j=0;j<cols;j++)tmp.p[i][j]=x*this->p[i][j];
return tmp;
}
void  matrix::out()        //输出矩阵
{/*  逐行输出,数据间用空格分隔  */
for(int i=0;i<rows;i++){for(int j=0;j<cols;j++)cout<<p[i][j]<<' ';cout<<endl;
}}
void  matrix::input()
{for(int  i=0;  i<rows;  i++)for(int  j=0;  j<cols;  j++)cin>>p[i][j];}
matrix  matrix::operator+(matrix  &another)  //重载加法运算实现矩阵相加
{matrix  tmp(rows,  cols);/*  矩阵对应位置元素相加  */for(int  i=0;  i<rows;  i++)for(int  j=0;  j<cols;  j++)tmp.p[i][j]=this->p[i][j]+another.p[i][j];return tmp;
}
matrix  matrix::operator*(matrix  &another)    //重载乘法运算实现矩阵相乘
{matrix  tmp(rows,  another.cols);for(int  i=0;  i<rows;  i++){for(int  j=0;  j<another.cols;  j++){/*  计算A矩阵的第i行与B矩阵的第j列元素对应相乘后之和,作为新矩阵的第i行第j列元素的值  */int sum=0;for(int n=0;n<cols;n++)sum+=this->p[i][n]*another.p[n][j];tmp.p[i][j]=sum;}}return tmp;
}
int matrix::det(){if  (rows==1)return  p[0][0];else{int  result=0,  flag;for(int  i=0;  i<cols;  i++){flag=(i%2)?-1:1;matrix  tmp(*this,  0,  i);result=result+flag*p[0][i]*tmp.det();        //  使用代数余子式求行列式的值,  递归}return  result;}
}
int  main()
{int  M,N;//  A矩阵的行和列cin>>M>>N;matrix  mA(M,  N);        //生成A矩阵//  输入矩阵值mA.input();//  输入数乘值int  x;cin>>x;matrix  mm1=mA.multi(x);mm1.out();//B矩阵的行和列int  K,  L;cin>>K>>L;matrix  mB(K,  L);    //生成B矩阵mB.input();/*  求矩阵A和矩阵B的和  */if  (M==K  &&  N==L){matrix  mm2=mA+mB;mm2.out();}/*  求矩阵A和矩阵B的乘积矩阵  */if  (N==K){matrix  mm3=mA*mB;mm3.out();}/*  矩阵A的行列式的值  */if  (M==N)cout<<mA.det()<<endl;if  (K==L)cout<<mB.det()<<endl;return  0;
}
片段题2. 约瑟夫问题

#include  <iostream>
using  namespace  std;
class  person{private:int  no;            /*  人的编号  */person  *next;      /*  指向相邻的下一个人  */
public:person(int  num){no=num;next=NULL;}void  setNext(person  *p){next=p;}int  getNo(){return  no;}person  *getNext(){return  next;}
};
class  cycle
{private:person  *start;        /*  开始数数的位置  */int  out;                    /*  数到几出列  */int  inQueue;            /*  队伍中现有人数  */
public:cycle(int  num,  int  from,  int  whoOut){inQueue=num,  out=whoOut;person  *prv=NULL,  *first=NULL;for(int  i=1;  i<=num;  i++){person  *p=new  person(i);if  (i==1)first=p;if  (i==from)start=p;if  (i>1)prv->setNext(p);prv=p;}prv->setNext(first);}
int  getInQueue(){return  inQueue;
}
//-------------------------------------------------------//-----------------------------------------------------------
void  cnt()      /*  根据题目要求数数,确定出列的人,将该人从圈中剔除  */
{int js=out;person* dummy; //这里用哨兵节点的方式做删除js--;if(js==0)js=inQueue;//这是个大坑while(js--){dummy=start;start=start->getNext();}dummy->setNext(start->getNext());//通过成员函数修改next节点start=start->getNext();inQueue--;}
//----------------------------------------------
person  *getStart(){return  start;}~cycle(){delete  start;}
};
int  main()
{int  n,k,  m  ;      /*  n  圈内人数    k  开始数数  m  可数出列  */cin>>n>>k>>m;cycle  *p=new  cycle(n,k,m);while(p->getInQueue()>1)p->cnt();person  *winer=p->getStart();cout<<winer->getNo()<<endl;delete  p;return  0;
}
【实验十,类和对象】总结

这次的题目出的非常好,值得多多深入研究。



作业十-继承

片段题1. 实现宠物叫声的多态性

#include <string>
#include <iostream>
class Pet
{public:std::string color;int weight;int age;
public:
virtual void speak()=0;};class Cat :public Pet
{public:
void speak(){printf("Cat: miao miao miao...\n");
}
};class Dog :public Pet
{public:
void speak(){printf("Dog: wang wang wang...\n");}};int main(int argc, char** args)
{Pet *pet;Cat cat;Dog dog;cat.speak();dog.speak();
}
片段题2 设计圆类,并以圆类为基类,派生圆柱类、圆锥类和圆球类(分别求出其面积和体积)


#include<iostream>
#include<math.h>
using namespace std;// 定义数学常数pi
#define pi 3.1415926// 创建抽象基类Area
class Area {public:virtual double GetArea() = 0;
};// 创建抽象基类Volume
class Volume {public:virtual double GetVolume() = 0;};// 创建基类Circle圆类
class Circle:public Area {public:
double r;
Circle(double x):r(x){}
double GetArea(){return pi*r*r;
}
};// 创建圆柱类
class Cylinder :public Circle, public Volume {public:
double h;
Cylinder(double x,double y):Circle(x){this->h=y;
}
double GetArea(){return pi*r*r*2.0+pi*r*h*2.0;
}
double GetVolume(){return pi*r*r*h;
}
};// 创建圆锥类
class Cone :public Circle, public Volume {public:
double h;
Cone(double x,double y):Circle(x),h(y){}
double GetArea(){return pi*r*r+pi*r*sqrt(r*r+h*h);
}
double GetVolume(){return pi*r*r*h/3.0;
}
};// 创建球类
class Sphere :public Circle, public Volume {public:
Sphere(double x):Circle(x){}
double GetArea(){return 4.0*pi*r*r;
}
double GetVolume(){return 4.0*pi*r*r*r/3.0;
}
};int main() {Circle circle(2);cout << "创建一个圆对象" << endl;cout << "半径 :2.0" << endl;cout << "面积 :" << circle.GetArea() << endl << endl;Cylinder cylinder(2, 3);cout << "创建一个圆柱对象" << endl;cout << "半径 :2.0" << endl;cout << "高度 :3.0" << endl;cout << "面积 :" << cylinder.GetArea() << endl;cout << "体积 :" << cylinder.GetVolume() << endl << endl;Cone cone(2, 3);cout << "创建一个圆锥对象" << endl;cout << "半径 :2.0" << endl;cout << "高度 :3.0" << endl;cout << "面积 :" << cone.GetArea() << endl;cout << "体积 :" << cone.GetVolume() << endl << endl;Sphere sphere(2);cout << "创建一个球对象" << endl;cout << "半径 :2.0" << endl;cout << "面积 :" << sphere.GetArea() << endl;cout << "体积 :" << sphere.GetVolume() << endl << endl;return 0;
}
片段题3. 实现Point类对象与整数加法,实现两个Point类对象的加法

#include<iostream>
using namespace std;
class Point
{private:int x,y;public:Point(){x=y=0;}Point(int x0,int y0){x=x0;y=y0;}int GetX(){return x;}int GetY(){return y;}void Print(){cout<<x<<" "<<y<<""<<endl;} friend Point  operator+(Point&  pt,int  dd);//友元函数声明 friend Point  operator+(Point&  pt1,Point&  pt2);//友元函数声明
};
Point operator+(Point& pt,int dd)//加号操作符重载函数,实现Point类对象与整数加法
{pt.x+=dd;pt.y+=dd;return pt;}
Point operator+(Point& pt1,Point& pt2)//加号操作符重载函数,实现两个Point类对象的加法
{pt1.x+=pt2.x;pt1.y+=pt2.y;return pt1;}
int main()
{int qq1,qq2,qq3,qq4;cin>>qq1>>qq2>>qq3>>qq4;Point a(qq1,qq2);Point b(qq3,qq4);Point c;c=a+b;c.Print();c=c+2;c.Print();}
片段题4.求两个三角形面积和

#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using  namespace  std;
class  Triangle
{public:Triangle(double  s1  =  0,  double  s2  =  0,  double  s3  =  0,  double  area=0){m_s1  =  s1;m_s2  =  s2;m_s3  =  s3;m_area  =  area;}double  getS1(){return  m_s1;}double  getS2(){return  m_s2;}double  getS3(){return  m_s3;}double  getArea(){return  m_area;}Triangle  operator+(Triangle  triangle);
private:double  m_s1;double  m_s2;double  m_s3;double  m_area;
};
Triangle  Triangle::operator+(Triangle  triangle)
{double p1=(this->m_s1+this->m_s2+this->m_s3)*0.5;
double s1=sqrt(p1*(p1-this->m_s1)*(p1-this->m_s2)*(p1-this->m_s3));
double p2=(triangle.m_s1+triangle.m_s2+triangle.m_s3)*0.5;
double s2=sqrt(p2*(p2-triangle.m_s1)*(p2-triangle.m_s2)*(p2-triangle.m_s3));
this->m_area=s1+s2;
return *this;}
int  main()
{int  t11,t12,t13,t21,t22,t23;cin>>t11>>t12>>t13;cin>>t21>>t22>>t23;Triangle  c1(t11,t12,t13),  c2(t21,t22,t23),c3;c3  =  c1  +  c2;cout<<c3.getArea()<<  endl;system("pause");return  0;
}
【作业十,继承】总结

老师们的水出题之路


大作业!《图书管理系统》



在开始解决这道简单题之前,让我们先来看看下面的简单程序
主要是我没那么快
【NO1.】QQ通讯录系统——用C++模拟实现,学C++必玩项目】
【NO2.】IT公司职工管理系统—————C++文件交互式的项目实现】


图书管理系统┏ (゜ω゜)=☞



最近有点偷懒,我要再加油一点!
HNU-CG:官方题解






后记⋙

  1. 做这件事的目的和意义——最大的意义是对自己的,一方面:我此前有些沉迷其他OJ,对学校编程作业比较拖延,以此做目标,可以督促一下我自己;另一方面,CG作业的完成质量上,我太依赖各种奇巧淫招,对CG一遍过就满足了,以完成好官方题解为目标,我会重复地一刷二刷CG题库,从而巩固基础知识。当然,最大的意义是:可以在大学四年里玩出些新花样
  2. 对他人的意义:对校外同学,可以做拓展、参考;对本校同学,大家都懂[]( ̄▽ ̄)*。
  3. 说明:
  • 更新时间:
  • 1->每次CG作业发布后的两到三天。最晚不过截至日期前的一周。
  • 2->期中考试前和期末考试前的几周,我会回头再刷CG题库,对一些题目补充B解
  • 3->假期有时间,我会重构题解,使其能更好地帮助大家、
  1. HNU-CG题目有一定的学习价值
  2. 这篇题解目前将设置粉丝可见,完成完毕后后将解除

免责声明:对HNUer,如果你沉迷CV大法,懈怠修炼,导致走火入魔,以致期末FAIL的话,本官方题解拒绝负责

湖南大学CG题库-(程序设计类课程教学辅助系统作业)【《HNU官方题解全集》】[绝密]—2021-2025相关推荐

  1. 基于计算思维的python程序设计王彬丽期末考试题库_基于计算思维的程序设计类课程教学实践...

    基于计算思维的程序设计类课程教学实践 滕剑锋 王玉锋 王 猛 刘二林 [摘 要] 摘 要 很多专业开设了程序设计类课程.如何在该课程教学中培养学 生的创新能力是大家普遍考虑的问题.计算思维的提出对于解 ...

  2. 听障学生计算机课本,面向听障学生程序设计的计算机教学辅助系统

    摘要: 在目前的残疾人高等教育中,针对听障学生开展的计算机编程语言的教学存在许多难点.由于施教学生的特殊性--听力障碍所造成的沟通困难,常规的教学方式在听障学生教学中无法使用,严重制约了听障学生教学. ...

  3. 程序设计类课程教学中创造技法的探索

    1 引言    高职院校的计算机软件专业一般都开设了大量的程序设计类课程,从基础的C/C++.Java等语言类课程到可视化开发的Delphi.VB.JBuilder等开发工具类课程.学生对这些课程的学 ...

  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的课程教学辅助系统

    项目功能: 管理员功能:个人中心.教师管理.学生管理.公告信息管理.课后习题管理.学生答题管理.资料管理.试卷管理.试题管理.考试管理 学生功能:登录注册.个人中心.修改密码.公告信息管理.课后习题管 ...

  5. 计算机 游戏化 论文,计算机程序设计类课程游戏化探究

    摘要:围绕教育信息化应用背景,在分析目前计算机程序设计类课程教学满意度现状的基础上,探究计算机程序设计类课程游戏化教学的影响因素.经调查分析得出,大部分学生都有学计算机程序设计类课程的经历和玩电脑游戏 ...

  6. java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署

    java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 本源码技术栈: ...

  7. 数学模型转化为计算机语言,程序设计语言类课程教学选题方法探讨

    <程序设计语言类课程教学选题方法探讨>由会员分享,可在线阅读,更多相关<程序设计语言类课程教学选题方法探讨(6页珍藏版)>请在人人文库网上搜索. 1.程序设计语言类课程教学选题 ...

  8. 北理工《Java程序设计》课程教学资源索引(2013版)——第21讲及Android第4讲发布

    北理工<Java程序设计> 课程教学资源索引(2013版,含<Android开发基础>) 说明: "Java程序设计"是北京理工大学计算机学院开设的选修课程 ...

  9. 基于安卓的高校程序设计类课程考核平台的设计与实现

    1.课题研究立项依据 随着现代网络技术发展不断的提高,我们要对基于安卓的高校程序设计类课程考核平台的要求也不断提高,在快速提高的发展道路上,我们将要对从中产生的问题进行整理,实施对应需求的发展和系统开 ...

最新文章

  1. NameError: name ‘sklearn‘ is not defined的解决方法:
  2. java后台post请求调用接口
  3. spring aop实现log 日志跟踪
  4. javax.validation.ParameterNameProvider
  5. java 大整数编程_Java编程--RSA算法中的大整数运算
  6. 计算领域的致敬与前行
  7. 圣诞素材ae模板-圣诞节日聚会派对视频素材ae模板
  8. python字典文件,python-文件转字典,字典转文件
  9. 【029】获取选择要素的属性
  10. svn 切换账号信息
  11. CentOS下redis安装和部署
  12. Zepto:实现移动端tab选项
  13. 复现贪吃蛇程序——吃食物增加长度(最后一篇)
  14. 2014网络红人照片网络红人排行榜2014经典语录网络红人斌少
  15. Java 实现图片上面添加文字
  16. 面试吹牛B,入职就倒霉了
  17. 牛客NC23053月月查华华的手机 题解(指针优化)
  18. JAVA实训8:期末总结
  19. 电子设计竞赛学习msp430单片机(msp430g2553,msp430f5529,tmec123G)
  20. ODrive应用 #8 故障排除

热门文章

  1. 两个数组根据相同id合并数组es6、原生js
  2. 解决文件下载文件名乱码和特殊符号的问题
  3. 大聪明教你学Java设计模式 | 第二十篇:中介模式
  4. 用我的痴念温暖所有的薄凉
  5. Python火柴棍游戏
  6. 简谈PMC在企业中的作用与意义
  7. 爬取B站视频播放量及数据可视化
  8. JS中循环遍历JSON格式数据
  9. Appstore app链接mt参数app类型解析
  10. sql的一些基本操作