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,直到不需要比较
#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;
}