【c语言】一维数组与二维数组
数组
数组名代表的是数组在内存中的起始位置,即首元素的地址,而下表表示的则是该元素相对数组起始位置的偏移量
一维数组
1.定义
类型名 数组名[数组长度]
int a[100]; //整型数组长度为101,数组名为a
char b[100];//字符型数组长度为101,数组名为b
double c[100];//实型数组长度为101,数组名为c
类型名在简单的c程序设计已经提到
2.数组名
数组名整个数组的标识符,数组名可以看作一种特殊的变量名,需要遵循变量名的命名规则
3.数组长度
数组长度指出数组中可以包含元素的个数,数组长度通常是一个整型或者常量表达式
4.数组名[下标]
下标可以使用整型常量、变量、表达式
下标的取值范围为[0,数组长度-1]
一维数组的初始化
1.数组声明的两种类型
若数组声明为静态储存类型,则数组所有元素被初始化为0
static int a[100];
若数组声明为自动储存类型,则数组所有元素为垃圾值
int a[100];
2.初始化格式
类型名 数组名[数组长度]={初值表}
int a[100]={0};//全部元素都为0
如果初值表中的数据个数比数组长度少,那么数组中剩余元素赋值为0
int b[100]={1,2,3};//b[0]为1,b[1]为2,b[2]为,其余元素为0
若对全部元素赋值,则省略数组长度
int c[2]={0,1,2};
//可以改为
int c[2]={0,1,2};
当数组作为函数参数时
因为数组名即代表数组首元素的地址,因此使用数组名作形参即可传递
若定义函数时声明了数组的长度,则表示只能把固定长度的数组传入
若定义函数时未声明数组的长度,则表示可以把任意长度的数组传入
int a[100];
void convert(int a[]);//函数的定义(未表明数组长度)
convert(a);//调用数组a
int a[100];
void convert(int a[100]);//函数的定义(表明数组长度)
convert(a);//调用数组a
二分法查找元素
若在较大的数组中快速的查找元素使用for循环语句逐个查找是非常耗时的
那么使用二分法查找则可以大大节约查找时间,避免时间超限
二分法原理
比如数组a[n]中查找元素x,并返回其下角标
则可以将数组分为两大部分
定义low为最小下角标,high为最大下角标
mid=(low+high)/2;
判断x是否等于a[n/2]
如果x==a[n/2],则结束查找,返回mid值
如果x>a[n/2],
low=mid+1;
mid=(low+high)/2;
继续查找
如果x<a[n/2],
high=mid-1;
mid=(high+low)/2;
继续查找
可以编一个递归函数来实现二分查找
int search(int a[],int x,int low,int high)
{if(low>high){return -1;//数据错误 } else//若数据正确 {int mid=(low+high)/2;{if(a[mid]==x)//查找到x {return mid;} else if(a[mid]>x)//在mid左边查找 {return search(a,x,low,mid-1);}else if(a[mid]<x)//在mid右边查找 {return search(a,x,mid+1,high);}}}
}
二维数组
1.定义
类型名 数组名[行数][列数]
int a[10][10];
//创建一个10*10的矩阵
从a[0][0]-------------a[0][9]| || || || || || || || |a[9][0]--------------a[9][9]
在二维数组中
行数下标的取值范围为[0,行数-1]
列数下标的取值范围为[0,列数-1]
2.二位数组的初始化
分行初始化
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
输出数组
1 2 3
4 5 6
7 8 9
也可以部分元素赋值,不赋值的元素为0
int a[3][3]={{1,2},{4},{7,8,9}};
输出结果
1 2 0
4 0 0
7 8 9
顺序初始化
int a[3][3]={1,2,3,4,5,6,7,8,9};
输出结果
1 2 3
4 5 6
7 8 9
也可以省略行数进行初始化,编译器会根据元素的个数自动分配元素
int a[][3]={1,2,3,4,5,6,7,8,9};
输出结果同上
数组做函数参数
1.一维数组做函数参数,数组长度可以省略
2.二维数组做函数参数,只有第一维数组长度可省略,第二位不可省略
字符数组
1.定义
char 数组名[数组长度]
char a[100];定义一个长度为101的字符型数组
2.初始化
逐个
char a[5]={'H','e','l','l','o'};
整体
char a[]={"Hello"};
在进行初始化时,系统会自动加上'\0'
因此在输入字符串char a[]={"Hello"};后,其实际长度为6
3.输入与输出
可以利用for循环进行逐个输入,利用%c
char a[100];
for(int i=0;a[i]!='\0';i++)
{scanf("%c",&a[i]);
}
也可以用%s进行整个字符串的输入
char a[100];
scanf("%s",a);//注意此时后面所跟为数组名,不必再加&
在使用%s进行输入时,遇到'\0' 会自动截断,只能用于输入连续的字符串
那么输入不连续的字符串该怎么办呢?使用gets
char a[100];
gets(a);
输出呢?对应的有
for循环逐个输出
for(int i=0;a[i]!='\0';i++)
{printf("%c",a[i]);
}
%s直接输出字符串
printf("%s",a);
直接输出字符串
puts(a);
相关文章:
【c语言】一维数组与二维数组
数组 数组名代表的是数组在内存中的起始位置,即首元素的地址,而下表表示的则是该元素相对数组起始位置的偏移量 一维数组 1.定义 类型名 数组名[数组长度] int a[100]; //整型数组长度为101,数组名为a char b[100];//字符型数组长度为101&…...
Milvus×EasyAi:如何用java从零搭建人脸识别应用
如何从零搭建一个人脸识别应用?不妨试试原生Java人工智能算法:EasyAi Milvus 的组合拳。 本文将使用到的软件和工具包括: EasyAi:人脸特征向量提取Milvus:向量数据库用于高效存储和检索数据。 01. EasyAi:…...
Dockerfile 实战指南:解锁高效容器化开发
一、Dockerfile 简介 Dockerfile 是构建镜像的文本文件,通过一系列指令描述镜像构建过程,构建操作由 Docker daemon 进行,它会先验证语法,然后逐一运行指令,每次生成一个新的镜像层,直到构建出最终的镜像。…...
【每日学点鸿蒙知识】混淆配置、主线程处理大量数据、客户端拖拽效果、三方网站加载样式、List警告问题
1、HarmonyOS API升级之后缺少混淆配置文件? 可参考以下文档: 混淆配置:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-build-obfuscation-V5 混淆规则:https://gitee.com/openharmony/arkcompiler_ets…...
ChatGPT-4助力学术论文提升文章逻辑、优化句式与扩充内容等应用技巧解析。附提示词案例
目录 1.扩写(expansion/paraphrasing) 2.优化(optimization) 3.缩写(optimization) 4.提取关键词(keyword extraction) 5.短语转换(phrase transformationÿ…...
Android TextView 添加图标并实现换行
图文混排。 binding.apply {val spannable = SpannableString(" " + "Kotlin 是 Android 官方推荐的编程语言。")val drawable: Drawable = ContextCompat.getDrawable(this@DemoMainXmlActivity,R.mipmap.ic_title_d)!!drawable.setBounds(0, 0, drawabl…...
matplotlib pyton 如何画柱状图,利用kimi,直接把图拉倒上面,让他生成
要绘制类似于您提供的图像的柱状图,您可以使用Python中的Matplotlib库,这是一个非常流行的绘图库。以下是一个简单的示例代码,展示如何使用Matplotlib来创建一个类似的柱状图: python import matplotlib.pyplot as plt import nu…...
如何保证mysql数据库到ES的数据一致性
1.同步双写方案 在代码中对数据库和ES进行双写操作,确保先更新数据后更新ES。 优点: 数据一致性:双写策略可以保证在MySql和Elasticsearch之间数据的强一致性,因为每次数据库的变更都会在Elasticsearch同步反映。实时性…...
安装MongoDB,环境配置
官网下载地址:MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…...
家用无线路由器的 2.4GHz 和 5GHz
家中的无线路由器 WiFi 名称有两个,一个后面带有 “5G” 的标记,这让人产生疑问:“连接带‘5G’的 WiFi 是不是速度更快?” 实际上,这里的 “5G” 并不是移动通信中的 5G 网络,而是指路由器的工作频率为 5G…...
我的tensorboard
1.Tensorboard 2.Tensorboard的使用 导入tensorboard并创建SummaryWriter 添加标量数据 添加图片数据 直方图 模型可视化 3.代码使用 模型可视化 # 记录模型结构 dummy_input torch.randn(1, 3, 224, 224).to(device) # 根据你的模型输入尺寸调整 writer.add_graph(model…...
Quartz 相关线程
我们在前面文章中说到过Quartz涉及到的线程,但是散落在几篇文章中,不好找。而Quartz涉及到的线程对于理解Quartz也比较重要,所以今天专门提取出来单独说一下。 Quartz中的主要线程: 任务调度线程QuartzSchedulerThread 任务执…...
【QED】爱丽丝与混沌的无尽海
文章目录 题目题目描述输入输出格式数据范围测试样例 思路代码复杂度分析时间复杂度空间复杂度 题目 题目链接🔗 题目描述 如图所示,爱丽丝在一个3x3的迷宫之中,每个方格中标有 1 − 9 1-9 1−9各不相同的数字,爱丽丝可以从一格…...
IO模型学习
背景知识 Socket 套接字。 客户端和服务端通信时,客户端需要数据出口,服务端需要数据入口,这两个出入口就是Socket。数据接收方新建socket后需要绑定ip和端口号,这样客户端才能链接上socket。连接的过程就是 三次握手 FD file …...
Doxygen 使用指南
Doxygen 是一个文档生成工具,可以从源代码中的注释生成高质量的文档,支持多种编程语言(如 C/C、Python、Java 等)。以下是 Doxygen 的基本使用方法。 1. 安装 Doxygen 1.1 下载 Doxygen 访问 Doxygen 官网。根据操作系统选择合适…...
设计模式与游戏完美开发(2)
更多内容可以浏览本人博客:https://azureblog.cn/ 😊 该文章主主题内容均来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第四章 游戏主要类——外观模式(Facade) 一、游戏子功能的整合 一个游戏程序常常由内部数个不…...
Coroutine 基础三 —— 结构化并发(二)
1、协程的结构化异常管理 如果一个协程抛异常,它所在的整个协程树上的其他协程(向上是父协程到根协程,向下是所有后代协程)都会被取消。因此协程发生异常的后果是十分严重的。 先讲原理,再说解决方案。 协程异常的处…...
GXUOJ-算法-第一次作业
1.整数划分 问题描述 GXUOJ | 整数划分 题解 #include<bits/stdc.h> using namespace std; const int N1010,mod1e97;int n; int f[N];int main(){cin>>n;f[0]1;for(int i1;i<n;i){for(int ji;j<n;j){f[j](f[j]f[j-i])%mod;}}cout<<f[n]; } 2.汉诺塔…...
Springboot项目Druid运行时动态连接多数据源的功能
项目支持多数据库连接是个很常见的需求,这不仅是要在编译前连已经知道的多个数据库,有时还要在程序运行时连后期增加的多个数据源来获得数据。 一、编译前注册数据库连接 1.引入依赖包 <!-- springboot 3.x --><dependency><groupId&g…...
字符串匹配——KMP算法
前言 刷到字符串匹配的力扣题了【28. 实现 strStr() 】,这题简单吧用库函数做就可以,说难吧,就得引出大名鼎鼎的线性匹配算法——KMP。 目录 KMP 算法背景与原理算法优势 前缀表1. 构建Next数组2. 搜索匹配 KMP 算法背景与原理 KMP&#x…...
ngx_sort
1 定义 ngx_sort 函数 定义在 ./nginx-1.24.0/src/core/ngx_string.cvoid ngx_sort(void *base, size_t n, size_t size,ngx_int_t (*cmp)(const void *, const void *)) {u_char *p1, *p2, *p;p ngx_alloc(size, ngx_cycle->log);if (p NULL) {return;}for (p1 (u_char…...
物联网设备上高德地图离线地图加载慢?5秒内快速加载的终极解决方案
物联网设备高德地图离线加载优化实战:从2分钟到5秒的进阶方案 在智能电表、车载终端、工业传感器等物联网设备中,离线地图的快速加载直接影响着用户体验与系统响应效率。我们曾遇到一个典型场景:某共享单车智能锁通过4G模块上报位置时&#x…...
基于STM32实现OTABootLoader 第五章——OTA功能开发【下】
三、开发客户端ESP82661、自定义AT指令集(1)实际上,Wi-Fi模块通常配有官方的AT指令集,只要刷写官方提供的固件即可(但可能功能不全),不过,AT指令本身就是基于串口通信实现的一种指令…...
光学工程师进阶指南:从入门到精通的实战路径
1. 光学工程师的职业发展路径 光学工程师的成长就像搭积木,需要从最基础的模块开始,一层层往上搭建。我刚入行时也走过不少弯路,后来才明白这个职业的发展是有明确路径的。一般来说,我们可以把成长过程分为三个阶段:初…...
Kazumi插件扩展完全指南:从安装到高级配置
Kazumi插件扩展完全指南:从安装到高级配置 【免费下载链接】Kazumi 基于自定义规则的番剧采集APP,支持流媒体在线观看,支持弹幕,支持实时超分辨率。 项目地址: https://gitcode.com/gh_mirrors/ka/Kazumi Kazumi作为一款基…...
MaaYuan自动化辅助工具高效配置避坑指南:零基础入门三步完成环境部署
MaaYuan自动化辅助工具高效配置避坑指南:零基础入门三步完成环境部署 【免费下载链接】MaaYuan 代号鸢 / 如鸢 一键长草小助手 项目地址: https://gitcode.com/gh_mirrors/ma/MaaYuan MaaYuan作为一款基于MaaFramework的自动化辅助工具,专为游戏日…...
AI辅助开发:让Kimi和DeepSeek帮你设计与优化用户注册交互逻辑
AI辅助开发:让Kimi和DeepSeek帮你设计与优化用户注册交互逻辑 最近在开发一个需要用户注册功能的项目时,我发现设计一个健壮且用户友好的注册流程其实有很多细节需要考虑。幸运的是,通过InsCode(快马)平台集成的AI助手,整个开发过…...
如何通过智能字体处理实现前端优化:Fontmin实用指南
如何通过智能字体处理实现前端优化:Fontmin实用指南 【免费下载链接】fontmin Minify font seamlessly 项目地址: https://gitcode.com/gh_mirrors/fo/fontmin 问题引入:未优化字体的性能陷阱 在现代前端开发中,字体文件往往成为性能…...
MAA助手跨平台部署与自动化实践指南
MAA助手跨平台部署与自动化实践指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.com/GitHub_Trending/ma/…...
Elsevier Tracker:解放科研作者的审稿状态智能追踪方案
Elsevier Tracker:解放科研作者的审稿状态智能追踪方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 你是否曾经历过这样的科研投稿循环:每天早晨第一件事就是登录Elsevier系统,…...
