C语言基础应用(六)数组

news2024/10/6 4:03:39

引言

现程序要求,录入班里60名同学的所有成绩,我们应该怎么录入呢?按照我们之前所学习的难道要声明60个变量来录入成绩嘛?
就像:

int main() {
    int a1,a2,a3,...,a60;
    scanf("%d%d%d...%d",&a1,&a2,&a3,...,&a60);
    printf("Hello, World!\n");
    return 0;
}

注:上述代码中出现的"…"仅代表a3到a60之间的变量,在实际代码中并不能这样使用。
这样进行录入数据会使得变量冗余繁多。接下来我们引入数组,利用数组录入同类数据。

一、一维数组

1.1 数组的一般形式

数组是一组有序数据的集合。并且数组的每一个元素都属于同一个数据类型。
一维数组的一般形式为:
类型说明符 数组名[常量表达式];
如:

int a[60];

1.2 声明数组时需要注意的规则

声明数组时要遵守以下规则:
1、数组名的命名规则和变量名相同,遵循标识符命名规则
2、在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。
就如:

int a[60];

就表示数组a有60个元素,需要注意的是数组下标是从0开始的。即数组a的元素是从a[0],a[1],a[2],…,a[59]。而不存在a[60]如果我们引用了a[60]就会出现数组越界的错误。
3、常量表达式中可以包括常量和符号常量,但是不能包含变量。
如:

int n;
scanf("%d",&n);
int a[n];

上述代码打算动态录入数组a的数组长度,是不可取的。

1.3 一维数组的引用

引用数组元素的表示形式为
数组名[下标]
如:

int a[10];
int m;
m = a[2];

需要注意的是a[10]和a[2]在这里的区别
a[10]前面是类型说明符int,说明是定义
a[2]前面是赋值符号,说明这里是对数组元素的引用

1.4 一维数组的初始化

我们可以在定义数组时直接进行初始化
如:

int a[10] = {0,1,2,3,4,5,6,7,8,9};

我们可以使用循环遍历数组

int main() {
    int a[10] = {0,1,2,3,4,5,6,7,8,9};
    for(int i = 0;i < 10;i++) {
        printf("%d\n",a[i]);
    }
    return 0;
}

运行结果如下:
在这里插入图片描述
我们也可以给一部分元素赋值
如:

int main() {
    int a[10] ={1,2,3,4,5};
    for(int i = 0;i < 10;i++) {
        printf("%d\n",a[i]);
    }
    return 0;
}

运行结果:
在这里插入图片描述
我们可以看到未赋值的元素均为0。

二、二维数组

二维数组是一种矩阵结构,由多个一维数组通过行和列组合而成,常用于存储和处理相关数据。

2.1 二维数组的定义

二维数组的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
例如:

int a[3][4];

二维数组可以看成一个特殊的一维数组。
如果把a[0]看成一个一维数组,它的元素:a[0],a[1],a[2]
每个元素又是包含了四个元素的一维数组
a[0] ---------a[0][0] , a[0][1] , a[0][2] , a[0][3]
a[1] ---------a[1][0] , a[1][1] , a[1][2] , a[1][3]
a[2] ---------a[2][0] , a[2][1] , a[2][2] , a[2][3]
可以用简单的三行四列矩阵来理解
需要注意的是:我们使用矩阵形式(如上述的数组a三行四列矩阵)表示二维数组是逻辑上的概念。而在内存中,各元素是连续存放的,不是二维的,是线性的。

2.2 二维数组的引用

二维数组元素的表达形式为:
数组名[下标][下标]
下标值的范围应该一一对应
如上面所提到的a[3][4]
数组a的行下标(即第一个下标)对应的范围就是0~2
数组a的列下标(即第二个下标)对应的范围就是0~3

2.3 二维数组的初始化

我们可以根据一维数组的形式对二维数组进行初始化
如:

int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

我们同样可以使用循环讲二维数组的元素输出

int main() {
    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    for(int i = 0;i < 3;i++) {
        for(int j = 0;j < 4;j++) {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行结果:
在这里插入图片描述
我们也可以把所有的元素都放在一个花括号里面
如:

int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

这样更能体现出二维数组线性存储。

三、字符数组

C语言中没有字符串类型,也没有字符串变量(像在Java中的String类型),在C语言中字符串是存放在字符型数组中的。
字符数组的定义与一维数组的定义类似
例如:

char c[10];

需要注意的是:
C语言的字符数组在遇到’\0’(即空字符)时,表示字符串结束,把他前面的字符组成一个字符串。
例如:录入一个字符串,并输出:

int main() {
    char c[5];
    scanf("%s",c);
    printf(c);
    return 0;
}

运行结果:
当输入的字符串没有’\0’时
在这里插入图片描述
当输入的字符串有’\0’时
在这里插入图片描述

四、数组越界问题

通过上面对数组的介绍,我们了解到,我们是通过数组的下标来获取数组元素,但是当我们使用了该数组没有的下标会发生什么呢?
如:

int main() {
    int a[5] = {1,2,3,4,5};
    printf("The Value Of a[6] Is %d", a[6]);
    return 0;
}

运行结果:
在这里插入图片描述
在上述例子中,我们声明了一个包含五个整数元素的整型数组a,并将前五个位置分别赋值为1, 2, 3, 4, 5。然后,我们试图打印第六个位置a[6],但实际上数组只有五个元素,因此获取的值未定义(由于内存的内容随机)并且程序可能会抛出一个异常或者输出错误信息,并以非正常方式退出。
C语言数组越界指尝试访问数组中不存在的元素或超出数组的索引范围。这通常会导致程序的不稳定性和未定义行为,包括崩溃、内存损坏、数据损坏等问题。

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

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

相关文章

anaconda使用教程

一.创建conda虚拟环境 conda create -n AI python3.8 conda create -n #代表创建conda虚拟环境 AI #创建的虚拟环境的名称 python3.8 #代表指定的Python版本 二.查看已创建的conda虚拟环境 conda env list三.激活conda虚拟环境 conda activate AI #AI 是co…

手把手教你爬取网站信息

如题&#xff0c;理解这一部分需要一定的Python基础&#xff0c;有些代码我不做详细解释了&#xff0c;但是用这个方法是确实可以爬到的。 此次用以下这个页面&#xff08;可以用md5软件解密&#xff09; 1476409DEDD7A55FE86915BC370A3ECD 爬取电影的详情数据 1. 在抓包⼯具…

Linux常见指令 (2)

Linux常见指令 ⑵ 补充man描述:用法:例子 echo描述:用法:例子 echo 字符串例子 echo 字符串 > 文件例子 追加重定向(>>)例子 输出重定向(>)来创建文件 && (>)来清空文件 cat描述:用法:例子 cat && cat 文件补充:例子 cat 文件 && cat &…

深入理解SeaTunnel:易用、高性能、支持实时流式和离线批处理的海量数据集成平台

深入理解SeaTunnel&#xff1a;易用、高性能、支持实时流式和离线批处理的海量数据集成平台 一、认识SeaTunnel二、SeaTunnel 系统架构、工作流程与特性三、SeaTunnel工作架构四、部署SeaTunnel1.安装Java2.下载SeaTunnel3.安装连接器 五、快速启动作业1.添加作业配置文件以定义…

ChatGPT火了,将给网络安全行业带来什么影响?

ChatGPT火了&#xff0c;将给网络安全行业带来什么影响&#xff1f; 一、简介 作为全新的人工智能&#xff08;AI&#xff09;聊天机器人&#xff0c;ChatGPT被认为正在“掀起新一轮AI革命”。在股市上甚至出现了“ChatGPT概念股”的当下&#xff0c;ChatGPT究竟对于网络安全…

Mysql 苞米豆 多数据源 读写分离(小项目可用)

目录 0 课程视频 1 配置 1.1 加依赖 1.2 yml 配置文件 -> druid配置后报错 搞不定 2 代码 2.1 实体类 2.2 mapper -> 调用操作数据库方法 操作数据库 2.3 service -> 指定数据源 -> 用Mapper 接口 -> 操作数据库 2.4 controller -> 用户使用接口 -&…

当~python批量获取某电商:商品数据并作可视化

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: 首先我们先来安装一下写代码的软件&#xff08;对没安装的小白说&#xff09; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 …

利用Python如何实现数据驱动的接口自动化测试

目录 前言 1、需求 2、方案 3、实现 总结 前言 大家在接口测试的过程中&#xff0c;很多时候会用到对CSV的读取操作&#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了&#xff0c;来一起看看详细的介绍吧。 1、需求 某API&#xff0c;GET方法&#xff…

HbuilderX打包AndroidAPP使用教程

HBuilder是DCloud&#xff08;数字天堂&#xff09;推出的一款支持HTML5的Web开发IDE。HBuilder的编写用到了Java、C、Web和Ruby。HBuilder本身主体是由Java编写。它基于Eclipse&#xff0c;所以顺其自然地兼容了Eclipse的插件。 HbuildX打包android的apk安装包时需要新建项目 …

Insix:面向真实的生成数据增强,用于Nuclei实例分割

文章目录 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segmentation摘要本文方法数据增强方法具有形态学约束的前景增强提高鲁棒性的背景扰动 实验结果 InsMix: Towards Realistic Generative Data Augmentation for Nuclei Instance Segment…

Go语言开发小技巧易错点100例(七)

往期回顾&#xff1a; Go语言开发小技巧&易错点100例&#xff08;一&#xff09;Go语言开发小技巧&易错点100例&#xff08;二&#xff09;Go语言开发小技巧&易错点100例&#xff08;三&#xff09;Go语言开发小技巧&易错点100例&#xff08;四&#xff09;Go…

云原生Istio基本介绍

目录 1 什么是Istio2 Istio特征2.1 连接2.2 安全2.3 策略2.4 观察 3 Istio与服务治理3.1服务治理的三种形态 4 Istio与Kubernetes4.1 Kubernetes介绍4.2 Istio是Kubernetes的好帮手4.3 Kubernetes是Istio的好基座 5 Istio与服务网格5.1 时代选择服务网格5.2 服务网格选择Istio …

【Python入门】Pycharm的使用指南

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于Python零基础入门系列&#xff0c;本专栏主要内容为Python基础语法、判断、循环语句、函…

五、C++内存管理机制 —— 分配器allocator(侯捷)

侯捷 C八部曲笔记汇总 - - - 持续更新 ! ! ! 一、C 面向对象高级开发 1、C面向对象高级编程(上) 2、C面向对象高级编程(下) 二、STL 标准库和泛型编程 1、分配器、序列式容器 2、关联式容器 3、迭代器、 算法、仿函数 4、适配器、补充 三、C 设计模式 四、C 新标准 五、C 内存管…

剑指 Offer 12. 矩阵中的路径 / LeetCode 79. 单词搜索(深度优先搜索)

题目&#xff1a; 链接&#xff1a;剑指 Offer 12. 矩阵中的路径&#xff1b;LeetCode 79. 单词搜索 难度&#xff1a;中等 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 fals…

计算机组成原理笔记---整理自用

第二章 - 运算器 2.1.3 无符号整数 概述 机器字长限制了一次能处理数据位数的上限 无符号减法⭐️ 总结 2.1.4 带符号整数 原码 真值0有两种形式 0和-0n 1位机器字长原码的表示范围缺点&#xff1a;无法进行有符号加法运算 缺点 数值转换⭐️ 补码运算 加减法 – 符…

2023 年 五一杯 D 题大奖预定第一问求解过程与结果

文章目录 第一题问题分析PageRank 算法&#xff08;可跳过&#xff09;PageRank 算法修正权重系数 结果各城市链出与链入链出 权重链入 权重 PageRank 算法结果代码 第一题 问题分析 从收货量、发货量、快递数量增长/减少趋势、相关性等多角度考虑&#xff0c;建立数学模型&…

[MAUI]模仿iOS多任务切换卡片滑动的交互实现

文章目录 原理创建布局创建分布函数创建动效创建绑定数据细节调整首张卡片的处理为卡片添加裁剪跳转到最后一张卡片 项目地址 看了上一篇博文的评论&#xff0c;大家对MAUI还是比较感兴趣的&#xff0c;非常感谢大家的关注&#xff0c;这个专栏我争取周更&#x1f609;。 App之…

git把我本地文件传到我的指定的仓库

在使用Git将本地文件推送到指定仓库之前&#xff0c;请确保已经安装了Git并进行了基本配置。接下来&#xff0c;遵循以下步骤将本地文件推送到远程仓库&#xff1a; 兄弟先赏析悦目一下&#xff0c;摸个鱼 首先&#xff0c;在本地文件夹中打开命令行界面&#xff08;在Windows上…

关于I帧/IDR、B帧、P帧、SPS、PPS

在h264编解码中&#xff0c;常常有I帧/IDR/B帧/P帧/IDR/NALU/GOP/&#xff0c;但往往没有关注细节。或者我们本身在实际应用中与使用过很多次&#xff0c;但对相关的技术名词不清楚。 在H264协议里定义了三种帧&#xff0c;完整编码的帧叫I帧&#xff0c;参考之前的I帧生成的只…