数组初始化赋值是指在数组定义时给数组元素赋予初值

一维数组初始化

给数组赋值的方法除了用赋值语句对数组元素逐个赋值外, 还可采用初始化赋值和动态赋值的方法。数组初始化赋值是指在数组定义时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。

数组初始化赋值是指在数组定义时给数组元素赋予初值

一维数组初始化赋值的一般形式为:

数组类型数组名[常量表达式] = {,……};

其中在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。

int a[5]={1,2,3,4,5};

这样数组a中的元素a[0]=1;a[1]=2;a[2]=3;a[3]=4; a[4]=5;a中5个元素全部赋初值,则在数组说明中,可以不给出数组元素的个数。

可写为:

int a[]={1,2,3,4,5};

注意:

(1)可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如:

int a[5]={1,2,3};

这表示只给a[0]~a[2]3个元素赋值,而后2个元素自动赋0值。

除了定义数组时同时初始化,也可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

例如:

例如:

int i,a[5];

for(i=0;i<5;i++)

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

【例5-3】输入10个数字,求出最大值和它的下标。

程序的算法流程图如图5-3所示。

数组初始化赋值是指在数组定义时给数组元素赋予初值

5-3算法流程图

根据流程图写出的程序如下:

#include <stdio.h>

int main()

int i,max,a[10],p=0; 

printf("input 10 numbers:\n"); 

for(i=0;i<10;i++) 

scanf("%d",&a[i]);   /*数组a中输入元素*/

max=a[0]; /*最大值元素赋初值*/

for(i=1;i<10;i++) 

{

if(a[i]>max) /*访问的第i个元素是否大于当前最大值*/

{

max=a[i]; 

p=i;

    }

}

printf("maxmum=%d,index=%d\n",max,p);

return 0; 

}

程序运行结果:

input 10 numbers:

23 45 -2 0 9 13 4 65 10 3↙

maxnum=65,index=7

【例5-4】输入10个数字,采用交换法逆序输出

分析:将一个数组逆序转换,假如数组存放为1,2,3,4,5,6,7,8,9,10变为10,9,8,7,6,5,4,3, 2,1。对于某一个元素a[i],则前面已有i个元素,与它交换的元素a[k]应该满足与a[k]后面也有i个元素,则这个元素的下标k为:n-1-i,即下标i要与下标n-i-1交换,如图5-4所示。

a[0]

a[1]

a[2]

a[10-2-1]

a[10-1-1]

a[10-0-1]         数组初始化赋值是指在数组定义时给数组元素赋予初值  

图5-4 元素的交换

也就是说,10个数字的话,两两交换需要交换5次,那么N个数据,需要交换N/2次。利用循环实现数组中元素的交换。

#include <stdio.h>

#define N 10

int main()

     int i,temp,a[N]; 

     printf("input 10 numbers:\n"); 

     for(i=0;i<N;i++) 

    scanf("%d",&a[i]);   /*数组a中输入元素*/

     for(i=0;i<N/2;i++) /*元素交换*/

     {

     temp=a[i];

     a[i]=a[N-i-1];

     a[N-i-1]=temp;

     }

     printf(”Inverted sequence is:\n”);

     for(i=0;i<N;i++)

     printf(“%4d”,a[i]);

     return 0; 

}

程序运行结果:

input 10 numbers:

1 2 3 4 5 6 7 8 9 10↙

Inverted sequence is:

10 9 8 7 6 5 4 3 2 1

【例5-5】输入10个数字并按从大到小的顺序排列。

程序的算法流程图如图5-5所示。

根据流程图写出的程序如下:

#include <stdio.h>

int main()

int i,j,p,q,s,a[10]; 

printf("input 10 numbers:\n"); 

for(i=0;i<10;i++) 

scanf("%d",&a[i]); /*数组a中输入元素*/

 printf(“Inverted sequence is:\n”);

for(i=0;i<10;i++)  /*采用逐个比较的方法进行排序*/

p=i;q=a[i]; /*在i次循环时,把第一个元素的下标i赋于p,而把变量值a[i]赋于q*/

for(j=i+1;j<10;j++)/*从a[i+1]起到最后一个元素止逐个与a[i]作比较*/

if(q<a[j])/*有比a[i]大者则将其下标赋值给p,元素值赋值给q*/

p=j;q=a[j]; 

if(i!=p)/*i≠p,p,q值均已不是进入第二层循环之前所赋之值,则交换a[i]和a[p]之值*/

s=a[i]; 

a[i]=a[p]; 

a[p]=s; 

printf("%5d",a[i]); 

return 0; 

}

程序运行结果:

input 10 numbers:

23 90 -45 0 5 124 -3 34 87 100↙

Inverted sequence is:

124 100 90  87  34  23   5   0  -3   -45

 数组初始化赋值是指在数组定义时给数组元素赋予初值

例5-5算法流程图

通过上面的程序可以看出,数组的最大优点就是:下标可以是变量甚至是表达式,从而给访问和操作一组变量带来了极大的方便。