【C语言】利用数组处理批量数据(一维数组和二维数组)

news2025/2/23 20:01:16

前言:在前面学习的程序中使用的变量都属于基本类型,例如整型、字符型、浮点型数据,这些都是简单的数据类型。对于简单的问题,使用这些简单的数据类型就可以了。但是对于有些需要处理的数据,只用以上简单的数据类型是不够的,难以反映出数据的特点,也难以有效的进行处理。


💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!这里是引用


目录

    • 怎样定义和引用一维数据
      • 怎样定义一维数组
      • 怎样引用一维数组
    • 一维数组的初始化
      • 一维数组程序举例
    • 怎样定义和引用二维数组
      • 怎样定义二维数组
      • 二维数组在内存中存放的顺序
      • 怎样引用二维数组
      • 二维数组的初始化
      • 二维数组程序举例


怎样定义和引用一维数据

  • 一维数组是数组中最简单的,它的元素只需要用数组名加一个下标,就能唯一的地确定。
  • 数组是一组有序数据的集合
  • 数组中的每一个元素都属于同一个数据类型
  • C语言规定用方括号中的数字表示下标,如S[15]表示第15个元素

怎样定义一维数组

要使用数组,必须在程序中先定义数组,即通知计算机:由哪些数据组成数组,数组中有多少元素,属于哪个数据类型。否则计算机不会自动的把一批数据作为数组处理。例如,下面是对数组的定义:

int a[10] ;
它表示定义了一个整型数组, 数组名是a,此数组包含了 10个元素

数组的一般形式为:

类型说明符 数组名[常量表达式]

说明:

  1. 数组名的命名规则和变量名相同,遵循标识符命名规则。
  2. 在定义数组时莫须有指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组的长度。
  3. 常量表达式中可以包括常量和符号常量,如 int a[3 + 5]是合法的的。
  4. “int a[10];”定义了数组后a后,在内存中划出了一片存储空间(下图所示),存放了一个有10个整型元素的数组,可以看到,用一个 “int a[10];”就相当于定义了10个简单的整型变量,显然简单方便。
    在这里插入图片描述

怎样引用一维数组

在定义数组并对其各个元素赋值后,就可以引用数组中的元素。应注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值。
引用数组元素的表示形式为:

数组名[下标]

例题: 对10个数组元素一次赋值为0,1,2,3 … 8,9,要求逆序输出。

int main()
{
	int i = 0;
	int arr[10] = { 0 };
	for (i = 0; i < 10; i++)
	{
		arr[i] = i;//赋值
	}
	for (i = 9; i >= 0; i--)
	{
		printf("%d ", arr[i]);//打印
	}
	printf("\n");
	return 0;
}

运行结果:
在这里插入图片描述


一维数组的初始化

  1. 在定义数组时对全部数组元素赋予初值。例如:
int a[10] = {0,1,2,3,4,5,6,7,8,9);
  1. 也可只给数组中的一部分元素赋值。例如:
int a[10] = {0,1,2,3,4};
//定义a数组有10个元素,但花括号内只提供5个元素的初始值,
//系统自动给后面5个元素的初始值赋值为0
  1. 如果想一个数组中全部元素为0,可以写成:
int a[10] = {0};
  1. 在对全部数组元素赋初始值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:
int a[5] = {1,2,3,4,5};
//或者
int a[] = {1,2,3,4,5}; 

一维数组程序举例

例题1:用数组来处理求Fibonacci(斐波那契数列)问题。这个数列有以下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即该数列为1,1,2,3,5,8,13…,求其前20个数。

int main()
{
	int i = 0;
	int arr[20] = {1,1};//前俩项赋值为1
	for (i = 2; i < 20; i++)
	{
		arr[i] = arr[i - 1] + arr[i - 2];
	}
	for (i = 0; i < 20; i++)
	{
		printf("%d ", arr[i]);
	}
	printf("\n");
	return 0;
}

运行结果:在这里插入图片描述


例题2(冒泡排序):有10个地区的面积,要求对它们按由小到大的顺序排序。

int main()
{
	int area[10] = { 0 };
	int i = 0;
	int j = 0;
	int min = 0;
	printf("请分别输入10个田地的面积\n");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &area[i]);
	}
	for (i = 0; i < 9; i++)//排升序(趟数)
	{
		for (j = 0; j < 9 - i; j++)//两两交换
		{
			if (area[j] > area[j + 1])
			{
				min = area[j + 1];//将较小的放临时变量中
				area[j + 1] = area[j];//将两交换位置
				area[j] = min;//将较小值赋值给较大值
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		printf("%d ", area[i]);
	}
	printf("\n");
	return 0;
}


运行结果:在这里插入图片描述


怎样定义和引用二维数组

前面已经提到,有的问题需要用二维数组来处理。例如3个小分队,每队有6名队友,需要把这些队友的工资用数组保存起来以备查。这就需要用到二维数组(如下图)。如果建立一个数组Pay,它应当是二维的,第一维用来表示第几个分队,第二维用来表示第几个队员。
在这里插入图片描述
二维数组通常称为 矩阵 。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化的理解二维数组的逻辑结构。


怎样定义二维数组

怎样定义二维数组呢? 其基本概念与方法和一维数组相似。如:

float pay[3][6]
以上定义了一个float类型的二维数组,第1维有3个元素,第2维有6个元素。每一维的长度分别用一对方括号扩起来。 二维数组的一般定义形式如下: 类型说明符 数组名[常量表达式][常量表达式]

例如: float a[3][4],b[5][10];


C语言对二维数组采用这样的定义方式,使得二维数组可以被看作一种特殊的一维数组:它的元素又是一个一维数组。例如可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4元素的一维数组,如图所示在这里插入图片描述
我们可以把a[0],a[1], a[2]看成三个一维数组的名字。上面定义的二维数组可以理解为定义了3个一维数组,即相当于:

float a[0][4],a[1][4],a[2][4]
此处把a[0],a[1],a[2]看作一维数组名。C语言的这种处理方法在数组初始化和用指针表示时显得很方便,这在以后的使用中各位会经常体会到

二维数组在内存中存放的顺序

C语言中,二维数组中元素排放的顺序是按行存放的,即在内存中先顺序存放第一行的元素,接着存放第2行的元素。如下图所示:
在这里插入图片描述

怎样引用二维数组

二维数组元素的表示形式为:

数组名[下标][下标]
例如:a[2][3]表示a数组中序号为2的行中序号为3的列元素。下标应是整型表达式,如 a[2 - 1][2 * 2 - 1]形式。 数组元素可以出现在表示中也可以被赋值。

二维数组的初始化

  1. 分行给二维数组赋初始值。 这种赋初始值的方式比较直观,把第一个花括号内的数据给第1行的元素,第2个花括号内的值给第2行的元素。例如:
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  1. 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初始值。例如:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12,};
  1. 可以对部分元素赋初始值,例如:
int a[3][4] = {{1},{5},{9}};

二维数组程序举例

例题:有一个3 * 4的矩阵,要求编写程序求出求字最大的那个元素的值,以及其所在的行号和列号。

int main()
{
	int arr[3][4] = { {1,2,3,4},{5,55,7,8},{9,55,11,12} };
	int i = 0;
	int j = 0;
	int max = 0;//最大值
	int col = 0;//列坐标
	int row = 0;//行坐标
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			if (max  < arr[i][j])//将数组中的每一个元素和它进行比较找出最大的
			{
				max = arr[i][j];
				row = i;
				col = j;
			}
		}
	}
	printf("row = %d col = %d max = %d \n", row,col,max);
	return 0;
}

运行结果:
在这里插入图片描述


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。


🫵🫵🫵 祝各位接下来好运连连 💞

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

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

相关文章

Obsidian插件推荐_231005

起因 十一在家整理 OB 笔记&#xff0c;发现两个超好用的插件&#xff1a;Linter & tag wrangler。 前一阵把 Obsidian 笔记用 Hexo 转换成静态网页发到 github.io 做自己 blog 网站。发现了笔记中的一些问题&#xff0c;比如 tag 过多、重复&#xff0c;markdown 格式不…

菲律宾电商市场潜力巨大,Temu迎来东南亚扩张良机!(测评补单)

从拼多多传出筹备出海扩张的消息以来&#xff0c;业界都认定其迟早要进军东南亚市场。在7月份Temu上线日本站后可以看出Temu这条扩张路线背后的商业逻辑是先占领高购买力国&#xff0c;再向中低购买力国扩张&#xff0c;所以亚洲首站选择了高购买力的日本。果然在完成日韩布局后…

零基础入门初学 Python 需要安装哪些软件?

Python是近年来备受热门的编程语言&#xff0c;其简明易读、开源免费、跨平台等特点&#xff0c;使得Python倍受喜爱&#xff0c;成为初学者及开发者心中的首选。 如果你是第一次接触Python&#xff0c;又不想繁琐地安装各种软件&#xff0c;可以尝试在线运行Python代码&#…

【RCRL充放电时间相关计算】

一. 基础知识 L、C元件称为“惯性元件”&#xff0c;即电感中的电流、电容器两端的电压&#xff0c;都有一定的“电惯性”&#xff0c;不能突然变化。充放电时间&#xff0c;不光与L、C的容量有关&#xff0c;还与充/放电电路中的电阻R有关。RC电路的时间常数&#xff1a;τRC…

【扩散模型】 DDPM和DDIM讲解

扩散模型DDPM和DDIM 扩散模型之DDPM介绍了经典扩散模型DDPM的原理和实现&#xff0c;那么生成一个样本的次数和训练次数需要一致&#xff0c;导致采样过程很缓慢。这篇文章我们将介绍另外一种扩散模型DDIM&#xff08;Denoising Diffusion Implicit Models&#xff09;&#x…

STM32CubeMX学习笔记-DAC接口使用(输出电压)

STM32CubeMX学习笔记-DAC接口使用&#xff08;输出电压&#xff09; 一、DAC简介二、DAC通道选择三、新建工程四、DAC14.1 参数配置4.2 生成代码 五、库函数六、修改main函数 原创链接 1 一、DAC简介 DAC(Digital-to-Analog Converter)&#xff0c;即数字/模拟转换模块&#x…

番外--常用文件目录类命令

------------- task00: 00&#xff1a;常用文件目录类命令1-18.&#xff08;pwd&#xff1b; cd&#xff1b;ls&#xff1b; more&#xff1b;less&#xff1b;head&#xff1b;tail&#xff1b; mkdir&#xff1b;rmdir&#xff1b;cp&#xff1b;mv&#xff1b;rm&#xff1b…

第八章 排序 三、希尔排序

目录 一、算法思想 二、例子 三、代码实现 五、验证 六、空间复杂度 七、时间复杂度 八、稳定性 一、算法思想 先追求表中元素部分有序&#xff0c;在逐渐逼近表中元素全部有序。 二、例子 1、我们要升序排列此表 2、取一个差值作为子表的划分的条件&#xff0c;希尔本…

SSM - Springboot - MyBatis-Plus 全栈体系(十九)

第四章 SpringMVC 二、SpringMVC 接收数据 1. 访问路径设置 RequestMapping 注解的作用就是将请求的 URL 地址和处理请求的方式&#xff08;handler 方法&#xff09;关联起来&#xff0c;建立映射关系。SpringMVC 接收到指定的请求&#xff0c;就会来找到在映射关系中对应的…

CTFHUB - SSRF

目录 SSRF漏洞 攻击对象 攻击形式 产生漏洞的函数 file_get_contents() fsockopen() curl_exec() 提高危害 利用的伪协议 file dict gopher 内网访问 伪协议读取文件 端口扫描 POST请求 总结 上传文件 总结 FastCGI协议 CGI和FastCGI的区别 FastCGI协议 …

盒子阴影和网页布局

盒子阴影 box-shadow: 10px 10px 10px 4px rgba(0,0,0,.3);//最后一个是透明度 传统网页布局的三种方式 标准流 就是按照规定好的默认方式排列 1.块级元素&#xff1a;div、hr、p、h1~h2、ul、ol、dl、form、table 行内元素会按照书顺序&#xff0c;从左到右顺序排列&#…

1.2 数据模型

思维导图&#xff1a; 前言&#xff1a; **1.2.1 什么是模型** - **定义**&#xff1a;模型是对现实世界中某个对象特征的模拟和抽象。例如&#xff0c;一张地图、建筑设计沙盘或精致的航模飞机都可以视为具体的模型。 - **具体模型与现实生活**&#xff1a;具体模型可以很容…

剑指offer——JZ55 二叉树的深度 解题思路与具体代码【C++】

一、题目描述与要求 二叉树的深度_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一棵二叉树&#xff0c;求该树的深度。从根结点到叶结点依次经过的结点&#xff08;含根、叶结点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度&#xff0c;根节点的深度…

【简单了解一下红黑树】

文章目录 红黑树1.简介2.为什么需要红黑树&#xff1f;3.性质4. 红黑树的效率4.1 红黑树效率4.2 红黑树和AVL树的比较 5.AVL树 vs 红黑树5.1 AVL树5.2 红黑树5.3 如何选择 红黑树 1.简介 红黑树是一种自平衡的二叉查找树&#xff0c;是一种高效的查找树。它是由 Rudolf Bayer …

微信公众号开发与本地调试详细教程

在进行微信公众号开发时&#xff0c;本地调试是一个关键的步骤。本文将详细介绍如何进行微信公众号开发并在本地环境中进行调试。我们将以Nginx为例&#xff0c;演示如何配置虚拟主机&#xff0c;使用ngrok进行内网穿透&#xff0c;以及进行网页授权和JS SDK的测试。 1. 准备工…

Compose Canvas基础

Compose Canvas基础 前言Canvas是什么drawxxx()绘制方法drawCircle 画圆不填充颜色设置线条的宽度 drawRect 画矩形drawPoints 画点pointMode drawOval 画椭圆drawLine 画线drawRoundRect 画圆角矩形drawArc 绘制弧形或扇形useCenter drawPath 画自定义图形 总结 前言 阅读本文…

【C++ 学习 ㉕】- 万字详解 unordered_map 和 unordered_set(哈希表的查找和容器的模拟实现)

目录 一、unordered_map 的基本介绍 二、unordered_set 的基本介绍 三、相关练习 3.1 - 在长度 2N 的数组中找出重复 N 次的元素 3.2 - 存在重复元素 3.3 - 两句话中的不常见单词 四、哈希表的查找 4.1 - 哈希表的基本概念 4.2 - 哈希函数的构造方法 4.3 - 处理冲突的…

用go获取IPv4地址,WLAN的IPv4地址,本机公网IP地址详解

文章目录 获取IPv4地址获取WLAN的IPv4地址获取本机公网IP地址 获取IPv4地址 下面的代码会打印出本机所有的IPv4地址。这个方法可能会返回多个IP地址&#xff0c;因为一台机器可能有多个网络接口&#xff0c;每个接口可能有一个或多个IP地址。 package mainimport ("fmt&…

阿里云服务器地域和可用区查询表_地域可用区大全

阿里云服务器地域和可用区有哪些&#xff1f;阿里云服务器地域节点遍布全球29个地域、88个可用区&#xff0c;包括中国大陆、中国香港、日本、美国、新加坡、孟买、泰国、首尔、迪拜等地域&#xff0c;同一个地域下有多个可用区可以选择&#xff0c;阿里云服务器网分享2023新版…

批量剪辑技巧:视频去色处理,让色彩焕然一新!

你是否曾经遇到过这样的问题&#xff1a;大量视频需要处理&#xff0c;但色彩总是达不到你的要求&#xff1f;现在&#xff0c;我们将向你展示如何通过批量剪辑技巧&#xff0c;轻松去除视频原色&#xff0c;让色彩焕然一新&#xff01; 首先&#xff0c;我们要进入【视频剪辑…