本笔记内容已上传到个人博客网站,建议去个人博客网站观看。
数组初步 | 洛希的智慧之殿堂 (luoxi.work)
数组初步
1.数组的定义
首先我们要了解应该如何去定义一个数组,我们可以通过以下这个形式来进行定义。
类型 数组名 [元素个数]
int a[6];//整形一个占4个字节
char b[24];//字符型一个占1个字节
double c[3];//浮点型一个占8个字节
注:数组不能动态定义!
比如以下这个错误的代码
#include <stdio.h>
int main ()
{
int a ;
printf("请输入字符个数:");
scanf("%d",&n);
int a[n];
return 0 ;
}
对于这串代码就是一个致命的错误,数组是不能进行动态定义的!!!
2.数组元素的访问
当我们定义了一个数组之后,我们肯定是要对数组的元素进行访问的。
那么我们应该如何才能访问数组的元素呢?
我们可以通过以下的形式来进行访问数组里面的元素。
数组名[下标]
a[0];//访问数组的第一个元素
b[1];//访问数组的第二个元素
c[5];//访问数组的第三个元素
对于以上的形式,我们还有几个必须注意的点
我们先通过int a[5]来进行定义一个数组之后通常要注意以下两点
注:
-
a[0];访问第一个元素的下标但是0,而不是1
-
a[5] ; 会报错,因为访问第五个元素的下标是4
3.循环和数组的关系
首先我们根据一个问题来进行分析循环和数组的关系
我们在通常实行一个执行10次的循环,我们通常是这么写;
for (i=0;i<10;i++)
{
...
}
而不是这样写
for (i=;i<=10;i++)
{
...
}
这是为什么呢?
这就素因为循环和数组是由有关系的!
因为我们常常需要使用循环来进行访问数组。
比如以下的代码
int a[10];
for(i=0;i<10;i=i+1)
{
a[i]= i;
}
我们以下通过一个例子来理解吧!
请尝试用数组存放班里10位同学的数学成绩,并计算出平均值。
对于以上这个问题,我们应该如何用代码来进行实现呢?
请看以下的代码
#include <stdio.h>
#define NUM 10
int main()
{
int a, sum = 0;
int arr [NUM];
for (a = 0; a < 10; a = a + 1)
{
printf("请输入第%d位同学的成绩: ", a + 1);//可以输入%d或者%i
scanf("%d", &arr[a]);
sum = sum + arr[a];//也可以输入sum+=arr[a]//+=(例如:a+=b等价于a=a+b)
}
printf("成绩录入完毕,这次考试的平均成绩为:%.2f\n", (double)sum / NUM);
return 0;
}
对于%d和%i请参考文章(15条消息) %d %i的区别(你想知道的C语言 2.3)_一丝晨光的博客-CSDN博客_c语言%i是什么
但是就上请注意一个关键:%d和%i在printf里面输入无差别,而在scanf里面则可以用八进制以及十六进制数来进行输入
以上的输出结果如下图所示,我们进行随便写几个成绩。
4.数组的初始化
①定义
当我们在给一个数组定义的同时在给它进行赋值
,我们称它为数组的初始化。
以下将举出几个例子来进行理解下数组的初始化
1.将数组的所有元素初始化为0,我们可以这样写。
int a[10] = {0};//事实上仅仅只是将第一个元素赋值为0
2.如果是赋予不同的值,那么用逗号进行隔开即可。
int a[10] = {1,2,3,4,5,6,7,8,9,0};
3.还可以只给其中一部分元素进行赋值,其他赋值的元素自动初始化为0;
int a[10] = {1,2,3,4,5,6};//表示前面6给元素被赋值,后面四个元素初始化为0
对于上面的三个例子我们分别用代码进行实现
#include <stdio.h>
int main()
{
int i;
int a[10] = {...};//此处可以根据上面进行替换。
for(i=0;i<10;i=i+1)//利用for循环将数组内的每一个元素都打印出来
{
printf("%d\n",a[i]);
}
return 0 ;
}
以下分别对应1.2.3的输出结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-krATkNtX-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130132952333.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GGiHQnnr-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130133035815.png)]
②其他形式
1.其实有时候对于以上的几个形式中,在定义数组后面的[]可以偷懒不写,比如写成以下形式。
int a[] = {1,2,3,4,5,6,7,8,9,0}
我们可以看到以上的形式中,{}内有10个元素,[]内并未写出数组内元素的数量。
因为编译器会根据值的个数自动判断数组的长度
2.其次C99还增加了一个新的特性
,可以给数组的指定的元素进行赋值,而未被赋值的元素自动初始化为0
。比如以下的例子。
int a[5] = {[0]=1,[1]=1,[2]=4,[3]=5,[4]=1,[5]=4};
对于以上这种情况在vscode以及vs2019都将会报错,报错内容为下。
VSCODE
****
VS2019
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kI62x7K9-1669872137767)(https://luoxi2334.oss-cn-shanghai.aliyuncs.com/luoxi-picture/image-20221130191538588.png)]
由此可见,在c语言中,数组内的元素并不能全部进行赋值,只能小于数组的总元素。