黑马程序员——数组
1、概念:定义数组时需要指定这批变量类型、数组名称,数组中包含变量的个数 。
例如:int a[10] 表示定义了一个整形数组,数组名为a,此数组有10个元素。
2、一维数组定义数组基本方式为:类型符 数组名[常量表达式]
注意:定义数组时,用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”在形式上相似,但在含以上和用法上是不同的。如:
int a[10]; /*定义素组长度为10*/
t=a[6]; /*引用a数组中序号为6的元素,此时6不代表数组长度*/
如果在数组名[常量]前有类型名(如int,float,char),则此时是定义数组;如果在其前面没有类型名,则是引用数组元素
例:引用数组元素,利用循环数组元素a[0]~a[9]赋值为0~9,然后按逆序输出各元素的值
1 #include "stdio.h" 2 3 void main() 4 5 { 6 7 int i,a[10];//定义整型变量i和整形数组a,a有10个元素 8 9 for(i=0;i<=9;i++)//先后对10个数组元素赋值 10 11 a[i]=i; 12 13 for(i=9;i>=0;i--) 14 15 printf("%d",a[i]);//按逆序先后输出数组a中的10个元素 16 17 printf("\n"); 18 19 }
运行结果为:9876543210
**3、数组的初始化**
在数组赋的初值,是按循序赋给相应的数组元素的。如果只是一部分赋初值,那么剩下的元素就会自动设为0。
数组:int a[]={1,2,3,4}; //由于有4个初值,系统自动确定数组有4个元素
如果所定义的数组的长度和初始化的数据的个数相同,则定义数组时可以不写数组长度
**4、二维数组**
二维数组的一般式为:类型名 数组名[常量表达式][常量表达式];
常量表达式可以为整形常量,也可以为整型表达式如a[2-1][2*2-1]
**5、二维数组的初始化**
1)分行给二维数组赋初值
int [3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2)可以将所有数据写在一个大括号,按数组排列的顺序对各元素赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12,13};
3)可以对部分元素赋初值(这种方法对非0元素少时方便使用)
int a[3][4]={{1},{5},{9}};
1 /*假如有10个数,比较10个数的大小并排序 */ 2 3 #include "stdio.h" 4 5 void main() 6 7 { 8 9 int a[10]; 10 11 int i,j,t; 12 13 printf("请输入10个数字:\n"); 14 15 for(i=0;i<10;i++) 16 17 scanf("%d",&a[i]);//先后输入10个数字 18 19 printf("\n"); 20 21 for(j=0;j<9;j++)//进行9次循环,实现9次比较 22 23 for(i=0;i<9-j;i++)//在每一次中进行9-j次比较 24 25 if(a[i]>a[i+1])//相邻两个数比较 26 27 { 28 29 t=a[i];a[i]=a[i+1];a[i+1]=t; 30 31 } 32 33 printf("排序后的数字:\n"); 34 35 for(i=0;i<10;i++) 36 37 printf("%d\t",a[i]); 38 39 }
结果:
1 /* 将二维数组a的行与列互换存在另一个数组b中 */ 2 3 /*编程思路:将a数组中的i行j列赋值给b数组的j行i列,如a[0][1]赋给b[1][0],a[0][2]b[2][0],可以利用双层循环来除了,用外循环控制行数的变化,内循环控制列的变化*/ 4 5 #include "stdio.h" 6 7 void main() 8 9 { 10 11 int a[2][3]={{1,2,3},{4,5,6}};//定义数组a并赋值 12 13 int b[3][2],i,j;//定义数组a 14 15 printf("a的变化\n"); 16 17 for(i=0;i<2;i++)//用i控制行数的变化 18 19 { 20 21 for(j=0;j<3;j++)//用j控制列数的变化 22 23 { 24 25 printf("%5d",a[i][j]);//输出a数组中的i行j列元素 26 27 b[j][i]=a[i][j];//将a数组中的i行j列赋值给b数组的j行i列 28 29 } 30 31 printf("\n"); 32 33 } 34 35 printf("b的变化\n"); 36 37 for(i=0;i<3;i++){ 38 39 for(j=0;j<2;j++) 40 41 printf("%5d",b[i][j]);//输出b数组元素 42 43 b[j][i]=a[i][j]; 44 45 printf("\n"); 46 47 } 48 49 }
结果: