第6章数组.ppt
以下程序,执行后的输出结果是 #include int main() int i; for(i=0;i3;i+) switch (i) case 1: printf(”%d”,i); case 2: printf(”%d”,i); default: printf(”%d”,i); return 0; ,011122,6.1 一维数组的定义和引用 6.2 二维数组的定义和引用 6.3 字符数组,第6章 数 组,6.1 一维数组的定义和引用,一维数组的定义方式: 类型说明符 数组名常量表达式; int a10; char c120;,说明:(1) 数组名定名规则和变量名相同。 (2) 数组名后是用方括弧括起来的常量表达式, 不能用圆括弧。 int a(10); int 5a10; int ff10; (3) 常量表达式表示元素的个数,即数组长度。 int a10; char c120;,a0 a1 a9,c10 c11 c119,(4) 常量表达式中可以包括常量和符号常量,不能包含变量。,int n; scanf(“%d“,,#define NUM 10 int aNUM; ,int n=9; int an;,一维数组元素的引用,数组必须先定义,后使用。 c语言规定只能逐个引用数组元素,而不能一次引用整个数组。 数组元素的表示形式: 数组名下标 int a10; a3=8; a7=12; 下标可以是整型常量或整型表达式: a0=a5+a7+a2*3;,例6.1数组元素的引用。 #include int main() int i,a10; for (i=0; i=0; i- -) printf(“%d “,ai); return 0; ,9 8 7 6 5 4 3 2 1 0,scanf(”%d”,一维数组的初始化,在定义数组时对数组元素赋以初值。 int a10=0,1,2,3,4,5,6,7,8,9; a0=0,a1=1,a2=2, a9=9 (2) 可以只给一部分元素赋值。 int a10=0,1,2,3; a0=0,a1=1,a2=2,a3=3,a4=0,a9=0 (3) 若想使一个数组中全部元素值为0,可以写成 int a10=0,0,0,0,0,0,0,0,0,0; int a10=0; 不能写成 int a10=0*10;,(4) 在对全部数组元素赋初值时,可以不指定数组长度。 int a5=1,2,3,4,5; 可以写成 int a=1,2,3,4,5; int b=11,56,231;,int a10=1,2,3,4,5; int b10=11,56,231,13,67,162;,一维数组程序举例,例6.2用数组来处理求fibonacci数列问题。 #include int main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5= =0) printf(“n“); printf(“%12d“,fi); return 0; ,运行结果如下: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,例6.3用起泡法对10个数排序(由小到大)。 起泡法的思路是:将相邻两个数比较,将小的调到前头。,图7.3,#include int main() int a11, i,j,t; printf(“input 10 numbers :n“); for (i=1;iai+1) t=ai;ai=ai+1;ai+1=t; printf(“the sorted numbers :n“); for(i=1;i11;i+) printf(“%d “,ai); return 0;,回第七章,二维数组的定义 二维数组定义的一般形式: 类型说明符 数组名常量表达式常量表达式 float a34,b510;int c4; 注意:不能写成 float a3,4,b5,10;,6.2 二维数组的定义和引用,可以把a0、a1、a2看作是3个一维数组的名字。,c语言中,二维数组中元素排列的顺序是:按行存放. c允许使用多维数组。例如,定义三维数组的方法是 float a234;,多维数组元素在内存中的排列顺序:第一维的下标变化最慢, 最右边的下标变化最快。 float a234 a000a001a002a003 a010a011a012a013 a020a021a022a023 a100a101a102a103 a110a111a112a113 a120a121a122a123,二维数组的引用 二维数组的元素的表示形式为: 数组名下标下标 a23 a01 下标可以是整型表达式, a2-12*2-1。 注意:a2,3,a2-1,2*2-1 数组元素可以出现在表达式中,也可以被赋值: b12=a23/2 在使用数组元素时,注意下标值: int a34; a34=3;,二维数组的初始化,分行给二维数组赋初值。 int a34=1,2,3,4,5,6,7,8,9,10,11,12; (2)可以将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。 int a34=1,2,3,4,5,6,7,8,9,10,11,12;,(3) 可以对部分元素赋初值。 int a34=1,5,9;,1 0 0 0 5 0 0 0 9 0 0 0,也可以对各行中的某一元素赋初值: int a34=1,0,6,0,0,11;,也可以只对某几行元素赋初值: int a34=1,5,6;,1 0 0 0 5 6 0 0 0 0 0 0,也可以对第2行不赋初值: int a34=1,9;,1 0 0 0 0 6 0 0 0 0 11 0,1 0 0 0 0 0 0 0 9 0 0 0,(4) 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省. int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于: int a4=1,2,3,4,5,6,7,8,9,10,11,12;,在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。 int a4=0,0,3,0,10;,0 0 3 0 0 0 0 0 0 10 0 0,二维数组程序举例,例6.4将一个二维数组行和列元素互换,存到另一个二维数组中。,a = 1 2 3 b = 1 4 4 5 6 2 5 3 6,二维数组程序举例,例6.4将一个二维数组行和列元素互换,存到另一个二维数组中。,#include int main() int a23=1,2,3,4,5,6, b32,i,j; printf(“array a:n“); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(“%5d“,aij); bji=aij; printf(“n“); printf(“array b:n“); for (i=0;i=2,i+) for(j=0;j=1;j+) printf(“%5d“,bij); printf(“n“); return 0; ,例6.5 有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 N-S流程图表示算法:,#include int main() int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=i; colum=j; printf(“max=%d,row=%d,colum=%d“,max,row,colum); return 0; ,max=10,row=2,colum=1,回第七章,字符数组的定义 char c10; c0='I'c1=' 'c2='a'c3='m'c4=' ' c5='h'c6='a'c7=p'c8=p'c9='y' 赋值后数组的状态如图所示:,6.3 字符数组 用来存放字符数据.字符数组中的一个元素存放一个字符.,int c10;,字符数组的初始化,char c10=I, ,a,m, ,h,a,P,P,y; char c10='c',' ','p','r','o','g','r','a','m',如果提供的初值个数与预定的数组长度相同,在定义时可 以省略数组长度,系统会自动根据初值个数确定数组长度: char c ='I',' ','a','m',' ','h','a','p','p','y',也可以定义和初始化一个二维字符数组: char diamond55=' ',' ','*',' ','*',' ' ,'*','*',' ',' ',' ','*',' ','*',' ','*',' ',' ','*',* * * * * * * * ,例6.6 输出一个字符串。 #include int main() char c10='I', ' ','a','m',' ','a',' ','b','o','y' int i; for(i=0;i10;i+) printf(“%c“,ci); printf(“n“); return 0; ,I am a boy,例6.7 输出一个钻石图形。 #include int main() char diamond5= ' ',' ','*', ' ','*',' ','*', '*',' ', ' ',' ','*', ' ','*',' ','*', ' ',' ','*' ; int i,j; for (i=0;i5;i+) for (j=0;j5;j+) printf(“%c“,diamondij); printf(“n“); return 0; ,* * * * * * * *,字符串和字符串结束标志 在c语言中,将字符串作为字符数组来存放。 字符串结束标志:以字符0代表。,系统对字符串常量自动加一个0作为结束符。 C Program,说明:0代表ASCII码为0的字符, 是一个“空操作符”,printf(“How do you do?n“);,在内存中存放时,系统自动在最后一个字符n的后面加了一个0作为字符串结束标志,可以用字符串常量来使字符数组初始化。 char c=“I am happy“; 也可以省略花括弧,直接写成 char c=“I am happy“;,char c ='I',' ','a','m',' ','h','a','p','p','y','0',char c ='I',' ','a','m',' ','h','a','p','p','y',字符数组的输入输出,逐个字符输入输出。用格式符“%c”: for(i=0;i10;i+) printf(“%c“,ci); printf(”%c,%c”,c0,c1);,(2) 将整个字符串一次输入或输出。用“%s”格式符: char c=“china“; printf(“%s“,c);,china,注意: (1) 输出字符不包括结束符0。 (2) 用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。 (3) 如果数组长度大于字符串实际长度,也只输出到遇0 结束。 char c10=“china“; printf(“%s“,c);,china,(4) 如果一个字符数组中包含一个以上0,则遇第一个 0时输出就结束。,char c ='I',' ','a','m',' ','h','a', '0','p', 'y','0',printf(“%s“,c);,I am ha,可以用scanf函数输入一个字符串: scanf(“%s“,c);,如果利用一个scanf函数输入多个字符串,则以空格分隔: char Strl5,Str25,Str35; scanf(“%s%s%s“,Str1,Str2,Str3); How are you?,从键盘输入:china,若改为 char str13; scanf(“%s“,str); 如果输入以下12个字符 How are you?,char c6=”China”;,printf(“%s“,c);,c:,China,练习: #include int main() int a44=1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6; int i,s=0; for(i=0;i4;i+) s+=ai1; printf(”%dn”,s); return 0; ,19,. 作业:6.4,字符串处理函数(上机),回第七章,