您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第9讲 一维数组和二维数组
第9讲一维数组和二维数组一、一维数组1、一维数组的定义2、一维数组元素的引用3、一维数组的初始化二、二维数组1、二维数组的定义和引用2、二维数组的初始化数学中的数列:a1,a2,a3,···,ai,···,anC程序中数组:a[0],a[1],a[2],···,a[i-1],···a[n-1]1、数组:数目固定、类型相同的若干变量的有序集合。2、数组元素:数组中的每一个数据。3、性质:1)数组中的每一个元素都属于同一个数据类型。2)在内存中数组占有一段连续的存储空间。基本概念:一、一维数组1、一维数组的定义定义的格式:类型说明符数组名[长度],···;说明:1)类型说明符:表明该数组所属类型,即数组元素的类型。2)数组名:数组的名称,其命名方法同变量名。例如:inta[5];含义:定义一个数组变量a,它包含5个变量元素。a[0],a[1],a[2],a[3],a[4]引用方式:数组名[下标]2、一维数组元素的引用说明:1)下标的最小值为0,最大值为长度-1。2)数组必须先定义后使用。3)数组元素只能逐个被引用,不能一次引用整个数组(字符数组除外)。4)对数组中所有元素逐个引用时,通常可使用循环结构。例1写出下面程序的结果。(一维数组的使用)#includestdio.hvoidmain(){inta[10],s,i;s=0;for(i=0;i=9;i++)a[i]=i;for(i=0;i=9;i++)s=s+a[i];printf(s=%d\n,s);}执行结果:s=45例2写出下面程序的结果。(一维数组的使用)#includestdio.hvoidmain(){inta[10],i;a[0]=a[1]=1;for(i=2;i=7;i++)a[i]=a[i-1]+a[i-2];for(i=0;i=7;i++)printf(%4d,a[i]);}执行结果:1123581321例3求全班32名同学某课程的平均分并输出最高分。#includestdio.hvoidmain(){inti,sum,max,a[32];floataverage;for(i=0;i32;i++)scanf(%d,&a[i]);/*输入数组元素的值*/for(sum=0,max=a[0],i=0;i32;i++){sum+=a[i];if(a[i]max)max=a[i];}average=(float)sum/32;printf(Average=%.2f,MAX=%d\n,average,max);}1)数组的初始化:指定义数组时对数组元素赋以初值。3、一维数组的初始化2)格式:类型符数组名[表达式]={初值表};3)数组初始化有三种情况:给全部元素赋初值。给部分元素赋初值。给全部元素赋初值时可不指定数组的长度。全部元素赋初值:例如inta[8]={0,1,2,3,4,5,6,7};部分元素赋初值:例如inta[8]={0,1,2,3,4};a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]01234567a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]01234000全部元素赋初值时可不指定数组的长度:例inta[]={0,1,2,3,4,5,6,7};a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]01234567例1写出下面程序的执行结果。#includestdio.hvoidmain(){inta[6]={1,2,3},i,j;for(i=3;i6;i++)a[i]=a[i-3]+a[i-2]+a[i-1];for(i=0;i6;i++)printf(%10d,a[i]);}执行结果:12361120#defineN5#includestdio.hvoidmain(){inta[N]={1,2,3,4,5},t,i;for(i=0;iN;i++)printf(%4d,a[i]);for(i=0;iN/2;i++){t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;}for(i=0;iN;i++)printf(%4d,a[i]);}例2将一个数组中的值按逆序重新存放。二、二维数组1、二维数组的定义格式:类型说明符数组名[行数][列数];说明:在C语言中二维数组的元素按行优先顺序存放。例如:inta[2][3];含义:定义一个数组变量a,它包含2行,每行有3个数组元素。a[0][0],a[0][1],a[0][2]a[1][0],a[1][1],a[1][2]注意:0≤下标1≤行数-1;0≤下标2≤列数-1。2、二维数组的元素引用格式:数组名[下标1][下标2]例如:定义intm[2][3];则合法数组元素的引用为:m[0][0],m[0][1],m[0][2]m[1][0],m[1][1],m[1][2]例写出下面程序的执行结果。#includestdio.hvoidmain(){inta[5][5]={0},i,j;for(i=0;i5;i++)for(j=0;j5;j++)if(i==j||i+j==4)a[i][j]=1;for(i=0;i5;i++){for(j=0;j5;j++)printf(%2d,a[i][j]);printf(\n);}}说明:二维数组的初始化有三种情况。给全部元素赋初值。给部分元素赋初值。给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。2、二维数组的初始化格式:类型符数组名[行数][列数]={初值表};二维数组初始化举例1:给全部元素赋初值。例如int[][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};或写成:inta[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};11109876543210a[1][2]二维数组初始化举例2:给部分元素赋初值(没有赋初值的元素的值为0):例1inta[3][4]={{0,1},{4,5,6},{8,9,10,11}};11109806540010a[1][2]例2intb[3][4]={0,1,2,3,4,5,6};000006543210a[1][2]二维数组初始化举例3:给二维数组的全部元素赋初值,可以不指定第一维的长度,但第二维的长度不能省略。例inta[][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};或写成:inta[][4]={0,1,2,3,4,5,6,7,8,9,10,11};11109876543210a[1][2]例题:矩阵的转置。分析:将矩阵Am*n行列互换后,得一新矩阵为Bn*m。它们的元素对应关系为:ai,j=bj,imain(){inta[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};inti,j,b[4][3];for(i=0;i3;i++)for(j=0;j4;j++)b[j][i]=a[i][j];for(i=0;i4;i++){for(j=0;j3;j++)printf(%7d,b[i][j]);printf(\n);}}例题打印杨辉三角形。(要求打印N行)说明:三角形是(a+b)的n次幂展开后各项的系数。例如:(a+b)的0次幂展开后各项的系数为:1(a+b)的1次幂展开后各项的系数为:1,1(a+b)的2次幂展开后各项的系数为:1,2,1(a+b)的3次幂展开后各项的系数为:1,3,3,1(a+b)的4次幂展开后各项的系数为:1,4,6,4,1分析:杨辉三角各行的系数有如下规律(1)各行第一个数都是1;(2)各行最后一个数为1;(3)从第3行起,除上面指出的第一个数和最后一个数外,其余各数是上一行同列和前一列两个数之和。11,2,11,3,3,11,4,6,4,1a[2][1]=a[1][0]+a[1][1]a[3][3]=a[2][2]+a[2][3]表示为通式即:a[i][j]=a[i-1][j]+a[i-1][j-1]参考程序:#defineN10#includestdio.hvoidmain(){inti,j,a[N][N];for(i=0;iN;i++){a[i][i]=1;a[i][0]=1;}for(i=2;iN;i++)for(j=1;j=i-1;j++)a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;iN;i++){for(j=0;j=i;j++)printf(%6d,a[i][j]);print(“\n”);}}
本文标题:第9讲 一维数组和二维数组
链接地址:https://www.777doc.com/doc-3351500 .html