当前位置:文档之家› 一维数组,二维数组

一维数组,二维数组


例题4:将下列数列(杨辉三角形)延长到55个。 1,1,1,1,2,1,1,3,3,1,1,4,6,4,1…… main() { int a[60],i,j,k=0; for (i=1; ;i++) { if ((k+1)>55) break; a[k+1]=1; for (j=2;j<i;j++) { if ((k+j)>55) break; a[k+j]=a[k-(i-1)+(j-1)]+a[k-(i-1)+j]; } if ((k+j)>55) break; a[k+=i]=1; } printf("\n"); for (i=1;i<=55;i++) printf("%4d",a[i]); }
一般练习
7.5,7.6 ,
重点练习
7.2,7.3,7.4 , ,
3. 讲课思路 1) 在讲述一维数组的定义、引用、初始化 的基础上,通过举例来说明一维数组的应用。 2) 在讲述二维数组的定义、引用、初始化的 基础上,通过举例来说明一维数组的应用。并引申 出多维数组的概念。


数组:一组有序数据的集合。数组中的每一个元素 数组: 都属于同一个数据类型。用一个统一的数组名和下 标来唯一地确定数组中的元素。
static int a[3][4]={{1},{0,6},{0,0,11}}; 1 0 0 0 0 0 6 0 0 0 11 0
其结果为:
static int a[3][4]={{1},{5,6}}; 1 0 0 0 5 6 0 0 0 0 0 0 也可以对第二行不赋初值:如 static int a[3][4]={{1},{ },{9}};
a[3][4]
存放顺序: 1,2,3行。
C语言允许使用多维数组,其基础为二维数组。 如: 语句 int a[2][3][2];定义一个12个元素的3维数组。
排列位置 从1起 1 2 3 4 5 6 7 8 9 10 11 12 元素名 a[0][0][0] a[0][0][1] a[0][1][0] a[0][1][1] a[0][2][0] a[0][2][1] a[1][0][0] a[1][0][1] a[1][1][0] a[1][1][1] a[1][2][0] a[1][2][1] 顺序号 从 0起 0 1 2 3 4 5 6 7 8 9 10 11
第 8 讲
1. 目的、要求 目的、
一维数组, 一维数组,二维数组
掌握一维数组的定义、引用及其初始化。 掌握二维数组的定义、引用及其初始化。 掌握数组名作为函数参数。 2. 重点、难点 重点、 数组名做函数参数时,是将实参数组的起始地址 传给形参数组,需通过例题反复体会; 深入理解“起泡法”排序,从而掌握一维数组的 应用。 数组名的含义及其使用中应注意的问题; 二维数组的初始化问题。
例题2:起泡法对10个整数按由小到大排序 起泡法思路:将相邻两个数比较,将小的调到前头。 起泡法思路: 经过1轮比较后,最大的数已调到最后一个位置。 所以n个数要比较 趟 在第j趟中要进行 次比较。 趟中要进行n-j次比较 所以 个数要比较n-1趟,在第 趟中要进行 次比较。 个数要比较
a[0] a[1] a[2] a[3] a[4] a[5]
例题:输出数组元素 main() {int i,a[10]; for (i=0;i<=9;i++) a[i]=i; for (i=9;i>=0;i--) printf(“%d”,a[i]); printf("\n"); } 运行结果:9 8 7 6 5 4 3 2 1 0 /* 逆序输出各数组元素 */ /* 数组元素赋值 */
9 8 5 4 2 0
第1次
8 9 5 4 2 0
第2次
8 5 9 4 2 0
第3次
8 5 4 9 2 0
第4次
8 5 4 2 9 0
第5次
8 5 4 2 0 9
结果
main() {int a[11]; int 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++) /* 10个数比较9趟 */ for (i=1;i<=10-j;i++) /* 每趟比较10-j次 */ 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]); 输入:1 0 4 8 12 65 –76 100 –45 123 printf("\n"); } 输出:-76 –45 0 1 4 8 12 65 100 123
2 二维数组的引用 数组必须“先定义,后引用”。 先定义,后引用 先定义 二维数组元素的表示形式: 数组名 下标][下标 数组名[下标 下标 下标 下标] 下标可以是整型表达式。 数组元素可以出现在表达式中,也可以被赋值。如: b[1][2]=a[2][3]/2; 注意: 注意:下标值的范围。常见错误: int a[3][4]; | a[3][4]=3; a[3][4]指数组以外的 某一存储单元。
{ for (i=0;i<10;i++) { if (a[i]>number) { temp1=a[i]; a[i]=number; for (j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for (i=0;i<11;i++) printf("%6d",a[i]); }
3 二维数组的初始化 1). 分行初始化。如: static int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2). 也可将数据写在一个花括号内,系统按排列顺序 对元素赋初值。如: static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 3). 也可对部分元素赋初值。如 static int a[3][4]={{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0 其结果为:
#include “stdio.h” main() { int j,i=0,a[100];
例题3:把由键盘输t some intergers(<=100) :\n"); printf("end mark--Ctrl+z\n"); while (scanf("%d",&a[i])!=EOF) i++; for (j=0,i=i-1;i>=0;j++,i--) { if (j%3==0) printf("\n"); printf("%d\t",a[i]); } } 输入:3 5 7 输出:7 5 3
下标变化顺序: 3,2,1。
1) 对二维数组 a[m][n],元素 a[i][j] 在数组中的排 列位置计算公式为: i*n+j+1 对数组a[3][4], a[2][1]的位置为: 2*4+1+1=10 表示它是第10个元素。 2) 对二维数组 a[m][n],元素 a[i][j] 在数组中的顺 序号计算公式为: i*n+j 对数组a[3][4], a[2][1]的顺序号为: 2*4+1=9 表示它前面有9个元素。
4. 一维数组程序举例 main() {int i; static 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”); /* 每行输出5个数 */ printf("%12d",f[i]); } printf("\n"); } 例题1:数组处理Fibonacci数列
3. 一维数组的初始化 1). 定义数组时初始化数组元素。如: static int a[10]={0,1,2,…,9}; 2). 可以只给部分元素赋初值。如: static int a[10]={0,1,2,3,4}; 对static数组,未赋初值则系统默认为0。 3). 对全部数组元素赋初值时,可以不指定数组长度。如: static int a[ ]={1,2,3,4,5};自动定义长度为5。 注意:数组长度与提供的初值个数不相等时,不能省略数组 长度。
一维数组的定义和引用
1. 一维数组的定义 数组名[常量表达式 常量表达式]; 类型说明符 数组名 常量表达式 ; 说明:1)数组名命名规则与变量名相同; 2)常量表达式不能含变量,不能用圆括弧; 3)下标从0开始计算。
2. 一维数组元素的引用
数组必须先定义后引用,并且只能引用数组元 素而不能一次引用整个数组。 数组元素的表示形式为: 数组名[下标] 数组名[下标] 下标 下标可以是整型常量或整型表达式。如: 下标 a[0]=a[5]+a[2*3]
其结果为:
4). 若对全部元素都赋初值,则定义数组时对第一 维的长度可以不指定,但第二维的长度不能省略。 static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};等价于 static int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 若定义时省略第一维的长度并部分赋初值,则应 采用分行赋初值的方法。如: static int a[ ][4]={{0,0,3},{ },{0,10}}; 结果为 0 0 3 0 0 0 0 0 0 0
相关主题