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

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语言——二维数组和字符数组

二维数组 二维数组本质上是一个行列式的组合&#xff0c;也就是二维数组是有行和列两部分构成。二维数组数据是通过行列进行解读。 定义形式&#xff1a; 类型&#xff08;说明符&#xff09; 数组名[行数&#xff08;常量表达式1&#xff09;][列数&#xff08;常量表达式…...

Python 爬虫入门(九):Scrapy安装及使用「详细介绍」

Python 爬虫入门&#xff08;九&#xff09;&#xff1a;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中修改项目名称

公司最近有个小项目新加了很多功能&#xff0c;在叫原先的项目名有点不合适了。所以在网上查了下资料&#xff0c;发现步骤都比较复杂。自己研究了一下找到了一个相对简单的方法&#xff0c;只需要两步&#xff0c;特此记录一下。 1.修改项目文件夹名称 关闭当前项目&#xff…...

Flink开发语言使用Java还是Scala合适?

目录 1. Flink简介 1.1 什么是Apache Flink&#xff1f; 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底层实现

目录 一&#xff0c; 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的静态库&#xff08;换root&#xff09;5. git6. sudo给普通用户提权7. 更新git版本&#xff08;centos默认安装1.8.x&#xff0c;我们更新到2.x&#xff09;8. getch9. json10. 升级gcc版本11. 跨系统…...

oracle库PASSWORD_VERSIONS 对应的加密方式

oracle库PASSWORD_VERSIONS 对应的加密方式 10G DES 11G SHA-1 12C SHA-2-based SHA-512官方文档&#xff1a; https://docs.oracle.com/database/121/DBSEG/authentication.htm#DBSEG487...

分享一个基于微信小程序的乡村医疗上门服务预约平台(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…...

切香肠(Sausage)

题目描述 有 n 条香肠&#xff0c;每条香肠的长度相等。我们打算将这些香肠切开后分给 k 名客人&#xff0c;且要求每名客人获得一样多的香肠&#xff0c;且要将所有的香肠分配完&#xff0c;不做保留。 请问最少需要切几刀才能完成&#xff1f;一刀只能切断一条香肠&#xf…...

Session与Cookie以及Cache区别,及应用场景

Session、Cookie和Cache是Web开发中常用的数据存储方式&#xff0c;它们在功能、存储位置和应用场景上有所不同。 一、Session、Cookie和Cache的区别 Session 存储位置&#xff1a;服务器端。功能&#xff1a;通过在服务器上存储唯一的标识符&#xff08;Session ID&#xff…...

Debian | 更换 Gnome 至 Xfce4

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

在使用JSON过程中遇到的一个空间释放问题

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

基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码

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

不同专业方向如何在ChatGPT的帮助下完成选题

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 选择一个合适的论文题目是每个论文写作同学必须面对的重要任务。无论是历史专业、计算机科学专业&#xff0c;还是其他各个领域&#xff0c;找到一个既有研究价值又符合个人兴趣的选题往…...

MathType7.4中文版本功能详解!你的数学公式编辑神器

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

在 PhpStorm 中为 .java 文件启用语法高亮,需要正确配置文件类型和关联语言。

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

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.项目背景 在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括&#xff1a; 用户接口&#xff1a;通常提供友好的界面&#xff0c;用户可以方便地输入查询条件。 数据存储&#xff1a;系统往往连接到数据库&#xff0c;存储大量信息&#xf…...

P1032 [NOIP2002 提高组] 字串变换

[NOIP2002 提高组] 字串变换 题目背景 本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水&#xff0c;各种做法都可以通过&#xff0c;不代表算法正确。因此本题题目和数据仅供参考。 本题为搜索题&#xff0c;本题不接受 hack 数据。关于此类题目的详细内容 题目…...

Android 12系统源码_多屏幕(一)多屏幕设备显示Activity

前言 分屏&#xff1a;是指一个屏幕分出多个窗口&#xff0c;分别显示不同应用的界面&#xff0c;这在当前的手机设备中很常见。多屏&#xff1a;是指一个设备存在多个屏幕&#xff0c;这些可能是虚拟屏幕或者实体硬件屏幕&#xff0c;不同的应用同时显示在不同的屏幕中&#…...

如何判断IP地址属于住宅IP还是机房IP

在数字化时代,IP地址作为互联网通信的基础标识&#xff0c;扮演着重要的角色。无论是网络管理、数据分析还是安全监控&#xff0c;正确识别IP地址的类型——尤其是区分是住宅IP还是机房IP&#xff0c;对于确保网络安全、优化网络性能以及合法合规运营具有重要意义。IPIDEA代理I…...

C#TreeView控件应用

1、代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace TestApp…...

计算机网络-数据链路层

基本概念 数据链路和链路 链路&#xff1a;指的是从一个节点到相邻节点的一段物理线路&#xff0c;且中间没有任何其他的交换节点 数据链路&#xff1a;传输数据时&#xff0c;除了一条物理线路&#xff0c;还需要一些必要通信协议来控制这些传输。 数据链路层的三个基本问…...

农场游戏中的时间管理实例

一、准备工作 在Unity中创建承载日期和时间的文本 二、设置游戏的时间戳 using System.Collections; using System.Collections.Generic; using UnityEngine; //标识这个类可以被序列化 [System.Serializable] public class GameTimestamp {// 游戏时间戳的成员变量public in…...

css 数字平铺布局

效果图 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>活动中心</title><meta name"viewport" content"maximum-scale1.0,minimum-scale1.0,user-scalable0,widthdevice-width,initial-scale1.0…...

【开源】嵌入式Linux(IMX6U)应用层综合项目(2)--智能家居APP

目录 1.简介 1.1功能介绍 1.2技术栈介绍 1.3演示视频 1.4硬件介绍 2.软件设计 2.1智能家居UI设计 2.2.main函数 3.结尾&#xff08;附网盘链接&#xff09; 1.简介 此文章并不是教程&#xff0c;只能当作笔者的学习分享&#xff0c;只会做一些简单的介绍&#xff0c;其…...

CUDA常见编译器配置问题一览

CUDA常见编译器配置问题一览 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;复旦机器人智能实验室成员&#xff0c;国家级大学生赛事评审专家&#xff0c;发表多篇SCI核心期刊…...

【Android】系统级应用升级后的安装位置

系统级应用的安装位置一般在codePath/system 下面&#xff0c; 如果手动的去进行adb install覆盖安装&#xff0c;通过dumpsys package可以发现是安装在/data/app/里&#xff0c; 如果是通过标准的系统升级方式呢&#xff1f; 这里我们来通过升级查看一下&#xff0c; 升级…...

uniapp 使用renderjs通信

一、 server层向renderjs传值&#xff0c;并初始化renderjs prop&#xff1a;可以随便定义 renderTaskDetail&#xff1a;是传往renderjs的数据 change:prop&#xff1a;prop和必须上面prop字段一样 renderScript.initAmap&#xff1a;【 renderScript】需要renderjs 中scr…...