维数组的定义和引用 31一维数组的定义和引用 义数组,就是要 (1)规定数组的名称,其取名规则与变量名相同 (2)规定数组的类型,包括其数据类型和存储类型 (3)规定数组的大小,即数组的维数及包含的数组元素的个数。数组元素就是包含在数组中 的变量。 维数组的定义 类型说明符数组名[exp] 例如: int data[10], number[5] 、一维数组元素的引 数组名[下标] 例如:a[0]=a[5]+a[7]一a[2*3] 维数组在内存中占一段连续的存储空间,其首地址:a或&a[0] 维数组的输入与输出 in t for(i=0;i<=9;i++ /* scanf(“%d”,&a[i]);* for(i=9;i>=0;i--) printf(“%d”,a[i]) printf(“n
一维数组的定义和引用 3 . 1 一维数组的定义和引用 定义数组,就是要: (1)规定数组的名称,其取名规则与变量名相同; (2)规定数组的类型,包括其数据类型和存储类型; (3)规定数组的大小,即数组的维数及包含的数组元素的个数。数组元素就是包含在数组中 的变量。 一、一维数组的定义: 类型说明符 数组名[exp] ; 例如:int data[10], number[5]; 二、一维数组元素的引用 数组名[下标] 例如:a[0]=a[5]+a[7]-a[2*3] 一维数组在内存中占一段连续的存储空间,其首地址:a 或&a[0] 一维数组的输入与输出 main( ) { int i , a[10]; for(i=0; i<=9;i++) a[i]=i ; /*scanf(“%d”,&a[i]);*/ for ( i=9; i >=0; i - - ) printf(“%d ”,a[i]); printf(“\n”); }
一维数组的初始化 在定义数组时对数组元素赋以初值 inta[10]={0,1,2,3,4,5,6,7,8,9}; 2.可以只给一部分元素赋值:inta[10]={0,1,2,3,4}; 3.如果想使一个数组中全部元素值为0,可简便实现 inta[10]={0,0,0,0,0,0,0,0,0,0} 其实,对 static数组不赋初值,系统会对所有数组元素自动赋以0值,即上句等价 static int a[10] 4.C允许通过所赋初值的个数来隐含定义一维数组的大小:int a[]={0,1,2,3,4,5,0} 相当于 inta[7]={0,1,2, 二维数组的定义和引用 32二维数组的定义和引用 、二维数组的定义 类型说明符 数组名[exp1][exp2] 如: int number[5][4]; char ch[3][4], name[8] 数组的存储结构:以行为主序的连续空间 、二维数组的引用 二维数组元素的表示形式为:数组名[下标][下标] 如:a[2][3]、b[1][2]=a[2][3]/2、a[2][3]=3等
三、一维数组的初始化 1. 在定义数组时对数组元素赋以初值; int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 2. 可以只给一部分元素赋值; int a[10]={0, 1, 2, 3, 4}; 3. 如果想使一个数组中全部元素值为 0,可简便实现; int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 其实,对 static 数组不赋初值,系统会对所有数组元素自动赋以 0 值,即上句等价 于: static int a[10]; 4. C 允许通过所赋初值的个数来隐含定义一维数组的大小;int a[]={0,1,2,3,4,5,0}; 相当于 int a[7]={0,1,2,3,4,5,0}; 二维数组的定义和引用 3 . 2 二维数组的定义和引用 一、二维数组的定义 类型说明符 数组名[exp1][exp2]; 如:int number[5][4]; char ch[3][4], name[8]; 数组的存储结构:以行为主序的连续空间 二、二维数组的引用 二维数组元素的表示形式为:数组名[下标][下标] 如:a[2][3]、b[1][2]=a[2][3]/2、a[2][3]=3 等;
注意: 1)其中下标可以是整型表达式; 2)不要写成a[2,3]等形式; 3)应该注意下标值应在已定义的数组大小范围内 4)定义数组时用的a[3][4]与引用数组元素时用的a[3][4]的区别。 、二维数组的初始化 1.分行给二维数组赋初值:如 static int a[3][4]={1,2,3,4},{5,6,7,8},{9,10,11,12} 2.可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如 static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12} 3.如果花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值0 也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋0 static int a[3][4]={1},{5},{9}} 等价于 static int a[3][4]={1,0,0,0},{5,0,0,0},{9,0,0,0}; 而 static int a[4][3]={1,2},{4,5};等价于 static int a[4][3]={1,2,0},{4,5,0},{0,0,0)},{0,0,0} 4.C语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定 义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,1,12) 等价于 static int a[][4={1,2,3,4,5,6,7,8,9,10,1,12}; 在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。如: static int a[[4]={0,0,3},(0},0,10)}; 四、二维数组的输入与输出 用二重循环,以a[m][n]为例 for (i=0:i<m: i++) for(j=0; j<n: j++)
注意: 1) 其中下标可以是整型表达式; 2) 不要写成 a[2,3]等形式; 3) 应该注意下标值应在已定义的数组大小范围内; 4) 定义数组时用的 a[3][4]与引用数组元素时用的 a[3][4]的区别。 三、二维数组的初始化 1. 分行给二维数组赋初值:如 static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2. 可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 3. 如果花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值 0; 也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋 0 值。如: static int a[3][4]={{1},{5},{9}}; 等价于 static int a[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}}; 而 static int a[4][3]={{1,2},{4,5}}; 等价于 static int a[4][3]={{1,2,0},{4,5,0},{0,0,0},{0,0,0}}; 4. C 语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定 义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于 static int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。如: static int a[ ][4]={{0,0,3},{0},{0,10}}; 四、二维数组的输入与输出 用二重循环,以 a[m][n]为例 for(i=0;i<m;i++) for(j=0;j<n;j++) {……}
字符数组和字符串 3.3字符数组和字符串 、字符数组的定义 char数组名[exp] 如: char c[10] 、字符数组的初始化 1.给每一个字符型数组元素依次赋给一个单字符 如: char str[6]={C’,"h’,i’,n’,‘a’,“0’ 2.直接在赋值号右边给出字符串常量。如 char str[6]=“ China” 注意: )字符数组的长度可以通过赋初值的方式隐含定义:如: har str[]= char str[]=“ China b)如果括号中提供的初值个数(即字符个数)大于数组长度,则作语法错误处理。如果初 值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即 10’)。 字符数组的引用 static char c[12]=“ I am a boy.” for(i=0;i<12;i++) printf(“%c”,c[i]); printf(“n”) 四、字符串和字符串结束标志
字符数组和字符串 3 . 3 字符数组和字符串 一、字符数组的定义 char 数组名[exp]; 如:char c[10]; 二、字符数组的初始化 1. 给每一个字符型数组元素依次赋给一个单字符。 如:char str[6]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’, ‘\0’}; 2. 直接在赋值号右边给出字符串常量。如: char str[6]=“China”; 注意: a) 字符数组的长度可以通过赋初值的方式隐含定义;如: char str[ ]={‘C’, ‘h’, ‘i’, ‘n’, ‘a’, ‘\0’}; char str[ ]=“China”; b) 如果括号中提供的初值个数(即字符个数)大于数组长度,则作语法错误处理。如果初 值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即 ‘\0’)。 三、字符数组的引用 例:main( ) { static char c[12]=“I am a boy.”; int i; for (i=0;i<12;i++) printf(“%c”,c[i]); printf(“\n”); } 四、字符串和字符串结束标志
字符串结束标志是“\0”,如: char ch[]=” China China”在存储器中实际占用6个字节: 五、字符数组的输入和输出 1、字符数组的输出 (1)用格式符“%c”控制的 printf():如: static char c[12]={‘I for(i=0;i<12;i++) printf(“%c”,c[i]) printf(“\n”) (2)用格式符“%s”控制的 printf():如 static char c[]=“ China” for(i=0;i<10;i++) printf(“%s”,c) (3)puts(字符数组):如: #include <stdio. h> Inden static char city[]=“ YangZhou” for(i=0;i<=8:;i++) printf(“%c”,city[i]) print printf(“%sn”,city) (1)puts用字符数组名,而不用数组元素名 (2)输出的字符串中可含转义字符:如 static char str[]=“ China\ nBeijing” puts(str)
字符串结束标志是“\0”,如: char ch[]=”China”; “China”在存储器中实际占用 6 个字节: 五、字符数组的输入和输出 1、字符数组的输出 (1)用格式符“%c”控制的 printf();如: main() { static char c[12]={‘I’,‘ ’, ‘a’, ‘m’,‘ ’, ‘a’, ‘ ’, ‘b’, ‘o’, ‘y’, ‘.’}; int i; for( i=0; i<12; i++) printf(“%c”, c[i]); printf(“\n”); } (2)用格式符“%s”控制的 printf();如: main() { static char c[ ]=“China”; int i; for(i=0; i<10; i++) printf(“%s”, c); } (3)puts (字符数组);如: #include <stdio.h> main ( ) { static char city[ ]=“YangZhou”; int i, j; for (i=0;i<=8;i++) printf (“%c”,city[i]); printf (“\n”); printf (“%s\n”,city); puts(city); } 注意: (1)puts 用字符数组名,而不用数组元素名; (2)输出的字符串中可含转义字符;如: static char str[]=“China\nBeijing”; puts(str);