【c语言】一维数组与二维数组

news2024/12/27 11:55:53

数组

数组名代表的是数组在内存中的起始位置,即首元素的地址,而下表表示的则是该元素相对数组起始位置的偏移量

一维数组

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);

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

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

相关文章

C# OpenCvSharp DNN 卡证检测矫正

目录 说明 效果 模型 项目 代码 下载 参考 说明 源码地址&#xff1a;https://modelscope.cn/models/iic/cv_resnet_carddetection_scrfd34gkps 在实人认证、文档电子化等场景中需要自动化提取卡证的信息&#xff0c;以便进一步做录入处理。这类场景通常存在两类问题&…

前端入门之VUE--ajax、vuex、router,最后的前端总结

前言 VUE是前端用的最多的框架&#xff1b;这篇文章是本人大一上学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。本人不是学前端的&#xff0c;这个是大一的时候上学的和做的笔记&#xff0c;那个时候学的也蒙&#xff0c;故这里对前端做一个总…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量&#xff0c;你可以使用以下 SQL 查询语句&#xff1a; SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释&#xff1a; …

RocketMQ的集群架构是怎样的?

大家好&#xff0c;我是锋哥。今天分享关于【RocketMQ的集群架构是怎样的?】面试题。希望对大家有帮助&#xff1b; RocketMQ的集群架构是怎样的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RocketMQ 是阿里巴巴开源的分布式消息中间件&#xff0c;广泛用于处…

使用DynadotAPI查看域名清仓中的过期域名列表

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…

uni-app 中使用微信小程序第三方 SDK 及资源汇总

&#x1f380;&#x1f380;&#x1f380;uni-app 跨端开发系列 &#x1f380;&#x1f380;&#x1f380; 一、uni-app 组成和跨端原理 二、uni-app 各端差异注意事项 三、uni-app 离线本地存储方案 四、uni-app UI库、框架、组件选型指南 五、uni-app 蓝牙开发 六、uni-app …

探索 Pencils Swap 的叙事:为 DeFi 的再次爆发蓄力

Pencils Protocol 最初是 Scroll 生态上一个综合性的 DeFi 平台&#xff0c;以 Farming、Vaults 以及 Auction 等系列产品板块为基础&#xff0c;其不仅成为了 Scroll 上重要的流动性、收益枢纽&#xff0c;同时也是重要的 LaunchPad 市场以及流量池&#xff0c;为 Scroll 生态…

基于STM32单片机矿井矿工作业安全监测设计

基于STM32单片机矿井矿工作业安全监测设计 目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块技术详情介绍总结 1. 项目开发背景 随着矿井矿工作业环境的复杂性和危险性逐渐增加&#xff0c;矿井作业安全问题引起了社会各界的广泛关注。传统的…

数学建模与数学建模竞赛

什么是数学建模&#xff1f; 数学建模是通过数学的方法和工具&#xff0c;对现实世界的一个特定对象&#xff0c;依据其内在规律&#xff0c;做出一些必要的简化假设&#xff0c;从而建立一个数学结构的过程。数学建模的历史和数学的起源几乎同步开始&#xff0c;2000多年前&a…

stm32四联七段数码管,LED8*8点阵

一、七段数码管的整体代码和仿真 1&#xff09;代码 seg74.c #include "stm32f10x.h" // Device headervoid seg74_init(void) {GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(…

SpringCloudAlibaba技术栈-Dubbo

1、什么是Dubbo? 简单来说&#xff0c;dubbo就像是个看不见的手&#xff0c;负责专门从注册中心nacos调用注册到nacos上面的服务的&#xff0c;因为在微服务环境下不同的功能模块可能在不同的服务器上。dubbo调用服务就像是在调用本地的服务一样。 分布式调用与高并发处理 Du…

“AI智能安全管理系统:让安全无处不在

嘿&#xff0c;大家好&#xff01;今天咱们来聊聊一个超级酷炫又至关重要的东西——AI智能安全管理系统。想象一下&#xff0c;如果有一个系统可以像私人保镖一样24小时不间断地保护你和你的财产&#xff0c;是不是感觉特别安心&#xff1f;这就是AI智能安全管理系统带给我们的…

【hackmyvm】soul靶机wp

tags: HMVrbash绕过图片隐写PHP配置解析 1. 基本信息^toc 文章目录 1. 基本信息^toc2. 信息收集3. 图片解密3.1. 爆破用户名3.2. 绕过rbash3.3. 提权检测 4. 获取webshell4.1. 修改php配置 5. www-data提权gabriel6. gabriel提取到Peter7. Peter提权root 靶机链接 https://ha…

PaddleOCR训练自己的私有数据集(包括标注、制作数据集、训练及应用)

目录 一、制作数据集 1、进入到PaddleOCR-releas-2.7目录 2、首先启用PPOCRLabel&#xff1a;在终端激活环境 3、接着点击左下角的自动标注 4、确认完成后点击左上角 5、新建gen_ocr_train_val_test.py 二、训练文字检测模型 1、模型下载 2.、配置ppocr检测模型文件 …

网络层协议--ip协议

目录 引言 IP协议 协议头格式 16位标识与3位标志与13位片偏移讲解 网段划分(重要) DHCP技术 CIDR技术 特殊的IP地址 广播主机 IP地址的数量限制 私有IP地址和公网IP地址 路由&#xff1a;在复杂的网络结构中, 找出一条通往终点的路线 简单认识路由器 路由表生成算…

区块链期末复习3.2:比特币脚本

目录 一、输入输出脚本的执行 二、简单脚本实例及压栈过程 1.P2PK&#xff08;pay to public key hash&#xff09; 2、P2PH&#xff08;pay to public key hash&#xff09; 3.多重签名 4.比特币脚本的应用&#xff1a; 三、其他常见指令 1.OP_EQUAL与OP&#xff3f;EQ…

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端&#xff0c;进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…

CUDA各种内存和使用方法

文章目录 1、全局内存2、局部内存3、共享内存3.1 静态共享内存3.2 动态共享内存 4、纹理内存5、常量内存6、寄存器内存7、用CUDA运行时API函数查询设备CUDA 错误检测 1、全局内存 特点&#xff1a;容量最大&#xff0c;访问延时最大&#xff0c;所有线程都可以访问。 线性内存…

青少年科普教学系统平台的设计与实现springboot

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安…

Vue2:v-for创建echart图表时不能使用动态ref,要使用动态id

项目中需要创建一组图表+表格的组合,一共15组,为了便于维护,希望使用v-for来创建,而不是写出15组<div>,但是动态指定echart的ref时,频繁遭遇init失败,提示“TypeError: this.dom.getContext is not a function”。过程记录如下。 实现效果 要实现的效果如下图,…