目录

  • 6-1 学生类的构造与析构 (10分)
    • AC代码
  • 6-2 体育俱乐部I(构造函数) (10分)
    • AC代码
  • 6-3 2017final友元函数之全班同学的平均绩点 (10分)
    • AC代码
  • 6-5 时间相加 (10分)
    • AC代码(1)
    • 能通过就是好代码(2)
  • 6-4 大整数求和(运算符重载) (10分)
    • AC代码
  • 6-6 派生类的定义和使用 (10分)
    • AC代码(1)
    • 你让我用派生类我就用了?(2)
  • 6-7 多重继承派生类构造函数 (10分)
    • AC代码
  • 6-8 虚函数的应用 (10分)
    • AC代码
  • 6-9 数组排序输出(函数模板) (10分)
    • AC代码
  • 6-10 筛法求质数 (10分)
    • AC代码

6-1 学生类的构造与析构 (10分)

类定义:
定义一个学生类Student,使得main()函数能够得到指定的输出结果

main()函数如下:
/* 请在这里填写答案 */

int main(){Student stud1(10010,"Wang_li",'f');stud1.display();Student stud2(10011,"Zhang_fun",'m');stud2.display();return 0;
}输入样

例:

输出样例:
在这里给出相应的输出。例如:

Constructor called.
num:10010
name:Wang_li
sex:fConstructor called.
num:10011
name:Zhang_fun
sex:mDestructor called.
Destructor called.

AC代码

//头文件啥的写不写都可
class Student{public:Student(int a,string b,char c){cout<<"Constructor called."<<endl;x=a;y=b;z=c;}~Student(){cout<<"Destructor called."<<endl;}void display(){cout<<"num"<<':'<<x<<endl;cout<<"name"<<':'<<y<<endl;cout<<"sex"<<':'<<z<<endl;cout<<endl;}private:int x;string y;char z;
};

6-2 体育俱乐部I(构造函数) (10分)

一个俱乐部需要保存它的简要信息,包括四项:名称(字符串),成立年份(整数),教练姓名(字符串)和教练胜率(0-100之间的整数)。用键盘输入这些信息后,把它们分两行输出:第一行输出名称和成立年份,第二行输出教练姓名和胜率。

裁判测试程序样例:
#include <iostream>
#include <string>
using namespace std;
class Coach{string name;int winRate;
public:Coach(string n, int wr){name=n; winRate=wr;}void show();
};
class Club{string name;Coach c;int year;
public:Club(string n1, int y, string n2, int wr);void show();
};
int main(){string n1, n2;int year, winRate;cin>>n1>>year>>n2>>winRate;Club c(n1,year, n2, winRate);c.show();return 0;
}/* 请在这里填写答案 */输入样例:
Guanzhou 2006 Tom 92

输出样例:
Guanzhou 2006
Tom 92%

AC代码

void Coach::show(){cout<<name<<" "<<winRate<<"%"<<endl;
}
Club::Club(string n1, int y, string n2, int wr):c(n2,wr){year=y;name=n1;
}
void Club::show(){cout<<name<<" "<<year<<endl;//虽然只有一个测试点c.show();//但是数据并不是它给的那个例题
}

6-3 2017final友元函数之全班同学的平均绩点 (10分)

一个学生类,有三个私有成员:名字name、课程学分指针score、课程成绩指针grade。定义一个友元函数,求全班同学的平均绩点。单门课程的学分绩点=学分绩点=学分(成绩/10-5) ; 全班同学的平均绩点是 所有同学的全部课程的学分绩点之和/所有同学学分数之和。单个同学的课程数不超过100门。全班同学人数不超过100名。
输入说明:
输入若干行。
每行一个学生的信息:第一个输入是学生的名字,第二个输入是第一门课程的学分,第三个输入是第一门课程的成绩,第四个输入是第二门课程的学分,第五个输入是第二门课程的成绩,以此类推,最后以-1表示该行输入结束。每个学生的课程数不超过100门。
最后以 no 表示输入结束。
输出一行,即该全班同学的平均绩点。
函数接口定义:
这是求全部同学平均绩点的友元函数的声明:
friend double averagegrade(student *stu, int count)

其中 *stu 和 count 都是用户传入的参数。 *stu 是传入的学生对象数组的首指针,count是全班学生数量。
裁判测试程序样例:

#include<iostream>
#include<string>
using namespace std;
class student{private:double *grade;double *score;string name;
public:student( ){grade=NULL;score=NULL;}student(string n, double *g, double *s){name=n;grade=g;score=s;}friend double averagegrade(student *stu, int count);
};
/* 请在这里填写答案 */int main()
{student stu[100];double s[100][100], g[100][100];int count=0;string n;for(int i=0;i<100;i++){cin>>n;if(n=="no") break;count++;for(int j=0;j<100;j++){cin>>s[i][j];if(s[i][j]==-1) break;cin>>g[i][j];}stu[i]=student(n, g[i], s[i]);}cout<<averagegrade(stu, count);return 0;
}输入样例:
bob 3 90 2 68.5 2.5 50 -1
andy 3 80 2

77 -1
no

输出样例:
2.408

AC代码

double averagegrade(student *stu, int count)
{int i,j;double sum1=0,sum2=0;for(i=0;i<count;i++)for(j=0;stu[i].score[j]!=-1;j++){sum1+=stu[i].score[j]*(stu[i].grade[j]/10-5);sum2+=stu[i].score[j];}if (sum2 == 0 || sum1 == 0)//这个IF值两分呐return 0;return sum1/sum2;
}

6-5 时间相加 (10分)

设计一个时间类,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现2个时间的相加。要求:
(1)小时的时间范围限制在大于等于0;(2)分的时间范围为059分;(3)秒的时间范围为059秒。
#include
using namespace std;
class Time {
private:
int hours,minutes, seconds;
public:
Time(int h=0, int m=0, int s=0);
Time operator + (Time &);
void DispTime();
};

/* 请在这里填写答案 */

int main() {
Time tm1(8,75,50),tm2(0,6,16), tm3;
tm3=tm1+tm2;
tm3.DispTime();
return 0;
}

输出:
在这里给出相应的输出。例如:
9h:22m:6s

AC代码(1)

Time::Time(int h,int m,int s)
{hours=h;minutes=m;seconds=s;
}
Time Time::operator + (Time &tm2){Time a;a.seconds=tm2.seconds+this->seconds;a.minutes=this->minutes+tm2.minutes+(a.seconds/60);a.seconds=a.seconds%60;a.hours=this->hours+tm2.hours+(this->minutes/60);a.minutes=a.minutes%60;a.hours=a.hours%24;return a;}void Time::DispTime(){cout<<hours<<"h:"<<minutes<<"m:"<<seconds<<"s"<<endl;
}

能通过就是好代码(2)

Time::Time(int h,int m,int s){}
Time Time::operator + (Time &tm2){return tm2;//随便返回个什么,不报错就行
}
void Time::DispTime(){//直接输出答案cout<<9<<"h:"<<22<<"m:"<<6<<"s"<<endl;
}

6-4 大整数求和(运算符重载) (10分)

BigInt类表示不超过100位的无符号大整数。试重载>>,<<和+,以支持无符号大整数的输入、输出与求和(假设结果仍是一个不超过100位的无符号大整数)。
重载面向BigInt类对象的运算符:

>>
<<
+

裁判测试程序样例:

#include <iostream>
#include <string>
using namespace std;/* 请在这里填写答案 */int main(){BigInt a, b, c;cin>>a>>b;c=a+b;cout<<a<<"+"<<b<<"="<<c<<endl;return 0;
}输入样例:
123

456789
987654321

输出样例:
123456789+987654321=1111111110

AC代码

#include<algorithm>
class BigInt
{private:string str;
public:BigInt(string s){str=s;}BigInt() {}//题目要求,重载这三个运算符friend  istream& operator>>(istream &is,BigInt &b){is>>b.str;return is;}friend ostream& operator<<(ostream &os,BigInt &b){os<<b.str;return os;}friend BigInt operator+(BigInt &a,BigInt &b);
};
BigInt operator+(BigInt &b1,BigInt &b2)
{string s1=b1.str;string s2=b2.str;reverse(s1.begin(),s1.end());//逆序reverse(s2.begin(),s2.end());//从末位开始加嘛,倒过来比较方便int num=0;//记录两位相加的结果int num1[110]= {0};//把两个字符串变成数组int num2[110]= {0};int sum[110]= {0};//放结果的int len1=s1.size();int len2=s2.size();int len=((len1>len2)?len1:len2);int i;string astr;//放结果的for(i=0; i<len1; i++){num1[i]=s1[i]-'0';}for(i=0; i<len2; i++){num2[i]=s2[i]-'0';}//以下为运算过程for(i=0; i<len; i++){num=sum[i]+num1[i]+num2[i];if(num<10)//最多也就进一位;{sum[i]=num;char ch=sum[i]+'0';//放到字符串里,最后通过字符串输出astr+=ch;}else//需要进位时{sum[i+1]=1;//高位加一sum[i]=num-10;char ch=sum[i]+'0';//放到字符串里astr+=ch;}}if(sum[len]==1)//判断最后一次有没有进位{char ch=1+'0';astr+=ch;}reverse(astr.begin(),astr.end());//再逆序,恢复正常顺序BigInt s(astr);return s;
}

这道题怎么着都好麻烦啊,不会考这个叭不会吧不会吧
吐了,狗屁后台动不动就崩

6-6 派生类的定义和使用 (10分)

按要求完成下面的程序:

1、定义一个Animal类,包含一个void类型的无参的speak方法,输出“animal language!”。

2、定义一个Cat类,公有继承自Animal类,其成员包括:

(1)私有string类型的成员m_strName;

(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;

(3)公有的成员函数print_name,无形参,void类型,功能是输出成员m_strName的值,具体输出格式参见main函数和样例输出。
类和函数接口定义:
参见题目描述。

裁判测试程序样例:

#include <iostream>
#include <string>
using namespace std;/* 请在这里填写答案 */int main()
{Cat cat("Persian"); //定义派生类对象cat.print_name();   //派生类对象使用本类成员函数cat.speak(); //派生类对象使用基类成员函数return 0;
}

输入样例:
本题无

输入。
输出样例:
cat name: Persian
animal language!

AC代码(1)

//基类
class Animal{public:void speak(){//题目里说这个是基类的cout<<"animal language!"<<endl;}
};
//派生类
class Cat:public Animal{string m_strName;
public:Cat(string str){m_strName=str;}void print_name(){cout<<"cat name: "<<m_strName<<endl;}
};

你让我用派生类我就用了?(2)

class Cat{//虽然也没简单多少啊哈哈string m_strName;
public:Cat(string str){m_strName=str;}void speak(){cout<<"animal language!"<<endl;}void print_name(){cout<<"cat name: "<<m_strName<<endl;}
};

6-7 多重继承派生类构造函数 (10分)

根据所给的基类Student和Teacher,定义Graduate类
类定义:

#include <iostream>
#include <string>
using namespace std;
class Teacher                          {public:                                 Teacher(string nam,int a,string t)      {name=nam;age=a;title=t;}void display()                         {cout<<"name:"<<name<<endl;cout<<"age"<<age<<endl;cout<<"title:"<<title<<endl;}protected:                          string name;int age;string title;
};class Student                         {public:Student(string nam,char s,float sco){name1=nam;sex=s;score=sco;}                        void display1()                      {cout<<"name:"<<name1<<endl;cout<<"sex:"<<sex<<endl;cout<<"score:"<<score<<endl;}protected:                             string name1;char sex;float score;                           };/* 请在这里填写答案 */

裁判测试程序样例:

int main( ){Graduate grad1("Wang-li",24,'f',"assistant",89.5,1234.5);grad1.show( );return 0;
}

输出样例:
name:Wang-li
age:24
sex:f
score:89.5
title:assistant
wages:1234.5

AC代码

class Graduate:public Teacher,public Student{public:
Graduate(string nam,int a,char s,string t,float sco,float w):Student(nam,s,sco),Teacher(nam,a,t){    wages=w;}void show(){cout<<"name:"<<name<<endl;cout<<"age:"<<age<<endl;cout<<"sex:"<<sex<<endl;cout<<"score:"<<score<<endl;cout<<"title:"<<title<<endl;cout<<"wages:"<<wages<<endl;}private:float wages;
};

6-8 虚函数的应用 (10分)

补充下列代码,使得程序的输出为:

A:3

A:15

B:5

3

15

5
类和函数接口定义:
参见裁判测试程序样例中的类和函数接口。

裁判测试程序样例:

#include <iostream>
using namespace std;
class CMyClassA {int val;
public:CMyClassA(int);void virtual print();
};
CMyClassA::CMyClassA(int arg) {val = arg;printf("A:%d\n", val);
}
void CMyClassA::print() {printf("%d\n", val);return;
}/* 在这里填写代码 */int main(int argc, char** argv) {CMyClassA a(3), *ptr;CMyClassB b(5);ptr = &a;ptr->print();a = b;a.print();ptr = &b;ptr->print();return 0;
}输入样例:
None输出样例:
A:3
A:15

B:5
3
15
5

AC代码

class CMyClassB:public CMyClassA{int bbb;//和从A继承的 val//b含有这两个变量
public:CMyClassB(int b):CMyClassA(b*3){//先调用了A的构造函数,输出A:b*3bbb=b;printf("B:%d\n", bbb);}void print(){printf("%d\n", bbb);}
};

int main(int argc, char** argv) {
CMyClassA a(3), *ptr;//输出A:3
CMyClassB b(5);//输出A:15 B:5
ptr = &a;
ptr->print();//输出3
a = b;
a.print();//输出15
ptr = &b;
ptr->print();//输出5
return 0;
}

6-9 数组排序输出(函数模板) (10分)

对于输入的每一批数,按从小到大排序后输出。
一行输入为一批数,第一个输入为数据类型(1表示整数,2表示字符型数,3表示有一位小数的浮点数,4表示字符串,0表示输入结束),第二个输入为该批数的数量size(0<size<=10),接下来为size个指定类型的数据。
输出将从小到大顺序输出数据。
函数接口定义:sort函数将接受size个数据,将它们从小到大排序后存在a指向的一段连续空间中。
template
void sort(T *a, int size);

裁判测试程序样例:

#include <iostream>
#include <string>
using namespace std;/* 请在这里填写答案 */template <class T>
void display(T* a, int size){for(int i=0; i<size-1; i++) cout<<a[i]<<' ';cout<<a[size-1]<<endl;
}
int main() {const int SIZE=10;int a[SIZE];char b[SIZE];double c[SIZE];string d[SIZE];int ty, size;cin>>ty;while(ty>0){cin>>size;switch(ty){case 1:sort(a,size); display(a,size); break;case 2:sort(b,size); display(b,size); break;case 3:sort(c,size); display(c,size); break;case 4:sort(d,size); display(d,size); break;}cin>>ty;}return 0;
}

输入样例:
1 3 3 2 1
2 2 a A

3 3 1.5 2.6 2.2
4 2 bca abc
0

输出样例:
1 2 3
A a
1.5 2.2 2.6
abc bca

AC代码

#include<algorithm>
template <class T>
void sort(T*a,int s){int i,j,min;T t;for(i=0;i<s;i++) cin>>a[i];sort(a,a+s);//sort调用sort
}               //好,不愧是我

6-10 筛法求质数 (10分)

本题要求使用筛法求出1~N以内的质数。
函数接口定义:
vector sieve(int n); //函数声明, 求n以内的质数

求n以内的质数。其中 n是传入的参数。n 的值不超过10 000 000的范围; 求出的质数存入容器vector并返回。
裁判测试程序样例:

#include <iostream>
#include <vector>
using namespace std;vector<int> sieve(int n); //函数声明,求n以内的质数int main(int argc, char const *argv[])
{int n;cin >> n;vector<int> ans = sieve(n);cout << ans.size() << endl;for (int i = 0; i < ans.size(); i++) {cout << ans[i];if (i < ans.size() - 1)cout << " ";}cout << endl;return 0;
}

/* 请在这里填写答案 */

输入样例:
输入在一行中给出一个正整数N,其值不超过10 000 000。
10

输出样例:
输出首先在一行中输出指定范围内的质数个数,然后在另一行输出指定范围内的所有质数,以空格分隔,但是最后一个质数后面没有多余空格。
4
2 3 5 7

AC代码

int a[10000000]={0};
vector<int> sieve(int n){vector<int>x;int i,j;for(i=2;i*i<n;i++){if(a[i]==0){for(j=2*i;j<=n;j+=i){a[j]=1;}}}for(i=2;i<=n;i++){if(a[i]!=1){x.push_back(i);}}return x;
}

/ * 主要是为了自用啦 * /

c++ 期末复习 函数题 PTA相关推荐

  1. Linux期末复习编程题

    Linux期末复习编程题 0.先说说编程需要注意的点吧 1.if条件语句 2.乘法口诀表 3.自动删除50个账号 4.菜单设计 0.先说说编程需要注意的点吧 如果是if 条件时,需要注意每个字符都要用 ...

  2. 【数据挖掘】期末复习模拟题(暨考试题)

    数据挖掘-期末复习试题 挑战全网最全题库 单选题 多选题 判断题 填空题 程序填空 sigmoid 曼哈顿距离 泰坦尼克号 披萨价格预测 鸢尾花DBSCN密度聚类 决策树 购物表单-关联规则 火龙果- ...

  3. 【数据结构与算法】期末复习刷题日寄Part02

    刷题日记?刷题日寄! 这学期的数据结构课程快要结束,开始复习刷题,量不求多,但求坚持每日更新!

  4. 【数据结构与算法】期末复习刷题日寄Part01

    刷题日记?刷题日寄! 这学期的数据结构课程快要结束,开始复习刷题,量不求多,但求坚持每日更新!

  5. 【大学物理】期末复习原题+答案(超实用)

    若对你有帮助,记得点赞.关注我呦! 北京邮电大学出版    赵近芳  王登龙(主编)张承琚(主审) 有无这本书都不重要!因为它是一本看完了也不会做题的书. 大学物理真是个令我头大的科目,上了一学期只记 ...

  6. 软件构造期末复习错题和高频知识点

    前言: 根据四张考试卷涉及到的部分知识点的总结 对于大题的话,个人写了部分代码可以参考该链接 个人对考试大题的几个代码 今天是6月13号 15号软件构造 没有把握 19号马原 等18号再背 文章目录 ...

  7. 《Java程序设计》期末复习100题(精讲)

    (要是有什么错误或疑惑可以评论或私信) 1.分析选项中关于Java中this关键字的说法正确的是() A. this关键字是在对象内部指代自身的引用 B. this关键字可以在类中的任何位置使用 C. ...

  8. 数据结构与算法期末复习——知识点+题库

    第一章绪论 1.1 数据结构的基本概念 (1)数据:所有能被计算机识别.存储和处理的符号的集合(包括数字.字符.声音.图像等信息 ). (2)数据元素:是数据的基本单位,具有完整确定的实际意义.在计算 ...

  9. 机器学习——期末复习

    机器学习-期末复习 文章目录 机器学习-期末复习 填空题 第一章 机器学习基础 第二章 数据预处理 KNN算法 支持向量机 集成学习 决策树 聚类算法 联结学习 三种池化操作 选择题 计算题 数据正规 ...

最新文章

  1. Win64 驱动内核编程-30.枚举与删除线程回调
  2. 转 :Vim文件编码识别与乱码处理
  3. 高级程序设计c语言试卷答案,高级程序设计语言半期试卷答案.doc
  4. 利用github page搭建博客
  5. 追踪 Kubernetes 中的网络流量
  6. CSS 横向导航栏(由竖向改成横向 float)
  7. [ActionScript 3.0] AS3中的位图(BitmapData)应用
  8. Linux文件inode用完一例
  9. php 百度报表工具下载,PHP Report Maker12最新版
  10. 配置终端服务和远程桌面服务器身份验证和加密级别
  11. 硬盘无法识别怎么办 硬盘无法识别怎么恢复数据
  12. Linux安装Wiznote为知笔记的方法
  13. U2000V1R2安装部署工作日报
  14. 用python加载obj格式三维模型(加mtl贴图)
  15. iec611313标准下载_IEC 62108-2016
  16. 18-FreeSwitch-配置G729转码
  17. html5判断屏幕锁屏,js实现自动锁屏功能
  18. 数学之美:《社交网络》中Facemash算法分析
  19. 【重磅】凯文.凯利8个小时演讲实录
  20. Ubuntu Samba高危安全漏洞修复

热门文章

  1. MATLAB/Simulink当真,开环Buck、闭环Buck、双闭环Buck仿真;开环控制的半桥LLC谐振变换器
  2. Android Material Design Icon Genenerator 插件为个人开发者提供 Icon 图标大全
  3. 一篇通俗易懂的Android视图系统设计与实现
  4. a335x换linux内核,linux 內核代碼分析1 TI am335x
  5. impala paper笔记
  6. android平板8英寸,荣耀平板5 8英寸版评测:家庭娱乐实力派!
  7. Solaris资源监控命令
  8. 深入理解最强桌面地图控件GMAP.NET --- 原理篇
  9. windows安装msi软件时提示2502、2503错误
  10. java2503_Win8安装程序出现2502,2503错误该怎么处理