#一、一维数组
##1.一维数组定义形式
(1)
语法 | 样列 | 说明 |
---|---|---|
类型标识符 数组名[整形常量表达式]; | int scoer[10]; //定义一个长度为十的数组 | ①数组名的命名规则和简单变量名相同,遵循标识符的命名规则。②数组名后的整形常量表达式是用方括号括起来的,不是圆括号。如 int a[10] 是错误的。该常量表达式表示元素的个数。③常量表达式的值是整形的,用于表示数组的长度,可以是常量或者符号常量,不能是变量。 |
与其他变量一样,数组也需要先声明,后使用。指明数组元素的类型和数量。
int len;
scanf ("%d", &len);
int a[len]; //用变量作为数组的长度,为错误的应用。
(2)"下标法”引用数组元素
数组的第一个元素用a[0]表示,第二个元素用a[1]表示…,第n个元素用a[n-1]表示。
数组下标:数组名后的方括号内的数值或表达式, 用于区分数组中的不同元素。
长度为n的数组其各个元素的下标应该是0n-1,而不是1n。
For exanple:
int scoer[10];
scoer[0] = 80; //给下标为0的元素赋整数值,
scoer[1] = scoer [0]; //将scoer[0]元素的值赋给scoer[1]
##2.一维数组初始化
用例子来说明,求几个数的均值。
88,91,80,79,
求以上四个数的均值。
###初始化方式 1
#inciude
int main()
{
float a[4] = {88, 91, 80, 79}; //给所有元素赋初始值
float sum = 0, ave = 0;
sum = a[0] + a[1] + a[2] + a[3];
ave = sum / 4;
printf("average = %.1f\n", ave);
return 0;
本例采用“给所有元素赋初始值”的形式初始化数组。语句:
float a[4] = {88, 91, 80, 79};
将数组元素的值按顺序放在一对花括号内。
只能给数组元素逐个赋值,而不能给数组整体赋值。for example :
对长度为4的数组中所有元素赋值3,应写为:int a[4] = {3, 3, 3, 3, };
而不能贪图方便写成:int a[4] = {3};
这样只能给a[0]元素赋值3,而其他三个元素赋值0。
也不能写成:int a[4] = 3; //错误的数组初始化形式
###初始化方式 2
给部分数组元素赋初值。求四个数的均值,并将均值放于数组的最后一个元素中。
#include
int main ()
{
float a[5] = {88, 91, 80, 79}; //给部分元素赋初值,最后一个元素预留给平均成绩,暂不初始化。
float sum = 0;
sum = a[0] + a[1] + a[2] + a[3];
a[4] = sum / 4;
printf("average = %.1f\n", a[4]);
return 0;
}
本例数组定义及初始化如下:float a[5] = {88, 91, 80, 79};
四个数和均值都要放在同一个数组,因此数组长度为五。其中四个数已知,均值暂时未知。因此数组中四个元素的初值是可以确定的,而最后一个元素的初值不确定,因此只能对数组中的“部分元素赋初值”。
未初始化的元素a[4]的值默认为0,程序后面部分的语句计算出平均值,并将平均值赋给a[4]元素,则a[4]元素才能获得更新后的值。
若在定义时对元素进行初始化,则各数值是按照花括号内的先后顺序依次赋给数组中的各元素。未赋初值的默认值为0。
可以用以下方式对所有元素赋初值0:int a[10] = 0;
##3. 使用循环结构存取数组
用例子来说明问题,更加直观,所以还是来一段代码。
这次我们来算5个数的均值。
#include
int main()
{
int a[5], i, sum; //数组a长度为5,可以存放5个数字
sum = 0;
for(i = 0; i < 5; i++) //控制数组元素的下标从0~4进行变化
{
scanf("%d", &a[i]); //输入一个数字,存放到下标为i数组元素中
sum + = a[i];
}
printf("The Average = %.1f\n", sum / 5.0);
return 0;
}
//输入10个整数,保存到数组中,并逆序显示这10个数字。
#include
int main ()
{
int a[10], i ;
for(i = 0 ; i < 10 ; i++) //输入10个元素,下标从0~9
{
scanf("%d", &a[i]);
}
printf("Reveres Order :\n");
for(i = 10; i >= 0; i--) //下标出错,误用了a[10]元素
{
printf("%d\n", a[i]); //导致输出结果出错
}
return 0;
}
错误原因已在注释中说明。正确做法是:
for (i = 9 ; i >= 0 ; i--)
{
printf("%d\n", a[i]);
}
接下在了解一下如何用数组处理Fibonacci问题,输出数列的前20项。
#include
#define N 20 //用符号常量表示数组长度
int main ()
{
int i;
int f[N] = {1, 1};
for(i= 2; i < N ;i++)
{
f[i] = f[i-1] + f[i - 2];
}
for(i = 0; i < N; i++)
{
if(i % 5 == 0) //控制每行输出5个
{
printf("\n");
}
printf("%8d", f[i]);
}
printf("\n");
return 0;
}
对数值型数组的输入输出只针对单个元素操作,不能整体的输入或输出一个数组,假如有定义“int a[10];”则不能用“scanf("%d", a);”,也不能用"printf("%d", a);", 试图对整个数组进行输入或输出,而应该结合循环结构对元素逐个进行处理。如上例。
#二、一维数组的应用
1.[排序](http://c.biancheng.net/cpp/html/54.html)
2.[统计](http://blog.csdn.net/zhaoyaqian552/article/details/46882435)
送福利了