《C语言》教案第五章
时间:2025-04-22
时间:2025-04-22
第五章 数组及其应用 构造数据类型之一 [ ] :数组运算符 数组:有序数据的集合,用数组名标识 单目运算符 元素:属同一数据类型,用数组名和下标确定 优先级(1)
§5.1 一维数组5.1.1 一维数组的定义 定义方式: 例 int a[6];合法标识符
左结合 不能用( )
数据类型
数组名[常量表达式];表示元素个数 下标从0开始
a
0 1 2
3 数组名表示内存首地址, 4 是地址常量 5
a[0] a[1] a[2] a[3] a[4] a[5]
编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)
例 int i=15; 例 int data[5]; int data[i]; ( 不能用变量定义数组维数) data[5]=10; //C语言对数组不作越界检查,使用时要 注意
一维数组的引用
数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int a[10]; printf(“%d”,a); ( ) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
( )
5.1.3 一维数组的初始化 初始化方式
int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5; 说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度
如 int a[5]; static int a[5]={6,2,3}; int a[]={1,2,3,4,5,6}; 等价于: a[0]=6; a[1]=2;a[2]=3; a[3]=0; a[4]=0; 等价于:a[0]=0; a[1]=0; a[2]=0; a[3]=0; a[4]=0; 如 编译系统根据初值个数确定数组维数 int a[3]={6,2,3,5,1}; ( )
#include <stdio.h> 5.1.4 一维数组程序举例#define SIZE 10 例 读10个整数存入数组,找出其中最大值和最小值 main() { int x[SIZE],i,max,min; printf("Enter 10 integers:\n"); for(i=0;i<SIZE;i++) 步骤: { printf("%d:",i+1); 1. 输入:for循环输入10个整数 scanf("%d",&x[i]); 2. 处理: } (a) 先令max=min=x[0] max=min=x[0]; (b) 依次用x[i]和max,min比较(循环) for(i=1;i<SIZE;i++) 若max<x[i],令max=x[i]{ if(max<x[i]) max=x[i]; 若min>x[i],令min=x[i] if(min>x[i]) min=x[i]; 3. 输出:max和min } printf("Maximum value is %d\n",max); printf("Minimum value is %d\n",min); }
例 用数组求Fibonacci数列前20个数
#include <stdio.h> main() { int i; 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++) { if(i%5==0) printf("\n"); printf("%12d",f[i]); } }
0 1 2
3 4 5
1 1 2 3 5 ……...
f[0] f[1] f[2] f[3] f[4] f[5]
19
f[19]
f[19]
例 用冒泡法对10个数排序
排序过程: (1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交 换;然后比较第二个数与第三个数;依次类推,直至第n-1 个数和第n个数比较为止——第一趟冒泡排序,结果最大 的数被安置在最后一个元素位置上 (2
)对前n-1个数进行第二趟冒泡排序,结果使次大的数 被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束
如果有n个数,则要进行n-1趟比较,在第j趟比较中要进行 n-j两两比较
例
38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字 n=8
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
38 13 49
13 38 27 38 13 38 30 27 38 30 49
13 27 30 38
13 27 30
1327
49 27 13 49 30 27 49 3065
76 第 二 趟第 三 趟 第 四 趟 第 五 趟 第 六 趟 第 七 趟
输入n 个数给a[1] 到 a[n] for j=1 to n-1 for i=1 to n-j 真 a[i]>a[i+1]
a[i] a[i+1] 输出a[1] 到 a[n]
#include <stdio.h> main() { int a[11],i,j,t; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); 假 for(j=1;j<=9;j++) for(i=1;i<=10-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<11;i++) printf("%d ",a[i]); }
#define N 6 数组定义:必须用常量表达式 main() { int a[N],b[ B -60],c[]={1,2,3,4,5,6},i; for(i=0;i<N;i++) scanf(“%d%d”,&a[i],&b[i]); for(i=0;i<N;i++) 数组元素引用 printf(“%d ”,a[i]); printf(“\n”); for(i=0;i<N;i++) printf(“%d ”,b[i]); printf(“\n”); for(i=0;i<N;i++) Ch6_001.c c[i]=a[i]+b[N-i-1]; for(i=0;i<N;i++) printf(“%d ”,c[i]); }
§5.2 二维数组5.2.1 二维数组的定义
定义方式: c[0][1][1] 5 数据类型 数组名[常量表达式][常量表达式]; c[0][1][2] 6 数组元素的存放顺序 例 int a[3][4]; float b[2][5]; 原因:内存是一维的 int c[2][3][4]; 二维数组:按行序优先 int a[3,4]; ( ) 多维数组:最右下标变化最快0 1 2
0 c[0][0][0] c[0][0][1] 1 c[0][0][2] 2 元素个数=行数*列数c[0][0][3] 列数 3 int c[2][3][4] 行数 4 c[0][1][0]c[0][1][3] c[0][2][0] c[0][2][1] c[0][2][2] c[0][2][3] c[1][0][0] c[1][0][1] c[1][0][2] c[1][0][3] c[1][1][0] c[1][1][1] c[1][1][2] c[1][1][3] c[1][2][0] c[1][2][1] c[1][2][2] c[1][2][3]
7………...
int a[3][2]
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
3 4 5
a[0][0] a[0][1] a[1][0] a[1][1] 20 a[2][0] 21 a[2][1] 22 23
二维数组理解二维数组a是由3个元素组成0 1 2 3 4 5 6 7 8 9 10 11 a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
a[0]
例 int a[3][4];2000 2002 a[0] a[0][0] a[0][1] 1 3 2008 2010 a[1] a[1][0] a[1][1] 9 11 2016 2018 a[2] a[2][0] a[2][1] 17 19 行名 2004 a[0][2] 5 2012 a[1][2] 13 2020 …… 此处隐藏:5195字,全部文档内容请下载后查看。喜欢就下载吧 ……