C++ 知识点巩固案例 之 猜数字/水仙花数/敲桌子/乘法口诀表输出/数组元素逆置/冒泡排序

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. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
  3. 重复以上的步骤,每次比较次数-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;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值