C语言一维数组的定义和引用数组.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如: a[1][2] a[i][j]
1.数组元素可出现在表达式中,如: a[1][2]=a[2][2]/2 2.使用数组元素时,应注意不要超出其定义的 范围;
如: int a[2][3]; a[2][3]=5;
7.2.3 二维数组的初始化
1.按行给二维数组赋初值
如: int
a[2][3]={{1,2,3},{4,5,6}};
比较a[i][j]>max 吗 a[0][0]>max a[0][1]>max max 2, r=0, c=1 a[0][2]>max max 3, r=0, c=2 a[0][3]>max max 4, r=0, c=3 a[1][0]>max max 9, r=1, c=0 a[1][1]>max a[1][2]>max a[1][3]>max a[2][0]>max a[2][1]>max max 10, r=2, c=1 a[2][2]>max a[2][3]>max
1 2 34 a= 9 8 7 5
-10 10 -5 2
printf(“max=%d,row=%d,
colum=%d\n”,max,r,c);
}
运行结果: max=10,row=2,colum=1
问题:在比较前
为什么要把a[0][0]赋给max?
i=0~2 j=0~3
00
1
2
3
1
0
1
2
3
2
0
1
2
3
{ if(i%5==0) printf (“\ n” );
printf (“%12d”,f[i]; 运行结果:
}
1
1
2
}
8
13
21
89 144 233
987 1597 2584
f[i]=f[i-2]+f[i-1] f[2]=f[1]+f[0]=2 f[3]=f[2]+f[1]=3 f[4]=f[3]+f[2]=5 f[5]=f[4]+f[3]=8 f[6]=f[5]+f[4]=13 f[7]=f[6]+f[5]=21
main( ) { int i, j, a[2][3]; for(i=0; i<2; i++) for(j=0; j<3; j++)
scanf(“%d”, &a[i][j]); for(i=0; i<2;i++)
输入:1 3 5 7 9 11 输出:&a[0][0]=ffce a[0][0]=1
&a[0][1]=ffd0 a[0][1]=3 &a[0][2]=ffd2 a[0][2]=5 &a[1][0]=ffd4 a[1][0]=7 &a[1][1]=ffc6 a[1][1]=9
int a[5] a[0], a[1], a[2], a[3], a[4] 5个元素 ,下标从0 ~ 4
注意:
在Turbo C 中超过定义的数组下标元素是可以引用的,系 统不作检查。
例T7-0-1.c
main( )
{int i, a[5];
for(i=0;i<=4;i++)
printf (“a[%d]=%d\ n”,i,a[i]=i+1);
数组元素
a[0][0] a[0][1] a[0][2] a[1][0]
}
ffd6 9 a[1][1]
ffd8 11 a[1][2]
注:从键盘给实型数组元素赋值时,应通过一中间变量进行, 或采用其它办法实施。 T7-3-2.c 实型数组从键盘赋值情况
main()
{int i,j;
float a[2][3],k;
printf (“a[5]=%d\t”,a[5]);
printf (“a[6]=%d\ n”,a[6]);
}
运行结果:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=-30
a[6]=285
4.数组大小的定义只能是常量,而不能是变 量或动态地定义。 例7-0-2. C main( ) { int n=5,a[n];
2 a[2]
for(i=4;i>=0;i- -)
3 a[3]
printf( “a[%d]=%d\n”, i, a[i ]); 4 a[4]
}
运行结果: a[4]=4 a[3]=3 a[2]=2 a[1]=1 a[0]=0
7.1.3 一维数组的初始化 实现的方法有:
1.定义时对数组元素初始化 如: int a[5]={1, 2, 3, 4, 5};
3.引用方法:针对元素而不是整个数组。 如:a[0]=a[‘b’ - ‘a’] + a[‘ b’ -96] +a[3] - a[2*2]
例T7-1. C 对数组a 顺序赋值,逆序输出
main( )
{int a[5],i; for(i=0; i<=4; i++)
0 a[0] 1 a[1]
a[i]=i;
}
printf(“array b:\ n”);
for(i=0;i<=2; i++)
i 0
{for(j=0;j<=1;j++)
printf(“%4d”,b[i][j]); printf(“\ n”); 1 }
}
运行结果:
array a:
12
3
45
6
array b:
1
4
2
5
3
6
j
b[j][i] a[i][j]
又如:int a[ ][4]={{0,0,3},{0},{0,10}};
12 3 a=
45 6
00 30 a= 0 0 0 0
0 10 0 0
7.2.4 二维数组程序举例 例T7-4 将一个二维数组的行和列元素互换, 存到另一个二维数组中 。
123 a=
456
14 b= 2 5
36
T7-4.c两数组行列互换 main( )
2. 只给部分元素赋值 如: int a[5]={1, 3, 5};
3. 初始化时给全部元素赋0值 如:int a[5]={0,0,0,0,0}; 或 int a[5]={0};
4. 对全部元素赋初值时可以不指出长度 如:int a[5]={2,4,6,8,10};
或 int a[ ]={2,4,6,8,10}; 效果一样 。
for(i=1; i<=6-j; i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf (“the sorted numbers:\ n”); for(i=1;i<7;i++) printf(“%d _ _”,a[i]);
}
x a[0] 9 a[1] 8 a[2] 5 a[3] 4 a[4] 2 a[5] 0 a[6]
for(i=0;i<2;i++)
for(j=0;j<3;j++) {scanf("%f",&k); a[i][j]=k; }
for(j=0;j<3;j++) scanf(“%f%f”,&a[0][j],&a[1][j])
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{printf("&a[%d][%d]=%x ",i,j,&a[i][j]);
7.1.4 一维数组程序举例
例T7-2.c 求Fibonacci 数列问题
i
关于菲波那契算法:头两个数各为1, 2
以后的每个数皆为前两个数之和。
3 4
main( )
5
{
6
int i;
7
int f[20]={1,1};
for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1];
for(i=0;i<20;i++)
1 23 a=
2.按数组元素排列的顺序赋初值
4 56
如:int
a[2][3]={1,2,3,4,5,6};
1 23
3.对部分元素赋初值,按行赋值 a=
较直观
4 56
如:int
a[2][3]={{2,5},{3}};
2 50
a=
3 00
4.全部元素赋值时,第一维下标可省略 如: int a[ ][3]={1,2,3,4,5,6};
5444 4522 2250 0005
第三轮
42
24
2
00
0
4
2
第四轮 第五轮
此处:n=6 外层循环j(1~n-1)次
内层循环i (1~n-j)次
main( ) {int a[7]; int i, j , t; printf (“input 6 numbers:\ n”); for(i=1;i<7;i++) scanf(“%d”, &a[i ]; printf (“\ n”); for(j=1; j<=5; j++)
运行:input 6 numbers: 输入:9 8 5 4 2 0 输出:0 2 4 5 8 9
7.2 二维数组的定义和引用 7.2.1 二维数组的定义 1.一般形式:类型说明符 数组名[常量表达式][常量 表达式]
如:float a[3][4] 定义数组a具有三行四列 在C中,可将二维数组看着是特殊形式的一维数组。
{int i, j, r=0,c=0, max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=3;j++) if(a[i][j]>max) {max=a[i][j]; r=i;c=j}

3 34 377 4181
5 55 610 6765
例T7-3.c 用起泡法对6个数排序(由小到大) 思路:将相邻两数两两比较,若小则调到前头,不小也要比较
988888 895555 559444 444922 222290
000009
85555 58444 44822 22280 00008
第一轮大数沉底 第二轮
C语言一维数组的定义和引 用数组
2.数组名后是用 [ ] 括起来的是常量表达式 包括:整、字符、符号常量表达式。 如: int a[2+3], b[5], c[‘a’] , _d[8], xyz[‘#’] (‘#’=35)
#define N 5 main() {int a[N];printf(“%d\n”,a[1]=100);} 而:int a(10) , b[x], %[5], 8[3], x-y[50], 5x[100] 是否正确? 又如: int i=5; int a[5+i] 是否正确性? 3.数组的长度
{ int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j; printf(“array a:\n”);
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
{printf(“%4d”, a[i][j]); b[j][i]=a[i][j];}
printf(\ n”);
如上述定义可看着是具有三个元素的一维数组, 而每个元素又可看作是包含四个元素的一维数组。
因此,上述定义相当于: float a[0][4], a[1][4], a[2][4]
注 :实际应用时若如此定义则被认为是重定义。 2.二维数组各个元素在内存中的存放顺序是:
按先行后列的顺序依次存放
例T7-3-1.c
例T7-1-1.c 定义时对数组元素初始化
main( )
{ int i; int a[5]={2,4,6,8,10};
运行结果: 2
for(i=0;i<=4;i++)
4
6
printf(“%d\n”,a[i]);
8
}
10
注意:static 存储类别,这和新ANSI新标准 一致, 若采用static,数组元素的值被存储在静态 区。
0 b[0][0] a[0][0]=1
1 b[1][0] a[0][1]=2
2 b[2][0] a[0][2]=3
0 b[0][1] a[1][0]=4
1 b[1][1] a[1][1]=5
2 b[2][1] a[1][2]=6
例T7-5.c 有3 × 4矩阵,求出其中最大元素所在的行号和列号 main( )
a[1]=100; printf (“a[ห้องสมุดไป่ตู้]=%d\n”,a[1]); }
编译指出:constant expression
required in function main (主函数
中要求常量表达式)
7.1.2 一维数组元素的引用
引用规则:1.先定义,后使用。 2.引用形式:数组名[下标] 下标可以是整、字符 型的常量、变量或表达式。
printf("a[%d][%d]=%f\n",i,j,a[i][j]);}
}
3.多维数组的定义和在内存中的存放顺 序:
如 int a[2][3][4]; 共24个元素,在内存中排列的顺序是 :第三维变化最快,然后是第二维,第 一维最慢。
7.2.2 二维数组的引用 形式:数组名[下标][下标] 其中:下标是整型或字符型的常量,变量或表 达式。(定义时不能使用变量)
&a[1][2]=ffd8 a[1][2]=11
for(j=0;j<3;j++) {printf(“&a[%d][%d]=%x ”, i, j,
地址 值
&a[i][j]);
ffce 1
printf (“a[%d][%d]=%d\ n”,i,j,a[i][j]);
ffd0 ffd2
3 5
}
ffd4 7
相关文档
最新文档