C语言——二维数组和字符数组
二维数组
二维数组本质上是一个行列式的组合,也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。
定义形式:
类型(说明符) 数组名[行数(常量表达式1)][列数(常量表达式2)];
eg:
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
int arr[][] = {{1,2,3},{4,5,6},{7,8,9}}
int arr[3][] = {{1,2},{4,5,6},{7}}//等价于int arr[3][3]
说明:
在C语言中,二维数组在计算机中的存储顺序是按行进行的。
二维数组元素
表示形式:
数组名[下标1][下标2];
eg:
a[2][3],b[4][9];
下标可以是整型表达式,如:a[2-1][2*2-1]
下标可以是已经有值的变量或数组元素, 如:a[2*x-1][b[3][1]]
数组元素可以出现在表达式中, 如:b[1][2]=a[2][3]/2
注意:
使用时数组元素的下标应在已定义数组的大小范围内;
应注意区别定义数组大小和引用数组元素的区别。
二维数组初始化
方法:
⑴ 分行给二维数组赋初值。如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
⑵ 可将所有数据写在一个花括号内,按排列顺序对个元素赋值。如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
⑶ 可对部分元素赋初值,其余自动取0值(\0|0.0)。如:
int a[3][4]={{1},{5,6},{9}};
⑷ 若对全部元素赋初值,则定义数组时可不说明第一维的长度(对方括号不能省),第二维的长度必须指明。如:
int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
⑸ 在分行赋初值时,也可以省略第一维的长度说明。如:
int a[ ][4]={{1,2,3},{0},{0,10}};
eg:
二维数组的遍历
#include <stdio.h>
int main()
{
int arr[][3] = {{1},{2,4},{5,6,7}};// 经过论证:二维数组我们必须指明第2维的数组的长度
// 获取行元素的大小
int length = sizeof(arr) / sizeof(arr[0]); // 如果是二维数组,第1维的长度,应该是如左侧这样获取
printf("length:%d\n",length);
// 遍历二维数组,需要使用双层for循环,外层遍历行,内层遍历每一行的列
for(int row = 0;row length;row++)
{
// 获取列元素的总大小
int len = sizeof(arr[row]) / sizeof(int);
for(int col = 0; col len; col++)
{
// 获取列元素
printf("%3d",arr[row][col]);// 意思是获取数组arr 第row行第col列
}
printf("\n");
}
return 0;
}// 数据类型,分支结构,循环结构,数组
二维数组:矩阵转置
/**
* 需求:二维数组案例-矩阵的转置(就是将一个2行3列的数组转换为3行2列的数组)
*/
#include
int main()
{
// 准备2个数组,存放转前和转后的数据
int arr_before[2][3] = {1,2,3,4,5,6};
int arr_after[3][2] = {0};// 初始化,每一列上都是0
// 遍历arr_before
for(int i = 0;i sizeof(arr_before)/sizeof(arr_before[0]);i++)
{
for(int j = 0;j sizeof(arr_before[i])/sizeof(int);j++)
// 转置
arr_after[j][i] = arr_before[i][j];
}
}
// 遍历arr_after
for(int i = 0;i sizeof(arr_after)/sizeof(arr_after[0]);i++)
{
for(int j = 0;j sizeof(arr_after[i])/sizeof(int);j++)
{
// 输出
printf("%4d",arr_after[i][j]);
}
printf("\n");
}
return 0;
}
字符数组
概念:
元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。需要注意的一点是,我们
C语言中的字符是字节字符。
字节字符:也就是一个字符占1个字节
语法:
char 数组名[容量]
char 数组名[行容量][列容量]
测试:
char a = 'A'
char b = '1'
char c = 65
char d = "A" //错误,因为这是字符串写法,也是char数组的写法,char d[1] = "A"
char e = “马” //错误,中文一个字符超过一个字节
eg:
#include <stdio.h>
int main()
{
char arr[7][7] = {{' ',' ',' ','*',' ',' ',' '},
{' ',' ','*',' ','*',' ',' '},
{' ','*',' ',' ',' ','*',' '},
{'*',' ',' ',' ',' ',' ','*'},
{' ','*',' ',' ',' ','*',' '},
{' ',' ','*',' ','*',' ',' '},
{' ',' ',' ','*',' ',' ',' '}
};for(int i = 0;i < sizeof(arr)/sizeof(arr[0]);i++)
{
for(int j =0;j < sizeof(arr[i])/sizeof(char);j++)
{
printf("%c",arr[i][j]);
}
printf("\n");
}return 0;
}
字符串和字符串结束标志
说明:
C语言规定,字符串以字符'\0'作为结束标志。
编译系统对字符串常量自动加一个'\0'作为结束标志。
程序中往往通过判断'\0'来检测字符串是否结束。
'\0'的ASCII码为0,不是一个可显示的字符,是“空操作符”,什么都不做,不会增加有效字符,仅是一个供判别的标志。
字符数组的多样表示
char数组可以以数组的方式一个个输出每个字符;我们的char数组也可以以字符串的方式整体进行输出所有字符。
具体如下面案例:
/*
需求:字符数组->字符串
*/
#include
int main()
{
// 字符串第1种表示:
char s1[] = {'h','e','l','l','o',' ','w','o','r','l','d'};
// 字符串第2种表示:
char s2[] = {"hello world"};
// 字符串第3种表示:
char s3[] = "hello world";
// 测试,使用字符串方式打印,这样就不用一一遍历
printf("%s\n",s1); //hello world
printf("%s\n",s2); //hello world
printf("%s\n",s3); //hello world
return 0;
}
注意:
字符串的长度与字符数组的长度不一定相同。
利用字符串常量可以对字符数组进行初始化,但不能用字符串常量为字符数组赋值。
// 正确写法:利用字符串常量给字符数组初始化
char b[15] = "China";
// 错误写法:利用字符串常量给字符数组赋值
char b[15];
b[15] = "China";
字符串输入
格式:
scanf("%s",数组名)
注意:
采用scanf进行字符串输入,要求字符串中不能存在空格,否则字符串遇到空格会结束。
fgets(数组名,数组容量,stdin);
说明:采用fgets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我们可能需要处理\n
注意:
1. 如果输入的字符串不包含空格和换行,可以使用scanf() | fgets();
2. 如果输入的字符串需要包含空格和换行,只能使用fgets();
3. 经过对比,我们发现,在字符串的输入中,fgets()更好;
字符串输出
puts(数组名)
printf("%s",数组名);
字符串拼接
strcat(数组名,"需要拼接的字符串")
注意:需要引入#include <string.h>
字符串拷贝
strcpy(数组名,字符串)
注意:需要引入<string.h>库
说明:这个方法适合给字符串赋值用。
字符串比较
strcmp(字符串1,字符串2);
注意:
1. 需要引入<string.h>
2. 返回的结果是boolean
获取字符串长度
strlen(字符串)
注意:
1. 需要<string.h>
2. 返回字符串长度
相关文章:

C语言——二维数组和字符数组
二维数组 二维数组本质上是一个行列式的组合,也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 定义形式: 类型(说明符) 数组名[行数(常量表达式1)][列数(常量表达式…...
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」
Python 爬虫入门(九):Scrapy安装及使用「详细介绍」 前言1. Scrapy 简介2. Scrapy 的安装2.1 环境准备2.2 安装 Scrapy 3. 创建 Scrapy 项目3.1 创建项目3.2 项目结构简介 4. 编写爬虫4.1 创建爬虫4.2 解析数据4.3 运行爬虫 5. 存储数据5.1 存…...
扩展addr2line程序的功能,group_add2line() 脚本的实现
------------------------------------------------------------ author: hjjdebug date: 2024年 08月 05日 星期一 16:19:07 CST descrition: 扩展addr2line程序的功能,group_add2line() 脚本的实现 ------------------------------------------------------------ 扩展addr2…...

idea中修改项目名称
公司最近有个小项目新加了很多功能,在叫原先的项目名有点不合适了。所以在网上查了下资料,发现步骤都比较复杂。自己研究了一下找到了一个相对简单的方法,只需要两步,特此记录一下。 1.修改项目文件夹名称 关闭当前项目ÿ…...
Flink开发语言使用Java还是Scala合适?
目录 1. Flink简介 1.1 什么是Apache Flink? 1.2 Flink的核心组件 2. Java与Scala在Flink开发中的比较 2.1 语言特性对比 2.2 开发体验对比 3. 实际开发中的应用 3.1 使用Java进行Flink开发 3.2 使用Scala进行Flink开发 4. 关键性能和优化 4.1 性能对比 …...

C++STL专题 vector底层实现
目录 一, vector的手搓 1.构造函数 2. 拷贝构造的实现 3.析构函数 4.begin() end() 的实现 5.reserve的实现 6.size和capacity的实现 7.push_back的实现 8.pop_back的实现 9.empty的实现 10.insert的实现 11.erase的实现 12.resize的实现 13.clear的实…...
【Linux】装机常用配置
文章目录 1. 下载常用软件包2. 更新yum源3. vim编辑器配置4. 安装C语言和C的静态库(换root)5. git6. sudo给普通用户提权7. 更新git版本(centos默认安装1.8.x,我们更新到2.x)8. getch9. json10. 升级gcc版本11. 跨系统…...
oracle库PASSWORD_VERSIONS 对应的加密方式
oracle库PASSWORD_VERSIONS 对应的加密方式 10G DES 11G SHA-1 12C SHA-2-based SHA-512官方文档: https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG487...

分享一个基于微信小程序的乡村医疗上门服务预约平台(源码、调试、LW、开题、PPT)
💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...
切香肠(Sausage)
题目描述 有 n 条香肠,每条香肠的长度相等。我们打算将这些香肠切开后分给 k 名客人,且要求每名客人获得一样多的香肠,且要将所有的香肠分配完,不做保留。 请问最少需要切几刀才能完成?一刀只能切断一条香肠…...
Session与Cookie以及Cache区别,及应用场景
Session、Cookie和Cache是Web开发中常用的数据存储方式,它们在功能、存储位置和应用场景上有所不同。 一、Session、Cookie和Cache的区别 Session 存储位置:服务器端。功能:通过在服务器上存储唯一的标识符(Session IDÿ…...

Debian | 更换 Gnome 至 Xfce4
Debian | 更换 Gnome 至 Xfce4 更新源 sudo apt update && sudo apt upgrade安装 xfce4 sudo apt install xfce4我选择 lightdm,回车 切换桌面 sudo update-alternatives --config x-session-manager输入 xfce 所在序号,我这里是 3 卸载 …...

在使用JSON过程中遇到的一个空间释放问题
在对完成的模块进行空间访问检查中发现了这个问题,这刚开始接触JSON的使用,也不知道他的内部实现,因此该问题找了好久,终于发现是每个节点创建都会自动开辟空间,因此造成空间未成功释放的错误。 JSON未成功替换节点空间…...

基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码
基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码 最新独立版校园跑腿校园社区小程序系统源码 | 附教程 测试环境:NginxPHP7.2MySQL5.6 多校版本,多模块,适合跑腿,外卖,表白,二…...

不同专业方向如何在ChatGPT的帮助下完成选题
学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 选择一个合适的论文题目是每个论文写作同学必须面对的重要任务。无论是历史专业、计算机科学专业,还是其他各个领域,找到一个既有研究价值又符合个人兴趣的选题往…...

MathType7.4中文版本功能详解!你的数学公式编辑神器
嘿,亲爱的小伙伴们,今天我要跟大家分享一个超实用的工具——MathType7中文版。作为一个自媒体人,我常常需要编辑各种复杂的数学公式,而这款软件简直就是我的救星!接下来,就让我带你们领略一下它的神奇之处吧…...

在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。
点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 因为我同时使用java和php混编所以在一个项目中如果同时打开IntelliJ IDEA和PhpStorm不符合我完美主义的本性。 捣鼓了一下搞定了 1. 添加文件类型关联 将 .java 文件与 Java 语言支持关联: …...

2024年8月1日(前端服务器的配置以及tomcat环境的配置)
[rootstatic ~]# cd eleme_web/ [rootstatic eleme_web]# cd src/ [rootstatic src]# ls views/ AboutView.vue HomeView.vue [rootstatic src]# vim views/HomeView.vue [rootstatic src]# nohup npm run serve nohup: 忽略输入并把输出追加到"nohup.out" 构建项目…...

基于tcp,html,数据库的在线信息查询系统项目总结
1.项目背景 在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括: 用户接口:通常提供友好的界面,用户可以方便地输入查询条件。 数据存储:系统往往连接到数据库,存储大量信息…...
P1032 [NOIP2002 提高组] 字串变换
[NOIP2002 提高组] 字串变换 题目背景 本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。 本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容 题目…...

使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...

Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...