【C++:模块3-------数组】

news2024/11/23 10:00:18

C++:模块3-------数组

    • 数组概念:
    • 数组特点:
    • 数组访问方法:
  • 一维数组:
    • 1.1三种定义形式:(和C语言中一样)
    • 1.2一维数组数组名的作用:
      • (1) 统计数组在内存中的长度
      • (2)可以通过数组名获取数组首地址(等同于数组首元素的地址)
    • 1.3注意:
    • 1.4一维数组案例:
      • 1.4.1 数组逆序输出:
        • (1)下标访问逆序输出
        • (2)同一块内存空间中动态交换后再输出
      • 1.4.2 冒泡排序:
  • 二维数组:
    • 2.1四种定义格式:
    • 2.2 二维数组数组名作用:
      • 1 查看二维数组所占内存空间:使用sizeof(数组名)单位为字节
      • 2 可以查看二维数组首地址
    • 2.3 二维数组案例:成绩求和

数组概念:

集合,存放相同类型的元素

数组特点:

在这里插入图片描述

数组访问方法:

使用下标索引值对数组进行访问

一维数组:

1.1三种定义形式:(和C语言中一样)

(1)数据类型 数组名 [数组长度]; 只定义不初始化

(2)数据类型 数组名 [ 数组长度]={ 元素1,元素2…}; 定义并初始化

(3)数据类型 数组名 [ ]={ 元素1,元素2…}; 相比2省略数组长度 (系统会根据初始化的元素个数给出数组长度)

1.2一维数组数组名的作用:

(1) 统计数组在内存中的长度

sizeof(数组名)单位是字节

求数组中元素的个数:sizeof(arr)/sizeof(arr[0])

(2)可以通过数组名获取数组首地址(等同于数组首元素的地址)

1.3注意:

数组名是常量,不可以进行赋值操作

数组末尾下标=数组长度-1=sizeof(arr)/sizeof(arr[0]) - 1

1.4一维数组案例:

1.4.1 数组逆序输出:

(1)下标访问逆序输出

#include<iostream>
using namespace std;
int main()
{
	int arr[5] = { 1,2,3,4,5 };
	//下标逆序访问输出
	cout << "逆序输出后的数组:" << endl;
	for (int i = sizeof(arr) / sizeof(arr[0]) - 1; i >= 0; i--)
	{
		cout << arr[i] << endl;
	}
	system("pause");
	return 0;
}

输出结果:
在这里插入图片描述

(2)同一块内存空间中动态交换后再输出

//数组逆序输出
int main()
{
	//创建数组
	int arr[5] = { 1,3,2,5,4 };
	cout << "逆序修改前的数组为:" << endl;
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i] << endl;
	}
	//实现逆序
	//1 记录起始下标,末尾下标位置
	//2 起始位置与结束位置元素互换
	//3 起始位置++,结束位置--
	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 < 5; i++)
	{
		cout << arr[i] << endl;
	}
	system("pause");
	return 0;

}

输出结果:
在这里插入图片描述

1.4.2 冒泡排序:

在这里插入图片描述

排序前:
在这里插入图片描述
9个数有8个相邻的元素:因此对比的次数为8次

第一次交换:

在这里插入图片描述

第二次不用交换:

第三次:

在这里插入图片描述

第四次:8和5交换
在这里插入图片描述

第五次交换:8和7交换
在这里插入图片描述

第六次交换:8和1交换
在这里插入图片描述

第7次交换:8和3交换
在这里插入图片描述

第八次不用交换(9>8)

经过第一轮交换8次(n-1),最大的数排到最后一位

第二轮需要比较的次数为7次(n-2),找到第二大的数字,和第一轮交换一样:每轮对比的次数=元素个数-排序轮数-1

需要进行比较的轮数为8轮(找到了前n-1个),最后一个自动会在最小的位置上:元素的个数-1=轮数

第0轮是为了用循环表示
在这里插入图片描述

代码:

#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;
	//总排序轮数为元素个数-1
	for (int i = 0; i < 9- 1; i++)
	{
		//内层循环每轮比较的次数=元素个数-当前轮数-1  
		for (int j = 0; j < 9 - 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 < 9; i++)
	{
		cout << arr[i] << " ";
	}
	system("pause");
	return 0;

}

二维数组:

2.1四种定义格式:

在这里插入图片描述

2.2 二维数组数组名作用:

1 查看二维数组所占内存空间:使用sizeof(数组名)单位为字节

在这里插入图片描述

求某行的内存空间:
在这里插入图片描述

求二维数组行数

求二维数组列数

2 可以查看二维数组首地址

在这里插入图片描述

和第一行首地址,第一个元素的首地址,都是等价的

第一行和第二行的地址:不一样,相差12个字节(3个元素)
在这里插入图片描述

输出结果:

在这里插入图片描述

2.3 二维数组案例:成绩求和

在这里插入图片描述

1 创建二维数组,保存成绩

2 统计求和(每行相加)

代码:

int main()
{
	int score[3][3] =
	{
		{100,100,100},
		{90,50,100},
		{60,70,80},
	};
	string names[3] = { "zs","ls","ww" };
	for (int i = 0; i < 3; i++)
	{
		int sum = 0;
		for (int j = 0; j < 3; j++)
		{
			sum += score[i][j];
		}
		cout << names[i] <<"的总成绩为" << sum << endl;
		cout << endl;
	}
	system("pause");
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/494881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日常的性能测试工作

日常的性能测试工作 (1)在日常的测试工作时如何进行性能测试 日常的性能测试主要是从业务功能点中抽取具有并发特点的&#xff0c;高风险的、大数据量处理的业务&#xff0c;整理成测试用例&#xff0c;制定相应的指标&#xff0c;然后用工具或者手工进行性能测试并分析&#x…

MySQL HeatWave 被添加了机器学习,甲骨文认真了

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

基于javaweb的学生就业管理系统

一、简介 学生基业管理系统有三个角色&#xff1a;管理员、企业、学生 对学生信息管理、企业信息管理、求职信息管理 后端架构&#xff1a;spring springmvc mybatis 前端架构&#xff1a;jsp layui 系统环境&#xff1a;jdk1.8 | maven | mysql 二、主要功能 1. 登录…

jvm之垃圾回收相关概念解读

目录 System.gc()的理解 内存溢出与内存泄露 内存溢出&#xff08;OOM&#xff09; 内存泄漏&#xff08;Memory Leak&#xff09; Stop The World 垃圾回收的并行与并发 程序中的并发&#xff08;Concurrent&#xff09; 程序中的并发&#xff08;Parallel&#xff09…

揭秘镭速传输点对点传输技术,NAT+Raysync强强组合

点对点传输是一种文件即时传输方式用于实现数据的快速联动&#xff0c;为所有客户端提供资源&#xff0c;包括带宽、存储空间、计算能力。点对点传输技术有很多应用&#xff0c;包括共享各种格式音频、视频、数据等。 在5G重新定义带宽&#xff0c;信息技术不断发展的今天&…

Python:概念解析:基础语法

Python基础语法 1. 列表&#xff0c;元组&#xff0c;字典1.1 列表1.2. tuple元组1.3 字典dict 2. 数据类型推断2.1 在Python中有一个函数 isinstance(data,type) , 可以用来判断某个数据是什么类型。 3. Python 基本数据类型3.1 整型 int 本章节介绍Python的一些基础语法 1. 列…

《可穿戴式血压测量设备与高血压管理的新方法:数字时代》阅读笔记

目录 一、论文摘要 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课…

PySide6/PyQT多线程之 线程安全:互斥锁条件变量的最佳实践

前言 在PySide6/PyQT中使用多线程时&#xff0c;线程锁和线程安全是非常重要的概念。本文将介绍线程锁和线程安全的基本概念&#xff0c;以及如何在PySide6/PyQT中使用它们。 使用PySide6/PyQT开发GUI应用程序&#xff0c;在多个线程同时访问同一个共享对象时候&#xff0c;如果…

单词词义、词性、例句查询python代码

单词发音、词义、词性、例句查询、输出结果更简洁&#xff0c;一次可查多个单词 运行该代码&#xff0c;命令窗口输入单词&#xff0c;单词用“/”分开&#xff0c;例如&#xff1a;noisy/problem/community/neighbor 可以更多。先安装两个python包requests、 beautifulsoup4&…

Eureka详解

Eureka概述和架构 Eureka Spring Cloud Eureka 是Netflix 开发的注册发现组件&#xff0c;本身是一个基于 REST 的服务。提供注册与发现&#xff0c;同时还提供了负载均衡、故障转移等能力 Eureka3个角色 服务中心&#xff0c;服务提供者&#xff0c;服务消费者 Eureka Se…

Win11的两个实用技巧系列之蓝屏死循环解决办法、调高进程的优先级方法

Win11蓝屏死循环怎么办?Win11蓝屏死循环解决办法 有用户安装Win11系统的时候&#xff0c;重新启动电脑的时候&#xff0c;会一直进入蓝屏的错误循环中&#xff0c;本文就为大家带来详细的解决方法&#xff0c;需要的朋友一起看看吧 Win11蓝屏死循环解决办法分享。有用户安装W…

Ubuntu18.04系统及相关软件安装恢复过程

Ubuntu18.04系统及相关软件安装恢复过程 一、常用软件安装1. [系统安装](https://blog.csdn.net/qq_43309940/article/details/116656810)2. [显卡驱动安装](https://blog.csdn.net/qq_43309940/article/details/126898929)3. [ROS Melodic安装](https://ismango.blog.csdn.net…

[Python]爬虫基础——urllib库

urllib目录 一、简介二、发送请求1、urlopen()函数2、Request()函数 三、异常处理四、解析URL五、分析Robots协议 一、简介 urllib库是Python内置的标准库。包含以下四个模块&#xff1a; 1、request&#xff1a;模拟发送HTTP请求&#xff1b; 2、error&#xff1a;处理HTTP请…

实验六 UML建模工具应用

一、实验目的 1.掌握面向对象开发思想及实现机制 2.理解并掌握UML常用图&#xff08;重点&#xff1a;类、对象图、用例图&#xff09; 3.掌握并常见UML建模工具&#xff0c;并绘制UML各种图 二、实验准备与要求 1.StarUML(简称SU)&#xff0c;是一种创建UML类图&#xff0c…

洛谷P8597 [蓝桥杯 2013 省 B] 翻硬币C语言/C++

[蓝桥杯 2013 省 B] 翻硬币 题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果…

ideaSSM医院挂号管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 SSM医院挂号管理系统是一套完善的完整医院类型系统&#xff0c;结合SSM框架和bootstrap完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式 开发&#xff09;&#xff0c;系统具有完整的源代…

leetcode 1143. 最长公共子序列

1. dp 数组的定义 下标&#xff1a; 以 i - 1 和 j - 1 为结尾的子序列 值&#xff1a;以 i - 1 和 j - 1 为结尾的最长公共子序列的长度 2. 递推公式 if(text1[i - 1] text2[j - 1]) // 相等 dp[i][j] dp[i - 1][j - 1] 1 ; elsedp[i][j] max(dp[i - 1][j],…

【问题记录】flask开发blog

文章目录 小知识点问题1. 文章标签显示错误2. 文章状态无法回显&#xff08;open)3. 用户管理页面&#xff0c;图标无法显示4. BuildError5. 用户管理添加用户&#xff0c;使用重复的用户名会报错(open)6. 添加用户&#xff0c;不上传头像会报错(open)7. 部分标签删除时报错&am…

设计模式 Template Method Pattern(Inheritance) vs Strategy Pattern(Delegation)

Template Method Pattern 和 Strategy Pattern 是两种常用的行为设计模式。他们分别用了继承inheritance和委托delegation两种不同的实现方法&#xff0c;因为上篇文章讲过了UML图&#xff0c;所以这篇顺便可以把两种不同模式的UML图都带出来一起说明。 Template Method Patte…

Mybatis的PageHepler用法

分页原理 分页在使用时的分类 物理分页: 在操作数据库中的表时,sql语句中使用了limit ?,?,此时sql语句返回的结果是分页结果 逻辑分页: 依赖程序的代码,其原理为:通过sql语句将数据库表中的所有数据都查询出,之后将数据保存在内存中,最终要显示的数据若涉及到分页,到内存中…