c语言课件第七章 数组

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第七章数组•构造数据类型之一•数组:有序数据的集合,用数组名标识•元素:属同一数据类型,用数组名和下标确定如:一个班30个学生的数学成绩ints[30];/*定义数组s,有30个元素*/s[0]第1个学生成绩s[1]第2个学生成绩s[2]第3个学生成绩……s[29]第30个学生成绩应用:数组与循环结合,适合于处理大批同类型数据。如计算一个班学生的平均成绩,一批数据排序等。第七章数组一维数组二维数组字符数组第七章数组§7.1一维数组一维数组的定义定义方式:数据类型数组名[常量表达式];合法标识符表示元素个数下标从0开始[]:数组运算符单目运算符优先级(1)左结合不能用()例inta[6];a[0]0145a[1]a[2]a[3]a[4]a[5]23a编译时分配连续内存内存字节数=数组元素个数*sizeof(元素数据类型)数组名表示内存首地址,是地址常量一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名[下标]其中:下标可以是常量或整型表达式例inti=15;intdata[i];(不能用变量定义数组元素个数)例inta[10];printf(“%d”,a);()必须for(j=0;j10;j++)printf(“%d\t”,a[j]);()例intdata[5];data[5]=10;//C语言对数组不作越界检查,使用时要注意一维数组的初始化初始化方式在定义数组时,为数组元素赋初值(在编译阶段使之得到初值)inta[5]={1,2,3,4,5};等价于:a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值当全部数组元素赋初值时,可不指定数组长度如inta[5]={6,2,3};等价于:a[0]=6;a[1]=2;a[2]=3;a[3]=0;a[4]=0;如inta[3]={6,2,3,5,1};()staticinta[5];等价于:a[0]=0;a[1]=0;a[2]=0;a[3]=0;a[4]=0;只给部分数组元素赋初值inta[]={1,2,3,4,5,6};编译系统根据初值个数确定数组长度一维数组程序举例例1读10个整数存入数组,找出其中最大值和最小值步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x[0](b)依次用x[i]和max,min比较(循环)若maxx[i],令max=x[i]若minx[i],令min=x[i]3.输出:max和min#includestdio.h#defineSIZE10main(){intx[SIZE],i,max,min;printf(Enter10integers:\n);for(i=0;iSIZE;i++){printf(%d:,i+1);scanf(%d,&x[i]);}max=min=x[0];for(i=1;iSIZE;i++){if(maxx[i])max=x[i];if(minx[i])min=x[i];}printf(Maximumvalueis%d\n,max);printf(Minimumvalueis%d\n,min);}x[0],x[1],x[2],…,x[9]max,minx[i]例2用数组求Fibonacci数列前20个数f[0]f[1]f[2]f[3]f[4]f[5]f[19]……...11f[19]01452319235#includestdio.hmain(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i20;i++){if(i%5==0)printf(\n);printf(%12d,f[i]);}}#defineN6main(){inta[N],b[‘B’-60],c[]={1,2,3,4,5,6},i;for(i=0;iN;i++)scanf(“%d%d”,&a[i],&b[i]);for(i=0;iN;i++)printf(“%d”,a[i]);printf(“\n”);for(i=0;iN;i++)printf(“%d”,b[i]);printf(“\n”);for(i=0;iN;i++)c[i]=a[i]+b[N-i-1];for(i=0;iN;i++)printf(“%d”,c[i]);}数组定义:必须用常量表达式数组元素引用例3排序将一组数按从小到大(递增)或从大到小(递减)的顺序排列。排序算法:(重要算法)冒泡法排序选择法排序插入法排序合并法排序…排序过程:(1)比较第一个数与第二个数,若为逆序a[0]a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束冒(气)泡法排序例3849657613273097第一趟38496513273076第二趟384913273065第三趟3813273049第四趟13273038第五趟132730第六趟4938659776132730384976971397279730971376767627301365276530651313494930492738273830381327第七趟例用冒泡法对8个数排序输入n个数给a[0]到a[n-1]for(j=0;jn-1;j++)for(i=0;in-j;i++)a[i]a[i+1]真假a[i]a[i+1]输出a[0]到a[n-1]#includestdio.hmain(){inta[10],i,j,t;printf(Input10numbers:\n);for(i=0;i10;i++)scanf(%d,&a[i]);printf(\n);for(j=0;j9;j++)for(i=0;i9-j;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(Thesortednumbers:\n);for(i=0;i10;i++)printf(%d,a[i]);}冒(气)泡法排序(1)n个数排序:趟数为n-1每趟比较的次数:n-j(j为趟数)输入n个数给a[1]到a[n]forj=1ton-1fori=1ton-ja[i]a[i+1]真假a[i]a[i+1]输出a[1]到a[n]#includestdio.hmain(){inta[11],i,j,t;printf(Input10numbers:\n);for(i=1;i11;i++)scanf(%d,&a[i]);printf(\n);for(j=1;j=9;j++)for(i=1;i=10-j;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(Thesortednumbers:\n);for(i=1;i11;i++)printf(%d,a[i]);}冒(气)泡法排序(2)排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换—第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换—第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束选择法排序:例初始:[49386597761327]j1349一趟:13[386597764927]i=12738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六趟:132738496576[97]jjjjjjjjjji=2i=3i=4i=5i=6i=1a[i]k=i输入n个数给a[1]到a[n]fori=1ton-1forj=i+1tona[j]a[k]真假k=j输出a[1]到a[n]k=ia[i]a[k]i!=k真假#includestdio.hmain(){inta[11],i,j,k,x;printf(Input10numbers:\n);for(i=1;i11;i++)scanf(%d,&a[i]);printf(\n);for(i=1;i10;i++){k=i;for(j=i+1;j=10;j++)if(a[j]a[k])k=j;if(i!=k){x=a[i];a[i]=a[k];a[k]=x;}}printf(Thesortednumbers:\n);for(i=1;i11;i++)printf(%d,a[i]);}§7.2二维数组及多维数组二维数组的定义定义方式:数据类型数组名[常量表达式][常量表达式];数组元素的存放顺序原因:内存是一维的二维数组:按行序优先多维数组:最右下标变化最快例inta[3][4];floatb[2][5];intc[2][3][4];inta[3,4];()行数列数元素个数=行数*列数inta[3][2]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]014523a[0][0]a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]intc[2][3][4]01234567………...20212223c[0][0][0]c[0][0][1]c[0][0][2]c[0][0][3]c[0][1][0]c[0][1][1]c[0][1][2]c[0][1][3]c[0][2][0]c[0][2][1]c[0][2][2]c[0][2][3]c[1][0][0]c[1][0][1]c[1][0][2]c[1][0][3]c[1][1][0]c[1][1][1]c[1][1][2]c[1][1][3]c[1][2][0]c[1][2][1]c[1][2][2]c[1][2][3]二维数组理解例inta[3][4];a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[0]a[1]a[2]行名014523a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[0][0]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]a[1][2]67101189a[0]a[1]a[2]二维数组a是由3个元素组成每个元素a[i]由包含4个元素的一维数组组成二维数组元素的引用形式:数组名[下标][下标]二维数组元素的初始化分行初始化:例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化按元素排列顺序初始化例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略初始化例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化例inta[][3]={1,2,3,4,5};a[

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功