C/C++学习笔记 基础入门系列(十)

C/C++基础入门系列

写在前面的话

C++学了一段时间了,现在在整理笔记,作为备份和分享,会一点点的连载上来,如果此时的你在看这篇文章,而且想学C/C++,本篇系列文章或许能帮助你打基础,为了方便大家,代码我也直接码在上面了,如果复制粘贴都懒得做的话,过段时间我会把整理好的代码打包传到下载里面。

目录

第一部分 HelloWorld的起点
第二部分 初探数据类型(一)
第三部分 初探数据类型(二)
第四部分 认识运算符(一)
第五部分 认识运算符(二)
第六部分 理清思路,写好逻辑结构(一)
第七部分 理清思路,写好逻辑结构(二)
第八部分 理清思路,写好逻辑结构(三)
第九部分 数据处理神器之数组(一)
第十部分 数据处理神器之数组(二)
第十一部分 写好函数,学会功能复用(一)
第十二部分 写好函数,学会功能复用(二)

第十部分 数据处理神器之数组(二)

5.2.3 冒泡排序

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

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

示例: 将数组{4, 2, 8, 0, 5, 7, 8, 9, 6, 3, 1, 10, 12 }升序排列

#include<iostream>
using namespace std;

int main() {

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

	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0]) - 1; i++) {
		cout << arr[i] << " ";
	}

	//// 外层次数 = 元素个数 - 1
	//for (int i = 0; i < 13 - 1; i++) {
	//	// 内层次数 = 元素个数 - 当前轮数 - 1
	//	for (int j = 0; j < 13 - 1 - i; j++) {
	//		if (arr[j] > arr[j + 1]) {
	//			int temp = arr[j];
	//			arr[j] = arr[j + 1];
	//			arr[j + 1] = temp;
	//		}
	//	}
	//}

	for (int i = 0; i <= sizeof(arr) / sizeof(arr[0])-2; i++) {
		for (int j = 0; j <= sizeof(arr) / sizeof(arr[0]) - 2 - 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 <= sizeof(arr) / sizeof(arr[0]) - 1; i++) {
		cout << arr[i] << " ";
	}

	cout << endl;

	system("pause");
	return 0;
}

5.3 二维数组

二维数组就是在一维数组基础上,再增加加一个维度

5.3.1 二维数组的定义

二维数组有四种定义方式:

  1. 数据类型 数组名[行数][列数];
  2. 数据类型 数组名[行数][列数] = {{数据1, 数据2, ...},{数据3, 数据4, ...}, ..., {...}};
  3. 数据类型 数组名[行数][列数] = {数据1, 数据2, 数据3, 数据4, ...};
  4. 数据类型 数组名[][列数] = {数据1, 数据2, 数据3, 数据4, ...};

建议:以上四种定义方式,使用第二种更直观,可提高代码的可读性

示例:

#include<iostream>
using namespace std;

int main() {

	// 定义1
	/*int arr[2][3];
	arr[0][0] = 1;
	arr[0][1] = 2;
	arr[0][2] = 3;
	arr[1][0] = 4;
	arr[1][1] = 5;
	arr[1][2] = 6;*/

	// 定义2(推荐)
	/*int arr[2][3] = {
		{1, 2, 3},
		{4, 5, 6}
	};*/

	// 定义3
	//int arr[2][3] = { 1, 2, 3, 4, 5, 6 };
	
	// 定义4
	int arr[][3] = { 1, 2, 3, 4, 5, 6 };

	// 输出1
	/*cout << arr[0][0] << endl;
	cout << arr[0][1] << endl;
	cout << arr[0][2] << endl;
	cout << arr[1][0] << endl;
	cout << arr[1][1] << endl;
	cout << arr[1][2] << endl;
*/
	// 输出2
	/*for (int i = 0; i <= 1; i++) {
		for(int j = 0; j <= 2; j++){
			cout << arr[i][j] << endl;
		}
	}*/

	// 输出3
	for (int i = 0; i <= 1; i++) {
		for (int j = 0; j <= 2; j++) {
			cout << arr[i][j] << " ";
		}
		cout << endl;
	}

	system("pause");
	return 0;
}

5.3.2 二维数组数组名

  • 查看二维数组占用内存空间
  • 获取二维数组首地址

示例:

#include<iostream>
using namespace std;

int main() {

	
	int arr[2][3] = {
		{1, 2, 3},
		{4, 5, 6}
	};

	// 查看内存大小
	cout << "二维数组占用空间:" << sizeof(arr) << endl;
	cout << "第一行占用空间:" << sizeof(arr[0]) << endl;
	cout << "第一个元素占用空间:" << sizeof(arr[0][0]) << endl;

	cout << "二维数组行数:" << sizeof(arr) / sizeof(arr[0]) << endl;
	cout << "二维数组列数:" << sizeof(arr[0])/sizeof(arr[0][0]) << endl;

	// 查看首地址
	cout << "二维数组首地址:" << (int)arr << endl;
	cout << "第二行首地址:" << (int)arr[1] << endl;
	cout << "第二行第二列元素地址:" << (int)&arr[1][1] << endl;


	system("pause");
	return 0;
}

5.3.3 二维数组应用案例

考试成绩统计:

案例描述:有三名同学(张三、李四、王五),在一次考试中成绩分别如下,请分别输出三名同学的成绩和总成绩

姓名 语文 数学 英语
张三 100 100 100
李四 90 80 97
王五 80 70 60

示例:

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

int main() {

	int score[3][3] = {
		{100, 100, 100},
		{90, 80, 97},
		{80, 70, 60}
	};
	string name[3] = { "张三", "李四", "王五" };

	cout << "姓名\t语文\t数学\t英语\t总成绩" << endl;

	for (int i = 0; i <= 2; i++){
		cout << name[i] << "\t";
		for (int j = 0; j <= 2; j++) {
			cout << score[i][j] << "\t";
		}
		cout << score[i][0] + score[i][1] + score[i][2] << endl;
	}

	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章