1-对象是怎样构造的(拷贝构造函数)
#include<iostream>
using namespace std;
class Afunction
{
int num;
public:
Afunction(){cout<<"Constructed by default, value = 0"<<endl;}
Afunction(int b){num=b;cout<<"Constructed using one argument constructor, value = "<<num<<endl;}
Afunction(const Afunction &A){num=A.num;cout<<"Constructed using copy constructor, value = "<<num<<endl;}
};
int main(){
int t;
cin>>t;
while(t--){
int a,b;
cin>>a;
if(a==0) Afunction fun;
else if(a==1){
cin>>b;
Afunction fun(b);
}
else if(a==2){
cin>>b;
Afunction fun(b);
Afunction func(fun);
}
}
}
2-最胖的加菲
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
class cat
{
private:
char *cat_name;
int cat_weight;
public:
void Set(char *name, int weight)
{
int len = strlen(name);
cat_name = new char[len + 1];
strcpy(cat_name, name);
cat_weight = weight;
}
void print(cat p)
{
cout << p.cat_name << " ";
}
char *get_name()
{
return cat_name;
}
int get_weight()
{
return cat_weight;
}
};
bool comp(cat c1, cat c2)
{
return c1.get_weight() < c2.get_weight();
}
int main()
{
int n, i, weight, j;
char name[100];
cat *p;
cin >> n;
p = new cat[n]; //创建猫猫类的动态数组
for (i = 0; i < n; i++)
{
cin >> name >> weight;
p[i].Set(name, weight); //依次存入数据
}
sort(p, p + n, comp);
for (i = 0; i < n; i++)
p->print(p[i]);
delete p;
}
3-点圆运算
#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
class Point {
double x, y;
public:
Point(double x, double y) :x(x), y(y) { }
Point() :x(0), y(0) { } //用于创建动态数组
void setXY(double x1, double y1) {
x = x1;
y = y1;
}
double getX() {
return x;
}
double getY() {
return y;
}
~Point() {
x = 0;
y = 0;
cout << "point clear" << endl;
}
};
class Circle {
double x, y, r;
public:
Circle(double x, double y, double r) :x(x), y(y), r(r) { }
Circle() :x(0), y(0), r(0) { }
void Contain(Point& p) { //注意:如果参数不是引用,会多创建一个对象,那么释放的时候因为析构函数中有输出语句,结果就不正确。
double d;
d = sqrt(pow(p.getX() - x, 2) + pow(p.getY() - y, 2));
if (d > r)
cout << "out" << endl;
else
cout << "in" << endl;
}
~Circle() {
x = 0;
y = 0;
r = 0;
cout << "circle clear" << endl;
}
};
int main()
{ //freopen("d:\\a.txt", "r", stdin);
int t, i;
double x, y, r;
cin >> x >> y;
Point p(x, y);
cin >> t;
Point* po = new Point[t];
for (i = 0; i < t; i++) {
cin >> x >> y;
po[i].setXY(x, y);
}
cin >> x >> y >> r;
Circle c(x, y, r);
c.Contain(p);
for (i = 0; i < t; i++)
c.Contain(po[i]);
return 0;
}
4-手机取款
#include<iostream>
using namespace std;
class CAccount
{
int CardNo;
int MobileNo;
int PassCode;
int balance;
public:
CAccount() {}
void setData(int c, int m, int p, int a) {
CardNo = c;
MobileNo = m;
PassCode = p;
balance = a;
}
int getCardNo() { return CardNo; }
int getMobileNo() { return MobileNo; }
int getPassCode() { return PassCode; }
void redraw(int amount) {
if (amount > balance)
cout << "卡号" << CardNo << "--" << "余额不足" << endl;
else {
balance -= amount;
cout << "卡号" << CardNo << "--" << "余额" << balance << endl;
}
}
};
int main()
{
int CardNo, MobileNo, PassCode;
int balance, amount;
int t, i, n, k;
cin >> t;
CAccount* account = new CAccount[t];
for (i = 0; i < t; i++)
{
cin >> CardNo >> MobileNo >> PassCode >> balance;
account[i].setData(CardNo, MobileNo, PassCode, balance);
}
cin >> n;
while (n--)
{
k = -1; //标识未找到的那种情况
cin >> MobileNo >> PassCode >> amount;
for (i = 0; i < t; i++) {
if (account[i].getMobileNo() == MobileNo) { //判断号码是否存在
k = i;
break;
}
}
if (k != -1) { //若号码存在,继续判断密码是否正确
if (account[k].getPassCode() == PassCode)
account[k].redraw(amount);
else
cout << "密码错误" << endl;
}
else
cout << "手机号不存在" << endl;
}
delete[] account;
return 0;
}
5-分数类
第一种写法:直接处理输入:比如3 / 4,可以看成是输入整数3,字符 / ,整数4.
#include<iostream>
#include<cmath>
using namespace std;
class CFraction
{
private:
int fz, fm;
public:
CFraction(int fz_val, int fm_val);
CFraction();
void set(int fz_val, int fm_val);
CFraction add(const CFraction& r);
CFraction sub(const CFraction& r);
CFraction mul(const CFraction& r);
CFraction div(const CFraction& r);
int getGCD(); // 求对象的分子和分母的最大公约数
void print();
};
CFraction::CFraction(int fz_val, int fm_val) {
fz = fz_val;
fm = fm_val;
}
CFraction::CFraction() {
fz = 0;
fm = 0;
}
void CFraction::set(int fz_val, int fm_val) {
fz = fz_val;
fm = fm_val;
}
CFraction CFraction::add(const CFraction& r) {
int tfm, tfz;
tfm = fm * r.fm;
tfz = fz * r.fm + r.fz * fm;
CFraction c(tfz, tfm);
int t = c.getGCD();
c.set(tfz / t, tfm / t);
return c;
}
CFraction CFraction::sub(const CFraction& r) {
int tfm, tfz;
tfm = fm * r.fm;
tfz = fz * r.fm - r.fz * fm;
CFraction c(tfz, tfm);
int t = c.getGCD();
c.set(tfz / t, tfm / t);
return c;
}
CFraction CFraction::mul(const CFraction& r) {
int tfm, tfz;
tfm = fm * r.fm;
tfz = fz * r.fz;
CFraction c(tfz, tfm);
int t = c.getGCD();
c.set(tfz / t, tfm / t);
return c;
}
CFraction CFraction::div(const CFraction& r) {
int tfm, tfz;
tfm = fm * r.fz;
tfz = fz * r.fm;
CFraction c(tfz, tfm);
int t = c.getGCD();
c.set(tfz / t, tfm / t);
return c;
}
int CFraction::getGCD() {// 求对象的分子和分母的最大公约数
int a = abs(fz), b = abs(fm), temp, r;
if (a < b) {
temp = a;
a = b;
b = temp;
}
r = a % b;
while (r) {
a = b;
b = r;
r = a % b;
}
return b;
}
void CFraction::print() {
if (fz * fm < 0)
cout << "-";
cout << abs(fz) << "/" << abs(fm) << endl;
}
int main()
{
int t, i, j, len;
int fz, fm;
char ch;
cin >> t;
for (i = 0; i < t; i++) {
CFraction c[2];
for (j = 0; j < 2; j++) {
cin >> fz >> ch >> fm;
c[j].set(fz, fm);
}
c[0].add(c[1]).print();
c[0].sub(c[1]).print();
c[0].mul(c[1]).print();
c[0].div(c[1]).print();
cout << endl;
}
return 0;
}
6-找出某个范围内的所有素数
#include<iostream>
using namespace std;
unsigned long n;
class CSieve
{
char* p_sieve;
unsigned long num;
public:
CSieve(unsigned long n);
void printPrime();
~CSieve();
};
CSieve::CSieve(unsigned long n) {
p_sieve = new char[n + 1];
for (int i = 0; i < n+1; i++)
{
p_sieve[i] = 0;
}
for (int i = 2;i <= n;i++) {
if (p_sieve[i]) continue;
for (int j = i;j <= n / i;j++) {
p_sieve[i * j] = 1;
}
}
}
void CSieve::printPrime() {
int a[10000], end = 0;
for (int i = 2;i <= n;i++) {
if (!p_sieve[i]) {
a[++end] = i;
}
}
for (int i = 1;i < end;i++) {
cout << a[i] << " ";
}
cout << a[end] << endl;
}
CSieve::~CSieve() {
delete[]p_sieve;
}
int main() {
int t;
cin >> t;
while (t--) {
cin >> n;
CSieve CS(n);
CS.printPrime();
}
}
//老师的代码
#include<iostream>
using namespace std;
class A
{ int a;
public:
A()
{cout<<"Constructed by default, value = 0"<<endl;}
A(int a1): a(a1)
{cout<<"Constructed using one argument constructor, value = "<<a<<endl;}
A(const A &a1): a(a1.a)
{cout<<"Constructed using copy constructor, value = "<<a<<endl;}
};
int main()
{
int t, a,value;
cin>>t;
while(t--)
{
cin>>a;
switch(a)
{
case 0:{A a1;break;}
case 1:{cin>>value;
A a2(value);
break;}
case 2:{cin>>value;
A a3(value);
A a4(a3);
break;}
}
}
return 0;
}
==========================================
//第一种,比较函数形参是对象:bool comp(Cat c1, Cat c2)
#include<iostream>
#include<algorithm>
using namespace std;
class Cat
{
string name;
double weight;
public:
Cat(){ } //可以缺省,使用编译系统自带的缺省构造函数
void set(string n,double w){
name=n;
weight=w;
}
string getName(){return name;}
double getWeight(){return weight;}
};
bool comp(Cat c1, Cat c2)
{
return c1.getWeight()<c2.getWeight();
}
int main()
{
int t,i;
string name;
double weight;
cin>>t;
Cat *c=new Cat[t];
for(i=0;i<t;i++){
cin>>name>>weight;
c[i].set(name,weight);
}
sort(c,c+t,comp);
for(i=0;i<t-1;i++)
cout<<c[i].getName()<<" ";
cout<<c[i].getName()<<endl;
delete[] c;
}
第二种,比较函数形参是常量对象的引用,bool comp(const Cat& c1, const Cat& c2)
#include<iostream>
#include<algorithm>
using namespace std;
class Cat
{
string name;
double weight;
public:
Cat(){ }
void set(string n,double w){
name=n;
weight=w;
}
string getName(){return name;}
double getWeight()const{return weight;} //注意:getWeight()后加了const,表示这个函数是常方法,不能修改数据成员的值。因为比较函数形参定义成常量对象的引用,只能调用常方法
};
bool comp(const Cat& c1, const Cat& c2)
{
return c1.getWeight()<c2.getWeight();
}
int main()
{
int t,i;
string name;
double weight;
cin>>t;
Cat *c=new Cat[t];
for(i=0;i<t;i++){
cin>>name>>weight;
c[i].set(name,weight);
}
sort(c,c+t,comp);
for(i=0;i<t-1;i++)
cout<<c[i].getName()<<" ";
cout<<c[i].getName()<<endl;
delete[] c;
}
===========================
#include<iostream>
#include<cmath>
#include<stdio.h>
using namespace std;
class Point{
double x,y;
public:
Point(double x,double y):x(x),y(y){ }
Point():x(0),y(0){ } //用于创建动态数组
void setXY(double x1,double y1){
x=x1;
y=y1;
}
double getX(){
return x;
}
double getY(){
return y;
}
~Point(){
x=0;
y=0;
cout<<"point clear"<<endl;
}
};
class Circle{
double x,y,r;
public:
Circle(double x,double y,double r):x(x),y(y),r(r){ }
Circle():x(0),y(0),r(0){ }
void Contain(Point& p){ //注意:如果参数不是引用,会多创建一个对象,那么释放的时候因为析构函数中有输出语句,结果就不正确。
double d;
d=sqrt(pow(p.getX()-x,2)+pow(p.getY()-y,2));
if(d>r)
cout<<"out"<<endl;
else
cout<<"in"<<endl;
}
~Circle(){
x=0;
y=0;
r=0;
cout<<"circle clear"<<endl;
}
};
int main()
{ //freopen("d:\\a.txt", "r", stdin);
int t,i;
double x,y,r;
cin>>x>>y;
Point p(x,y);
cin>>t;
Point* po=new Point[t];
for(i=0;i<t;i++){
cin>>x>>y;
po[i].setXY(x,y);
}
cin>>x>>y>>r;
Circle c(x,y,r);
c.Contain(p);
for(i=0;i<t;i++)
c.Contain(po[i]);
return 0;
}
=============================================
#include<iostream>
using namespace std;
class CAccount
{
int CardNo;
int MobileNo;
int PassCode;
int balance;
public:
CAccount(){}
void setData(int c,int m,int p,int a){
CardNo=c;
MobileNo=m;
PassCode=p;
balance=a;
}
int getCardNo(){return CardNo;}
int getMobileNo(){return MobileNo;}
int getPassCode(){return PassCode;}
void redraw(int amount){
if(amount>balance)
cout<<"卡号"<<CardNo<<"--"<<"余额不足"<<endl;
else{
balance-=amount;
cout<<"卡号"<<CardNo<<"--"<<"余额"<<balance<<endl;
}
}
};
int main()
{
int CardNo,MobileNo,PassCode;
int balance,amount;
int t,i,n,k;
cin>>t;
CAccount *account=new CAccount[t];
for(i=0;i<t;i++)
{
cin>>CardNo>>MobileNo>>PassCode>>balance;
account[i].setData(CardNo,MobileNo,PassCode,balance);
}
cin>>n;
while(n--)
{
k=-1; //标识未找到的那种情况
cin>>MobileNo>>PassCode>>amount;
for(i=0;i<t;i++){
if(account[i].getMobileNo()==MobileNo){ //判断号码是否存在
k=i;
break;
}
}
if(k!=-1){ //若号码存在,继续判断密码是否正确
if(account[k].getPassCode()==PassCode)
account[k].redraw(amount);
else
cout<<"密码错误"<<endl;
}
else
cout<<"手机号不存在"<<endl;
}
delete[] account;
return 0;
}
==========================================
第一种写法:直接处理输入:比如3/4,可以看成是输入整数3,字符/,整数4.
#include<iostream>
#include<cmath>
using namespace std;
class CFraction
{
private:
int fz, fm;
public:
CFraction(int fz_val, int fm_val) ;
CFraction();
void set(int fz_val, int fm_val) ;
CFraction add(const CFraction &r);
CFraction sub(const CFraction &r);
CFraction mul(const CFraction &r);
CFraction div(const CFraction &r);
int getGCD(); // 求对象的分子和分母的最大公约数
void print();
};
CFraction::CFraction(int fz_val, int fm_val){
fz=fz_val;
fm=fm_val;
}
CFraction::CFraction(){
fz=0;
fm=0;
}
void CFraction::set(int fz_val, int fm_val){
fz=fz_val;
fm=fm_val;
}
CFraction CFraction::add(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fm+r.fz*fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
}
CFraction CFraction::sub(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fm-r.fz*fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
}
CFraction CFraction::mul(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fz;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
}
CFraction CFraction::div(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fz;
tfz=fz*r.fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
}
int CFraction::getGCD(){// 求对象的分子和分母的最大公约数
int a=abs(fz),b=abs(fm),temp,r;
if(a<b){
temp=a;
a=b;
b=temp;
}
r= a%b;
while(r){
a=b;
b=r;
r=a%b;
}
return b;
}
void CFraction::print(){
if(fz*fm<0)
cout<<"-";
cout<<abs(fz)<<"/"<<abs(fm)<<endl;
}
int main()
{
int t,i,j,len;
int fz,fm;
char ch;
cin>>t;
for(i=0;i<t;i++){
CFraction c[2];
for(j=0;j<2;j++){
cin>>fz>>ch>>fm;
c[j].set(fz,fm);
}
c[0].add(c[1]).print();
c[0].sub(c[1]).print();
c[0].mul(c[1]).print();
c[0].div(c[1]).print();
cout<<endl;
}
return 0;
}
///
//使用string来处理输入
#include <bits/stdc++.h>
using namespace std;
class CFraction
{
private:
int fz, fm;
public:
CFraction(int fz_val, int fm_val) ;
CFraction();
void set(int fz_val, int fm_val) ;
CFraction add(const CFraction &r);
CFraction sub(const CFraction &r);
CFraction mul(const CFraction &r);
CFraction div(const CFraction &r);
int getGCD(); // 求对象的分子和分母的最大公约数
void print();
};
CFraction::CFraction(int fz_val, int fm_val){
fz=fz_val;
fm=fm_val;
}
CFraction::CFraction(){
fz=0;
fm=0;
}
void CFraction::set(int fz_val, int fm_val){
fz=fz_val;
fm=fm_val;
}
CFraction CFraction::add(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fm+r.fz*fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
};
CFraction CFraction::sub(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fm-r.fz*fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
};
CFraction CFraction::mul(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fm;
tfz=fz*r.fz;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
};
CFraction CFraction::div(const CFraction &r){
int tfm,tfz;
tfm=fm*r.fz;
tfz=fz*r.fm;
CFraction c(tfz,tfm);
int t=c.getGCD();
c.set(tfz/t,tfm/t);
return c;
};
int CFraction::getGCD(){// 求对象的分子和分母的最大公约数
int a=abs(fz),b=abs(fm),temp,r;
if(a<b){
temp=a;
a=b;
b=temp;
}
r= a%b;
while(r){
a=b;
b=r;
r=a%b;
}
return b;
};
void CFraction::print(){
if(fz*fm<0)
cout<<"-";
cout<<abs(fz)<<"/"<<abs(fm)<<endl;
};
void finddata(string s,int& fz,int& fm){
int t=s.find("/");
stringstream s1(s.substr(0,t));
s1 >> fz;
stringstream s2(s.substr(t+1));
s2 >> fm;
}
int main()
{
int t,i,j,len;
int fz,fm;
string s;
cin>>t;
for(i=0;i<t;i++){
CFraction **c=new CFraction*[2];
for(j=0;j<2;j++){
cin>>s;
finddata(s,fz,fm);
c[j]=new CFraction(fz,fm);
}
c[0]->add(*c[1]).print();
c[0]->sub(*c[1]).print();
c[0]->mul(*c[1]).print();
c[0]->div(*c[1]).print();
cout<<endl;
for(j=0;j<2;j++)
delete c[j];
delete[] c;
}
return 0;
}
===============================================
#include<iostream>
#include<cmath>
using namespace std;
class CSieve {
private:
char *p_sieve;
unsigned long num;
public:
CSieve(unsigned long n){
p_sieve=new char[n+1]; //0号单元浪费不用,数从1开始
for(int i=1;i<=n;i++)
p_sieve[i]='1';
num=n;
}
void printPrime(){
int last;
Prime();
last=getLast(); //最后一个元素的下标
for(int i=2;i<last;i++)
{
if(p_sieve[i]=='1')
cout<<i<<" ";
}
cout<<last<<endl; //最后一个单独输出
}
void Prime(){
int i,j,k;
k=sqrt(num);
for(j=2;j<=k;j++){
if(p_sieve[j]=='1'){ //找到一个素数j
for(i=j*2;i<=num;i=i+j)
p_sieve[i]='0'; //将j的倍数处理成非素数
}
}
}
int getLast(){ //找到最后一个素数,因为它要单独处理,从后往前找
for(int i=num;i>=2;i--)
{ if(p_sieve[i]=='1')
return i;
}
}
~CSieve(){
delete[] p_sieve;
}
};
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
CSieve myCs(n);
myCs.printPrime();
}
return 0;
}