最近两次实验报告的整理(程序源码+实验报告)

定义一个两点坐标和距离的类

输入坐标上的两点

计算两坐标的距离

并输出,同时设计相应程序测试类的功能

这个的话其实没啥好说的,两点间距离公式大家应该都记得

主要是平方根的问题,记得包含cmath头文件直接用sqrt函数去算就好了

#include<iostream>
#include<cmath>
using namespace std;

class xy{
  public:
    xy(){
      x1=0;
      y1=0;
      x2=0;
      y2=0;
      dis=0;
    }
  void inputxy();
  void distance();
  private:
    int x1;
    int y1;
    int x2;
    int y2;
    double dis;
};

void xy::inputxy(){
  cout<<"请输入xy坐标,x和y依次输入后确认"<<endl;
  cout<<"请输入x1"<<endl; 
  cin>>x1;
  cout<<"请输入y1"<<endl;
  cin>>y1; 
  cout<<"请输入x2"<<endl;
  cin>>x1;
  cout<<"请输入y2"<<endl;
  cin>>y2;
}

void xy::distance(){
  cout<<"两点间距离是"<<endl; 
  cout<<sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))<<endl;
}

int main(){
  xy xy1;
  xy1.inputxy();
  xy1.distance();
  return 0;
}

定义一个满足下列要求的类Cdate

  • 有三个成员数据,年月日
  • 有设置日期的成员函数
  • 有用格式年月日输出的成员函数
  • 有当前日期加一天的成员函数

这个其实也没啥好说的,如果年月日没有合理性检验的话

就没有啥太大的难度

那个天数加一我纠结了一会,到底要不要判断有没有31号这个事情

最后还是因为懒放弃了

#include <iostream>
using namespace std;

  class Cdate{

    public:
      Cdate()
      {
      year = 0;
      mouth = 0;
      day = 0;
      }
      void setTime();
      void outTime();
      void dayPlusOne();

    private:
      int year;
      int mouth;
      int day;

  };

    void Cdate::setTime(){
        cout<<"请输入日期,格式年/月/日,依次输入后回车"<<endl;
        cin>>year;
        cin>>mouth;
        cin>>day;
      }
    void Cdate::outTime(){
        cout<<"输出时间"<<endl; 
        cout<<year<<mouth<<day<<endl;
      }
    void Cdate::dayPlusOne(){
        cout<<"天数加一"<<endl; 
        day = day + 1;
      }


  int main(){
    
    Cdate date1;
    date1.setTime();
    date1.outTime();
    date1.dayPlusOne();
    date1.outTime();
    return 0;

  }

定义一个类Cpoint表示一个点的信息。在此基础上编写一个表示三角形类Triangle,用友元函数计算三角形面积和周长。

核心思路就是你要在点的类里面把三角形类声明成友元类

这样三角形类才能访问到点的坐标

点这个类只要有xy表示坐标就行了

计算面积和周长的函数放在三角形类里面

我面积是用已知三条边求面积的公式去计算的

所以求边长我就拆分成了求三条边的长度累加

三条边的长度再分开计算

面积那个函数可以定义三个传入的值

然后直接传入计算三条边的函数的值就可以了

//我默认这个题目是二元的平面上的三角形了 

#include<iostream>
#include<cmath>
using namespace std;

class Triangle;

class Cpoint{
  public:
    Cpoint(){
      x=0;
      y=0;
    }
  friend Triangle;
  
  private:
    int x;
    int y;
    
}; 

class Triangle{
  public:
    void input();
    void area(double a,double b,double c);
    double line1();
    double line2();
    double line3();
    void perimeter(double a,double b,double c);
    
  private:
    Cpoint a[3];
    
};

void Triangle::input(){
  cout<<"第一个点的坐标(x y)" <<endl;
  cin>>a[0].x>>a[0].y;
  cout<<"第二个点的坐标(x y)" <<endl;
  cin>>a[1].x>>a[1].y;
  cout<<"第三个点的坐标(x y)" <<endl;
  cin>>a[2].x>>a[2].y;
}

void Triangle::area(double a,double b,double c){
  double s;
  s= sqrt((a+b+c)*(a+b-c)*(a+c-b)*(b+c-a)) /4;
  cout<<"面积为"<<s<<endl;
}

double Triangle::line1(){
  double line;
  line = sqrt((a[0].x-a[1].x)*(a[0].x-a[1].x)+(a[0].y-a[1].y)*(a[0].y-a[1].y));
  return line;
}

double Triangle::line2(){
  double line;
  line = sqrt((a[1].x-a[2].x)*(a[1].x-a[2].x)+(a[1].y-a[2].y)*(a[1].y-a[2].y));
  return line;
}

double Triangle::line3(){
  double line;
  line = sqrt((a[0].x-a[2].x)*(a[0].x-a[2].x)+(a[0].y-a[2].y)*(a[0].y-a[2].y));
  return line;
}

void Triangle::perimeter(double a,double b,double c){
  cout<<"周长为"<<a+b+c<<endl;
}

int main(){
  
  Triangle alpha;
  alpha.input();
  alpha.area(alpha.line1(),alpha.line2(),alpha.line3());
  alpha.perimeter(alpha.line1(),alpha.line2(),alpha.line3());
  
  return 0;
}

设计一个学生类 student,它具有的私有数据成员是:注册号、姓名、数学成绩、英语成绩、计算机成绩;具有的公有成员函数是:求三门课总成绩的函数sum();求三门课平均分成绩的函数 average();显示学生数据信息的函数 print()获取学生注册号的函数 get_reg_num();设置学生数据信息的函数 set_stu_inf()。

编制主函数,说明一个 student类对象的数组并进行全班学生信息的输入与设置,而后求出每一学生的总成绩、平均成绩、全班学生总成绩最高分、全班学生总平均分,并在输入一个注册号后,输出该学生有关的全部数据信息。

这绝对是最让我头疼的一道题

这可是上学期课设写的东西,虽然没有那么难但还是花了我不少时间来完善

求和还有平均数和获取注册码这些我都选择了返回值而不用void

这样子方便主函数直接调用而且可以重复使用

平均值记得用上强制类型转换,因为整数相除会出现小数的

获取注册码这个函数其实相当于工具人吧

我到后面才意识到这个函数几乎没有啥作用

只能拿来跟输入注册码的进行比较

班上成绩的最高分和总平均分都是在主函数里计算的

因为输入是在主函数完成的这个类又只是单个学生的

#include <iostream>
#include<cstring>
using namespace std;

class student{
  
  public:
    student(){
      reg=0;
      name = "unkonwn";
      math=0;
      english=0;
      computer=0;
    }	
    int sum();
    int average();
    void print();
    int get_reg_num();
    void set_stu_inf();
  
  private:
    int reg;
    string name;
    int math;
    int english;
    int computer;
  
};

int student::sum(){
  int all;
  all = math + english + computer;
  return all;//返回总和 
}

int student::average(){
  double aver;
  aver = (static_cast<double>(math) + static_cast<double>(english) + static_cast<double>(computer))/3.0;
  return aver;//返回平均值 
}

void student::print(){
  cout<<"注册号:"<<reg<<endl;
  cout<< "姓名"<<name<<endl;
  cout<<"数学成绩"<<math<<endl;
  cout<<"英语成绩"<<english<<endl;
  cout<<"计算机成绩"<<computer<<endl;  
}

int student::get_reg_num(){
  
  return reg;//获取注册码 
  
}

void student::set_stu_inf(){
    cout<<"请输入名字"<<endl;
    cin>>name;
    system("cls");
    cout<<"请输入注册号"<<endl;
    cin>>reg;
    system("cls");
    cout<<"请输入数学成绩"<<endl;
    cin>>math;
    system("cls");
    cout<<"请输入英语成绩"<<endl;
    cin>>english;
    system("cls");
    cout<<"请输入计算机成绩"<<endl;
    cin>>computer;
    system("cls");
}

int main(){
  
  student stud[100];
  int i=0;
  int number=0;
  int choose=0;
  int reginput=0;
  int reg1=0;
  int j=1;
  
  start:
  system("cls");
    
  cout<<"欢迎进入学生管理系统"<<endl;
  cout<<"1.信息输入"<<endl;
  cout<<"2.某学生总分和平均分"<<endl;
  cout<<"3.全班学生最高分及总平均分"<<endl;
  cout<<"4.学生数据查询"<<endl;
  cout<<"请输入你想要的选项"<<endl;
  cin>>i;
  system("cls");
  
  switch(i){
    case 1:{
      system("cls");
      for(number=0;number<100;number++){
        stud[number].set_stu_inf();
        cout<<"是否还要继续输入?(1确认/2否定)"<<endl;
        cin>>choose;
        if(choose == 1){
          choose = 0;
          continue;
        }else if(choose == 2){
          choose = 0;
          break;
        }
      }
      break;
    }
    case 2:{
      cout<<"请输入该学生的注册码"<<endl;
      cin>>reginput;
      system("cls");
      
      for(number=0;number<100;number++){
        
        reg1 = stud[number].get_reg_num();
        
        if( reg1 == reginput ){
          
          cout<<"该学生的总分为"<<stud[number].sum()<<endl; 
          cout<<"该学生的平均分为"<<stud[number].average()<<endl;
          
        }else if(reg1 != reginput){
          continue;
        }
      }
      
      break;
    }
    case 3:{
      
      struct max{
        int high;
      };
      
      max a[100];
      
      for(number=0;number<100;number++){
        a[number].high = stud[number].sum();
      }
      
      for(number=0;number<99;number++){
        if(a[number].high > a[number+1].high){
          j = a[number+1].high;
          a[number+1].high = a[number].high;
          a[number].high = j;
        }else if(a[number].high < a[number+1].high){
          continue;
        }
      }
      cout<<"班上总分的最高分为"<<a[99].high<<endl;
      
      int all;
      double allaver;
      
      for(j=0;j<100;j++){
        if(stud[j].average() != 0){
          all = all + stud[j].average();
        }else if(stud[j].average() == 0){
          break;
        }
      }
      allaver = all/j;
      cout<<"班上的总平均分为"<<allaver<<endl;
      
      break;
    }
    
    case 4:{
      
      cout<<"请输入该学生的注册码"<<endl;
      cin>>reginput;
      system("cls");
      
      for(number=0;number<100;number++){
        
        reg1 = stud[number].get_reg_num();
        
        if( reg1 == reginput ){
          stud[number].print();
        }else if(reg1 != reginput){
          continue;
        }
        
      }
      
      break;
    }
    
  }
  
  cout<<"是否要回到主界面(1.是/2.否)"<<endl;
  cin>>choose;
  if(choose == 1){
    goto start;
  }else if(choose != 1){
    return 0;
  }
  
  return 0;
}

发表评论

您的电子邮箱地址不会被公开。