当前位置: 首页 > news >正文

C语言入门 Day_13 二维数组

目录

前言:

1.字符串

2.创建二维数组

3.使用二维数组

4.易错点 

5.思维导图


前言:

我们学习了字符类型char,我们可以用char来表示一个大写或者小写的字母,但真实应用中我们往往使用的是多个字符组成的一个单词或者句子。

这种“多个字符”在C语言中叫做字符串

但是字符串和字符,整型,浮点型不同的是,字符串不是一个数据类型,它本质上是一种字符类型的数组

1.字符串

1.1

字符串是一个数组,它有两个特点:

第一个是它是字符类型;第二个是它以符号'\0'结尾

我们来创建/定义一个字符串:

char string_1[5] = {'l', 'o', 'v', 'e', '\0'};

1.数组的数据类型是字符型char

2.数组名字string_1

3.数组长度5

4.字符数组的前四个元素l,o,v,e

5.数组的最后一个元素'\0'

1.2

我们可以看到,这个字符型数组的最后一个元素是'\0'

我们再来看看怎么输出一个字符串

我们先定义一个字符串(字符数组),然后打印输出它:

char string_1[1]={'l','o','v','e','\0'};
printf("%s\n",sting_1);

1.定义一个字符串

2.字符串的输出符号%s

3.字符串名(字符数组名)string_1

1.3

在打印的时候我们使用的是%ss是字符串英文string的首字母。所以字符串的输出符号是%s

字符串是数组的一个应用,对于后期的很多编程语言比如python来说,字符串是默认支持的数据类型,但是C语言时代还并没有默认支持,而是通过一维字符型数组的形式来代表字符串的

之前我们学习的数组包括字符串,都是一维数组,因为它只有一个索引/下标,也就是只有一个“维度”,C语言还有二维数组的机制。

int number_list[10];
float  float_list[6];
char string_a[20];

2.创建二维数组

2.1

一维数组是一个线性表的话,一个索引/下标对应一个数据;

二维数组可以理解为一个行列表,一个行索引加上一个列索引可以对应一个数据。

2.2

我们来定义一个二维数组,这个二维数组是整型的

int double_list[2][2]={{1,2},{3,4}};

1.二维数组的数据类型,int

2.二维数组名  double_list

3.二维数组的第一个索引/下标   [2]

4.二维数组的第二个索引/下标   [2]

int double_list[2][2]={{1,2},{3,4}};

5.二维数组的数组元素   {1,2},{3,4}

6.二维数组的“第一行”数据

7.二维数组的“第二行”数据

2.3

二维数组里面的第一个下标表示哪一行,是横着的行

eg:这里的[0][0]是1,[0][1]是2,这是第一行;[1][0]是3,[1][1]是4,这是第二行。

二维数组里面的第二个下标表示哪一列,是竖着的列

eg:这里的[0][0]是1,[1][0]是3,这是第一列;[0][1]是2,[1][1]是4,这是第二列。

接下来我们来学习二维数组的使用,使用的时候我们心里也是想着一张二维的行列表就行了。

3.使用二维数组

3.1

我们先来看看二维数组的读取和访问。

一个二维整型数组,挨个打印它的数组元素:

int two_number_list[2][2]={{1,2},{3,4}};
printf("%s\n",two_number_list[0][0]);
printf("%s\n",two_number_list[0][1]);
printf("%s\n",two_number_list[1][0]);
printf("%s\n",two_number_list[1][1]);

1.创建二维数组并赋值

2. [0][0]  打印二维数组的第一行第一列的元素 1

3. [0][1]  打印二维数组的第一行第二列的元素  2

4. [1][0]  打印二维数组的第二行第一列的元素   3

4. [1][1]  打印二维数组的第二行第一列的元素   4

3.2

修改二维数组元素的方法和一维数组一样,也是直接找到元素位置进行赋值就可以了:

float two_float_list[2][2]={{1.0,2.0},{3.0,4.0}};
two_float_list[0][0]=10.10;
two_float_list[0][1]=20.20;
two_float_list[1][0]=30.30;
two_float_list[1][1]=40.40;

1. 定义一个二维数组 

2. two_float_list[0][0] = 10.10  修改第一行第一列的数据

3. two_float_list[0][1] = 20.20  修改第一行第二列的数据

4. two_float_list[1][0] = 30.30  修改第二行第一列的数据

5. two_float_list[1][1] = 40.40  修改第二行第二列的数据

3.3

二维数组和一维数组的使用方式其实是一模一样的,难点在于二维数组里面的数组元素所在的位置,我们需要记住第一个下标代表行,第二个下标代表列,这样就方便记忆了。

二维数组的访问限制和一维数组类似,不能超过下标的范围,这种超过下标的范围的行为,还有个专业术语叫做越界。就是数组和人一样都需要有边界感,人没有边界感,其他人会愤怒;数组没有边界感,程序会报错

二维数组的使用场景其实大部分都可以被一维数组取代,因为都是存储数据,二维数组可以被一个很长的一维数组达到同样的存储数据的效果。

以至于后面的编程语言很多都取消了二维数组的设定,只保留了一维数组(又叫数组或者列表)。

4.易错点 

eg:

C语言没有字符串类型,所以我们要把字符串放入字符数组中;

字符串的结束符号是\0 ,所以字符串长度比字符总长度多1;

字符串的输出符号是%s

eg:

 二维数组的行下边和列下标都是从0开始的;

数组大小由数组定义时的[4][5]决定——即4行5列,可以存储20个数。

5.思维导图

在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

相关文章:

C语言入门 Day_13 二维数组

目录 前言: 1.字符串 2.创建二维数组 3.使用二维数组 4.易错点 5.思维导图 前言: 我们学习了字符类型char,我们可以用char来表示一个大写或者小写的字母,但真实应用中我们往往使用的是多个字符组成的一个单词或者句子。 …...

通过HFS低成本搭建NAS,并内网穿透实现公网访问

文章目录 前言1.下载安装cpolar1.1 设置HFS访客1.2 虚拟文件系统 2. 使用cpolar建立一条内网穿透数据隧道2.1 保留隧道2.2 隧道名称2.3 成功使用cpolar创建二级子域名访问本地hfs 总结 前言 云存储作为一个新概念,在前些年炒的火热,虽然伴随一系列黑天鹅…...

【SpringMVC】工作流程及入门案例

目录 前言 回顾MVC三层架构 1. SpringMVC简介 …...

【JVM】垃圾收集算法

文章目录 分代收集理论标记-清除算法标记-复制算法标记-整理算法 分代收集理论 当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(Generational Collection)[1]的理论进 行设计,分代收集名为理论,实质是一套符…...

K8s的Pod出现Init:ImagePullBackOff问题的解决(以calico为例)

对于这类问题的解决思路应该都差不多,本文以calico插件安装为例,发现有个Pod的镜像没有pull成功 第一步:查看这个pod的描述信息 kubectl describe pod calico-node-wmhrw -n kube-system 从上图发现是docker拉取"calico/cni:v3.15.1&q…...

数据结构 -作用及基本概念

为什么要使用数据结构 学习数据结构是计算机科学和软件工程领域中非常重要的一门课程。以下是学习数据结构的几个重要原因: 组织和管理数据:数据结构提供了一种组织和管理数据的方式。通过学习不同的数据结构,你可以了解如何有效地存储和操作…...

数学建模--时间序列预测模型的七种经典算法的Python实现

目录 1.开篇版权提示 2.时间序列介绍 3.项目数据处理 4.项目数据划分可视化 5.时间预测序列经典算法1:朴素法 6.时间预测序列经典算法2: 简单平均法 7.时间预测序列经典算法3:移动平均法 8.时间预测序列经典算法4:简单指…...

nginx-反向代理缓存

反向代理缓存相当于自动化动静分离。 将上游服务器的资源缓存到nginx本地,当下次再有相同的资源请求时,直接讲nginx缓存的资源返回给客户端。 本地缓存资源有一个过期时间,当超过过期时间,则重新向上游服务器重新请求获取资源。…...

大模型重塑区域人才培养,飞桨(重庆)人工智能教育创新中心正式启动

2023年8月22日,重庆市高校人工智能产教融合院长研讨会暨飞桨(重庆)人工智能教育创新中心启动仪式在重庆大学成功召开。会上,由百度飞桨、重庆大学组织重庆市二十一所高校共建的飞桨(重庆)人工智能教育创新中…...

PAT 1164 Good in C 测试点3,4

个人学习记录,代码难免不尽人意。 When your interviewer asks you to write “Hello World” using C, can you do as the following figure shows? Input Specification: Each input file contains one test case. For each case, the first part gives the 26 …...

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制

LabVIEW对EAST长脉冲等离子体运行的陀螺稳态运行控制 托卡马克是实现磁约束核聚变最有希望的解决方案之一。电子回旋共振加热(ECRH是一种对托卡马克有吸引力的等离子体加热方法,具有耦合效率高,功率沉积定位好等优点。陀螺加速器是ECRH系统中…...

Fragment

Fragment是Android开发中的一个重要组件,用于构建灵活且可重用的用户界面模块。它可以作为Activity的一部分来展示用户界面,并且可以嵌套在其他Fragment中,从而形成复杂的界面层级。 以下是一个简单的示例,展示了如何在Android中…...

哈希表-救赎金

Leetcode: https://leetcode.cn/problems/ransom-note/?envTypestudy-plan-v2&envIdtop-interview-150 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true …...

vue3+vite+ts项目适配各种分辨率解决方案

现在的电脑屏幕和尺寸越来越多样化,对于前端开发来说,适配各种屏幕成了大难题,开发中一个实际例子:开发一个导航栏,ui给的是1920*60的尺寸,前端开发的时候,在自己电脑缩放比例中开发的&#xff…...

Python Opencv实践 - 矩形轮廓绘制(直边矩形,最小外接矩形)

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/stars.png") plt.imshow(img[:,:,::-1])img_gray cv.cvtColor(img, cv.COLOR_BGR2GRAY) #通过cv.threshold转换为二值图 ret,thresh cv.threshold(img_gray,…...

大数据HBASE的详细使用

摘要:本文将深入探讨大数据HBASE的使用步骤,帮助读者了解和掌握这一强大的分布式数据库系统的基本概念和操作技巧。通过本文的阅读,读者将能够熟悉HBASE的基本设置,了解其核心概念,掌握基本的查询和管理操作&#xff0…...

Sentinel 流量控制框架

1. Sentinel 是什么? Sentinel是由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。 2. 主要优势和特性 轻量级,核心库无多余依赖,性能损耗小。 方便接入,开源生态广泛。 丰富的流量控制场景。 …...

leetcode原题: 跳水板

题目: 你正在使用一堆木板建造跳水板。有两种类型的木板,其中长度较短的木板长度为shorter,长度较长的木板长度为longer。你必须正好使用k块木板。编写一个方法,生成跳水板所有可能的长度。 返回的长度需要从小到大排列。 示例&…...

深度学习入门(Python)学习笔记1

第1章 Python入门 1.1python是什么 Python是一个简单、易读、易记的编程语言,而且是开源的,可以免费地自由使用。 使用Python不仅可以写出可读性高的代码,还可以写出性能高(处理速度快)的代码。 再者,在…...

苏州想要获得融资融券低利率账户的方法?怎么开融资融券账户?

想要获得融资融券低利率账户,可以通过以下几种方式: 选择低费率的券商:不同券商的费率不同,一些券商会提供低利率的融资融券账户,可以通过咨询券商或者比较不同券商的费率来找到最佳账户。 提升自身信用:获…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)&#xff0…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...