湖南大学CG题库-(程序设计类课程教学辅助系统作业)【《HNU官方题解全集》】[绝密]—2021-2025
前言:如果你是HUNER,你可以用它来作为你的程序设计作业参考,加以学习,相信这档【官方题解】必能让你的编程学习轻松很多;对非HUNER的朋友,也可以用它作为参考,作为拓展,作为自我提高。
说明:
- 此文章最终将覆盖——我在HNU-CG遇到的题,这是我做出的承诺。但,我决定弄这件事时还在2021大一上,所以我会将一级目录分成每个学期,二级目录分成每个作业编号,三级目录分为每个题目名称——这样分步完成。其中:部分题解答分为A、B,A为首解,B为补充的解(会用基础的语法),当然片段编程题只有A解
- 对于每次CG作业,如果题目过于简单,我可能会晚一点更新——这是很正常的事情
- CG题目主要是程序设计题,面对全选择填空题的作业,我也会补充相应的知识点
- 由于HNU的老师从不给出作业的官方题解,所以我声明“官方”两字。老师不会拿我怎么样的
- 不做专栏的原因:HNU-CG上的题大部分是对语法考察多的模拟题,对算法考察难度较小,深入研究意义不大,且对非Hnuer的朋友帮不够友好。
- 对校外朋友的HNUCG介绍:CG是HNU作业提交和考试的平台。目前看来,每次题目的前缀有“作业”、“实验”两种,还有突然跑出来的项目作业,以及可爱的考试,所以该官方题解也会有四种类型
- 关于每篇篇末的总结,到期末复习时会正式给出
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:官方题解
后记⋙
- 做这件事的目的和意义——最大的意义是对自己的,一方面:我此前有些沉迷其他OJ,对学校编程作业比较拖延,以此做目标,可以督促一下我自己;另一方面,CG作业的完成质量上,我太依赖各种奇巧淫招,对CG一遍过就满足了,以完成好官方题解为目标,我会重复地一刷二刷CG题库,从而巩固基础知识。当然,最大的意义是:可以在大学四年里玩出些新花样
- 对他人的意义:对校外同学,可以做拓展、参考;对本校同学,大家都懂[]( ̄▽ ̄)*。
- 说明:
- 更新时间:
- 1->每次CG作业发布后的两到三天。最晚不过截至日期前的一周。
- 2->期中考试前和期末考试前的几周,我会回头再刷CG题库,对一些题目补充B解
- 3->假期有时间,我会重构题解,使其能更好地帮助大家、
- HNU-CG题目有一定的学习价值
- 这篇题解目前将设置粉丝可见,完成完毕后后将解除。
免责声明:对HNUer,如果你沉迷CV大法,懈怠修炼,导致走火入魔,以致期末FAIL的话,本官方题解拒绝负责
基于计算思维的程序设计类课程教学实践 滕剑锋 王玉锋 王 猛 刘二林 [摘 要] 摘 要 很多专业开设了程序设计类课程.如何在该课程教学中培养学 生的创新能力是大家普遍考虑的问题.计算思维的提出对于解 ... 摘要: 在目前的残疾人高等教育中,针对听障学生开展的计算机编程语言的教学存在许多难点.由于施教学生的特殊性--听力障碍所造成的沟通困难,常规的教学方式在听障学生教学中无法使用,严重制约了听障学生教学. ... 1 引言 高职院校的计算机软件专业一般都开设了大量的程序设计类课程,从基础的C/C++.Java等语言类课程到可视化开发的Delphi.VB.JBuilder等开发工具类课程.学生对这些课程的学 ... 项目功能: 管理员功能:个人中心.教师管理.学生管理.公告信息管理.课后习题管理.学生答题管理.资料管理.试卷管理.试题管理.考试管理 学生功能:登录注册.个人中心.修改密码.公告信息管理.课后习题管 ... 摘要:围绕教育信息化应用背景,在分析目前计算机程序设计类课程教学满意度现状的基础上,探究计算机程序设计类课程游戏化教学的影响因素.经调查分析得出,大部分学生都有学计算机程序设计类课程的经历和玩电脑游戏 ... java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 java毕业设计程序设计类课程的课堂教学效果评价系统Mybatis+系统+数据库+调试部署 本源码技术栈: ... <程序设计语言类课程教学选题方法探讨>由会员分享,可在线阅读,更多相关<程序设计语言类课程教学选题方法探讨(6页珍藏版)>请在人人文库网上搜索. 1.程序设计语言类课程教学选题 ... 北理工<Java程序设计> 课程教学资源索引(2013版,含<Android开发基础>) 说明: "Java程序设计"是北京理工大学计算机学院开设的选修课程 ... 1.课题研究立项依据 随着现代网络技术发展不断的提高,我们要对基于安卓的高校程序设计类课程考核平台的要求也不断提高,在快速提高的发展道路上,我们将要对从中产生的问题进行整理,实施对应需求的发展和系统开 ...湖南大学CG题库-(程序设计类课程教学辅助系统作业)【《HNU官方题解全集》】[绝密]—2021-2025相关推荐
最新文章
热门文章