C语言——二维数组和字符数组

news2024/9/23 7:23:49

二维数组

二维数组本质上是一个行列式的组合,也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。

定义形式:

类型(说明符)  数组名[行数(常量表达式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. 返回字符串长度

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

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

相关文章

nginx负载均衡、java、tomcat装包

一、nginx 七层负载均衡 1、七层负载均衡基础配置 2、负载均衡状态 [rootserver]# vim /usr/local/nginx/conf/nginx.confworker_processes 1;event {worker_connections 1024&#xff1b;}http { # 七层负载均衡支持http、ftp协议include mime.types;default_type app…

T3学员领取资料通知0803

T3学员领取资料通知0803 各位学员∶本周MF系列VBA技术资料增加671-680讲&#xff0c;T3学员看到通知后请免费领取,领取时间8月2日晚上19:00-8月3日12:00。本次增加内容&#xff1a; MF671:Shell命令输出计算机的详细信息 MF672:Shell命令输出网络配置信息 MF673:解锁和启用…

QtQuick Text-文本省略

效果 import QtQuickColumn{spacing: 20Text{width: 200text: qsTr("1使文本在单行中对于超出部分不要进行省略")font.pointSize: 20}Text{width: 200elide: Text.ElideLefttext: qsTr("2使文本在单行中对于超出部分从左边进行省略")font.pointSize: 20}Te…

【协作提效 Go - gin ! swagger】

什么是swagger Swagger 是一个用于设计、构建、记录和使用 RESTful Web 服务的工具集。它的主要作用包括&#xff1a; API 文档生成&#xff1a;Swagger 可以自动生成详细的 API 文档&#xff0c;包括每个端点的请求和响应格式、参数、状态码等。这使得开发者和用户可以轻松理…

【香橙派系列教程】(五)Linux的热拔插UDEV机制

【五】Linux的热拔插UDEV机制 在上一篇中我们发现&#xff0c;当手机接入开发板时&#xff0c;系统并不认识&#xff0c;当我们在/etc/udev目录下创建一个规则后&#xff0c;就可以通过adb访问到手机了&#xff0c;这里到底是怎么回事&#xff1f; 文章目录 【五】Linux的热拔插…

【Python】数据类型(上)

本篇文章将讲解&#xff1a; &#xff08;1&#xff09;整型 &#xff08;2&#xff09;布尔类型 一&#xff1a;整型 整型其实就是十进制整数的统称&#xff0c;例如&#xff1a;1 666 都属于整型。 &#xff08;1&#xff09;定义 num11 age45 &#xff08…

【网络】网络入门(第一篇)

网络入门可以从多个方面开始&#xff0c;以下是一个基本的网络入门指南&#xff0c;涵盖了网络的基本概念、网络类型、网络协议、网络拓扑、网络设备以及网络地址等方面。 一、网络基本概念 计算机网络&#xff1a;将多个计算机系统和设备连接在一起&#xff0c;以实现资源共…

Opencv学习-LUT函数

这个函数大概意思根据自己设定的查找表&#xff0c;改变原本像素点值 例如&#xff1a;我们想将一张图片灰度为0-100的像素的灰度变成0,101-200的变成100,201-255的变成255。我们就可已建立如下的一张表格 ​​​​​​​ ​​​​​​​ ​​​​​​​…

Studying-代码随想录训练营day52| 101.孤岛的总面积、102沉没孤岛、103.水流问题、104.建造最大岛屿

第52天&#xff0c;图论part03&#xff0c;岛屿问题继续&#xff01;&#xff01;&#x1f4aa;(ง •_•)ง&#xff0c;编程语言&#xff1a;C 目录 101.孤岛的总面积 102沉没孤岛 103.水流问题 104.建造最大岛屿 101.孤岛的总面积 文档讲解&#xff1a;手撕孤岛的总…

昇思25天学习打卡营第XX天|SSD目标检测

感觉目标检测还是yolo相对最火&#xff1f;ssd有点老了可以更新下 SSD算法数学描述 SSD算法使用卷积神经网络&#xff08;CNN&#xff09;进行特征提取&#xff0c;并通过多尺度的特征图进行目标检测。设 ( C ) 为CNN输出的特征层数量&#xff0c;( F_i ) 为第 ( i ) 层特征…

【Postman的接口测试工具介绍】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 👉Postman接口.👋 👉Postman是一款常用的API开发测试工具,它提…

Harmony学习(四)(应用程序框架基础)

1.应该程序框架基础 多Module设计机制 模块化开发&#xff1a;一个应用多个功能&#xff0c;每个功能可作为一个模块&#xff0c;Module中可以包含源代码、资源文件、第三方库、配置文件等&#xff0c;每一个Module可以独立编译&#xff0c;实现特定的功能支持多设备&#xf…

jdk的版本匹配 Usage of ApI documented as @since 11+

IDEA 解决 Usage of API documented as since XX 的方法 如下所示&#xff0c;代码已经报错提示。 这个问题的原因是IDEA 设置的jdk Language level 语法级别太低&#xff0c;不适配代码导致的&#xff0c;只要在项目结构中将语法级别调相应的级别就可以了。具体解决思路见下图…

vue-创建自己的CLI脚手架

1.自定义命令和入口配置 首先创建一个文件夹&#xff0c;然后npm init -y生成package.json文件 添加bin命令配置入口文件 新建lib/index.js文件 然后在控制台npm link 建立软连接 、然后执行felix-cli 就可以输出代码 2.查看当前版本号命令 安装 commander npm i commander…

系统架构设计师 - 企业信息化战略与实施

企业信息化战略与实施 企业信息化战略与实施信息与信息化的概念信息的定义信息的特点信息化的概念信息化对组织的意义 信息系统生命周期 ★立项阶段开发阶段运维阶段消亡阶段 信息系统战略规划 ★ ★ ★政府信息化与电子政务 ★企业信息化与电子商务 ★ ★ ★企业资源计划企业资…

2024年让短片制作不再难,4款剪辑软件助你一臂之力!

在这个短视频流行的时代&#xff0c;每一个创意都值得被展现&#xff0c;每一份热情都值得被激发。你是不是也曾经想过&#xff0c;用镜头来讲述你的故事&#xff0c;用剪辑来展示你的才华&#xff1f;今天&#xff0c;我们一起来探索2024年制作高质量短片的秘密武器——4款强大…

gitignore文件设置,git提交时忽略部分文件

在git提交时&#xff0c;出现了非常多无用的文件&#xff0c;包括.idea、.iml文件等等&#xff0c;使得commit变得麻烦&#xff0c;要自己在勾选框中点击半天。 右键单击项目名&#xff0c;选择New 选择File,命名为.gitignore&#xff08;注意&#xff1a;开头符号是英文.&…

文件描述符(fileno)及文件系统

fileno: #include <stdio.h> main() {FILE *fp;int fd;fp fopen("/etc/passwd", "r");fd fileno(fp);printf("fd %d\n", fd);fclose(fp); } 一&#xff0e;fileno()函数-CSDN博客https://blog.csdn.net/TuxedoLinux/article/detai…

利用开源可视化报表工具进入流程化办公!

很多客户朋友都希望能实现流程化办公&#xff0c;因为只有这样才能帮助企业顺利降本、增效、提质&#xff0c;利用好企业内部数据资源&#xff0c;打破信息孤岛壁垒&#xff0c;实现高效发展。低代码技术平台、开源可视化报表工具优势功能特点多&#xff0c;是提质高效的办公利…

日本软文发稿:日本主流发稿媒体有哪些?

日本软文发稿&#xff1a;日本主流发稿媒体有哪些 在日本发布软文时&#xff0c;选择合适的主流媒体进行推广是非常关键的。以下是一些在日本广受欢迎、影响力较大的媒体推荐&#xff08;排列不区分媒体排名顺序&#xff09;&#xff1a; 1. 朝日新闻 (Asahi Shimbun) 朝日新…