第八课第一节让你零基础搞懂数组(一维数组)

一、数组解析

1. 顺接基础与引入

在此前的程序中,所使用的变量均为标量类型(即基本类型)的变量。
然而,当一个程序需要存储批量数据时,使用标量类型的变量甚为不便。
此时,可以使用一种组合类型的数据数组。
总结一下就是因为定义一堆变量太麻烦人了,还不便于管理,就像公布成绩的时候一个同学一张成绩单,老师折腾也费劲,所以想办法整合一下,同类型的整理在一起,全班人的成绩整理成一张表格,也就是一个集合体,所以在程序中也得想办法把同类型的变量整合在一起,不过这个集合体不叫表格,叫数组

2. 数组简介

所谓数组,是一组有序变量的集合,而且这些变量具有相同的数据类型
(你把A同学学号跟B同学身份证号混在一个统计学号的表格里不行吧,人家就是int型的,你非得给人家塞进去个float型的也说不太过去吧)
数组中的变量称为数组元素
别管有没有赋值,一个表格我列了几行就是几行,不管我有没有写东西,所以元素不管有没有赋值,我定义了几个就是几个
在这里插入图片描述
比如这里就是6个元素,虽然我只赋值了三个元素
而且这种定义的时候就赋初值的,数组里其他的未赋值元素都是0。这种赋值方法还是蛮重要的,毕竟有随机值做题的时候可能会出错。
数组元素的个数称为数组长度
数组中最常用的是一维数组

二、一维数组

一维数组中的所有元素可以看作一行。
一维数组的每个元素只需要一个序号(也称为下标)。
一维数组就一行想用别的区分你也没机会啊
在程序中使用数组时,必须先定义后使用。

1.一维数组格式:

类型名,数组名[数组长度];
例如:
int a[10];
定义了一个一维数组a,包含10个int型的数组元素,即a[0]、a[1]、 a[2]、…a[9]。
每个数组元素有一个序号(也称为下标)。
一维数组的元素,不但在名称上是有序的,在内存中的存储也是连续且有序的。
数组元素的有序性特点,使得数组元素适合于采用循环处理。
(以后题目大部分都跟循环有关,毕竟都在一行里面,顺序结构多舒服,排着顺序输入输出多好,难道还一个个手动吗,那也就没数组的必要了)
这就有意思了,a[10]是从a[0]到a[9]数一下,0到9是十个数字对吧,先把数目对起来,不能缺斤少两啊。
然后呢为啥从0开始,这个跟C语言的取地址啊啥的有关,不从0的话计算量会增大,这只是其中之一,我感觉有一篇解释文章挺好的,放在下面了,有兴趣可以去看看
ok,为啥从0开始就解释清楚了,然后数目(或者正规一点:元素个数)也对起来了

链接:
为什么很多编程语言中数组都是从 0 开始编号.
点击上面的蓝字或手动
https://blog.csdn.net/Hanoi_ahoj/article/details/82931630
版权声明:为CSDN博主「ahojcn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

2.一维数组长度

在C89标准中,不允许定义变长数组,即在表示数组长度的表达式中,不能包含变量名。
而在C99标准中,则允许定义变长数组。即数组长度可以是整型变量或整型变量的表达式。
例如:

int n=10;
int a[n];
//在C89标准中是错误的。
//在C99标准中正确合法

在程序中,一般不能将一维数组作为一个整体进行输入、输出和运算。
而只能针对一维数组的元素进行操作。
这个操作方法跟以前一样,本质上他还是个变量,怎么操作变量就怎么操作数组。一把菜刀跟一堆菜刀放在一起还能变成屠龙刀吗?

int a[10];
a[0]=100; 
//a[0]是数组元素。
a[10]=200;
/*是错误的
因为数组a中没有a[10]这个元素
这种错误称为下标越界

在程序中引用数组元素时,数组元素的下标可以用变量表示。
很多数组题目都是这么玩的,就因为数组下标可以用变量表示
对数组元素的操作方法,与同类型变量的操作方法相同。

i=0;
a[i]=100;
//等价于
a[0]= 100;
printf("%d",a[i]);
printf("%d",a[0]);

3.例题:输入10个整数存入一维数组中,再按逆序输出。

编程思路:
首先定义如下数组和变量: int a[10],i;
然后完成该数组元素的输入与输出。

 int a[10],i;
a[10]就是因为10个元素
他要是说100
就a[100]
i就是那个变量了
i就为为了存放下标的
首先用顺序结构完成输入:
i=0;scanf("%d",&a[i]);
//等价于scanf("%d" ,&a[0]);
i=1;scanf("%d",&a[i]);
i=2;scanf("%d",&a[i]);
i=3;scanf("%d",&a[i]);
i=4;scanf("%d",&a[i]);
i=5;scanf("%d",&a[i]);
i=6;scanf("%d",&a[i]);
i=7;scanf("%d",&a[i]);
i=8;scanf("%d",&a[i]);
i=9;scanf("%d",&a[i]);

上面就是不用循环的后果
上述语句组可以归纳为如下的循环:

for(i=0;i<=9;i++)
scanf("%d",&a[i]);

同样逆序输出
然后用顺序结构完成输出:
i=9;printf("%d",a[i]);//等价于printf("%d ",a[9]);
i=8;printf("%d",a[i]);
.....
i=0;printf("%d",a[i]);


上述语句组可以归纳为如下的循环:
for(i=9;i>=0;i--)
printf("%d",a[i]);

完整源程序

#include <stdio.h>
int main()
{
int a[10],i;
printf("请输入10个整数: \n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
printf("逆序输出的结果: \n");
for(i=9;i>=0;i--)
printf("%d",a[i]);
printf("\n");
return 0;
}

效果如下
在这里插入图片描述

4.一维数组初始化

在定义一维数组的同时,给数组元素赋值,称为数组的初始化。

  1. 给所有元素赋初值:
int a[6]={1,3,5,7,9,10};
  1. 可以只给部分元素赋初值。
    例如:
 inta[6]={1,3};

此时,其它元素自动取0。

  1. 初始化时,可以不指定一维数组的长度。
    例如:
inta[]= {1,3,5,8,9};

系统编译时,能根据初值的个数自动确定数组长度。
不过,inta[];这种形式是错误的,因为无法确定数组的长度。

就不想写的很长,那样太长了不想看,所以我就分开写

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值