1、,C语言程序设计,数 组,第七章,第七章 数 组,7.1 一维数组 7.2 字符数组与字符串 7.3 多维数组 7.4 习题,第七章,概述,数组类型,第四章有关数据类型的叙述中,介绍了C语言的数据类型。基本数据类型有:,本章要介绍构造类型的数据数组。构造类型数据是由上述基本类型数据按一定规则排序构成的数据集合体。是C语言的重要内容。构造类型数据有:,int 整型数据,结构体类型,共用体类型,float 实型数据,char 字符型数据,引例,main( ) int n, sum;sum=0;for(n=0;n=49;n+)sum=sum+2*n;printf(“sum=%d n”,sum); ,
2、计算 0+2+4+6+ +98。 设: n 为数列项变量和循环控制变量, sum为累加和变量。 初始值:n=0,sum=0;循环条件:n=49;n=1,2,3,C语言引入了一个重要的数据结构数组,它是具有相同数据类型的变量集合,这些变量具有相同的名字,但用不同的下标表明数据的位置,称这些变量为数组元素。,7.1 一维数组,一维数组的定义和引用,对引例中的数列求和,用数组编写的程序如下: 10 #include “stdio.h“ 20 main() 30 int a50; /*定义数组a*/ 40 int n,sum=0; /*定义变量n和sum*/ 50 for(n=0;n=49;n+) /
3、*循环50次*/ 60 an=2*n; /*给数组元素赋值*/ 70 printf(“%d “,an); /*输出数组元素*/ 80 sum+=an; /*将数组元素作累加*/ 90 100 printf(“sum=%dn“,sum); /*输出累加和*/ 110 ,表示数组a中有50个元素,且均为整型。,例:int name20;char string100;float array55;,数组必须先定义,后引用。,数组名:对于数组元素来说,具有一个共同的名字,即数组名,用标识符来表示。,数据类型:对于数组元素来说,都属于一种数据类型,即int、float、char等这些基本数据类型。 数组是
4、建立在基本数据类型的基础之上的,因此数组为构造类型。 数组长度:方括号里的数字(数组下标)表示数组中所包含的元素个数,用常量表达式表示,不可为变量,且数组下标从0开始编号。,数据类型说明符 数组名常量表达式;,一维数组的定义格式为:,(1) 数据类型: 是指数组元素的数据类型。有int型、 float型、 char型。 (2) 数组名: 代表一个数据集合的数组的名字。数组名用标识符来命名。 (3) 下标符: 下标符用方括号即“ ”。不能用圆括号和其它符号。 (4) 元素个数: 用来说明数组中存放元素的个数(即数组含数据的数量)。可以是整型常量或整型常量表达式。元素个数必须是大于或等于1的整数。
5、 (5) 数组定义在程序中的位置:一定要在引用该数组前定义。即在程序开始的位置。,说明:,一维数组的定义格式:,数据类型 数组名元素个数;,例: int data4; 该数组有4个元素,它们是:,data0 data1 data2 data3,例: int x; int weightx; char name(50); int num-5; float deptnamex+15; int array10.5;,举例,举例,例: #define BUFSIZE 512 #define STACKSIZE 1024 int inbufferBUFSIZE; char outbufferSTACSIZ
6、E; float s15+5,x10;,宏定义, 用指定的标识符来代替后面的字符串。 等效为 inbuffer512; 程序在编译时进行替换。,例: int weight10; char string15; float data50; char c100+50;,定义说明weight数组中有10个元素,元素的数据类型为整型int,数组元素的存储和使用,每个数组元素都占用内存中的一个存储单元,每个元素都是一个变量,可以像以前讲过的普通变量一样使用,只不过数组元素是通过数组名和方括号“ ”里的下标来确定的。,例: int a15;, 数组名a。 数组元素的数据类型为int整型数据。 数组元素的下标
7、值从0开始。 数组元素的个数为15个,它们是:a0、a1、a2 a13、a14 数组名a是数组存储区的首地址,即存放数组第一个元素的地址。a&a0;因此数组名是一个地址常 量。不能对数组名进行赋值和运算。,a0 a1 a2 a3. . .a12 a13 a14,2000 2002 2004 2006. . .2026 2028 2030,内存地址 内存 数组元素,一维数组的存储形式,系统为数组元素在内存中分配连续的存储单元。,数组的引用就是对数组元素(数据)的读取操作。 数组的引用与变量的引用类似,数组的引用也是先定义后引用。与变量不同的是不能对数组整体进行(读取)操作,只能对数组的元素进行操
8、作(a=2*n;) 。,一维数组的引用格式:,数组名 下标 , 下标可以是常量或常量表达式。 下标也可以是变量或变量表达式。 下标如果是表达式, 首先计算表达式, 计算的最终结果为下标值。 引用时,下标值若不是整型,C系统会自动取整。 下标值从0开始。而不是从1开始。,数组的引用下标不能越限,即引用时的下标不能超过或等于定义时的下标值。,注意:,数组元素的存储和使用,举例,例: int a10,i,p; i=2; a2*i-1=1; a5=1; p=a5; a10-10=1;,例: int a10; int i=2; a=11; i=a*i; printf(“a=%d”,a);,不能对数组整体
9、进行读取操作, 即不能对数组名进行引用。,下标为变量表达式。 对数组a的第六个元素a5赋值1。 将数组a的第六个元素a5的值赋给变量p。 将1赋给数组a的第一个元素a0。,例: int a10; a5.5=1; a(6)=1; a10=a0-a1;,下标值可以是小数。 下标符号不能是圆括号。 下标上限超过或等于定义时的下标值。,在实际编程中给数组各元素赋值的常用方法之一: 利用循环结构给数组各元素赋值,例 读程序写出输出结果。,a2*i=2*i i=0, a0=0 i=1, a2=2 i=2, a4=4. i=7, a14=14,a2*i-1=2*i*i-1 i=1, a1=1 i=2, a3
10、=7 i=3, a5=17i=7, a13=97,a0=0 a1=1 a2=2 a3=7 a4=4 a5=17 a6=6 a7=31 a8=8 a9=49 a10=10 a11=71 a12=12 a13=97 a14=14,int a4,i; for(i=0;i4;i+)ai=i+1;,main( ) int i,a15;for(i=0;i8;i+)a2*i=2*i;for(i=1;i8;i+)a2*i-1=2*i*i-1;for(i=0;i15;i+)printf(“a%d=%dn”,i,ai);,运行程序,数组的初始化就是在定义数组的同时给其数组元素赋初值。 在数组定义时初始化方式是在程
11、序编译时完成的,即在程序编译时,将数值赋给数组元素。,一维数组初始化的格式:,数据类型标识符 数组名元素个数= 数值1,数值2, 数值n ;,一维数组的初始化, 花括号 中的数值是给数组元素赋初值的数值。赋值是按对应次序进行。 花括号 中的数值之间用逗号“,”分开。 如: int x5= 1,2,3,4,5 ; 则数组中各元素的初始值为: x0=1, x1=2, x2=3, x3=4, x4 =5。 花括号 中数值的个数要少于或等于数组所定义的元素个数花括号 中数值的个数如果少于数组元素的个数,则多余的数组元素初始化的数值为0。如: int x5= 3,4,7 ;则数组中各元素的初始值为: x
12、0=3, x1=4, x2=7, x3=0, x4=0。 花括号 中数值的个数多于数组元素的个数是语法错误。,一维数组的初始化,(3) 对于存储类型为static静态或extern外部类型的数组,如果不在定义时进行赋值, 则多数编译系统都将其值初始化为0。 如: static int x3; 则数组中各元素的初始值为: x0=0, x1=0, x2=0。,(2) 在数组初始化中,可缺省方括号中的下标值(元素个数) , 数组元素个数由花括号中所赋初始值的数值个数来决定。如: int y = 6,4,1,7,8,10 ; 等价于 int y6= 6,4,1,7,8,10 ;,一维数组的初始化,例
13、读程序,写运行结果。,main( ) int a =1,2,3,4;int i,j,s;for( i=3,j=1,s=0; i=0; i- ) s=s+a i *j;j=j*10;printf(“s=%dn“,s); ,分析: 循环变量 s=s+ai*j j=j*10i=3: s=4, j=10;i=2: s=34, j=100;i=1: s=234, j=1000;i=0: s=1234, j=10000。,S=1234,运行程序,一维数组的应用举例,分析: 外循环变量 内循环变量 nj=ni+1i=0: j=0 n0=n0+1=1j=1 n1=n0+1=2i=1: j=0 n0=n1+1=
14、3 j=1 n1=n1+1=3,例 读程序,写运行结果。,main( ) int n3;int i,j,k;for(i=0;i3;i+ +)ni=0;k=2;for( i=0; ik; i+ )for( j=0; jk; j+ )n j =n i +1;printf(“n0=%dn“,n0);printf(“n1=%dn“,n1);printf(“n2=%dn“,n2); ,运行程序,n0=3 n1=3 n2=0,将数组 n 中的全部元素赋值 0,一维数组的应用举例,例: Fibonacci(斐波纳契)数列计算问题。 规则是:1) 当 n=1或 n=2 时,F n =1;2)当 n=3 时,
15、F(n) = F(n-1) + F(n-2) 。即:n=1, F(1)=1; n=2, F(2)=1;n=3, F(3)=F(2)+F(1)=2;n=4, F(4)=F(3)+F(2)=3;n=5, F(5)=F(4)+F(3)=5;n=6, F(6)=F(5)+F(4)=8;. .n=3, F(n)=F(n-1)+F(n-2)。程序见下页,兔子问题 (它是中世纪最杰出的数学家Fibonacci提出的) :如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔,在出生后的第三個月里,又能开始生一对小兔,假定在不发生死亡的情況下,由一对出生的小兔开始,50个月后有多少对兔子? 根据題意,以Fn表示
16、n个月以后兔子的总对數,这个数列就叫作费氏数列,引起了后世源源不断的兴趣。,利用斐波那契数列來做出一个新的数列: 方法是把数列中相邻的数字相除,以组成新的数列,当n 无限大时,数列的极限是黃金分割比,#include “stdio.h” main( ) int n, f21;f1=f2=1;for(n=3;n=20;n+)fn=fn-1+fn-2;for(n=0;n20;n+) if(n%5=0)printf(“n”);printf(“%10d”,fn+1); ,输出显示每5个数占一行, 即输出5个数插入一个回车符。,例 Fibonacci(斐波纳契)数列计算,当3=n=20时, 计算f(n)
17、=f(n-1)+f(n-2),1 1 2 3 58 13 21 34 5589 114 233 377 610987 1597 2584 4181 6765,运行程序,n=1, F(1)=1; n=2, F(2)=1; n=3, F(3)=F(2)+F(1)=2; n=4, F(4)=F(3)+F(2)=3; n=5, F(5)=F(4)+F(3)=5; n=6, F(6)=F(5)+F(4)=8;. . n=3, F(n)=F(n-1)+F(n-2)。,例: 任给n个数,按由小到大对其排序,并输出结果。 “冒泡”排序法思路:将相邻两个数比较,将小的数调到前头(或将大的数调到后面)。 若有6个
18、数,分别是9,8,5,4,2,0。 第一趟 (见下图): 第一次,将第1个数8和第2个数9进行比较,将小的数调到前头,即8和9对调位置 第二次,将第2个数9和第3个数5进行比较,将小的数调到前头,即9和5对调位置 第三次、第四次、第五次,如此进行共5次,结果得到8-5-4-2-0-9的顺序,最大的数9成为最下面的一个数.最大的数位置“沉底”,最小的数0向上“浮起”一个位置,第五趟:结果 0 2,第四趟: 结果 2 04,第三趟: 结果 4 2 0 5,第二趟 (见下图) : 第二趟对余下的5个数(8-5-4-2-0)按上述的方法进行下去。经过四次比较,得到次大的数8。如此进行下去。6个数要比较
19、5趟。结果得到:5-4-2-0-8的顺序,次大的数8“沉底”。第三趟、第四趟、第五趟的道理一样。 第一趟,比较五次。第二趟,比较四次。第三趟,比较三次。第五趟,比较一次。第i趟,比较n-i次(n排序数的个数)。 如果有n个数,则进行n-1趟比较,在第i趟的比较中要进行n-i次两两比较。,第二趟: 第1次 第2次 第3次 第4次 结果8 5 5 5 5 5 8 4 4 44 4 8 2 22 2 2 8 00 0 0 0 8,最后6个数的排序结果是:0-2-4-5-8-9(从小到大)。,#include #define N 10 main( ) int aN;int i,j,temp;print
20、f(“input N numbers:n”);for(i=0;i=N-1;i+) scanf(“%d”,从键盘接收N个数据放入数组a中,j是趟次循环变量( 外循环变量), i是每趟中两两比较次数变量( 内循环变量) 。,比较相邻两个数的大小,将较小的数放在前面,input 10 numbers: 1 0 4 8 12 65 -76 100 -45 123 the sorted numbers: -76 -45 0 1 4 8 12 65 100 123,运行程序,for(j=1;jai+1) temp =ai; ai=ai+1; ai +1=temp; ,/*定义符号常量,对几个数排序,N的值
21、就是几*/,例:求20个数的最大值 分析:1)设一个 a20,max,i 2)设max=a0 3)用循环求最大值,main( ) int a20,i,max; for(i=0;i20;i+)scanf(“%d”, ,思考题: 将题目改为求一维数组a20中的最大值及其位置,如何修改程序?,增加n,增加 n=0,增加 n=i,7.2 字符型数组与字符串,7.2.1 字符数组 前面我们给大家介绍的都是数值型数组,即数组元素都是数值。 而本节中的数组,其每个元素都是一个字符,也就是说,数组元素的数据类型都是char类型。 除此之外,它与前面讲的数组没有区别。前面介绍的数组的定义、数组的存储形式和数组的
22、引用等都适用于字符型数组。,编写程序将Good luck存放在一维数组中,并输出。,#include main() char a9; int i=0;a0=G; a1=o; a2=o; a3=d; a4= ; a5=l; a6=u; a7=c; a8=k;for(i=0;i=8;i+) printf(“%c“,ai); ,为每个数组元素赋值: 前面讲过,在C语言中,字符必须要用单引号括起来。,字符型数组的定义:char 数组名字符个数;,输出每个数组元素的值: 由于数据类型是char,因此在输入输出时,相应地要采用%c的格式。,运行结果 Good luck, 字符型数组用于存放字符或字符串,
23、每一个数组元素存放一个字符(的ASCII码), 它在内存占用一个字节的空间。, 用于存放单个字符的字符数组和字符变量的作用相同, 但表达形式不同。例: char c;char c1;,字符数组初始化,char a9=G,o,o,d, ,l,u,c,k; char b9=G,o,o,d; char c =G,o,o,d, ,l,u,c,k; char d9;,初始化字符数组a:9个字符依次赋给a0a8,初始化时,提供的数据个数如果少于数组元素个数,则多余的数组元素初始化为空字符0,即b0=G; b1=o; b2=o; b3=d; b5=0; b6=0; b7=0; b8=0。此法可用于给部分元素
24、赋值,如果对全部元素初始化,可不指定方括号中的数组长度,元素个数由花括号中所赋初始值的数值个数来决定。 等价于char c9=G,o,o,d, ,l,u,c,k;,/*没有明确初始化,则对于静态型和外部型数组元素初始化为0,而自动型数组元素的值不确定。*/,字符数组初始化,char e9=G,o,o,d, ,l,u,c,k, ,t,o, ,y,o,u;,/*如果提供的字符个数多于数组元素个数,系统会报错*/,像“well done”这样,用双引号括起来的一串字符称为字符串。 在C语言中,是用字符数组来处理字符串的。 存放字符串时,在有效字符后面要有一个字符0,作为字符串的结束标志。,编程将字符
25、串 “well done”存放在一维字符数组中。 #include main() char a10; /*定义字符数组*/ int i=0;a0=w; a1=e; a2=l; a3=l; a4= ; /*为每个元素赋值*/a5=d; a6=o; a7=n; a8=e; a9=0;for(i=0;i=9;i+) /*输出每个数组元素的值*/printf(“%c“,ai); ,7.2.2 字符串,在定义字符串数组时,其元素个数要比字符串的字符个数多1个,以便保留字符串结束标志符0。,运行结果为 well done,字符串数组的初始化,(1)用字符常量初始化数组,(2)用字符串常量初始化数组,字符串
26、数组的初始化即在定义字符串数组的同时进行赋值。有两种方法。,例如: char str6= C, h, I, n, a, 0 ; 数组str6被初始化为: “ China ”。 用字符常量给数组赋初值要用花括号括将赋值的字符常量括起来。,例如: char string6=“China”; char string9=“China”; 用字符串常量初始化数组时,可用也可不用花括号。不管用字符常量给字符数组赋初值,还是用字符串常量初始化数组,若字符个数少于数组长度,程序都自动在末尾字符后加0。,以上两种方法效果基本一样, 但后者要简单。,可不写,用字符串常量初始化时,字符数组的下标也可以省略,其数组存
27、放字符的个数由赋值的字符串的长度决定。 例如: char str = “1a2b3c”; 等价于char str7 = “1a2b3c”; 初始化时,若字符个数与数组长度相同,则字符末尾不加0,此时字符数组不能作为字符串处理,只能作字符逐个处理。初始化时是否加0要看是否作字符串处理。,1. 字符型数组的输入 / 输出,(1)用getchar( ) 对字符数组进行赋值。调用格式:getchar ( );,(2)用gets( ) 对字符串数组进行赋值。格式:gets (字符串数组名);,C 语言标准库函数中, 提供了大量有关字符和字符串的操作函数, 包括: 字符型数组的输入/输出函数和字符串处理函
28、数,例:char c15;for(i=0;i14;i+)ci=getchar( ); getchar( )一次只能从键盘接收一个字符。,例:char string15;gets(string);,从键盘输入:Computer 该函数将“Computer” 字符串赋给字符数组string。,5.2.3 字符串处理函数,(3)用scanf( ) 对字符数组进行赋值,例:char c15;for(i=0;i15;i+)scanf(“%c”,例:char c15;scanf(“%s”,c); 或 scanf(“%s”,&c0),当在键盘输入完要输入的字符串时, 字符数组C自动包含一个 0 结束标志。
29、scanf ( )的格式要求操作数是地址。但 scanf (“%s”, 的写法是不正确的。此时是字符数组, 对其操作不能加地址运算符号。因为, 字符数组名是字符串第一个字符的地址, 是地址常量。,字符串结束标志: 空格、TAB、回车,从键盘读取一个字符:scanf(“%c”, 数组元素地址); 从键盘读取一串字符:scanf(“%s”, 数组名);,(4)用putchar ( ) 输出字符数组中的内容。putchar (字符名);,例:char c20=“Microsoft PowerPoint ”;for(i=0;i20;i+)putchar(ci);putchar( )一次只能向屏幕输出一
30、个字符。,(5)用puts( )输出字符数组中的内容。puts (字符串数组名);,例:char string26=“Microsoft PowerPoint ”;puts(string); puts函数将字符数组sring中的所有字符输出到屏幕上,遇0结束。,(6)用printf ( ) 输出字符、字符串数组中的内容。,例:char c15=“program”;for(i=0;i15;i+)printf(“%c”,ci);,例:char c15=“program”;printf(“%s”,c);,printf ( )语句在输出字符串数组时, 可以直接引用字符串数组(字符串变量) 名。因为,
31、字符串数组(字符串变量) 存放的是字符串第一个字符的地址码。遇0结束!,向显示器输出一个字符:printf(“%c”, 数组元素); 向显示器输出一串字符:printff(“%s”, 数组名);,字符型数组的赋值,int data14= 4, 2, 5 ,6; int data26= 2 , 6 , 3 ; int data310; data31=200;,char str16=h,e,l,l,o; char str26=“hello”; char str3 =“how are you ”;,最简单的赋值方式,标准C中在函数内部 初始化必须为static型,数据型数组,字符型数组,char s
32、tr41; char str510; str41=A; str51=A; str510= “ how are you ”; ,不能用字符串常量给字符串数组赋值, 只能赋初值!,int data4,i; for(i=0;i4;i+)scanf(“%d”,数值型数组和字符数组的输入输出在使用中的区别,char str20; scanf(“%s”, str); printf(“%sn ”,str);,错误 scanf(“%d”,data); printf(“%d”, data);,返回,例 将从键盘上输入的字符串的小写字符变成大写字符, 并输出。,#include “stdio.h” main( )
33、 char string25;int i;printf(“n Enter a string :”);scanf(“%s”,string);i=0;while(stringi!=0) if(stringi=a ,abCdeFGhijkLMN ABCDEFGHIJKLMN,设:输入的字符串存入字符数组string 中。,运行程序,main( ) int i;char str =“1a2b3c“;for ( i=0; stri!=0; i+)if ( stri=0 ,例 编程将字符串“1a2b3c”中的数字和字母分开, 并输出。,123 abc,程序运行,找出并输出数字,找出并输出字母,例 输入一个
34、字符串,求其长度。,#include “stdio.h“main( ) int i=0;char str30;printf(“nEnter a string:“);gets(str);while(stri!=0)i+;printf(“string length:%d“,i);,Enter a string: c language string length:10,运行程序,分析:1) 设 字符数组 str30 2) 设变量 i =0 3) stri!=0 i+,例 编写一个复制字符串的程序( 即将字符串s2复制给字符串s1) 。,#include “stdio.h“main( ) int i;
35、char s120, s220;printf(“nEnter a string2:“);gets(s2);for (i=0; (s1i=s2i)!=0; i+);printf(“string1:%s“, s1);,Enter a string2: abc string1: abc,运行程序,注意: 字符串的复制不能用赋值 运算来实现。即:s1=s2 ,此循环体为空语句,例 从键盘输入两个字符串, 将其首尾相接后输出。,main( ) char str150,str220;int i,j;printf(“Enter string No.1:n”);scanf(“%s”,str1);printf(
36、“Enter string No.2:n”);scanf(“%s”,str2);i=j=0;while(str1i!=0)i+;while(str1i+=str2j+)!=0);printf(“string No.1-%sn”,str1); ,把第二个字符串接在第一字符串的尾部 while(str2j!=0) str1i=str2j;i+;j+;str1i=0;,Enter string No.1: abcdefg Enter string No.2: hijklmnop string No.1-abcdefghijklmnop,把字符数组str1下标 i 移到其字符串的尾部。 为后面的连接做
37、好准备。,运行程序,返回,注意: 二个字符串的连接不能用加运算来实现。 即:s1s2 思路:1)找到第一个字符串的0处 2)从0处将第二个字符串复制过来,字符串处理函数, 字符串输出函数 puts(string)char string ;, 字符串输入函数 gets(string)char string ;, 字符串连接函数 strcat(string1,string2)char string1 ;char string2 ;将string1与string2连接,结果放在string1中。, 字符串拷贝函数 strcpy(string1,string2)char string1 ;char s
38、tring2 ;将string2中的字符拷贝到string1中。, 测试字符串长度函数 strlen(string)char string ;测试字符串长度, 函数值为字符串的长度值,不包括0。,字符串处理函数, 字符比较函数 strcmp(string1,string2) char string1 ;char string2 ;将string1与string2的字符从左至右逐个相比较, 比较结果 由函数值带回。string1=string2, 函数值为0;string1string2, 函数值为一正整数;string1string2, 函数值为一负整数。, 字符串字符大写转换成小写函数 st
39、rlwr(string)char string ;将string中的字符转换成小写。, 字符串字符小写转换成大写函数 strupr(string)char string ;将string中的字符转换成大写。,例:写出下面程序的运行结果:#include”string.h” #include”stdio.h” main( ) char str1 =“hoW DO YOU DO?”,str2 =“hoW are you?”; int m,n,y; m=strlen(str1);n=strlen(str2); printf(“%d,%dn”,m,n); y=strcmp(str1,str2)0; p
40、rintf(“%dn”,y); strlwr(str1);strupr(str2); puts(str1); puts(str2); ,运行: 14,12 0 how do you do? HOW ARE YOU?,7.3 多维数组,下标个数大于或等于二的数组叫多维数组。数组名后有两个下标的数组叫二维数组,例: int x23;有三个下标的数组叫三维数组,,7.3.1 多维数组的定义与初始化,通过对多维数组的定义, 来说明数组数据的存储形式、数据类型、数组名、数组的维数及数组含数据的最大数量。在程序编译为其分配存储空间。,例: int x23; x 是二维数组,共有6个元素 (23=6),它们
41、是: x00, x01, x02,x10, x11, x12。 其全部元素数值均为 int 型。,多维数组定义的格式: int x23;,数据存储类型 数据类型 数组名下标1下标2下标n;,说明:,(1) 数据存储类型、数据类型、数组名的说明:同一维数组。 下标:同一维数组,也是大于等于1的整型常量或整型常量表达式。每维的下标值都从0开始。不同的是有两个方括号,两个表达式的乘积才表示数组中所包含的元素个数。注意不能写成“int c2,3;”。 (3) 数组元素个数为: 下标1下标2 下标n 。,1、 int a 2 3= 1, 2, 3 , 4, 5, 6 ; 等价于int a 2 3;a 0
42、 0=1; a 0 1=2; a 0 2=3;a 1 0=4; a 1 1=5; a 1 2=6;2、也可以将所有数据写在一个花括弧里,按数组排列顺序给各元素赋值。如:int a 2 3= 1, 2, 3, 4, 5, 6 ;3、也可写成: int x 3 = 1, 2, 3, 4, 5, 6 ; 即第一下标值省略,但第二下标值不能省略!4、还可以只对部分元素赋值,如:int a23= 1, 2, , 4, 5 ;结果为a00=1; a01=2; a10=4; a11=5;,多维数组的初始化,例 求矩阵a和b的相加减。,Array c is 2 4 6 8 10 12 Array d is 0
43、 0 0 0 0 0,数组c 放矩阵和, 数组d 放矩阵差 i 是数组第一下标变量行。 j 是数组第二下标变量列。 矩阵相加减。,输出数组的和,输出数组的差,printf(“Array c is n”);for(i=0;i2;i+) for(j=0;j3;j+)printf(“%-5d”,cij);printf(“n”);printf(“Array d is n”);for(i=0;i2;i+) for(j=0;j3;j+)printf(“%-5d”,dij);printf(“n”);,运行程序,main( ) int a23=1,2,3,4,5,6;int b23=1,2,3,4,5,6;int i,j,c23,d23; for(i=0;i2;i+)for(j=0;j3;j+) cij=aij+bij;dij=aij-bij;,7.3.2 多维数组的存储与使用,int x23; 为数组X分配了2字节6=12个字节 先放第一行,即 x00, x01, x02, 再放第二行,即 x10, x11, x12.,多维数组每维的下标值都从0开始,而最先变化的是最右边的下标。在内存中按下标顺序,依次存储在内存的连续空间。,例如:对于二维数组,是按下标先后顺序(从最小下标值开始)存放。,多维数组的引用(多维数组元素的读取操作),