C++练习案例(2) --- 冒泡排序、结构体数组排序、老师带学生、设计立法体类、点和圆的关系

1.冒泡排序

说明:封装一个函数,用冒泡排序,对整型数组进行升序排序

例:int arr[10] = {5,4,9,2,7,1,0,8,3,6};

#include <iostream>
using namespace std;

void BubbleSort(int *arr, int len)
{
    for (int i = 0; i < len-1; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main()
{
    int arr[10] = { 5,4,9,2,7,1,0,8,3,6 };
    int len = sizeof(arr) / sizeof(arr[0]);
    int* p = arr;
    BubbleSort(p, len);
    for (int i = 0; i < len; i++)
    {
        cout << *p << " ";
        p++;
    }
    cout << endl;
    system("pause");
    return 0;
}
2.结构体数组排序

说明:设计一个结构体,包括成员姓名,年龄,性别;创建结构体数组,数组中存放5个结构体。用冒泡排序,将数组中的结构体按照年龄进行升序,最终打印排序后的结果。

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

struct Student
{
    string name;
    int age;
    string sex;
};

void BubbleSort(Student st[5], int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = 0; j < len - i - 1; j++)
        {
            if (st[j].age > st[j+1].age)
            {
                int temp = st[j].age;
                st[j].age = st[j+1].age;
                st[j + 1].age = temp;
            }
        }
    }
}

void Print(Student st[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << "姓名:" << st[i].name << " " << "年龄:" << st[i].age << " " << "性别:" << st[i].sex << endl;

    }
}

int main()
{
    struct Student stu[5] = { {"A",18,"男"},{"B",20,"男"},{"C",19,"女"},{"D",22,"女"},{"E",21,"男"}};
    int len = sizeof(stu) / sizeof(stu[0]);
    BubbleSort(stu, len);
    Print(stu, len);
    system("pause");
    return 0;
}
3.老师带学生

说明:一共有3名老师,每名老师带5位学生,设计学生和老师的结构体,在老师的结构体中,有老师的姓名和一个存放5名学生的数组作为成员;

学生成员有姓名、考试分数,创建数组存放3名老师,通过函数给每个老师及所带的学生赋值;最终打印老师数据以及所带的学生数据。

#include <iostream>
#include <string>
#include <ctime>
using namespace std;

struct Student
{
    string name;
    int score;
};

struct Teacher
{
    string name;
    struct Student stu[5];
};

void allocate(struct Teacher TeacherAarray[], int len)
{
    string Name = "ABCDEF";
    string name = "abcdefghijklmnopurst";
    for (int i = 0; i < len; i++)
    {
        TeacherAarray[i].name = "Teacher_";
        TeacherAarray[i].name += Name[i];

        for (int j = 0; j < 5; j++)
        {
            TeacherAarray[i].stu[j].name = "Student_";
            TeacherAarray[i].stu[j].name += name[j];

            int random = rand() % 100 + 1;
            TeacherAarray[i].stu[j].score = random;
        }
    }
}

void Print(struct Teacher TeacherAarray[], int len)
{
    for (int i = 0; i < len; i++)
    {
        cout << "老师姓名:" << TeacherAarray[i].name << endl;
        for (int j = 0; j < 5; j++)
        {
            cout << "学生姓名:" << TeacherAarray[i].stu[j].name << " " << "学生成绩:" << TeacherAarray[i].stu[j].score << endl;
        }
    }
}

int main()
{
    srand((unsigned int)time(NULL));
    struct Teacher TeacherAarray[3];
    int len = sizeof(TeacherAarray) / sizeof(TeacherAarray[0]);
    allocate(TeacherAarray, len); //赋值
    Print(TeacherAarray, len);    //打印
    system("pause");
    return 0;
}

4.设计立法体类

说明:求出立方体的面积和体积,分别用全局函数和成员函数判断两个立方体是否相等。

#include <iostream>
using namespace std;

class Cube            //创建立方体类
{
public:
    void setH(int h) //设置高度
    {
        m_h = h;
    }

    int getH()       //获取高度
    {
        return m_h;
    }

    void setL(int l) //设置长度
    {
        m_l = l;
    }

    int getL()         //获取长度
    {
        return m_l;
    }

    void setW(int w) //设置宽度
    {
        m_w = w;
    }

    int getW()       //获取宽度
    {
        return m_w; 
    }

    int caculateS()  //计算面积
    {
        return 2 * m_l * m_h + 2 * m_l * m_w + 2 * m_w * m_l;
    }

    int caculateV()  //计算体积
    {
        return m_l * m_w * m_h;
    }

private:
    int m_h; //高
    int m_l; //长
    int m_w; //宽
};

bool isSame(Cube& c1, Cube& c2) //判断两个立方体是否相等
{
    if (c1.getH() == c2.getH() && c1.getL() == c2.getL() && c1.getW() == c2.getW())
        return true;
    return false;
}

int main()
{
    Cube c1;    //创建立方体对象c1
    c1.setH(20);
    c1.setL(20);
    c1.setW(30);
    cout << "c1的面积是" << c1.caculateS() << endl;
    cout << "c1的体积是" << c1.caculateV() << endl;
    Cube c2;    //创建立方体对象c1
    c2.setH(10);
    c2.setL(10);
    c2.setW(10);
    cout << "c2的面积是" << c2.caculateS() << endl;
    cout << "c2的体积是" << c2.caculateV() << endl;
    bool ret = isSame(c1, c2);
    if (ret)
    {
        cout << "c1与c2相等" << endl;
    }
    else
    {
        cout << "c1与c2不相等" << endl;
    }
    system("pause");
    return 0;
}
5.点和圆的关系

说明:设计一个圆类,和一个点类,计算点和圆的关系。

#include <iostream>
using namespace std;

class Point //创建点类
{
public:
    void setX(int x) //设置x轴坐标
    {
        m_x = x;
    }

    int getX()       //获取x轴坐标
    {
        return m_x;
    }

    void setY(int y) //设置y轴坐标
    {
        m_y = y;
    }

    int getY()       //获取y轴坐标
    {
        return m_y;
    }

private:
    int m_x;
    int m_y;
};

class Circle
{
public:
    void setR(int r) //设置半径
    {
        m_r = r;
    }
    int getR()       //获取半径
    {
        return m_r;
    }

    void setCenter(Point Center) //设置圆心
    {
        m_center = Center;
    }

    Point getCenter()            //获取圆心
    {
        return m_center;
    }

private:
    int m_r;   //半径
    Point m_center;  //圆心
};

int isInCircle(Circle& c, Point& p)  //判断点跟圆的关系
{
    int distance =  (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) +
                    (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
    int R = c.getR() * c.getR(); //半径平方

    if (distance == R)
    {
        cout << "点在圆上" << endl;
    }
    else if (distance < R)
    {
        cout << "点在圆内" << endl;
    }
    else
    {
        cout << "点在圆外" << endl;
    }
    return 0;
}

int main()
{
    Circle c;   //创建圆对象c
    c.setR(10);
    Point center; //创建点对象center
    center.setX(10);
    center.setY(0);
    c.setCenter(center);

    Point p;   //创建点对象p
    p.setX(10);
    p.setY(10);

    isInCircle(c, p);

    system("pause");
    return 0;
}

相关推荐

  1. C++知识总结(16):结构排序

    2024-04-10 09:18:02       28 阅读
  2. 结构数组按总分排序结构

    2024-04-10 09:18:02       31 阅读
  3. 数据结构冒泡排序

    2024-04-10 09:18:02       13 阅读
  4. C++知识总结(14):桶排序冒泡排序

    2024-04-10 09:18:02       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 09:18:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 09:18:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 09:18:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 09:18:02       20 阅读

热门阅读

  1. easyui 使用记录

    2024-04-10 09:18:02       13 阅读
  2. 第四十七章 为 Web 应用程序实现 HTTP 身份验证

    2024-04-10 09:18:02       12 阅读
  3. hbase的基础搭建

    2024-04-10 09:18:02       12 阅读
  4. mysql create procedure

    2024-04-10 09:18:02       12 阅读
  5. HBase详解(3)

    2024-04-10 09:18:02       9 阅读
  6. 封装Element-Plus表单组件

    2024-04-10 09:18:02       15 阅读
  7. textcnn做多分类

    2024-04-10 09:18:02       10 阅读
  8. Android ViewStub

    2024-04-10 09:18:02       10 阅读
  9. 自动驾驶中的传感器融合算法

    2024-04-10 09:18:02       50 阅读
  10. 【前端】项目Vue2升级Vue3注意事项

    2024-04-10 09:18:02       10 阅读
  11. 需求分析思路

    2024-04-10 09:18:02       12 阅读