三、一维数组(整数类型)
1. 为什么使用数组
假设对烟的需求很大,又不缺钱的情况下,正常人是按条买烟。因为方便。
一条烟中的烟应该都是一样的。
当我们需要很多变量,他们的类型一样,逻辑功能又相似,我们可以一口气把这些变量定义出来,这种定义变量的方式叫数组。
2.如何定义
int grade[10];
定义一个数组,数组名叫grade,数组中变量的类型是int,数组中有10个变量。
我们称数组中的变叫数组的元素。
定义数组时,数组的元素个数必须是常量!!!!!
元素名称: 数组中的元素是没有名字的,我们使用下标(角标)的形式使用元素。角标从0开始。
grade[0] 是数组中的第一个元素角标是0
grade[1] 是数组中的第二个元素角标是1
grade[2] 是数组中的第三个元素角标是2
...
grade[9] 是数组中的第十个元素角标是9
角标的范围,0~N-1,N是数组中的元素个数。
区分: int a[5] 和 a[5] 的区别:
int a[5]是定义一个数组
a[5] 是数组中的一个元素,int a[5]数组中没有a[5] 元素。
3.如何赋值
给数组赋值必须是给每个元素单独赋值,C语言没有提供给整个数组赋值的语法。
#include <stdio.h>
int main()
{
//定义数组时[]中是元素的个数(必须是常量),使用元素时[]中是元素的角标(可以是变量)
int grade[10];//定义数组,10个int类型的元素
//普通的变量怎么使用,数组的元素就可以怎么使用。
grade[0] = 1;//数组0元素赋值1
grade[1] = 10;//数组1元素赋值10
int i;
for(i = 3;i < 10;i++)
{//循环是给数组的3~9元素赋值,因为i的取值范围是3~9,循环体用i作为数组角标。
grade[i] = i;//在使用数组元素的时候,元素的角标可以用变量表示。
}
grade[2] = 250;//给数组2元素赋值,给数组元素赋值是没有顺序要求的,愿意给谁赋值就给谁赋值。
for(i = 0;i < 10;i++)
{
printf("%d ", grade[i]);//打印数组的每个元素。
}
printf("\n");
return 0;
}
4.初始化问题
定义数组的时候才能初始化。只有对数组初始化的时候才能使用{},数组赋值时不能使用{}。
【完全初始化】 int a[10] = {1,2,3,4,5,6,7,8,9,10};//初始化使用的数据的数量,和数组元素的个数相同。
a[0]=1 a[1]=2 a[2]=3 a[3]=4 a[4]=5 a[5]=6 a[6]=7 a[7]=8 a[8]=9 a[9]=10
【部分初始化】 int a[10] = {1,2};//初始化使用的数据的数量,小于数组的元素个数。剩下的元素默认初始化成0
a[0]=1 a[1]=2 a[2]=0 a[3]=0 a[4]=0 a[5]=0 a[6]=0 a[7]=0 a[8]=0 a[9]=0
【默认初始化】 int array[] = {1,2,3,4,5,0,0,0}; //只有在默认初始化的情况下,可以不写数组的元素个数,数组的元素个数将由初始化数组使用的数据的数量来决定。array数组有8个元素。
5.如何遍历
遍历:把数组的所有元素都经历一遍,经历可能是打印,可能是运算等等。
通常使用for循环遍历数组,一般使用循环变量作为数组元素在循环体中的角标。
int grade[10] = {0};//部分初始化
int i;
/*
遍历数组一般使用for循环。
一般使用循环变量作为数组的角标。
*/
for(i = 0;i < 10;i++)
{
printf("%d\n", grade[i]);
}
6.类型问题
数组的元素可以定义成任何类型。能定义出什么类型的变量,就能定义出什么类型的数组。
char a[10]; 数组中有10个char类型变量
short b[100]; 数组中有100个short类型变量
float c[20]; 数组中有20个float类型变量
double x[30]; 数组中有30个double类型变量
int e, a[10], b[20], c, d;合法的定义
数组编程示例1:
请将 1 ~ 100 这 100 个数放在数组里保存起来。
请打印输出第 50 到 第60 个变量中保存的值。49~59
#include <stdio.h>
int main()
{
int arr[100];
int i;
for(i = 0;i < 100;i++)
{
arr[i] = i+1;
}
for(i = 49;i < 60;i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
数组编程示例2:
请输入 10 个整数,保存在数组中,然后累加求和。
#include <stdio.h>
int main(){
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int sum = 0;
for(int i = 0; i < 10; ++i){
sum += arr[i];
}
printf("sum = %d\n",sum);
return 0;
}
数组编程示例3:
请输出斐波那契数列的前 20 项。
已知前两项:1 1 。 从第三项开始,每一项都是前两项之和。 1 1 2 3 5 8 13 21 34 。。。6765
#include <stdio.h>
int main(){
int fb[20] = {1, 1};
for(int i = 2; i < 20; ++i){
fb[i] = fb[i-1] + fb[i-2];
}
for(int j = 0; j < 20; ++j){
printf("%d ",fb[i]);
if((j + 1) % 10 == 0){
printf("\n"); // 每十个数据换行一下
}
}
return 0;
}