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 数据。关于此类题目的详细内容 题目…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
