C++实验答案

实验一

1 通过日期求某月的天数。

输入日期的年份和月份,求该月有多少天。提示:对于月份为1、3、5、7、8、10、12的月份天数为31,月份为4、6、9、11的月份天数为30,月份为2时要结合年份考虑闰年的情况。

输入描述

输入两个正整数y和m分别表示年份和月份。

输出描述

如果y和m满足条件:1900<=y<3000,0<m<13,输出该月的天数;否则输出“Input error!”。

输入样例

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;

}

2. 录取研究生。

题目描述

某高校录取研究生的要求是,新生的每门课成绩不低于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;

}

3. 骑车与走路。

题目描述

在华农校园里,没有自行车,上课办事会很不方便。但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为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<<fixed<<setprecision(2)<<cost<<endl;
按上面的形式控制输出格式时,需在源程序最开始加上一行:#include<iomanip>

输入描述

输入停车的时间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;

}

5. 简单计算器

题目描述

模拟计算器的功能,能根据用户输入的两个运算数和运算符(’+’、 ‘-’、 ‘*’ 或‘/ ’),对两个数进行相应的运算,输出运算结果。注意:除法运算‘/ ’的除数不能为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;

}

2. 球弹跳高度的计算

题目描述

一球从某一高度落下(整数,单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第5次落地时,共经过多少米? 第5次反弹多高?

输入描述

输入一个整数h0,表示球的初始高度。

输出描述

两个数据s和h,分别表示第5次落地时共经过s米,第5次反弹高度为h米,s和h用空格隔开。
注意:结果可能是实数,结果用double类型保存。
提示:输出时不需要对精度特殊控制,用cout<<ANSWER即可。

输入样例

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;

}

3. 求分数序列和

题目描述

有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。

输入描述

输入有一行:正整数n。

输出描述

输出有一行:分数序列的和(浮点数,精确到小数点后4位)。
【提示】
1. 最好在程序中使用双精度浮点数(double)记录求得的和。
2. 要输出浮点数、双精度数小数点后4位数字,可以用下面这种形式:
cout<<fixed<<setprecision(4)<<result<<endl;
按上面的形式控制输出格式时,需在源程序最开始加上一行#include<iomanip>。

输入样例

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;

}

4. 点和正方形的关系

题目描述

在平面坐标系中,有一个正方形,四个角的坐标(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;

}

5. 抓交通肇事犯

题目描述

一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号所构成的数字正好等于某一个整数的平方。请根据以上线索求出车号。

输入描述

无。

输出描述

直接显示一个四位整数表示肇事车号

输入样例

输出样例

#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;

}

2. 歌唱比赛选手成绩计算

题目描述

歌唱大赛选手成绩这样计算:去掉一个最高分,去掉一个最低分,将剩下分数的平均值作为选手的最后得分。现假设共有6位评委,都是按百分制打分,请编程计算选手的成绩。
提示:将6个评分存入score数组中。关键是求出其中的最大值max(即最高分)和最小值min(即最低分)。

输入描述

依次输入6位评委的打分score1~score6,每个scorei都是double型,且满足0≤scorei≤100。

输出描述

输出一行,表示该选手的最后得分。
提示:输出时不需要对精度特殊控制,用cout<<ANSWER即可。

输入样例

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;

}

3. 神秘的字符加、解密技术

题目描述

插入式加密法是信息加密中一种简单的加密技术,其方法是在明文字符中插入一些无意义的字母来形成密文单词。例如,对于明文: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;

}

4. 字符串大小写转换

题目描述

输入一个长度小于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;

}

5. 打印极值点下标

题目描述

在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数,或者小于所有它相邻的整数,则称为该整数为一个极值点,极值点的下标就是i。
注意:数组中的第一个数(下标为0)只要和第二个数(下标为1)不相等,第一个数(下标为0)就是极值点;同理,数组中的最后一个数只要和倒数第二个数不相等,最后一个数也是极值点。

输入描述

有2行输入:第一行是此数组的元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔。

输出描述

输出为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;

}

2. 伦敦奥运会倒计时

题目描述

假定现在已是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;

}

3. 神奇的英文回文

题目描述

许多英语单词无论是顺读还是倒读,其词形完全一样,都是同一个单词,如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;

}

4. 生成指定字符构成的字符串

题目描述

编写一个函数,用于生成一个由若干个指定字符构成的字符串,其原型为:
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;

}

5. 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<<Distance(p1,p2)<<endl;
return 0;
}

输入描述

输入四个数,用空格隔开。

输出描述

两个点的距离。

输入样例

1 3 5 6

输出样例

5

#include<iostream>

#include<cmath>

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;

}

2. 日期类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;

}

3. 学生类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<<endl;
Zhang_San.GetName(chOne); //调用GetName(char *)成员函数将对象Zhang_San表示姓名的数据成员值
//存放到chOne所指向的动态字符数组中
cout<<"Zhang_San's name is "<<chOne<<endl; //显示姓名
cout<<"Zhang_San's gender is "<<Zhang_San.GetGender()<<endl; //显示性别:1(男),0(女)
cout<<"Zhang_San's age is "<<Zhang_San.GetAge()<<endl; //显示年龄
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<iostream>

#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;

}

4. 计算器类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、a*b和a/b的结果

输入样例

1 2

输出样例

1+2=3

1-2=-1

1*2=2

1/2=0.5

#include<iostream>

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;

}

5. 复数类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<iostream>

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;

}

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟大帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值