当前位置:文档之家› C语言 一维数组的定义和引用 数组

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

a[1]=100; printf (“a[1]=%d\n”,a[1]); }
编译指出:constant expression
required in function main (主函数
中要求常量表达式)
.
4
7.1.2 一维数组元素的引用
引用规则:1.先定义,后使用。 2.引用形式:数组名[下标] 下标可以是整、字符 型的常量、变量或表达式。 3.引用方法:针对元素而不是整个数组。
区。
.
7
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];
第7章


数组:是构造类型,元素由基类型(整、实
、字符)组成。
它是有序的、同类型数据的集合。
7.1 一维数组的定义和引用
7.1.1 一维数组的定义
形式:类型说明符 数组名[常量表达式]
如:int a[5];
float b[10];
说明:
1.命名规则:数组名是由合法的标识符组成。
.
1
2.数组名后是用 [ ] 括起来的是常量表达式 包括:整、字符、符号常量表达式。 如: int a[2+3], b[5], c[‘a’] , _d[8],
其中:下标是整型或字符型的常量,变量或表
达式。(定义时不能使用变量)
如: a[1][2]
a[i][j]
1.数组元素可出现在表达式中,如:
a[1][2]=a[2][2]/2
2.使用数组元素时,应注意不要超出其定义的
范围;
如: int a[2][3];
a[2][3]=5;
.
17
7.2.3 二维数组的初始化 1.按行给二维数组赋初值
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
21
例T7-5.c 有3 × 4矩阵,求出其中最大元素所在的行号和列号
如: int a[2][3]={{1,2,3},{4,5,6}}; 2.按数组元素排列的顺序赋初值
如:int a[2][3]={1,2,3,4,5,6}; 3.对部分元素赋初值,按行赋值 较直观
如:int a[2][3]={{2,5},{3}};
.
1 a=
4
1 a=
4
2 a=
3
23 56
23 56
50 0 018
main( )
{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} printf(“max=%d,row=%d, colum=%d\n”,max,r,c);
for(i=0;i<20;i++)
{ if(i%5==0) printf (“\ n” );
printf (“%12d”,f[i]; 运行结果:
}
1
1
2
}
8
13
21
89 144 233
9.87 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
第一轮大数沉底 第二轮
5444 4522 2250 0005
第三轮
42
24
2
00
0
4
2
第四轮 第五轮
此处:n=6 外层循环j(1~n-1)次
内层循环i (1~n-j)次
.
9
.
10
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++)
&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
数组元素
printf("a[%d][%d]=%f\n",i,j,a[i][j]);}
}
.
15
3.多维数组的定义和在内存中的存放顺 序:
如 int a[2][3][4]; 共24个元素,在内存中排列的顺序是 :第三维变化最快,然后是第二维,第
一维最慢。
.
16
7.2.2 二维数组的引用
形式:数组名[下标][下标]
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]
a[0][0] a[0][1] a[0][2] a[1][0]
}
ffd6 9 a[1][1]
ffd8 11 a[1][2]
.
14
注:从键盘给实型数组元素赋值时,应通过一中间变量进行, 或采用其它办法实施。 T7-3-2.c 实型数组从键盘赋值情况
main()
{int i,j;
float a[2][3],k;
4.全部元素赋值时,第一维下标可省略 如: int a[ ][3]={1,2,3,4,5,6};
又如: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
.
19
7.2.4 二维数组程序举例 例T7-4 将一个二维数组的行和列元素互换, 存到另一个二维数组中 。

3 34 377 4181
5 55 610 68765
例T7-3.c 用起泡法对6个数排序(由小到大) 思路:将相邻两数两两比较,若小则调到前头,不小也要比较
988888 895555 559444 444922 222290
000009
85555 58444 44822 22280 00008
如: 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}; 效果一样
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
.
3
4.数组大小的定义只能是常量,而不能是变 量或动态地定义。 例7-0-2. C main( ) { int n=5,a[n];
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]);
}
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:
相关主题