华中农业大学C++考试基础练习题

实验一
1 通过日期求某月的天数。
输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。
输入描述
输入两个正整数y和m分别表示年份和月份。
输出描述
如果y和m满足条件:1900<=y<3000,0 输入样例
2010 12
输出样例
31

#include"iostream"
using namespace std;

int main()
{
    int y,m;
    cin>>y>>m;
    if (m>0&&m<13&&y>=1900&&y<3000)
    {
        int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        if (y%4==0&&y%100!=0||y%400==0)
            a[1]+=1;
        cout<<a[m-1];
    }
    else
        cout<<"Input error!";

    return 0;
}
  1. 录取研究生。
    题目描述
    某高校录取研究生的要求是,新生的每门课成绩不低于60分,总成绩不低于340分,370分以下为自费。编一程序实现输入一个学生的四门课成绩,试判断该生为该校录取的情况(“没有录取”、“自费”、“公费”三种情况)。
    输入描述
    输入四门课的成绩,成绩均为0~150之间的整数。
    输出描述
    录取结果。(“没有录取”、“自费”、“公费”)
    输入样例
    60 100 130 80
    输出样例
    公费
#include"iostream"
using namespace std;

int  main()
{
    int a,b,c,d;
    while(cin>>a>>b>>c>>d&&a>=0&&a<=150&&b>=0&&b<=150&&c>=0&&c<=150&&d>=0&&d<=150)
    {
        if (a<60||b<60||c<60||d<60||a+b+c+d<340)
            cout<<"没有录取";
        else if (a+b+c+d<370)
            cout<<"自费";
        else
            cout<<"公费";
    }
    return 0;
}
  1. 骑车与走路。
    题目描述
    在华农校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。
    输入描述
    一个整数:为一次办事要行走的距离,单位为米。
    输出描述
    对输入的整数,如果骑车快,输出一行“Bike”;如果走路快,输出一行“Walk”;如果一样快,输出一行“All”。
    输入样例
    【样例输入1】 【样例输入2】
    50 120
    输出样例
    【样例输出1】 【样例输出2】
    Walk Bike
#include"iostream"
using namespace std;

int main()
{
    int s;
    double t1,t2;
    cin>>s;
    t1=s/1.2;
    t2=27+23+s/3.0;
    if (t1<t2)
        cout<<"walk"<<endl;
    else if (t1>t2)
        cout<<"bike"<<endl;
    else
        cout<<"All"<<endl;
    return 0;
}

4停车场收费
题目描述
一个停车场的标准收费是3小时之内收5元,超过3小时,每增加1小时加收2元;如果时间不是整数,按比例收取,例如:如果输入为3.6小时,则费用为5 + (3.6-3)*2 = 6.2 元。最高收费为40元。假设任何车辆的停车时间都不超过24小时。编写程序,计算每辆车的停车费。
【提示】
要输出浮点数、双精度数小数点后2位数字,可以用下面这种形式:
cout< 按上面的形式控制输出格式时,需在源程序最开始加上一行:#include
输入描述
输入停车的时间t
输出描述
输出应该收取的停车费用cost,保留小数点后2位
输入样例
3.46
输出样例
5.92

#include"iomanip"
#include"iostream"
using namespace std;

int  main()
{
    float t;
    float cost;
    while(cin>>t&&t<24)
    {
    if (t<=3)
        cost=5;
    else if (t<=20.5)
        cost=5+(t-3)*2;
    else
        cost=40;
    cout<<fixed<<setprecision(2)<<cost<<endl;
    }
    return 0;
}
  1. 简单计算器
    题目描述
    模拟计算器的功能,能根据用户输入的两个运算数和运算符(’+’、 ‘-’、 ‘’ 或‘/ ’),对两个数进行相应的运算,输出运算结果。注意:除法运算‘/ ’的除数不能为0。
    输入描述
    两个实数a、b和一个运算符号c,它们之间用空格隔开。
    输出描述
    如果能运算,输出a和b的运算结果;如果c为除号,且b为0,输出“除数为0!”;如果c不是’+’、 ‘-’、 ‘
    ’ 或‘/ ’中的运算符号,输出“运算符号错误!”
    输入样例
    4 9 *
    输出样例
    36
#include"iostream"
using namespace std;

int main()
{
    float a,b;
    char c;
    cin>>a>>b>>c;
    switch(c)
    {
    case '+':
        cout<<a+b<<endl;
        break;
    case '-':
        cout<<a-b<<endl;
        break;
    case '*':
        cout<<a*b<<endl;
        break;
    case '/':
        {
            if (b==0)
                cout<<"除数为0!"<<endl;
            else
                {
                    cout<<a/b<<endl;
                }
            break;

        }
    default:
        cout<<"运算符号错误!"<<endl;
    }
    return 0;
}

实验二

  1. 数字求和
    题目描述
    给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少?
    输入描述
    输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。
    输出描述
    输出一行,给出一个正整数,是5个数中小于a的数的和。
    输入样例
    10 1 2 3 4 11
    输出样例
    10
#include"iostream"
using namespace std;

int main()
{
   int a,b[5],i,s;
   while(cin>>a&&a>0&&a<100)
   {
       s=0;
       for(i=0;i<5;i++)
       {
           cin>>b[i];
           if (b[i]<0||b[i]>100)
           break;
           if (b[i]<a)
           s+=b[i];
       }
       cout<<s<<endl;
   }
   return 0;
}
  1. 球弹跳高度的计算
    题目描述
    一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第5次落地时,共经过多少米? 第5次反弹多高?
    输入描述
    输入一个整数h0,表示球的初始高度。
    输出描述
    两个数据s和h,分别表示第5次落地时共经过s米,第5次反弹高度为h米,s和h用空格隔开。
    注意:结果可能是实数,结果用double类型保存。
    提示:输出时不需要对精度特殊控制,用cout< 输入样例
    10
    输出样例
    28.75 0.3125
#include"iostream"
using namespace std;

int main()
{
    int h0,i;
    double s,h;
    cin>>h0;
    h=s=h0;
    for(i=1;i<5;i++)
    {
        h=h/2;
        s=s+h*2;

    }
    cout<<s<<" "<<h/2<<endl;
    return 0;
}
  1. 求分数序列和
    题目描述
    有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,… 求这个分数序列的前n项之和。
    输入描述
    输入有一行:正整数n。
    输出描述
    输出有一行:分数序列的和(浮点数,精确到小数点后4位)。
    【提示】
  2. 最好在程序中使用双精度浮点数(double)记录求得的和。
  3. 要输出浮点数、双精度数小数点后4位数字,可以用下面这种形式:
    cout< 按上面的形式控制输出格式时,需在源程序最开始加上一行#include。
    输入样例
    99
    输出样例
    160.4849
#include"iostream"
#include"iomanip"
using namespace std;

int main()
{
   double i,t,m,s,n,k;
   cin>>n;
   s=0;
   m=2;
   k=1;
   for(i=0;i<n;i++)
   {
       s=s+m/k;
       t=m+k;
       k=m;
       m=t;
   }
   cout<<fixed<<setprecision(4)<<s<<endl;
   return 0;
}
  1. 点和正方形的关系
    题目描述
    在平面坐标系中,有一个正方形,四个角的坐标(x,y)分别是(1,-1),(1,1),(-1,-1),(-1,1),x是横轴,y是纵轴。写一个程序,判断给定的多个点是否在这个正方形内。
    输入描述
    多组数据,每行包含两个浮点型数据,分别表示一个点的横、纵坐标,输入坐标为0,0时表示输入结束。(注意,输入的数据不止3组)
    输出描述
    对每组输入的点进行判断,显示yes或no,表示是否在正方形中,最后输入的原点也要显示yes,然后才不再继续输入点坐标。(当点在正方形的边上时,也认为在正方形内)
    输入样例
    3 4
    0.5 1
    0 0
    输出样例
    no
    yes
    yes
#include"iostream"
#include"iomanip"
using namespace std;

int main()
{
   double x,y;
   while(cin>>x>>y&&x||y)
   {
       if (x>=-1&&x<=1&&y>=-1&&y<=1)
       cout<<"yes"<<endl;
       else
       cout<<"no"<<endl;
   }
   cout<<"yes";
   return 0;
}
  1. 抓交通肇事犯
    题目描述
    一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号所构成的数字正好等于某一个整数的平方。请根据以上线索求出车号。
    输入描述
    无。
    输出描述
    直接显示一个四位整数表示肇事车号
    输入样例

    输出样例
#include"iostream"
#include"math.h"
using namespace std;

int main()
{
    double a,b,m,s;
    for(a=0;a<=9;a++)
    {
        for(b=0;b<=9;b++)
        {
            m=a*1000+a*100+b*10+b;
            s=sqrt(m);
            if (fabs(s-(int)s)==0)
            {
                if (a!=b)
                    cout<<a<<a<<b<<b<<endl;
            }
        }
    }
    return 0;
}

实验三

  1. 陶陶摘苹果
    题目描述
    陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。
    输入描述
    输入包括两行数据。第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。
    输出描述
    输出只包含一个整数,表示陶陶能够摘到的苹果的数目。
    输入样例
    100 200 150 140 129 134 167 198 200 111
    110
    输出样例
    5
#include"iostream"
using namespace std;

int main()
{
    int a[10],n,i,s=0;
    for(i=0;i<10;i++)
        cin>>a[i];
    cin>>n;
    n+=30;
    for(i=0;i<10;i++)
    {
        if (a[i]<=n)
            s++;
    }
    cout<<s<<endl;
    return 0;
}
  1. 歌唱比赛选手成绩计算
    题目描述
    歌唱大赛选手成绩这样计算:去掉一个最高分,去掉一个最低分,将剩下分数的平均值作为选手的最后得分。现假设共有6位评委,都是按百分制打分,请编程计算选手的成绩。
    提示:将6个评分存入score数组中。关键是求出其中的最大值max(即最高分)和最小值min(即最低分)。
    输入描述
    依次输入6位评委的打分score1~score6,每个scorei都是double型,且满足0≤scorei≤100。
    输出描述
    输出一行,表示该选手的最后得分。
    提示:输出时不需要对精度特殊控制,用cout< 输入样例
    78.8 92.3 87.6 94.8 85.8 94.8
    输出样例
    90.125
#include"iostream"
using namespace std;

int main()
{
    double a[6],max,min,av,s=0;
    int i;
    for(i=0;i<6;i++)
        {
            cin>>a[i];
            if (a[i]<0||a[i]>100)break;
            s+=a[i];
        }
    max=min=a[0];
    for(i=1;i<6;i++)
    {
        if (max<a[i])
            max=a[i];
        if (min>a[i])
            min=a[i];
    }
    av=(s-max-min)/4;
    cout<<av<<endl;
    return 0;
}
  1. 神秘的字符加、解密技术
    题目描述
    插入式加密法是信息加密中一种简单的加密技术,其方法是在明文字符中插入一些无意义的字母来形成密文单词。例如,对于明文:China,在间隔为1的位置依次插入一个字母而形成密文:Coheifnia。因此,其解密过程与加密过程相反,即从密文中首字符开始取,每间隔1个位置依次取出字符,就得到原始的明文。请编程实现插入式加密法所对应的解密算法,将密文翻译成明文。
    提示:定义两个字符数组ci和pl,分别存放密文字符串和明文字符串。解密过程即在字符串ci中,从下标0的字符(首字符)开始,将偶数下标的字符(’\0’之前的)依次取出赋值到字符数组pl中,最后即得到明文字符串。
    输入描述
    输入一行:密文字符串。
    输出描述
    输出有一行:翻译后的明文字符串。
    输入样例
    Coheifnia
    输出样例
    China
#include"iostream"
#include"cstring"
using namespace std;

char a[1000000],b[1000000];
int main()
{
    int i,j=0;
    cin>>a;
    for(i=0;a[i]!='\0';i+=2)
    {
        b[j++]=a[i];
    }
    b[j]='\0';
    cout<<b<<endl;
    return 0;
}
  1. 字符串大小写转换
    题目描述
    输入一个长度小于20的不含空格的字符串,然后对该字符串做如下处理:对字符串中的每个字符,如果是大写字母,将其转化为小写;如果是小写字母,将其转化为大写,最后将处理后的字符串输出。要求用指针对字符串进行处理。
    输入描述
    输入一行:长度小于20的不含空格的字符串。
    输出描述
    输出一行:处理以后的字符串。
    输入样例
    ILoveC++!
    输出样例
    ilOVEc++!
#include"iostream"
#include"string.h"
using namespace std;
char judge(char a)
{
    if (a>='a'&&a<='z')
        return a-32;
    else if (a>='A'&&a<='Z')
        return a+32;
    else
        return a;
}
int main()
{
    char *p=new char[20];
    cin>>p;
    for(int i=0;p[i];i++)
        p[i]=judge(p[i]);
    cout<<p;
    return 0;
}
  1. 打印极值点下标
    题目描述
    在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。
    注意:数组中的第一个数(下标为0)只要和第二个数(下标为1)不相等,第一个数(下标为0)就是极值点;同理,数组中的最后一个数只要和倒数第二个数不相等,最后一个数也是极值点。

输入描述
有2行输入:第一行是此数组的元素个数k(4

输出描述
输出为1行:依次对应于数组的所有极值点下标值,下标值之间用空格分隔。

输入样例
15
12 12 122 112 222 222 222 221 76 36 31 234 256 76 73

输出样例
2 3 10 12 14

#include"iostream"
using namespace std;

int main()
{
    int a[81],n,i,j,flag=0;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
    if (a[0]!=a[1]){
        cout<<0;
        flag=1;
    }
    for(i=1;i<n-1;i++)
    {
        if (a[i]>a[i-1]&&a[i]>a[i+1]||a[i]<a[i-1]&&a[i]<a[i+1]){
            if (flag)
                cout<<" "<<i;
            else
            {
                cout<<i;
                flag=1;
            }
        }
    }
    if (a[i]!=a[i-1])
        cout<<" "<<i;
        return 0;
}

实验四

  1. 判断完数
    题目描述
    判断正整数n是否为完数。已知一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数。此程序要求编写函数bool wanshu(int n),判断n是否为完数,若n是,则函数返回true;否则返回false。然后主函数通过该函数的返回值,在屏幕上输出判断结果。
    输入描述
    输入一个正整数n。
    输出描述
    若n是完数,则输出"yes";否则输出"no"。
    输入样例
    28
    输出样例
    yes
#include"iostream"
using namespace std;

bool wanshu(int n)
{
    bool a=true;
    int i,s=1;
    for(i=2;i<n;i++)
    {
        if (n%i==0)
        {
            s=s+i;
        }
    }
    if (n!=s)
        a=false;
    return a;
}

int main()
{
    int n;
    cin>>n;
    if(wanshu(n)==true)
    cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
    return 0;
}
  1. 伦敦奥运会倒计时
    题目描述
    假定现在已是2012年,请编写程序,计算2012年伦敦奥运会倒计时的天数并输出。已知伦敦奥运会的开幕日期是2012年7月27日。用户输入日期的范围必须是2012年1月1日— 2012年7月26日。要求程序中编写函数int CountDown(int year,int month,int day),来计算从用户输入的日期year-month-day到伦敦奥运会开幕日之间的倒数天数。
    提示:所求天数= month这个月的总天数-day+(month+1到6月所有这些月份天数之和)+27。
    输入描述
    用户输入的日期的格式必须是year month day。其中year应是2012,month必须满足1≤month≤7。输入的数据之间用空格隔开。
    输出描述
    输出为一行“距离2012伦敦奥运会还有x天。”,其中x为求出的倒计时的天数。如果输入的数据不满足条件,输出“ERROR!”。
    输入样例
    2012 2 5
    输出样例
    距离2012伦敦奥运会还有173天。
#include"iostream"
#include"cstdio"
using namespace std;

int CountDown(int year,int month,int day)
{
    int a[6]={31,29,31,30,31,30};
    int i,s=0;
    for(i=month-1;i<6;i++)
        s=s+a[i];
    s=s-day+27;
    return s;
}

int main()
{
    int y,m,d;
    cin>>y>>m>>d;
    if (y==2012&&m>=1&&m<=7)
        cout<<"距离2012伦敦奥运会还有"<<CountDown(y,m,d)<<"天。"<<endl;
    else
        cout<<"ERROR!"<<endl;
    return 0;
}
  1. 神奇的英文回文
    题目描述
    许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如dad(爸爸)、noon(中午)、level(水平)等,这样的词称为回文词。在最权威的《牛津英语大词典》里,最长的回文词是tattarrattat,是个象声词,表示敲门的声音。英语的回文句更有趣味(忽略其中的标点符号)。最著名的一句为:“Madam,I’m Adam.”(小姐,我是亚当。)据说,这是亚当在伊甸园里初见夏娃作自我介绍时说的话。
    现要求编写一个函数bool huiwen(char *p),判断输入的一个单词是否为回文词。p是指向要输入的字符串的指针,如果是返回true,否则返回false。
    输入描述
    输入一个单词后回车。
    输出描述
    若该单词是回文词,则输出“yes”;否则输出“no”。
    输入样例
    level
    输出样例
    Yes
#include"iostream"
#include"cstring"
using namespace std;

bool huiwen(char *q)
{
    bool a=true;
    char *p=q;
    int l=strlen(q);
    q=q+l-1;
    for(p,q;p<=q;p++,q--)
    {
        if (*p!=*q)
            a=false;
    }
    return a;
}

int main()
{
    char a[1000];
    cin>>a;
    if(huiwen(a)==true)
    cout<<"yes"<<endl;
    else
        cout<<"no"<<endl;
    return 0;
}
  1. 生成指定字符构成的字符串
    题目描述
    编写一个函数,用于生成一个由若干个指定字符构成的字符串,其原型为:
    void mystr(char c,int n, char *p);其中,参数c是构造字符串的字符,n是字符串中字符的个数,p是生成的字符串的首地址。
    要求:编写主函数,在主函数中进行字符和字符个数的输入,然后再调用mystr函数生成字符串,最后在主函数中将生成的字符串输出。
    输入描述
    输入字符c和正整数n,之间用空格隔开。(正整数n的值不超过50)
    输出描述
    输出为由n个字符c构成的字符串
    输入样例

4

输出样例

#include"iostream"
using namespace std;

void mystr(char c,int n, char *p)
{
    int i;
    for(i=0;i<n;i++)
    {
        *p=c;
        p++;
    }
    *p='\0';
}

int main()
{
    char a[50],c;
    int n;
    cin>>c>>n;
    mystr(c,n,a);
    cout<<a<<endl;
    return 0;
}
  1. Fibonacci数列问题
    题目描述
    有一个有趣的古典数学问题:有一对兔子,从出生后第3个月起每个月都生1对兔子,小兔子长到第3个月后每个月又生1对兔子。假设所有兔子都不死,问每个月兔子的总对数为多少?
    提示:不满1个月的为小兔子,满1个月不满2个月的为中兔子,满3个月以上的为老兔子。每对老兔子每个月会生1对小兔子。因此,每个月的兔子总数依次为1,1,2,3,5,8,13,…。这就是Fibonacci数列。该数列的递归定义如下:f(n)=1 (n等于1或2);f(n)= f(n-1)+ f(n-2) (n>2)
    请编写递归函数int fib(int n),求出第n个月兔子的总对数。
    输入描述
    输入一个正整数n,表示求第n个月兔子的总对数。
    输出描述
    输出为一行“第n个月兔子的总对数为f”,f值为求出的数列第n项的值f(n)。
    输入样例
    2
    输出样例
    第2个月兔子的总对数为1
#include"iostream"
#include"cstdio"
using namespace std;

int fib(int n)
{
    if (n==1||n==2)
        return 1;
    else
        return fib(n-1)+fib(n-2);
}

int main()
{
    int n;
    scanf("%d",&n);
    printf("第%d个月兔子的总对数为%d",n,fib(n));
    return 0;
}

实验五

  1. 计算两点间的距离
    题目描述
    仿照本次实验预习的程序填空题1,将以上Distance函数定义为类piont的友元函数,实现程序的功能。并在主函数中增加输入两点作为友元函数的实参。
    其主函数如下:
    int main()
    {
    float p1_x,p1_y,p2_x,p2_y;
    //输入四个点
    cin>>p1_x>>p1_y>>p2_x>>p2_y;
    point p1(p1_x,p1_y),p2(p2_x,p2_y);
    cout< return 0;
    }
    输入描述
    输入四个数,用空格隔开。
    输出描述
    两个点的距离。
    输入样例
    1 3 5 6
    输出样例
    5
#include
#include
using namespace std;

class point
{
public:
    point(float a,float b)
    {
        x=a;
        y=b;
    }
    float friend Distance(point &p1,point &p2)
    {
        float dx=p1.x-p2.x;
        float dy=p1.y-p2.y;
        return sqrt(dx*dx+dy*dy);
    }
private:
    float x,y;
};
int main()
{
    float a,b,c,d;
    cin>>a>>b>>c>>d;
    point pa(a,b),pb(c,d);
    cout<<Distance(pa,pb)<<endl;
    return 0;
}
  1. 日期类CDateInfo的设计
    题目描述
    根据以下主函数的功能来设计日期类CDateInfo,使其能正确运行。类CDateInfo中应该具有描述年、月、日的三个数据成员和相应的成员函数。
    int main()
    {
    CDateInfo data1,data2(2011,10,10); //定义对象data1和data2
    //分别调用类的不带参数的构造函数和带3个参数的构造函数对其数据成员进行初始化
    //date1的数据成员未初始化时,其年月日用默认值2000,1,1来继续初始化。
    int y,m,d;
    cin>>y>>m>>d; //输入年月日值
    data1.SetDate(y,m,d); //设置data1的年月日为y,m,d
    data1.GetDate(); //按year-month-day的格式显示data1的年月日
    data2.GetDate(); //按year-month-day的格式显示data2的年月日为“2011-10-10”
    return 0;
    }
    输入描述
    三个整数,分别用来设置对象data1的年、月、日
    输出描述
    两行:第1行为对象data1的年月日;第2行为data2的年月日。
    输入样例
    2011 12 5
    输出样例
    2012-12-5
    2011-10-10
#include"iostream"
using namespace std;

class CDateInfo
{
public:
    CDateInfo(int a=2000,int b=1,int c=1)
    {
        year=a;
        month=b;
        day=c;
    }
    void SetDate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;
    }
    void GetDate()
    {
        cout<<year<<"-"<<month<<"-"<<day<<endl;
    }
private:
    int year,month,day;
};

int main()
{
    CDateInfo data1,data2(2011,10,10);
    int y,m,d;
    cin>>y>>m>>d;
    data1.SetDate(y,m,d);
    data1.GetDate();
    data2.GetDate();
    return 0;
}
  1. 学生类Student的设计
    题目描述
    根据以下主函数的功能来设计学生类Student,使其能正确运行。类Student中应该具有描述学生姓名、性别、年龄的三个数据成员和相应的成员函数。
    int main()
    {
    Student Zhang_San; //创建Student类对象Zhang_San
    char*chOne;
    int iSex;
    unsigned iOld;
    chOne=new char[11]; //创建动态字符数组用来存放姓名,指针chOne指向该数组
    cin>>chOne; //输入姓名,存放在chOne所指向的动态字符数组中
    cin>>iSex; //输入性别,输入1表示性别为“男”,输入0表示性别为“女”
    cin>>iOld; //输入年龄
    Zhang_San.SetName(chOne); //用输入的姓名设置对象Zhang_San用来表示姓名的数据成员
    Zhang_San.SetGender(iSex); //设置对象Zhang_San用来表示性别的数据成员
    Zhang_San.SetAge(iOld); //设置对象Zhang_San用来表示年龄的数据成员
    cout< Zhang_San.GetName(chOne); //调用GetName(char *)成员函数将对象Zhang_San表示姓名的数据成员值
    //存放到chOne所指向的动态字符数组中
    cout<<"Zhang_San’s name is "< cout<<"Zhang_San’s gender is "< cout<<"Zhang_San’s age is "< delete []chOne;
    return 0;
    }
    输入描述
    3行,第一行为一个长度不超过10的字符串表示姓名;第二行为0和1中的一个整数;第三行为一个整数,表示年龄。
    输出描述
    按主函数要求输出。
    输入样例
    ZhangSan
    0
    20
    输出样例
    Zhang_San’s name is ZhangSan
    Zhang_San’s gender is 0
    Zhang_San’s age is 20
#include
#include"cstring"
using namespace std;

class Student
{
public:
    void SetName(char a[])
    {
        strcpy(name,a);
    }
    void SetGender(int a)
    {
        sex=a;
    }
    void SetAge(int b)
    {
        age=b;
    }
    void GetName(char *p)
    {
        strcpy(p,name);
    }
    int GetGender()
    {
        return sex;
    }
    int GetAge()
    {
        return age;
    }
private:
    char name[11];
    int sex,age;
};
int main()
{
    Student Zhang_San;
    char *chOne;
    int iSex;
    unsigned iOld;
    chOne=new char[11];
    cin>>chOne;
    cin>>iSex;
    cin>>iOld;
    Zhang_San.SetName(chOne);
    Zhang_San.SetGender(iSex);
    Zhang_San.SetAge(iOld);
    Zhang_San.GetName(chOne);
    cout<<"Zhang_San's name is "<<chOne<<endl;
    cout<<"Zhang_San's gender is "<<Zhang_San.GetGender()<<endl;
    cout<<"Zhang_San's age is "<<Zhang_San.GetAge()<<endl;
    delete []chOne;
    return 0;
}
  1. 计算器类Calculator的设计
    题目描述
    根据以下主函数的功能来设计计算器类Calculator,使其能正确运行。类Calculator中应该具有描述运算数的a和b及其表示a和b运算结果的三个数据成员和相应计算并显示结果的成员函数。
    int main( )
    {
    float a, b;
    cin>>a>>b; //从键盘输入运算数a、b
    Calculator cal( a , b ); //用a和b初始化创建的Calculator类对象cal
    cal.add( ); //计算a+b并显示结果
    cal.subtract( );
    cal.multiply( );
    cal.divide( );
    return 0;
    }
    输入描述
    2个整数a和b,表示参与运算的两个数据。
    输出描述
    4行,分别显示a+b、a-b、ab和a/b的结果
    输入样例
    1 2
    输出样例
    1+2=3
    1-2=-1
    1
    2=2
    1/2=0.5
#include
using namespace std;

class Calculator
{
public:
    Calculator(int i,int j)
    {
        a=i;
        b=j;
    }
    void add();
    void subtract();
    void multiply();
    void divide();
private:
    float a,b;
};
void Calculator::add()
{
    cout<<a<<"+"<<b<<"="<<a+b<<endl;
}
void Calculator::subtract()
{
    cout<<a<<"-"<<b<<"="<<a-b<<endl;
}
void Calculator::multiply()
{
    cout<<a<<"*"<<b<<"="<<a*b<<endl;
}
void Calculator::divide()
{
    cout<<a<<"/"<<b<<"="<<a/b<<endl;
}
int main()
{
    int a, b;
    cin>>a>>b;
    Calculator cal(a,b);
    cal.add();
    cal.subtract();
    cal.multiply();
    cal.divide();
    return 0;
}
  1. 复数类Imaginary的设计
    题目描述
    根据以下主函数的功能来设计复数类Imaginary,使其能正确运行。类Imaginary中应该具有描述复数的实部和虚部的私有数据成员a和b,还有相应的构造函数和按照“a±bi”格式显示复数的成员函数print()。设计类Imaginary的2个友元函数分别进行复数的加、减运算,并在这些函数调用类Imaginary的成员函数print()显示结果。
    int main()
    {
    float x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2; //输入4个数据,分别表示进行运算的两个复数的实部和虚部
    Imaginary imag1(x1,y1),imag2(x2,y2); //用x1、y1创建Imaginary类对象imag1
    Add(imag1,imag2); //调用友元函数求两个复数之和,按a±bi的格式显示运算结果(a和b均为实数)
    Sub(imag1,imag2); //求两个复数之差并显示运算结果
    return 0;
    }
    输入描述
    输入4个数据,分别表示进行运算的两个复数的实部和虚部
    输出描述
    4行,分别显示两个复数进行加、减、乘、除运算的结果
    输入样例
    1 3 2 5
    输出样例
    3+8i
    -1-2i
#include
using namespace std;

class Imaginary
{
public:
    Imaginary(float A,float B)
    {
        a=A;
        b=B;
    }
    void print()
    {
        cout<<a<<b<<"i"<<endl;
    }
    void friend Add(Imaginary e1,Imaginary e2);
    void friend Sub(Imaginary e1,Imaginary e2);
private:
    float a,b;
};
void Add(Imaginary e1,Imaginary e2)
{
    float c;
    c=e1.b+e2.b;
    if (c>0)
        cout<<e1.a+e2.a<<"+"<<c<<"i"<<endl;
    else if (c<0)
        cout<<e1.a+e2.a<<c<<endl;
    else
        cout<<e1.a+e2.a<<endl;
}
void Sub(Imaginary e1,Imaginary e2)
{
    float c;
    c=e1.b-e2.b;
    if (c>0)
        cout<<e1.a-e2.a<<"+"<<c<<"i"<<endl;
    else if (c<0)
        cout<<e1.a-e2.a<<c<<"i"<<endl;
    else
        cout<<e1.a-e2.a<<endl;
}
int main()
{
    float x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    Imaginary imag1(x1,y1),imag2(x2,y2);
    Add(imag1,imag2);
    Sub(imag1,imag2);
    return 0;
}

你可能感兴趣的:(C++)