C语言第七章数组
一维数组定义方式:
类型说明符 数组名[数组大小] ? ? ? ?(数组名与变量名定义规则相同)
如:char c[20];
数组大小代表数组中元素个数,需要注意的是,数组下标从0开始,因此数组大小20的数组中最后一个元素为19。
注意:C语言不允许对数组大小进行动态定义。
一维数组的引用:
数组名[下标]
如:a[3]
下标可以是常量或者表达式。如:a[3]、a[2*5]。
一维数组初始化:
在定义数组是进行赋值:int a[5]={1,2,3,4,5};
只给一部分元素赋值:int a[5]={1,2,3};该情况下后两个元素为0。
使一个数组中全部元素为0:int a[5]={0,0,0,0,0}; 或 int a[5]={0};
若对全部元素赋值,可不指定数组长度 :int a[]={1,2,3,4,5,};
利用数组解决fibonacci数列:
关键部分即利用数组构建fibonacci数列,但不能动态定义数列大小,如下:
int i,a[20];
a[0]=a[1]=0;
for(i=2;i
? ? a[i]=a[i-1]+a[i-2];
“起泡法”对数组中数列进行排序:
思路:将相邻两个数进行比较,将小的调到前面。
具体操作:对n个数进行比较,共有需要比较n-1次,第一次比较时有n-1个相邻比较组合,将最大的数送至最后的位置,第二次比较时有n-2个相邻比较组合,将次大的数送至倒数第二个位置,以此类推,直至找到最小的数,放在最前面的位置。
#include
void main()
{int i,j,a[10],t;
for(i=0;i<10;i++)
{ printf("请输入第%d个数字:",i+1);
?scanf("%d",&a[i]); }
for(i=0;i<9;i++)
?for(j=0;j<9-i;j++)
?{ if(a[j]>a[j+1])
? { t=a[j];
? ?a[j]=a[j+1];
? ?a[j+1]=t;
? }
?}
printf("排序后的结果为:");
for(i=0;i<10;i++)
printf("%d,",a[i]);
}
二维数组的定义:
类型说明符 数组名[一维大小][二维大小]
如: char c[2][4];(注:最大元素为c[1][3])
引用方法同一维数组。
二维数组初始化:
分行赋值:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
将所有元素放一块赋值:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(若大括号内元素小于数组最大元素值,则对数组中剩下的元素赋0)
部分赋值:int a[3][4]={{1},{2},{3}}
在对全部元素赋值时,可省略第一维大小,但不能省略二维大小:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
或使用分行赋值的方法:int a[][4]={{1,2,},{5},{9,10,11,12}};
具体可用以下算法检验二维数组赋值情况,放入VC++6.0编译器中使用:
#include
void main()
{int i,j,a[][4]={按要求使用具体的赋值形式};
for(i=0;i<3;i++)
{ for(j=0;j<4;j++)
?printf("%10d",a[i][j]);
?printf("\n");
}
}
字符数组:
字符数组元素赋值时需要加上单引号!!!!
如:a[2][3]='a';
用字符数组存储字符串:
C语言中规定以'\0'作为字符串的结束符。
字符串可直接存储与字符数组中,方法为: char c[]={"I am happy"}; ? ?或 ? ?char c[]="I am happy"; ? ?系统会在最后自动加上'\0',而对字符数组中元素一个个赋值的方式,即:char c[]={'a','b','c','d'};则不会在最后加上'\0'。
char c[]="I am happy";等价于char c[]={'I','a','m',' ','h','a','p','p','y','\0'};
而不等价于char c[]={'I','a','m',' ','h','a','p','p','y'};
只有当存储字符串是才需要使用'\0'
字符数组的输入输出:
方法一:逐个输出数组中的字符,用循环语句结合%c格式符。
方法二:将整个字符串输出,用%s格式符。注:使用%s输出字符串时,必须使用数组名,而非数组元素名,即:printf("%s",c);
当字符数组中包含多个'\0'时,遇到第一个