711一维数组的定义定义方式类型说明符数组名整型常量
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例: main( ) {int i,a[10]; for (i=0;i<=9,i++) scanf("%d",&a[i]); for (i=0;i<=9;i++) printf("%4d",a[i] ); }
通过输入语句给 数组元素赋值
7.1.3 一维数组的初始化
可以用赋值语句或输入语句使数组中 的元素得到值,但占运行时间,同时也可 以使数组在程序运行之前初始化,即在编 译期间使之得到初值。
对数组元素的初始化可以用以下方法实现:
⒈在定义数组时,对数组元素赋以初值。 如: static int a[10]={0,1,2,3,4,5,6,7,8,9} ; ⒉可以只给一部分元素赋值。 如: static int a[10]={0,1,2,3,4}; 表示只给前5个元素赋初值,后5个元素自动赋以0值。 ⒊对static数组不赋初值,系统会对所有元素自动赋 以0值。即, 如果想使数组a中全部元素值为0,可以这 样定义数组: static int a[5]
7.2 二维数组的定义和引用 7.2.1 二维数组的定义 类型说明符 数组名[常量表达式][常量表达式] 例:float a[3][4],b[5][10]; 说明:
① 可以把二维数组看作是一种特殊的一维数组。 a[0] a[0][0] a[0][1] a[0][2] a[0][3] a[1] a[1][0] a[1][1] a[1][2] a[1][3] a[2] a[2][0] a[2][1] a[2][2] a[2][3] ② 二维数组在内存中按行存放
第7章
7.1
数 组
一维数组的定义和引用
7.1.1 一维数组的定义 定义方式: 类型说明符 数组名[整型常量表达式]; 例:int a[10]; 说明:①数组名的命名规则和变量名相同,遵循标识 符定名规则。 ②数组名后的常量表达式用[ ]括起来。 ③常量表达式表示元素的个数,即数组长度。 例:a[10]表示数组a中包括10个元素,分别为 a[0]~a[9]
例.从10个整数中把最小的数找出来,并与最前面的 数对调, 指出最小的数原来的位置。(最小值唯一) 1.用数组a存放10个数据。 int
2.用j记录最小值的位置。 j=0; 3.交换a[0]与a[j]的值。 for(i=1;i<=9;i++)
a[10];
if(a[i]<a[j]) j=i;
j=0 j=1 j=1 j=1 j=1 j=1 j=6 j=6 j=6 12 -14 37 2 76 231 -36 65 -2 j=6 -31
f[0] f[1] f[2] f[3] f[4] f[5] f[6] f[7] f[8] f[9] .............
1
1
2 0
3 0
5 0
8 0
13 0
21 0
34 0
55 0
.........
main( ) { int i; static long int f[40]={1,1}; for(i=2;i<40;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<40;i++) { if(i%5= =0) printf("\n"); printf("%12ld",f[i]); } }
a[0] a[2] a[4] a[1] a[3] 0 0 0 0 0
等价于 int a[5]={0};
⒋在对全部数组元素赋初值时,可以不指定数组长度。 int a[5]={1,2,3,4,5}; static
static
int a[
]={1,2,3,4,5};
例.用数组来处理求Fibonacci数列问题(求前40项)
依次类推经过九次比较可使数组a升序。
for(i=0;i<9;i++) for(j=i+1;j<=9;j++) if(a[i]>a[j]) {k=a[i]; a[i]=a[j]; a[j]=k;}
#include "stdlib.h" main() { int i,j,k,a[10]; for(i=0;i<10;i++) a[i]=random(41)+20; for(i=0;i<9;i++) for(j=i+1;j<=9;j++) if(a[i]>a[j]) {k=a[i]; a[i]=a[j]; a[j]=k; } for(i=0;i<=9;i++) printf("%5d",a[i]); printf("\n"); }
c
12
3
31
a
12
-1
3
b
2
-14 77
-1
76
main( ) { int i,j,k=0,a[8],b[5],c[8]; for(i=0;i<=7;i++) scanf("%d",&a[i]); for(i=0;i<=4;i++) scanf("%d",&b[i]); for(i=0;i<=7;i++) {for(j=0;j<=4;j++) if(a[i]= =b[ j]) break; if(j>4) { c[k]=a[i];k++;} } for(i=0;i<k;i++) printf("%5d",c[i]); printf("\n"); }
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1][0]
a[1][1]
a[1][2]
a[2][0]
a[1][3]
a[2][2]
a[2][1] a[2][3]
③ 多维数组定义方式与二维数组类似 int x[3][4][2]; float y[4][2][3];
7.2.2 二维数组的引用
依次类推经过九次比较可使数组a升序。
#include "stdlib.h" main() {int i,j,k,m,a[10]; for(i=0;i<=9;i++) a[i]=random(41)+20; for(i=0;i<9;i++) { k=i; for(j=i+1;j<=9;j++) if (a[k]>a[j]) k=j; if(k!=i) {m=a[i];a[i]=a[k];a[k]=m;} } for(i=0;i<=9;i++) printf("%5d",a[i]); printf("\n"); }
算法2:选择排序 k j j k k
j k
k j k j
jj
k jj
jj
jj
jj
29 21
57 27
42
30
29 21
35
27 57
46
52
39
第二次比较:k=0 第一次比较: k=1,比较a[k] a[k] 与它后面所有的数 与它后面所有的数 a[j] a[j] (j=2,….,9),若a[k]大于a[j],则k=j (j=1,….,9),若a[k]大于a[j],则k=j 第二次比较结果:k为剩余数中最小值的下标,交换 第一次比较结果: k为最小值的下标,交换 a[0]与a[k] a[1] 与a[k], 使a[1]中存放剩余数 中的最小值。 使a[0]中存放最小值。
a[0] a[2] a[4] a[6] a[8] a[1] a[3] a[5] a[7] a[9]
④常量表达式中可以包括常量和符号常量,不能包含 变量,即定义时必须确定数组的大小。
7.1.2 一维数组元素的引用 int n; 数组必须先定义,然后使用。C语言规定只能逐个 scanf("%d",&n); 引用数组元素而不能一次引用整个数组。 a[n]; 引用形式为: int 数组名 [下标]
引用形式为: 数组名[下标][下标] 注:下标可以是整型表达式,但应在已定义的数 组大小的范围内。
7.2.3 二维数组的初始化
⒈ 分行给二维数组赋初值。如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第二次比较:用 第三次比较:用 a[2] a[3]~a[9] 第一次比较:用a[1] a[0]与它后面的 与它后面的a[2]~a[9] a[1]~a[9]比较,将小的数据 比较,将小的数据 放在a[1]中。 放在a[2] a[0]中。
第一次的比较结果:最小数在 a[0] 中。 第三次的比较结果:第3小的数在 a[2] 中。 第二次的比较结果:次最小数在 a[1] 中。
整型常量或整型表达式
例: main( ) {int i,a[10]; 通过赋值语句给 for (i=0;i<=9;i++) 数组元素赋值 a[i]=i; for (i=0;i<=9;i++) (i=0;i<=9;i++) (i=9;i>=0;i-) printf("%4d",a[i] ); a[i]); a[9-i]); }
例. 打印以下方阵: 1 2 2 8 8 3 3 10 10 1
8 3 10 1 2
3 10 1 2 8
10 1 2 8 3
源自文库
8 3 1 2
10 2 8 3 1
10 2 8 3 1
10 2 8 3 1
10 3 1 2 8
10 1 2 8 3
y=x[0]; for( j=1;j<5;j++) x[j-1]=x[j]; x[4]=y;
main( ) { int i,j,a[10],k; for(i=0;i<=9;i++) scanf("%d",&a[i]); j=0; for(i=1;i<=9;i++) if(a[i]<a[j]) j=i; if(j!=0) { k=a[0]; a[0]=a[j]; a[j]=k; } printf("min number is:%d\n",a[0]); printf("the position is:%d\n", j); }
例.将n(n<=50)个整数按逆序重放在数组中。
算法: 设n=7 3 45 2 6 17 66 50
x[0] x[1] x[2] x[3] x[4] x[5] x[6]
50 3 45 66 17 2 6 17 2 45 66 50 3
y=x[i]; x[i]=x[n-i-1]; x[n-i-1]=y;
例:用random函数产生10个[20,60]之间的随机整数, 按从小到大排序后输出。
随机函数 random的用法: 1. 格式: random(x) 2. 说明: (1) x为整型常量、整型变量或整型表达式。 (2) 该函数包含在头文件"stdlib.h"中。 (3) 该函数产生[0, x) 区间上的整数。 产生[a,b]区间上任意整数的方法:
例.已知数组a中有8个互不相等的元素,数组b中有 5 个互不相等的元素,而数组c中包含那些在a中但不 在b中的元素,编程产生数组c。
for(i=0;i<=7;i++) -6 0 { for(j=0;j<=4;j++) if(a[i]= =b[ j]) break; if(j>4) { c[k]=a[i];k++;} 2 } 77 31 -6 0
random(b-a+1)+a
[0,b-a+1) [a,b+1) [a,b]
算法1:顺序排序
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
25 34 21 25 23 25 21 25 34 34 49 30 25 49 34 30 30 23 25 30 23 41 41 37 30 30 28 28
main( ) {int i,j,y; static int x[5]={1,2,8,3,10}; for(i=0;i<=4;i++) printf("%5d",x[i]); printf("\n"); for(i=1;i<=4;i++) { y=x[0]; for( for(j=1;j<=4;j++) j=0;j<4;j++) x[j-1]=x[j]; x[j]=x[j+1]; x[4]=y; for( j=0;j<=4;j++) printf("%5d",x[ j]); printf("\n"); } }
2 3 45
y
程序:
main( ) { int x[50],y,n,i; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&x[i]); printf("%5d",x[i]);} printf("\n"); for(i=0;i<=(n-1)/2;i++) { y=x[i]; x[i]=x[n-1-i]; x[n-1-i]=y; } for(i=0;i<n;i++) printf("%5d",x[i]); printf("\n"); }