C语言课件第4章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.对二维数组初始化的说明
(1)二维数组初始化和一维数组初始化的方法基本 相同,也是在类型说明时给各个数组元素赋以初值。 稍微有所区别的是:二维数组可按行分段赋值,也 可以不分行连续赋值。 • 例如对数组m[4][3]:
①按行分段赋值可写为: int m[4][3]={ {78,65,80},{67,89,65},{53,68,98},{57,88,67} }; • 其中,{78,65,80}是赋给第一行3个数组元素的,这里可以看 成是赋给一维数组m[0]的;{67,89,65}是赋给第二行3个数组 元素的,这里可以看成是赋给一维数组m[1]的;其他依次类 推。
• 一维数组的元素有一个下标、二维数组的元素有 两个下标、三维数组有三个下标。 • C语言的数组可以是多维的,但一般常用的是一 维数组和二维数组。
4.2一维数组
• 4.2.1一维数组的定义 • 4.2.2一维数组的初始化 • 4.2.3一维数组的引用
4.2.1一维数组的定义
• 一维数组定义的语法格式如下: 类型说明符 数组名 [数组长度]; • 其中: (1)“类型说明符”可以是任何一种基本数据类型或 构造数据类型。例如:
3.多维数组的扩展
• 多维数组可以由二维数组扩展而得到,例如:
int m[2][3][4];
• 定义了一个数组名为m的三维数组,按顺序进行 展开后的各个元素值分别如下:
m[0][0][0],m[0][0][1],m[0][0][2],m[0][0][3] m[0][1][0],m[0][1][1],m[0][1][2],m[0][1][3] m[0][2][0],m[0][2][1],m[0][2][2],m[0][2][3] m[1][0][0],m[1][0][1],m[1][0][2],m[1][0][3] m[1][1][0],m[1][1][1],m[1][1][2],m[1][1][3] m[1][2][0],m[1][2][1],m[1][2][2],m[1][2][3]
a[min_m]=a[m]; a[m]=x;
} for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n");
}
程序的运行结果如下: Please input the value of n:6↙ please input your number: 5 34 56 2 78 40↙ 2 34 40 56 78
例4.1数组元素的赋值及引用举例。 #include<stdio.h> main() { int i,m[8]; for(i=0;i<=7;i++) m[i]=i; for(i=7;i>=0;i--) printf("%d ",m[i]); } 程序的运行结果如下: 7 6 5 4 3 2 1 0
例4.4从键盘上输入一个3×4的矩阵,将其转换后 形成4×3矩阵输出。 • 分析:矩阵的转置是将矩阵的行和列进行互换,使其 行成为列,列成为行,例如: • 原矩阵为: 1 2 3 4
5 6 7 8 9 10 11 12
转置后的矩阵为:
1 2 3
5
9
6 10 7 11
4
8 12
#include<stdio.h> main() { int m[3][4],n[4][3],i,j; printf("Please enter the number of m[3][4]:\n"); for(i=0;i<3;i++) /* 输入一个3×4的矩阵存放在数组m中 */ for(j=0;j<4;j++) scanf("%d",&m[i][j]); for(i=0;i<4;i++) /* 将数组m中矩阵转置后存放数组n中 */ for(j=0;j<3;j++) n[i][j]=m[j][i]; printf("The number of n[4][3] is:\n"); for(i=0;i<4;i++) /* 输出n数组中的4×3 矩阵 */ { for(j=0;j<3;j++) printf("%d ",n[i][j]); printf("\n"); } }
#include<stdio.h> main() { int n,i,m,x,min,min_m,a[100]; printf("Please input the value of n:"); scanf(“%d”,&n); /* 输入要排序数的个数n不能大于100 */ printf("Please input your number:\n"); for(i=0;i<n;i++) /* 输入n个要求排序的数 */ scanf("%d",&a[i]); for(m=0;m<n-1;m++) /* 控制排序总共进行n-1步 */ { min=a[m]; /* 设定第m个数是当前最小数 */ min_m=m; /* 用min_m记录最小数的下标 */ for(i=m;i<n;i++) /* 寻找最小数 */ if(a[i]<min) /* 如果当前数小于最小数 */ { min=a[i]; /* 记录新的最小数和下标 */ min_m=i; x=a[min_m]; /* 交换最小数和第m个数的位置 */
②不分行连续赋值可写为: int m[4][3]={ 78,65,80,67,89,65,53, 68,98,57,88,67 }; • 各元素获得的初值和第1种方式的结果完全相同。C语 言规定,用这种方式给二维数组赋初值时,是先按行、 后按列的顺序进行的。 (2)可以只对部分元素赋初值,未赋初值的元素自动 取0值。例如: int m[3][4]={{1},{2},{3}}; • 是对每一行的第一列元素赋值,未赋值的元素取0值。 赋值后各元素的值依次为: 1 0 0 0 2 0 0 0 3 0 0 0
4.3.2二维数组的初始化
• 1. 二维数组初始化的一般形式 • 2. 对二维数组初始化的说明
1.二维数组初始化的一般形式
• 二维数组初始化的一般形式为:
数据类型说明符 数组名[行数][列数]={{数据值,数据 值,……,数据值},{数据值,数据值,……,数据 值}};
• 或者
数据类型说明符 数组名[行数][列数]={数据值,数据 值,……,数据值};
4.2.3一维数组的引用
• 数组元素引用的一般形式为:
数组名[下标表达式]
• C语言规定只能逐个引用数组中的元素,而不能 一次引用整个数组。
1.引用说明
(1)下标表达式必须放在方括号内,且只能取整型值。 下标的下限是0,而上限不能超过该数组定义时的长 度值减1(即:数组长度-1)。 (2)数组中的下标只能为整型常量或整型表达式。 (3)在C语言中只能单独地使用数组元素,而不能一 次引用整个数组。 (4)任何一个数组元素的引用都可以看成是一个变量 的使用。
2.对二维数组的说明
(1)二维数组在概念上是二维的,也就是说其下标在 两个方向上变化。 (2)在C语言中,二维数组是按行排列的。 (3)数组元素所占的存储位置跟其类型有关系。 (4)一个二维数组可以看成为若干个一维数组。 • 注意:二维数组中m[2][3]中的m[0]和m[1]不能当作数 组元素使用,因为它们是一维数组名,不是一个单纯 的数组元素。
• 其中在{ }中的各数据值即为各元素的初值,各值 之间用逗号间隔。 • C语言对数组的初始化赋值还有以下几点规定: (1)可以只给部分元素赋初值。没有赋初值的元素: 对于数值型数组,自动赋初值为0;对字符型数组, 自动赋初值为空字符。 例如:
int m[10]={1,2,3,4}; • 定义的数组m有10个元素,但大括号内只有4个初值, 这表示只给前面4个元素赋初值,后6个元素值均为0。 (2)只能给元素逐个赋值,不能给数组整体赋值。 • 例如:给数组m中的10个元素全部赋值“2”只能用以 下形式来表示: int m[10]={2,2,2,2,2,2,2,2,2,2}; • 而不能为了方便写成如下的形式: int a[10]=2; (3)如果给全部元素赋值,则在数组说明中,可以不 给出数组元素的个数。其长度等于初值表中数组元素 的个数。例如: int m[5]={1,2,3,4,5}; 可写为: int m[ ]={1,2,3,4,5};
• 其中“行数”表示第一维下标的长度,“列数” 则表示第二维下标的长度。
• 例如: int m[4][5];
/*定义了一个数组名为m的二维数组,其中行数为4、列数为5*/
• 该数组的数组元素共有4×5=20个,分别为:
m[0][0],m[0][1],m[0][2],m[0][3],m[0][4] m[1][0],m[1][1],m[1][2],m[1][3],m[1][4] m[2][0],m[2][1],m[2][2],m[2][3],m[2][4] m[3][0],m[3][1],m[3][2],m[3][3],m[3][4]
int m[8]; char c[20]; /*定义一个整型数组m,有8个元素*/ /*定义一个字符数组c,有20个元素*/
(2)“数组名”是用户定义的数组标识符。其命名规 则和变量命名规则相同。
(3)数组名后的“数组长度”表示数组中数据元素的个数, 通常是一个整型常量、整型变量或整型表达式。例如在 m[8]中,表示数组m有8个元素,下标从0开始一直到7, 这8个数组元素分别是: m[0]、m[1]、m[2]、m[3]、m[4]、m[5]、m[6]、m[7], 注意没有m[8]。 (4)一个数组定义语句中可以只定义一个数组,也可以定 义多个数组,还可以同时定义数组和变量。例如: double a[10],b1;
2.一维数组举例
例4.3用“选择排序法”对一维数组中的整数进行 排序,使其数组元素的值按从小到大的顺序排列。 分析:选择排序法是一种简单而且常用的对数据排序 的方法,其排序原理为:设有m个数要求从小到大排 列,选择排序法排序过程分为m-1个步骤: • 第1步、在m个数中找出最小数,然后和第一个数交换, 前1个数已经排好序。 • 第2步、在m-1个数中找出最小数,然后和第2个数交 换,前2个数已经排好序。 • …… • 第k步、在m-k+1个数中找出最小数,然后和第k个数 交换,前k个数已经排好序。 • 这样一值到第m-1步结束。
/*定义了一个有10个元素的双精度型数组a和一个双精度型变量b1*/
又例如: char f[8],e1;
/*定义了一个有8个元素的字符型数组f和一个字符型变量e1*/
4.2.2一维数组的初始化
• 在定义数组的同时给数组元素赋予初值称为数组 的初始化。 • 初始化赋值的一般形式为:
类型说明符 数组名[常量表达式]={数据值1, 数据值2,…,数据值n};
Leabharlann Baidu
C语言允许用表达式表示下标。 例4.2数组元素用表达式表示下标应用举例。
#include<stdio.h> main() { int i,m[8]; for(i=0;i<8;) m[i++]=2*i+2; for(i=0;i<=7;i++) printf("%d ",m[i]); }
程序的最后运行结果如下: 2 4 6 8 10 12 14 16
2.数组的数据类型
• 数组的数据类型可以是各种基本数据类型,如int、 float、double、char、long等 。还可以指针型、 结构体型、共用体型、枚举型(后续章节将介绍) 等。 • C语言规定,同一数组中的所有元素必须是相同 类型的,不允许同一个数组中包含不同的数据类 型。
3.数组的维数
第4章数组和字符串
第4章 数组和字符串
• • • • 4.1 数组的概念 4.2 一维数组 4.3 二维数组 4.4 字符串与字符函数
4.1 数组的概念
• 1.数组的定义 • 2.数组的数据类型 • 3.数组的维数
1.数组的定义
• 按序排列的同类数据元素的集合就称为数组。 • 在C语言中,一个数组可以分解为多个数组元素。 • 按数组元素类型的不同,数组又可分为数值型数组、 字符型数组、指针型数组、结构体型数组等各种类 别。
4.3 二维数组
• 4.3.1 二维数组的定义 • 4.3.2 二维数组的初始化 • 4.3.3 二维数组的引用
4.3.1二维数组的定义
• 1. 二维数组定义的一般形式 • 2. 对二维数组的说明 • 3. 多维数组的扩展
1.二维数组定义的一般形式
• 二维数组定义的一般形式为:
类型说明符 数组名[行数][列数]
(3)如果对全部元素赋初值,则第一维的长度可以省 略。例如: int m[3][3]={1,2,3,4,5,6,7,8,9}; • 可以写为: int m[][3]={1,2,3,4,5,6,7,8,9}; • 表示数组m[][3]的第一维长度是3。 • 需要注意的是:使用这种方法赋初值,必须给出所有 数组元素的初值,如果初值的个数不正确,则系统将 作出错处理。