C++ 知识点巩固案例 之 猜数字/水仙花数/敲桌子/乘法口诀表输出/数组元素逆置/冒泡排序
目录
一、简单介绍
C++ 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。
本节介绍,一些C++ 实现的案例,来巩固 C++ 学习的相关知识,包括猜数字/水仙花数/敲桌子/乘法口诀表输出/数组元素逆置/冒泡排序等案例。如果有不足之处,欢迎指出,或者你有更好的方法,欢迎留言。
二、猜数字
思路说明:
涉及知识点:
- 随机数生成
- while 循环结构
- if else 选择结构
- break 跳出循环
- 大于小于判断运算符
代码实现:
#include<iostream>
using namespace std;
int main() {
// 利用时间生成随机种子,避免随机规律性
srand((unsigned int)time(NULL));
// 生成随机数 (1-100)
int randNum = rand() % 100 + 1;
cout << "***** 猜大小游戏 ******" << endl;
int yourNum = -1;
// 循环判断
while (1) {
cout << " 请输入 1-100 之间的整数:" << endl;
cin >> yourNum;
if (yourNum > randNum) {
cout << " 大了 " << endl;
}else if (yourNum < randNum) {
cout << " 小了 " << endl;
}
else {
cout << " 猜对了 " << endl;
break;
}
}
system("pause");
return 0;
}
二、水仙花数
水仙花数:是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身
例如:1^3 + 5^3+ 3^3 = 153
请利用do...while语句,求出所有3位数中的水仙花数
涉及知识点:
- do while 循环结构
- % / * ++算数运算符
- == 比较运算符
代码实现:
#include<iostream>
using namespace std;
int main() {
cout << "***** 水仙花数 ******" << endl;
int num = 100;
do {
// 个位数获取
int uNum = num % 10;
// 十位数获取
int dNum = num / 10 % 10;
// 百位数获取
int hNum = num / 100;
// 计算
int rNum = uNum * uNum * uNum + dNum * dNum * dNum + hNum * hNum * hNum;
// 相等则该数是水仙花数
if (rNum == num) {
cout << num << " ";
}
num++;
} while (num < 1000);
cout << endl;
system("pause");
return 0;
}
三、敲桌子
描述:从1开始数到数字100, 如果数字个位含有7,或者数字十位含有7,或者该数字是7的倍数,我们打印敲桌子,其余数字直接打印输出。
涉及知识点:
- for 循环结构
- if else 选择结构
- % / 算数运算符
- == 比较运算符
代码实现:
#include<iostream>
using namespace std;
int main() {
cout << "***** 敲桌子 ******" << endl;
cout << "*** 1-100整数,含 7 或者是 7 的倍数,输出敲桌子 **" << endl;
for (int i = 1; i < 100; i++)
{
// i % 7 == 0 为 7 的倍数 ;i % 10 == 7 个位 含 7 ;i / 10 == 7 十位 含 7
if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7) {
cout << "敲桌子 ";
}
else {
cout << i << " ";
}
// 没十个数换一行
if (i % 10 == 0) {
cout << endl;
}
}
cout << endl;
system("pause");
return 0;
}
四、乘法口诀表输出
描述:利用嵌套循环,实现九九乘法表
涉及知识点:
- for 嵌套循环结构
- * 算数运算符
代码实现:
#include<iostream>
using namespace std;
int main() {
cout << "***** 乘法口诀表 ******" << endl;
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
cout << i << " * " << j << " = " << i * j << " ";
}
// 换行
cout << endl;
}
cout << endl;
system("pause");
return 0;
}
五、数组元素逆置
描述:请声明一个5个元素的数组,并且将元素逆置.
(如原数组元素为:1,3,2,4,5;逆置后输出结果为:5,4,2,3,1);
涉及知识点:
- while for 循环结构
- ++ -- 算术运算符
- 交互临时变量
代码实现:
#include<iostream>
using namespace std;
int main() {
cout << "***** 数组元素逆置 ******" << endl;
int array[5] = { 1,3,2,4,5 };
int lenght = sizeof(array) / sizeof(array[0]);
cout << " 原数组:" <<endl;
for (int i = 0; i < lenght; i++)
{
cout << " " << array[i];
}
cout << endl;
// 首尾前后交换,记录索引
int start = 0, end = lenght - 1;
// 索引 start < end 则可以交换,反之已经交换完毕
while (start < end) {
// start end 索引交换数据
int temp = array[start];
array[start] = array[end];
array[end] = temp;
// 索引 start +1 ,end -1
start++, end--;
}
cout << " 逆置后的数组:" << endl;
for (int i = 0; i < lenght; i++)
{
cout << " " << array[i];
}
cout << endl;
system("pause");
return 0;
}
六、冒泡排序
冒泡排序:最常用的排序算法,对数组内元素进行排序
原理说明:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
- 重复以上的步骤,每次比较次数-1,直到不需要比较
1、描述: 将数组 { 4,2,8,0,5,7,1,3,9 } 进行升序排序
涉及知识点:
- while for 循环结构
- 交互临时变量
实现代码:
#include <iostream>
using namespace std;
int main() {
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
// 排序前
cout << "数组排序前:" << endl;
for (int i = 0; i < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
for (int i = 0; i < 9 - 1; i++)
{
// 排序后最大在最后,不需要每次都和最后的比较,所以 -i
for (int j = 0; j < 9 - 1 - i; 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 < 9; i++)
{
cout << arr[i] << " ";
}
cout << endl;
system("pause");
return 0;
}
2、地址传递方式,实现冒泡排序
例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
涉及知识点:
- while for 循环结构
- 交互临时变量
- 地址传递,指针
代码实现:
#include<iostream>
using namespace std;
//冒泡排序函数
void bubbleSort(int* arr, int len) //int * arr 也可以写为int arr[]
{
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//打印数组函数
void printArray(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };
int len = sizeof(arr) / sizeof(int);
cout << "未排序前:" << endl;
printArray(arr, len);
bubbleSort(arr, len);
cout << "排序后:" << endl;
printArray(arr, len);
system("pause");
return 0;
}