c++上机实验报告(精品)

时间:2024.4.14

XX大学

C++上机实验报告(一)

学    院:XX学院

班    级:XXX

姓    名:XXX

学    号:1111111

指导老师:XXX

日    期:年月日

实验三  类的定义和使用

一.实验目的

1.掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;

2.掌握类对象的定义;

3.理解类的成员的访问控制的含义,公有、私有和保护成员的区别;

4.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数;

5.掌握友元函数的含义,友元函数和成员函数的区别。 

二.实验内容及要求

1、定义一个圆类,计算圆的面积和周长。

要求:分别用成员函数和友元函数来求圆的面积和周长。

2、定义一个学生类,其中有3个数据成员有学号、姓名、年龄,以及若干成员函数。同时编写主函数使用这个类,实现对学生数据的赋值和输出。

要求:

1)使用成员函数实现对输出的输入、输出;

2)使用构造函数和析构函数实现对数据的输入、输出。

3、定义日期类型Date。要求有以下面成员:

1)可以设置日期;

2)日期加一天操作;

3)输入函数,输入格式为“XXXX年XX月XX日”。

三.实验要求

1)写出程序,并调试程序,要给出测试数据和实验结果。

2)整理上机步骤,总结经验和体会。

3)完成实验日志和上交程序。

四.算法思想

1.圆类

程序中,用Circle构造函数和Length友元函数分别计算圆的的面积和周长。再通过主函数调用:

Date d;

    cout<<"请输入圆半径r:";

   cin>>m;

   Circle p(m);

   Length(p);

实现输入半径r并输出相关计算值。

2.学生类

根据要求分别用构造函数Student(double n,int o,char c[50])和析构函数~Student(),实现学生信息的录入与输出。

于是,当在主程序中,定义学生类Student s(n,o,c)是调用构造函数录入信息,所在作用范围结束时,系统会自动调用析构函数输出信息。

同时外加for循环操作以实现学生信息的多次录入。

3.日期类

根据要求,分别再类中定义以下成员函数实现相应功能:

void Set(int y,int m,int d);      //设置时间

void Add();                       //日期加一

int Print();                     //输出当前日期(年/月/日)

int Isleapyear();               //判断是否为闰年

private:                        //私有成员

int year,month,day;

其中,比较困难的部分是“日期加一”函数,它需要调用其他的成员函数(如判断闰年函数),同时由于,每个月的日期没有规律,因此只能一一分情况讨论,因此很自然想到利用switch语句。另外,2月份十分特殊,应拿出来单独先讨论。

思路如下:

1. 先建立外部大循环:2月和非2月

2. 2月中:

先判断是否为闰年:若为闰年,则29号为上限,否则28号是上限。到达上限的日期,month+=1,day=1。

3. 非2月中:

类似2月,不用判断闰年,直接根据月末30号,31号和<30号三种情况讨论即可,中间用switch语句,分月份讨论即可。

五.源程序代码

#include<iostream.h>

#include <stdlib.h>

class Circle                        //1.定义圆类

{

public:

    Circle(double x);

    friend double Length(Circle &a);

private:

    double r;

};

Circle::Circle(double x)

{

    r=x;

    cout<<"圆的面积为:"<<3.14*r*r<<endl;

}

double Length(Circle &a)

{

    cout<<"圆的周长为:"<<a.r*2*3.14<<endl;

    return 1;

}

class Student                     //2.定义学生类

{

public:

    Student(double n,int o,char c[50]);

    ~Student();

private:

    int old;

    double number;

    char name[50];

};

Student::Student(double n,int o,char c[50])

{

    number=n;

    old=o;

    for(int i=0;i<50;i++)

    {

       name[i]=c[i];

    }

}

Student::~Student()

{

    cout<<"该生姓名/学号/年龄依次为:"<<name<<' '<<number<<' '<<old<<endl;

}

class Date                        //3.定义日期类

{

public:

    void Set(int y,int m,int d);

    void Add();

    int Print();

    int Isleapyear();

private:

    int year,month,day;

};

void Date::Set(int y,int m,int d)

{

    year=y;

    month=m;

    day=d;

}

int Date::Print()

{

    cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;

return 1;

}

int Date::Isleapyear()

{

    if((year%4==0&&year%100!=0)||(year%400==0))

    {

       cout<<"设置时间是闰年!"<<endl;

       return 1;

    }

    else

    {

       cout<<"设置时间不是闰年!"<<endl;

       return 0;

    }

}

void Date::Add()

{

    if(month==2)                    //二月最特殊,先拿出来单独考虑

    {

       if(Isleapyear()==1)

       {

           if(day==29)

           {

              month+=1;

              day=1;

           }

           else if(day>29)

           {

              cout<<"输入错误!"<<endl;

              exit(1);

           }

           else if(day<29)

              day+=1;

       }

       else

       {

          if(day==28)

           {

              month+=1;

              day=1;

           }

           else if(day>28)

           {

              cout<<"输入错误!"<<endl;

              exit(1);

           }

           else if(day<28)

              day+=1;

       }

    }

      

    else

    {

       if(day==30)              //月末特殊,拿出来单独考虑,先考虑30

       {

           switch(month)

           {

       case 1:

       case 3:

       case 5:   

       case 7:

       case 8:   

       case 10:  

       case 12:

           day+=1;

           break;

       case 4:   

       case 6:

       case 9:   

       case 11:

           month+=1;

           day=1;

           break;

   

       default:

           {

           cout<<"输入错误!"<<endl;

           exit(1);

           }

           }

       }

       else if(day==31)                 //再考虑31号

       {

           switch(month)

       {

       case 1:

       case 3:

       case 5:

       case 7:   

       case 8:

       case 10:

       case 12:

           month+=1;

           day=1;

           break;

       case 4:   

       case 6:

       case 9:   

       case 11:

           cout<<"输入错误!"<<endl;

           exit(1);

           break;

   

       default:

           cout<<"输入错误!"<<endl;

           exit(1);

           }

       }

       else if((day>30)||(day<0)||(month<0)||(year<0))                     //考虑不实际情况

       {

           cout<<"输入错误!"<<endl;

           exit(1);

       }

       else if(day<30)     //最后剩下的情况统一定义

           day+=1;

    }

}

void main()                      //主函数

{

    double m=0;

    int i=0;

    int t=0;

    double n;

    int o;

    int a,b,q;

    int w=0;

    Date d;

    cout<<"请输入圆半径r:";

    cin>>m;

    Circle p(m);

    Length(p);

   

    for(;i!=8;)

       {

       cout<<"欢迎进入,日期设置系统!请输入选择:(输入8结束程序,其余数字继续)"<<endl;

       cin>>i;

       if(i==8) break;

       cout<<"请设置年/月/日:";

       cin>>a>>b>>q;

       d.Set(a,b,q);

       cout<<"设置的时间为:";

       d.Print();

       d.Add();

       cout<<"日期加一后时间为:";

       d.Print();

       }

    for(;t!=8;)

       {

       int n,o;

       char c[50];

       cout<<"欢迎进入,学生信息录入系统!请输入选择:(输入8结束程序,其余数字继续)";

       cin>>t;

       if (t==8)

       {

           cout<<"程序结束,谢谢!"<<endl;

           exit(1);

       }

       cout<<"设置学生信息——请依次输入学生的姓名/学号/年龄:";

       cin>>c>>n>>o;

        Student s(n,o,c);

       }

   

}

六.验证结果

R1}WX05C}D$AYFQCBOD55M0.jpg

W8LFATQ(Z2U74WO53H@9[YE.jpg

六.心得与感想

这次上机实验的过程中,我遇到了许多困难。一方面,这说明了我的上机实践能力还需进一步加强;另一方面,我收到了老师和同学们的帮助。通过交流,我对自己的程序有了更加深刻的理解。同时,对于同一个问题的看法,大家的看法都不相同,在讨论中我们的交换了思想,开拓了思维,提升了技能。

总之,编程不仅考验的是耐心和细心,更是思维和方法。想要提高自己的编程能力,只有通过不断实践才能有进步。通过此次的上机实验,我收获颇丰,会争取下次更快更好地完成任务!


第二篇:C程序设计上机实验报告2


实验二C语言编写简单程序

实验目的

1. 熟悉C语言编程环境VC++ 6.0,掌握运行一个C程序的基本步骤,包括编辑、编译、连接和运行;

2. 了解并学习简单的程序调试及单步调试方法,掌握简单C程序的查错方法。

3. 初步认识顺序、分支和循环程序设计;

4. 了解各种程序结构的特点,初步建立起程序设计的概念。

实验内容

1. 当n为152时,分别求出n的个位数字(digit1)、十位数字(digit2)和百位数字(digit3)的值。

输出结果如下:

整数152的个位数是2,十位数是5,百位数是1。

提示:n的个位数字digit1的值是n%10,十位数字digit2的值是(n/10) %10,百位数字digit3的值是n/100。

思考:如果n是一个四位数,如何求出它的每一位数字?

2. 编写程序,输入x,计算并输出下列分段函数f(x)的值(保留两位小数),请调用sqrt()函数求平方根,调用pow()函数求幂。

结果示例如下:

Enter x:10

f(10.00)  =  3.16

3. 输入一个正整数n,计算1-2/3+3/5-4/7+5/9-6/11+…的前n项之和,输出时保留3位小数。(选做)

结果示例如下:

Enter n:2

sum  =  0.333

结果分析及心得体会:

在实验中遇到的问题主要是定义字符型变量易混,以及结果小数点位数的保存。

解决方法:分清楚字符的定义类型。

Int      定义整型变量,用于存放整数;

Float    定义单精度浮点型变量,用于存放实数;

Double  定义双精度浮点型变量,用于存放实数。

保存时,注意路径以及类型。写循环语句时,顺序不要混乱,用数学函数时,要写头文件。

做题时,细心认真,注意小的细节,多多练习。

第一题

#include<stdio.h>

   int main()

   {

    int n=152,digit1,digit2,digit3;

    digit1=n%10;

    digit2=(n/10)%10;

    digit3=n/100;

    printf("整数152的个位数是%d,十位数是%d,百位数是%d。\n",digit1,digit2,digit3);

    return 0;

   }

第二题

#include<stdio.h>

 #include<math.h>

 int main()

 {

    double y,x;

    printf("Enter x:");

    scanf("%lf",&x);

    if(x<0)

    y=pow((x+1),2)+2*x+1.0/x;

    else

    y=sqrt(x);

    printf("f(%.2f)=%.2f\n",x,y);

    return 0;

 }

第三题

#include<stdio.h>

int main()

{

    int i,n,flag=1;

    double sum,a,b;

    b=1;

    printf("Enter n:");

    scanf("%d",&n);

    sum=0;

    for(i=1;i<=n;i++)

    {

        a=flag*i;

        sum=sum+a/b;

        flag=-flag;

        b=2*i+1;

    }

    printf("sum=%.3f\n",sum);

    return 0;

}

              工业工程112)班胡绘娜

更多相关推荐:
别被精液检验报告轻易吓坏

了解更多请关注微信公众平台dailyhealthinfo别被精液检验报告轻易吓坏有专家曾幽默地说精子少不一定不能怀孕只要其中有优秀的就行中国田径不行但有一个刘翔就能夺冠所以广大男性大可不必被自己的精液检验报告吓...

瘦肉精检验报告

瘦肉精检验报告检验员审核人报告日期年月日

Z精棒检验报告

Z精棒检验报告,内容附图。

钛铁精粉检验报告

HYDCJL05920xx河南省有色金属地质勘查总院检测中心第1页共3页报告编号NB20xx474检测报告样品名称委托单位检测类别钛精粉郑州山川重工有限公司委托检测河南省有色金属地质勘查总院检测中心HYDCJL...

精度实验报告

四川大学学生实训报告实验课程名称开课实验室学院专业班级学生姓名学号开课时间至学期制造科学与工程学院制用立式光学计测量塞规实验报告用自准直仪测量直线度误差实验报告表面粗糙度的测量实验报告几何量综合测量实验报告

精加工试验路总结报告

精加工试验路段K26400K26600左半幅施工方案一程概况本合同段主线路基设计宽度为26m路幅划分为2m中央分隔带2075m路缘带4375四车道23m硬路肩2075m土路肩K26200段位于主线上该段路基已于...

魔芋精粉检验报告

曲靖富力发展有限责任公司FuLiDevelopResponsibilityCOLTDQujingYunNanChina魔芋精粉检验报告CertificateofAnalysisKonjacFlour产品名称检验...

味精 检验原始记录及报告

产品名称抽样量生产日期年月日生产数量批号来源检验日期年月日检验审核产品名称抽样量生产日期年月日生产数量批号来源检验日期年月日检验审核成品检验报告单成品检验报告单XAQXR41检测人审核年月日

关于法兰测量仪精度的检验报告

法兰测量仪精度检验报告法兰测量仪是用于测量两法兰间的空间相对位置的仪器需要二台仪器同时配合使用可以为海底管线的膨胀弯的安装提供准确的预制数据它的测量原理是通过测量两法兰的直线距离和法兰与直线的夹角来推断出两法兰...

消灭隐患保安全对照验标创精品反思分析情况汇报

消灭隐患保安全对照验标创精品反思分析情况汇报为了深入贯彻铁道部以人为本服务运输强本简末系统优化着眼发展的理念坚持百年大计质量第一的方针同时根据甬台温建指关于开展消灭隐患保安全对照验标创精品专项整治活动的通知精神...

精液及精子质量报告单.docx

精液及精子质量报告单我丈夫的精液及精子质量分析报告单请专家看一下液化时间30min液化情况完全液化粘稠度一般精液量5ml外观灰白精子密度1545百万毫升精子活动率3308A级769B级1385C级1154D级6...

想要孩子 一起来看看精液化验单

想要孩子一起来看看精液化验单txt有谁会对着自己的裤裆傻笑不敢跟他说话却一遍一遍打开他的资料又关上用了心旳感情真旳能让人懂得很多事如果有一天我的签名不再频繁更新那便证明我过的很好一起来看看精液化验单在不孕不育的...

验精报告(28篇)