C++经典案例

C++学习过程中的经典案例



一、水仙花数

案例描述:水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153

#include<iostream>
using namespace std;

/*
水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
*/

int main()
{
    int num = 100;
    int a,b,c;      //用a,b,c,分别取三位数num的个位、十位、百位
    while(num < 1000)
    {
        a = num % 10;
        b = num / 10 % 10;
        c = num / 100;

        //判断num是否是水仙花数
        if(a*a*a + b*b*b + c*c*c == num)
        {
            cout << num << "是水仙花数!" <<endl;
        }

        num++;
    }

    system("pause");

    return 0;
}

二、乘法口诀表

练习案例:乘法口诀表
案例描述:利用嵌套循环,实现九九乘法表

#include<iostream>
using namespace std;

int main()
{
    for (int i = 1; i < 10; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            cout << j << "*" << i << "=" << j*i << "\t" ;
        }
        cout << endl;
    }

    system("pause");

    return 0;
    
}

三、数组

1、数组元素倒置

案例描述:请声明一个5个元素的数组,并且将元素逆置.
(如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1)

#include<iostream>
using namespace std;
 
int main()
{
    int arr[] = {1,2,4,3,5};
    cout << "元素逆置前数组为:" << endl;
    //遍历输出整个数组
    for(int i = 0 ; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //记录第一个元素和最后一个元素位置
    int start = 0;
    int end = sizeof(arr) / sizeof(arr[0]) - 1;

    //元素逆置
    while (start < end)
    {
         //交换元素
        int temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;

        //更新下标
        start++;
        end--;
    }
    
    cout << "元素逆置后数组为:" << endl;
    //遍历输出整个数组
    for(int i = 0 ; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
   
    system("pause");

    return 0;

}

2、冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
  3. 重复以上的步骤,每次比较次数-1,直到不需要比较
#include<iostream>
using namespace std;

int main()
{
    int arr[] = {1,3,0,2,4,6,9,7,8,5};
    //冒泡排序前数组为
    cout << "冒泡排序前数组为:" << endl;
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) ; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;

    //冒泡排序开始,外部循环次数 = 排序总轮数 = 元素个数  - 1
    for(int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++)
    {
        //内部循环次数 = 每轮对比次数 = 元素个数 -排序轮数 - 1
        for(int j = 0 ; j < sizeof(arr) / sizeof(arr[0]) - i - 1 ; j++)
        {
            //比较相邻的元素。如果第一个比第二个大,就交换他们两个
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    } //冒泡结束

    cout << "冒泡排序后数组为:" << endl;
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) ; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    
    system("pause");

    return 0;

}

四、函数

练习案例:设计立方体类

设计立方体类(Cube)并求出立方体的面积和体积,分别用全局函数和成员函数判断两个立方体是否相等。

#include<iostream>
using namespace std;

class Cube
{
private:
	int c_L;	//长
	int c_W;	//宽
	int c_H;	//高
public:
	//使用方法设置长方体的长宽高
	void setL_W_H(int l, int w, int h)
	{
		c_L = l;
		c_W = w;
		c_H = h;
	}
	int getL()	//获取长
	{
		return c_L;
	}
	int getW()	//获取宽
	{
		return c_W;
	}
	int getH()	//获取高
	{
		return c_H;
	}
	//返回长方体的表面积
	int evaluateS()
	{
		return 2 * (c_L * c_W + c_L * c_H + c_W * c_H);
	}
	//返回长方体的体积
	int evaluateV()
	{
		return c_L * c_W * c_H;
	}
	//用成员函数判断两个立方体是否相等
	bool isSame(Cube c)
	{
		if(c_L == c.getL() && c_W == c.getW() && c_H == c.getH())
		{
			return true;
		}
		return false;
	}
};
//用全局函数判断两个立方体是否相等
bool isSame(Cube &c1, Cube &c2)
{
	if (c1.getL() == c2.getL() && c1.getW() == c2.getW() && c1.getH() == c2.getH())
	{
		return true;
	}
	return false;
}
int main()
{
	Cube c;
	c.setL_W_H(10,10,10);
	cout << "长方体c的面积为:" << c.evaluateS() << endl;
	cout << "长方体c的体积为:" << c.evaluateV() << endl;
	Cube c2;
	c2.setL_W_H(10, 10, 11);
	bool ret = isSame(c, c2);
	if (ret)
	{
		cout << "全局函数下立方体1与立方体2相等" << endl;
	}
	else
	{
		cout << "全局函数下立方体1与立方体2不相等" << endl;
	}
	ret = c.isSame(c2);
	if (ret)
	{
		cout << "成员函数下立方体1与立方体2相等" << endl;
	}
	else
	{
		cout << "成员函数下立方体1与立方体2不相等" << endl;
	}
	system("pause");
	return 0;
}
  • 13
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值