您好,欢迎访问三七文档
第七章数组一维数组二维数组字符数组什么是数组?数组是一组类型相同有序数据的集合。7.1一维数组一、一维数组的定义例:inta[10];10个元素分别是:a[0]、a[1]、a[2]、a[3]、a[4]、....、a[8]、a[9]。注意:C语言中,数组下标从0开始。C语言不允许对数组的大小做动态定义。例如:intn=5;inta[n];inta[10];10个元素分别是:a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]二、数组元素的引用方式例:main(){inta[10];a[0]=4;a[6]=5;a[5]=7;a[7]=8;a[0]=a[5]+a[7]-a[2*3];printf(“%d\n”,a[0]);}输出:10a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]4758[例7.1]使数组元素a[0]~a[9]的值为0~9,然后逆序输出。main(){inti,a[10];for(i=0;i=9;i++)a[i]=i;for(i=9;i=0;i--)printf(%d,a[i]);}运行输出:9876543210a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]0123456789三、一维数组的初始化1、一般初始化inta[10]={0,1,2,3,4,5,6,7,8,9};intarray[10]={1,2,3,4,5,6,7,8,9,10};2、部分元素初始化inta[10]={0,1,2,3,4};仅前5个赋初值,后5个未指定初值,都默认为0;如果都不指定初值,就为内存中的任意随机数。三、一维数组的初始化3、全部元素均初始化为0,inta[10]={0,0,0,0,0,0,0,0,0,0};inta[10]={0}4、在对全部数组元素赋初值,可以不指定数组长度。例如:inta[5]={1,2,3,4,5};可以写成:inta[]={1,2,3,4,5};四、一维数组程序举例[例7.2]用数组来处理Fibonicci数列的前20项。(1,1,2,3,5,8,13,21…………)F1=1n=1F2=1n=2Fn=Fn-1+Fn-2n≥31123581321……f[0]f[1]f[2]f[3]f[4]f[5]f[6]f[7]…...程序:main(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-1]+f[i-2];for(i=0;i20;i++){if(i%5==0)printf(“\n”);printf(%12d,f[i]);}}课堂编程序:1、有一个已经排好顺序的数组,今输入一个数,要求按原来排序的规律将它插入到数组中。a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]2,4,8,15,28,57,99,110,688302,4,8,15,28,30,57,99,110,688main(){inta[10]={2,4,8,15,28,57,99,110,688};inti,j,x;scanf(%d,&x);for(i=0;i9;i++)if(xa[i])break;for(j=8;j=i;j--)a[j+1]=a[j];a[i]=x;for(i=0;i10;i++)printf(%d,a[i]);}课堂编程序:1、评分系统。(完成比赛中的记分功能,记分规则:对于每个参赛选手,共10个评委打分,每个评委满分10分,去掉一个最高分和一个最低分,剩下取平均值。)要求:用数组存放10个评委打的分。main(){inti;floats[10],max=0,min=10,sum=0,ave;for(i=0;i=9;i++){scanf(%f,&s[i]);if(s[i]0||s[i]10){printf(error!!pleaseinputagain:);i--;}elseprintf(thinkyou!!\n);}for(i=0;i=9;i++){if(s[i]max)max=s[i];if(s[i]min)min=s[i];sum=sum+s[i];}ave=(sum-max-min)/8;printf(%.2f,ave);}7.2二维数组一、一维数组的定义例:inta[3][4];floatb[5][10];a为3×4(3行4列)的数组b为5×10(5行10列)的数组怎样理解二维数组?内存中的实际存储情况例: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][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]二维数组元素在内存中的存放循序:按行存放,即:先顺序存放第一行的元素,再存放第二行的元素,依次类推。最右边的下标变化最快,最左边(第一维)的下标变化最慢。二、二维数组中元素的引用用数组名和下标引用元素。例:floata[2][3];此数组有6个元素,按如下方式引用各元素:a[0][0]、a[0][1]、a[0][2]、a[1][0]、a[1][1]、a[1][2]注意:数组floata[2][3]中无元素a[2][3]。(下标从0始)三、二维数组的初始化1、分行赋值:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};1234567891011122、全部数据写在一个大括号内:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};3、部分元素赋值:inta[3][4]={{1},{5},{9}};100050009000仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋值元素指定初值0。4、如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度。inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};与下面定义等价:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};四、二维数组程序举例[例7.5]有一个3×4的矩阵(如下图),要求编程序以求出其中值最大的那个元素的值及其所在的行号和列号。算法:首先把第一个元素a[0][0]作为临时最大值max,然后把临时最大值max与每一个元素a[i][j]进行比较,若a[i][j]max,把a[i][j]作为新的临时最大值,并记录下其下标i和j。当全部元素比较完后,max是整个矩阵全部元素的最大值。25101067894321main(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];/*第一个元素a[0][0]作为临时最大值max*/for(i=0;i=2;i++)/*用两重循环遍历全部元素*/for(j=0;j=3;j++)if(a[i][j]max){max=a[i][j];row=i;colum=j;}printf(max=%d,row=%d,colum=%d\n,max,row,colum);}运行结果:max=10,row=2,colum=1注意:本例中得到的行列值从0始。25101067894321例:求一个3*3矩阵对角线元素之和。12367891011intx[3][3]x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]x[2][0]x[2][1]x[2][2]#includestdio.hmain(){intj,a[3][3]={{1,2,3},{4,5,6},{7,8,9}};intsum=0,sum2=0,i;for(i=0;i=2;i++)sum=sum+a[i][i];for(i=2,j=0;i=0;j++,i--)sum2=sum2+a[j][i];sum=sum+sum2;printf(%d\n,sum);}7.3字符数组字符数组:存放字符数据的数组,每一个元素存放一个字符。一、定义字符数组例:charc[10];c[0]='I';c[1]='';c[2]='a';c[3]='m';c[4]='';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';注意:字符型与整型可以通用,但有区别。charc[10];/*在内存中占10字节*/intc[10];/*在内存中占20字节*/二、字符数组的初始化1、逐个元素初始化charc[10]={'I','','a','m','','h','a','p','p','y'};c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappyc[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]c[11]c[12]c[13]Iamhappy\0\0\0\02、数据少于数组长度,多余元素自动为“空”。charc[13]={'I','','a','m','','h','a','p','p','y'};c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iamhappy3、指定初值时,未指定数组长度,则长度等于初值个数。charc[]={'I','','a','m','','h','a','p','p','y'};有10个初值,因此,数组c的长度是10。三、字符数组的引用[例7.6]输出一个字符串。main(){inti;charc[10]={'I','','a','m','','a','','b','o','y'};for(i=0;i10;i++)printf(“%c”,c[i]);printf(\n);}输出结果:Iamaboy四、字符串C语言中,字符串作为字符数组处理。字符数组可以用字符串来初始化。例:charc[]={Iamhappy};或:charc[]=Iamhappy;c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]Iamhappy\02、字符串在存储时,系统自动在其后加上结束标志‘\0’(占一字节,值为二进制00000000)charc[14]={Iamhappy”};已明确指定字符数组的长度为14,但只给10个初值,不足部分全部补'\0'。c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9]c[10]c[11]c[12]c[13]Iamhappy\0\0\0\0五、字符数组的输入输出两种方法:1、用“%c”格式符逐个输入输出。2、用“%s”格式符按字符串输入输出。“%s”格式输出字符串时,printf()函数的输出项是字符数组名,而不是元素名。只写数组名,代表数组的起始地址。[例7.6]:main(){inti;charc2[15];charc1[]={Howareyou?};scanf(%s,c2);for(i=0;i12;i++)printf(%c,c2[i]);printf(%s,c1);}六、字符串处理函数1、puts()函数功能:输出字符串(以‘\0’结尾)。例:charc[6]=“China”;printf(%s\n,c);puts(c);2、gets()函数功能:输入字符串到数组。例:charstr[12];gets(str);注意:gets()、puts()一次只能输入输出一个字符串。而scanf()、printf()可以输入输出几个字符串。3、strcat()函数功能:实现字符串的连接例:main(){c
本文标题:C语言教程第七章
链接地址:https://www.777doc.com/doc-2907999 .html