第六章 数组(最终版)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学学院
#include “stdio.h” void main() { int i,a[10]; for (i=0; i<=9;i++) a[i]=i; for(i=9;i>=0; i--) printf("%d ",a[i]); } 运行结果如下: 9 8 7 6 5 4 3 2 1 0 计算机科学学院
计算机科学学院
例6.3
用冒泡法对10个数排序
动画演示
排序过程: (1)比较第一个数与第二个数,若为逆序 a[0]>a[1],则交换;然后比较第二个数与第三个 数;依次类推,直至第n-1个数和第n个数比较为 止——第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上。 (2)对前n-1个数进行第二趟冒泡排序,结果使次 大的数被安置在第n-1个元素位置上。 (3)重复上述过程,共经过n-1趟冒泡排序后,排 序结束。
计算机科学学院
int c[2][3][4]
0 1 2 3 4 5 6 7 ………...
20 21 22 23
c[0][0][0] c[0][0][1] c[0][0][2] c[0][0][3] c[0][1][0] c[0][1][1] c[0][1][2] 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]
计算机科学学院
二维数组a是由3个元素组成
例 int a[3][4];
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] 行名
每个元素a[i]由包含4个元素 的一维数组组成
计算机科学学院
6.2.2
二维数组的引用
数组名[下标][下标]
二维数组元素的引用形式: 二维数组元素的初始化
分行初始化: 按元素排列顺序初始化 例 int a[2][3]={{1,2,3},{4,5,6}}; 例 int a[][3]={1,2,3,4,5}; a[2][3]={1,2,4}; 例 int a[2][3]={1,2,3,4,5,6}; a[][3]={{1},{4,5}}; 例例 int int a[2][3]={{1,2},{4}};
计算机科学学院
数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先 多维数组:最右下标变化最快
int a[3][2]
0 1 2
3 4 5
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
[注意]: 不能使用数组元素a[6]。
计算机科学学院
(4) 常量表达式中可以包括常量和符号 常量,不能包含变量。
例如: 下面这样定义数组是不行的: int n; scanf("%d",&n); int a[n];
计算机科学学院
6.1.2
一维数组元素的引用
数组必须先定义,后使用。c语言规定 只能逐个引用数组元素而不能一次引用整 个数组。 数组元素的表示形式为: 数组名 [下标] 下标可以是整型常量或整型表达。例如: a[0]=a[5]+a[7]-a[2*3]
计算机科学学院
#define SIZE 10 void main() x[SIZE],i,max,min; 6.1.4 { int 一维数组程序举例 printf("Enter 10 integers:\n"); 例6.1 输入 10个整数,找出其中最大值和最小 for(i=0;i<SIZE;i++) 值。 { printf("%d:",i+1); 步骤: scanf("%d",&x[i]); 1. 输入:for } 循环输入10个整数 2. 处理: max=min=x[0]; for(i=1;i<SIZE;i++) (a) 先令max=min=x[0] { x[i] if(max<x[i]) max=x[i]; (b) 依次用 和max,min 比较(循环) if(min>x[i]) min=x[i]; 若max<x[i],令max=x[i] } 若min>x[i], 令 min=x[i] printf("Maximum value is %d\n",max); 3. 输出:max 和min printf("Minimum value is %d\n",min); 计算机科学学院 }
6.2
二维数组的定义和引用
6.2.1 二维数组的定义 二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式]
例如: float a[3][4],b[5][10]; a为3行4列的数组,b为5行10列的数组。
[注意]:不能写成 float a[3,4],b[5,10];
计算机科学学院
i != k 真 a[i]a[k] 输出a[1] 到 a[n]
计算机科学学院


#include <stdio.h> void main() { int a[11],i,j,k,x; printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<10;i++) { k=i; for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j; if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;} } printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); 计算机科学学院 }
计算机科学学院
Ch5_201.c
输入n 个数给a[1] 到 a[n] for i=1 to n-1 for 真 j=1 to 10-i a[j]>a[j+1]

交换a[j]和 a[j+1]
输出a[1] 到 a[n]
计算机科学学院
void main() { int i,j, a[11],temp; printf("\n input 10 numbers:\n"); for(i=1;i<=10;i++) scanf("%d",&a[i]); for(i=1;i<10;i++) { for(j=1;j<=10-i;j++) if (a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=x; } } for(i=1;i<=10;i++) printf("%d",a[i]); }
全部初始化 第一维长度省略初始化 第一维长度省略初始化 部分初始化 部分初始化 全部初始化
1 2 3 4 5 6 1 2 3 4 5 0 4 0 0 a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 1 2 0 4 0 0 1 1 2 0 3 0 4 4 5 5 6 0
C语言对二维数组采用这样的定义方式, 使我们可以把二维数组看作是一种特殊的一维 数组:它的元素又是一个一维数组。 例如:
可以把a看作是一个一维数组,它有3个元 素:a[0]、a[1]、a[2]。每个元素又是一 个包含4个元素的一维数组。可以把a[0]、a[1]、 a[2]看作是3个一维数组的名字。 如图:
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] 计算机科学学院
j
j
j
j
k
49 38 27 ] j 49 49 j 38 ] 65 ]
四趟: 13
五趟: 13 六趟: 13
27
27 27
38
38 38
49
49 49
[76
65 65
97
[97 76
65 ]
76 ] [97 ]
计算机科学学院
Ch5_201.c
输入n 个数给a[1] 到 a[n] for i=1 to n-1 k=i for j=i+1 to n a[j]<a[k] 真 k=j
第六章 数组
西安工程大学
本章内容:
6.1 一维数组的定义和引用 6.2 二维数组的定义和引用 6.3 字符数组
请做练习
计算机科学学院
6.1
一维数组的定义和引用
基本数据类型有: 整型 实型 字符型 C语言还提供了构造类型的数据: 数组类型 结构体类型 共用体类型 构造类型数据是由基本类型数据按一定规则组成 的,也称 “导出类型”。 数组是有序数据的集合,数组中的每一个元素属于 同一数据类型,用数组名和下标唯一标识数组元素。
7
8
9
(2) 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4};
(3) 如果想使一个数组中全部元素值为 0, 可以写成: int a[5]={0,0,0,0,0}; 或写成: int a[5]={0};
计算机科学学院
(4) 在对全部数组元素赋初值时,可以 不指定数组长度。 例如: int a[5]={1,2,3,4,5}; 可以写成: int a[]={1,2,3,4,5}
例6.2 用数组求Fibonacci数列前20个数。
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] 计算机科学学院
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]); }
计算机科学学院
k
k
wenku.baidu.com
k
[ 49 76 个数排序 13 i=1 初始: 49 27 ] 13 38 65 97 10 例例 6.4 用选择排序法对 j k
i=2 一趟: 13 [38 27 65 j 二趟: 13 三趟: 13 27 27 [65 38 97 j 97 [97 76 j 76 76 j
6.1.3 一维数组的初始化
对数组元素的初始化可以用以下方法实现:
(1) 在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8, 9};
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
0
1
2
3
4
5
6
计算机科学学院
* sizeof(元素数据类型)
计算机科学学院
[说明]:
(1) 数组名定名规则和变量名相同,遵 循标识符定名规则。 (2) 数组名后是用方括弧括起来的常量 表达式,不能用圆括弧,下面用法不对: int a(6);
计算机科学学院
(3) 常量表达式表示元素的个数,即数 组长度。
例如:
在int a[6]中,6表示a数组有6个元素,下标从 0开始,这6个元素是,a[0],a[1],a[2], a[3],a[4],a[5]。
在第二种写法中,花括弧中有5个数,系 统就会据此自动定义a数组的长度为5。
计算机科学学院
但若被定义的数组长度与提供初值 的个数不相同,则数组长度不能省略。 例如: 想定义数组长度为10,就不能省略 数组长度的定义,而必须写成 int a[10]={1,2,3,4,5}; 只初始化前5个元素,后5个元素为0。
计算机科学学院
6.1.1 一维数组的定义
定义方式: 数据类型
例如: int a[6];
数组名[常量表达式];
它表示数组名为a,此数组有6个元素。
计算机科学学院
a
0 1 2 3 4
a[0] a[1]
a[2]
a[3] a[4] a[5]
数组名表示数 组首地址, 是地址常量
5
编译时分配连续内存 内存字节数=数组维数
相关文档
最新文档