Chapter07 Arrays
主讲:余有明
本章内容本章目录一维数组的定义和引用二维数组的定义和引用返回主目录7-1 数组的概念构造类型数据:数组、结构体、共用体。数组:有序数据的集合,整体参加运算。例:a1x1+a2x2+a3x3+…+anxn其中:a1 a2 a3……
《Programming in C Language 》主讲:余有明an 是一组有序的数,称为数组
数组中成员分量ai称为数组元素,
下标数组元素的类型称为该数组的基类型。C中数组元素的表示:用带下标的变量:a[i]第i个数组名数组元素首页上页下页末页
节
共23 页第3页
7-2 一维数组的定义和应用一、一维数组的定义《Programming in C Language 》主讲:余有明整型常量数据类型数组名[常量表达式1]…[常量表达式n]数组的基类型第i维的大小n为数组的维数数组体积:数组中所包含的元素的个数。数组体积=第1维大小第2维大小…第n维大小例如:a1x1+a2x2+a3x3+…+anxn定义为:int a[8];float b[10];
表示a数组可以使用8个元素:a[0]~a[7]
实例:int try[10];char string[100];double x[20][10];首页上页下页末页节共23 页第4页7-2 一维数组的定义和应用(续)《Programming in C Language 》主讲:余有明数组说明中常见的错误
①float a[0];/* 数组大小为0没有意义*/②int b(2)(3); /* 不能使用圆括号*/
③int k, a[k]; /* 不能用变量说明数组*/④int n;
scanf (“%d”, &n);
int a[n]; /* 数组说明必须在可执行语句前*/
首页上页下页末页节
共23 页第5页
7-2 一维数组的定义和应用(续)二、数组元素的引用
《Programming in C Language 》主讲:余有明①通过数组的下标使用(引用)数组中元素。数组
下标从0开始。
例:int x[5];/*数组x包含了5个数组元素*/它们是:x[0],x[1],x[2],x[3],x[4]
②数组中的每个元素在功能上等价于一个一般的变量。例1int i,a[20];for (i=0;i<20;i++) a[i]=i*i;for (i=0;i<20;i++) printf(“%d”,a[i]);首页上页下页末页
节
共23 页第6页
7-2 一维数组的定义和应用(续)《Programming in C Language 》主讲:余有明③对于非字符数组,只能对数组中的元素进行访问,不能进行整体操作。例2输入/输出数组:int x[10];for (k=0; k<10; k++)scanf (“%d”, &x[k]);for (k=0; k<=9; ++k)printf (“%d\\n”, x[k]);读数组函数被调用10次输出数组函数被调用10次首页上页下页末页节共23 页第7页7-2 一维数组的定义和应用(续)《Programming in C Language 》主讲:余有明错误:scanf (“%d%d%d%d%d%d%d%d%d%d”,x);
scanf (“%d”,x);printf(“%d”,x);
printf(“%d%d%d%d%d%d%d%d%d%d”, x);④对于字符数组,可以按元素访问,也可以进行整体访问。
例:scanf(“%s”,string);printf(“%s”, string);
首页上页下页末页节
共23 页第8页
7-2 一维数组的定义和应用(续)《Programming in C Language 》主讲:余有明三、数组在内存中的存放一维数组在内存中顺序存放
例:int x[4];x[0]x[1]低地址讨论x[2]x[3]高地址float x[4];16double x[4];32long x[4];128各占多少个字节X数组占8个字节首页上页下页末页
节
共23 页第9页
7-2 一维数组的定义和应用(续)四、一维数组的初始化三种为数组提供数据的方法:初始化部分元素scanf(),v=e,初始化.例3《Programming in C Language 》主讲:余有明static int a[6]={1,2,3,4,5,6};static float b[10]={1.1,2.0,3.8};static double c[ ]={1.0,2.1,3.2,4.5};静态存储类型初值为0根据数据定义数组长度只有静态存储数组和外部存储数组才能初始化
首页上页下页末页
节
共23 页第10页
7-2 一维数组的定义和应用(续)《Programming in C Language 》主讲:余有明main( ) main( )
{ static int a[5],i; { int a[5], i;for(i=0;i<=4;i++)printf(“%d”,a[i]);
for(i=0;i<=4;i++)printf(“%d”,a[i]);
} }
输出: 输出:
0 0 0 0 0 五个无规则数
首页上页下页末页
节
共23 页第11页
7-2 一维数组的定义和应用(完)五、数组的应用《Programming in C Language 》主讲:余有明例4统计分数定义数组并初始化main(){int k,a[]={0,0,0,0,0,0,0,0,0,0};float fs;?位置应是:scanf(“%f”,fs);a[5]+a[4]+a[3]+a[2]+a[1]+a[0]if (fs==100) k=9;else k=(int)(fs/10);数组元素引用a[k]=a[k]+1;分类计数器printf(“%d%d%d%d%d”,a[9],a[8],a[7],a[6],?);}首页上页下页末页节共23 页第12页§7-3 6-3 二维数组的定义和应用二维数组的定义和应用一、二维数组的定义格式:类型说明符数组名[常量e1][常量e2];
例如a数组:a11x11 a12x22 a13x13a21x21 a22x22 a23x23a31x31 a32x32 a33x33a41x41 a42x42 a43x43《Programming in C Language 》主讲:余有明最大行下标最大列下标定义为:int a[4][3],b[3][4][5];表示a数组可以使用4×3个元素:a[0][0]~a[3][2]三维数组b[3][4][5]表示:共有3×4×5=60个元素。b[0][0][0]~b[2][3][4]首页上页下页末页节共23 页第13页7-3 二维数组的定义和应用(续)二、二维数组的存储二维数组按行存放三维数组按页存放
例如:int b[2][2]
《Programming in C Language 》主讲:余有明多维数组的存储顺序是:第一维的下标变化最慢讨论低地址b[0][0]
b[0][1]
第一行元素double[10][10][6] b[1][0]
高地址b[1][1]
有多少元素?第二行元素占多少字节?10106=600个元素6008=4800个字节
首页上页下页末页节b数组占8个字节共23 页第14页
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明二维数组的每一行
memory
可看作一个一维数组例如:int a[4][3]一维数组名a[0]
a[1]
aa[2]
一维数组名a[3]
首页上页下页末页
a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[3][0]a[3][1]a[3][2]
节
共23 页第15页
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明三、二维数组的初始化按存储顺序截取数据static int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};static int a[3][3]={1,2,3,4,5,6,7,8,9};static int a[3][3]={{1,2},{4},{7,0,9}};static int a[3][3]={{ },{4,0}};static int a[ ][3]={1,2,3,4,5,6,7,8,9};缺省时按实际数据确定行第一行无初值缺少初值补零共23 页
第16页
首页上页下页末页节
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明初始化与赋值的区别:
数组初始化:源程序进行编译时为数组元素分配存储单元并给定初值。
数组元素赋值:程序执行过程中执行赋值语句。
main( ){ int a[2];
main( )
{ static int a[2] ={ 1, 2};……
a[0]=1; a[1]=2;……
}
}
首页上页下页末页
节
共23 页第17页
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明例:用数组来求Fibonacci数列问题(前20项)
1 1 2 3 58 13 21 34 5589 144 233 377 610987 1597 2584 4181 6765
数列前两个数为1,1, 其它值为前两项之和。算法如下:
已知:f [0] = 1, f [1] = 1;
求解:f [i] = f [i-1] + f [i-2] (i 2)
首页上页下页末页
节
共23 页第18页
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明main( ){ int i ;
static int f [20] = { 1, 1 };
/ * 数组初始化f [0] = 1; f [1] = 1; */ for ( i=2; i<20; i++)f [i] = f [i-2] + f [i-1];
/ *按数列的算法为f [2] ~ f[19]赋值( 当i 2) */
首页上页下页末页节
共23 页第19页
7-3 二维数组的定义和应用(续)《Programming in C Language 》主讲:余有明/*输出各元素值*/
for ( i =0; i<20; i++ )
{ if ( i %5= = 0 ) printf(\\n” ) ;/ * 每5 个数据换一行显示* /
printf ( “%12d”, f [i] ) ;}}
首页上页下页末页节
共23 页第20页
7-3 二维数组的定义和应用(续)四、二维数组的应用《Programming in C Language 》主讲:余有明例5main()程序:1 2 3{static int a[2][3]={1,2,3,4,5,6},b[3][2],i,j;4 5 6for (i=0;i<=1;i++) /*行控制*/{for(j=0;j<=2;j++) /*列控制*/1 4{printf (“%5d”,a[i][j]);/*输出a数组*/2 53 6 程序运行结果:b[j][i])=a[i][j]);} /*行列交换*/1 2 3printf (“\\n\\n”);}for (i=0;i<=2;i++)/*b数组*/4 5 6{for(j=0;j<=1;j++)1 4printf (“%5d”,b[i][j]);/*输出b数组*/2 5printf (“\\n”);}3 6 }首页上页下页末页节共23 页第21页将二维数组a的行与列互换并存于b数组7-3 二维数组的定义和应用(续)由键盘输入a数组值程序如何写?讨论数据输入顺序?《Programming in C Language 》主讲:余有明for (i=0;i<=1;i++) {for j=0;j<=2;j++) scanf(“%5d”,&a[i][j]);}/*读a数组*/for (i=0;i<=1;i++)
输入{for j=0;j<=2;j++)
{printf (“%5d”,a[i][j]);b[j][i])=a[i][j]);} /*行列交换*/printf (“\\n\\n”);}
首页上页下页末页
节
输入数据:1234输出56共23 页第22页
main()《Programming in C Language 》主讲:余有明{static int a[2][3],b[3][2],i,j;for (i=0;i<=1;i++) 数组的输入与输出{for(j=0;j<=2;j++){scanf (“%d”,&a[i][j]);/*读a数组并产生b数组*/b[j][i])=a[i][j]);} }for (i=0;i<=1;i++) /* 输出a数组输入数据顺序:*/{for (j=0;j<=2;j++)11 3 5printf (“%5d”,a[i][j]); 32 4 6printf (“\\n”);} 5for (i=0;i<=2;i++) /* 输出b数组*/1 22{for(j=0;j<=1;j++) 3 44 printf (“%5d”,b[i][j]); 5 6 6printf (“\\n”);}内循环还是外循环?a、b数组输出?}首页上页下页末页节7-3 二维数组的定义和应用(完)共23 页第23页
因篇幅问题不能全部显示,请点此查看更多更全内容