第4章 数组的应用
合集下载
数据结构第四章 数组
4.2
数组的存储结构
通常采用顺序存储结构 顺序存储结构 以二维数组Amn为例
行优先 a00 a01 … a0(n-1) a10 a11 … a1(n-1) … a(m-1)0 a(m-1)1 … a (m-1)(n-1) 列优先
Loc(aij)=Loc(a00)+(i×n+j)×k
a00 a10 … a (m-1)0 a01 a11 … a (m-1) 1 … a0(n-1) a1(n-1) … a (m-1)(n-1)
0 0 -3 0 0 15 12 0 0 0 18 0 9 0 0 24 0 0 0 0 0 0 0 -7 0 0 14 0 0 0
(以转置运算为例) 以转置运算为例)
0 0 0 0 0 0
M
转置后
0 12 9 0 0 0
0 0 0 0 0 0
–3 0 0 0 14 0
0 0 15 0 18 0 24 0 0 0 0 -7 0 0 0 0 0 0
思路:反复扫描a.data中的列序,从小到大依次进行转置。 思路:反复扫描a.data中的列序,从小到大依次进行转置。 a.data中的列序
col
三 元 组 表 a.data (0, 1, 12) ③ 1 (0, 2, 9 ) ⑤ 0 (2, 0, -3) ① (2, 4, 14) (3, 2, 24) 1 (4, 1, 18) 0 (5, 0, 15) (5, 3, -7)
其中,sb[n(n+1)/2]中存放着常数 中存放着常数。 其中,sb[n(n+1)/2]中存放着常数。
三、稀疏矩阵的压缩存储
稀疏矩阵:设矩阵A中有s个非零元素, 稀疏矩阵:设矩阵A中有s个非零元素,若 远远小于矩阵元素的总数( s远远小于矩阵元素的总数(即s≦m×n), 则称A为稀疏矩阵。 则称A为稀疏矩阵。
12 《C语言程序设计》教案 第四章 数组(2)—二维数组
说明:在这里为什么这么说呢?以后讲到指针的时候更便于理解
二维数组的存储:二维数组从概念上可理解为行-列矩阵,但存储器是一维的,需按一定规则转换,在内存中:C语言中,二维数组中元素排列的顺序是——按行存放,不同的语言它的排列顺序是不一样的,Fotran是按列存放的。
如:见纸上
也就是说:数组元素的实际存放顺序是:右边下标比左边下标变化得快!!!
(2)字符数组的初始化
1)按元素赋
static char c[10]={‘s’,’t’,’o’,’r’,’e’};
注意static char c[10];则c[0],c[1],。。。c[9]初值均为‘\0’
但若char c[10];则c[0],c[1],。。。c[9]的值是未知的
注意:在C语言中,讲字符串作为字符数组来处理,即用一个一维数组来存放一个字符串。如c[10]存放字符串“store”。为了测定实际字符串长度,C语言规定了一个“字符串结束标志”,即‘\0’。即遇到字符‘\0’时,表示字符串结束。
printf(“%5”,a[i][i]);输出主对角线数据
考虑输出次对角线数据,打印上三角的各数据
例将一个二维数组行和列元素互换,存到另一个二维数组中(转置)
算法:1 a数组初始化(或赋值)并输出;2用二重循环进行转置b[j][i]=a[i][j];输出b数组
对于n*n的二维数组,可以在同一个数组进行矩阵转置操作
H=104
I =105
S=115
=32
注意几个问题:用字符串给字符数组赋初值,系统自动加上空字符’\0’(终结符)
‘ ’空格字符的AscII编码为32
‘\0’空字符ASCII编码为0
两者均无法直接打印出来。
3)字符串的引用与输入输出
二维数组的存储:二维数组从概念上可理解为行-列矩阵,但存储器是一维的,需按一定规则转换,在内存中:C语言中,二维数组中元素排列的顺序是——按行存放,不同的语言它的排列顺序是不一样的,Fotran是按列存放的。
如:见纸上
也就是说:数组元素的实际存放顺序是:右边下标比左边下标变化得快!!!
(2)字符数组的初始化
1)按元素赋
static char c[10]={‘s’,’t’,’o’,’r’,’e’};
注意static char c[10];则c[0],c[1],。。。c[9]初值均为‘\0’
但若char c[10];则c[0],c[1],。。。c[9]的值是未知的
注意:在C语言中,讲字符串作为字符数组来处理,即用一个一维数组来存放一个字符串。如c[10]存放字符串“store”。为了测定实际字符串长度,C语言规定了一个“字符串结束标志”,即‘\0’。即遇到字符‘\0’时,表示字符串结束。
printf(“%5”,a[i][i]);输出主对角线数据
考虑输出次对角线数据,打印上三角的各数据
例将一个二维数组行和列元素互换,存到另一个二维数组中(转置)
算法:1 a数组初始化(或赋值)并输出;2用二重循环进行转置b[j][i]=a[i][j];输出b数组
对于n*n的二维数组,可以在同一个数组进行矩阵转置操作
H=104
I =105
S=115
=32
注意几个问题:用字符串给字符数组赋初值,系统自动加上空字符’\0’(终结符)
‘ ’空格字符的AscII编码为32
‘\0’空字符ASCII编码为0
两者均无法直接打印出来。
3)字符串的引用与输入输出
C语言 数组
} for(i=0;i<N;i++){ //计算每门课的平均分
sAverage[i]=0.0; for(j=0;j<M;j++)
sAverage[i]+=score[j][i]; sAverage[i]=sAverage[i]/M; }
C语言程序设计
二维数组的初始化
第4章 数组
(1)按行对二维数组进行初始化: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言程序设计
一维数组的定义
第4章 数组
➢ 要想使用一维数组,必须对一维数组进行定义。定义时,
需要说明两点: (1)数组中元素的类型; (2)数组中元素的个数。
类型标识符 数组名[整型常量表达式];
int x[10]; char name[20]; float score[20];
//定义一个包含10个整数的数组x //定义一个包含20个字符的数组name //定义一个包含20个浮点数的数组score
int arr[Num]={10,8,56,45,31,49,47,50,89,100}; printf("请输入要查找的数据: "); scanf("%d",&a); for(i=0;i<Num;i++){
if (arr[i]==a){ printf("元素%d在数组中的位置是:%d\n", a, i+1); break;
#define N 20 int a[N]={1,1}; //用一维数组表示Fibonacci数列,并对其赋初值 int i, sum=0; for(i=2;i<N;i++)
sAverage[i]=0.0; for(j=0;j<M;j++)
sAverage[i]+=score[j][i]; sAverage[i]=sAverage[i]/M; }
C语言程序设计
二维数组的初始化
第4章 数组
(1)按行对二维数组进行初始化: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言程序设计
一维数组的定义
第4章 数组
➢ 要想使用一维数组,必须对一维数组进行定义。定义时,
需要说明两点: (1)数组中元素的类型; (2)数组中元素的个数。
类型标识符 数组名[整型常量表达式];
int x[10]; char name[20]; float score[20];
//定义一个包含10个整数的数组x //定义一个包含20个字符的数组name //定义一个包含20个浮点数的数组score
int arr[Num]={10,8,56,45,31,49,47,50,89,100}; printf("请输入要查找的数据: "); scanf("%d",&a); for(i=0;i<Num;i++){
if (arr[i]==a){ printf("元素%d在数组中的位置是:%d\n", a, i+1); break;
#define N 20 int a[N]={1,1}; //用一维数组表示Fibonacci数列,并对其赋初值 int i, sum=0; for(i=2;i<N;i++)
数据结构第4章数组和串
1
● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储
● 教学目的:理解抽象数据类型数组的概念, 掌握数组的不同存储结构的实现及应用,了 解广义表的相关概念,掌握串的逻辑结构、 存储结构及其基本运算。
● 教学重点:数作在不同 存储结构上的实现。 ● 教学难点:带状矩阵的压缩存储;稀疏矩 阵的三元组表实现及其转置算法,堆结构的 串操作实现;串的模式匹配算法。
矩阵的压缩存储
printf("Array a:\n"); k=0; for(i=0;i<N;i++)//输出矩阵A { for(j=0;j<N;j++) if(i<j)printf("%5d",sa[M-1]); else printf("%5d",sa[i*(i+1)/2+j]); printf("\n"); } printf("Array b:\n"); k=0; for(i=0;i<N;i++)//输出矩阵B { for(j=0;j<N;j++) if(i>j)printf("%5d",sb[M-1]); else printf("%5d",sb[j*(j+1)/2+i]); printf("\n"); }}
矩阵的压缩存储
由此可见,要唯一表示一个稀疏矩阵,在存储三 元组表的同时还需存储该矩阵总的行数、列数及非 零元个数。 练习:写出图4-9(a)所示稀疏矩阵的三元组表。
三元组表(也是线性表)的存储方式主要有两种: 顺序存储和链式存储,从而可引出稀疏矩阵的两种 压缩存储方法:三元组顺序表和十字链表。 3、三元组顺序表
矩阵的压缩存储
PHP程序开发-PHP基础案例教程第4章 数组
echo $sub[1];
// 输出结果:Java
echo $sub[3];
// 输出结果:Android
echo $data['goods'];
// 输出结果:clothes
echo $data['sales'];
// 输出结果:500
✎ 4.2 数组的基本使用
2. 访问数组
另外,若要一次查看数组中的所有元素,则可以利用前面学习过的输出语句函数 print_r()和var_dump(),并且通常情况下为了使输出的函数按照一定的格式打印, 查看时经常与pre标记一起使用。
[0]
[1]
12
36
[2]
[3]
78
96
键(Key) 值(Value)
✎ 4.1 初识数组
2. 关数组
关联数组是指键名为字符串的数组。通常情况下,关联数组元素的“键”和“值” 之间有一定的业务逻辑关系。因此,通常使用关联数组存储一系列具有逻辑关系的 变量。关联数组的“键”都是字符串,并与“值”之间具有一一对应的关系。
定义关联数组
$info = array('id' => 10, 'name' => 'Tom', 'tel' => 18810888188);
在定义关联数组时 “键”则有明确的数据类型要求,具体如下。 ➢ 键只能是整型或字符串型的数据,如果是其他类型,则会执行类型自动转换 ➢ 合法整型的字符串会被转为整型,如“2”转为2,而“02”则不会被转换 ➢ 浮点数会被舍去小数部分直接转换成整型,如“2.6”转为2 ➢ 布尔类型的true会被转为1,false转为0 ➢ NULL类型会被转为空字符串 ➢ 若数组中存在相同键名的元素时,后面的元素会覆盖前面元素的值
《Java语言程序设计》(第3版)第4章
}
//显示对角线之和
for (i = 0; i < 3; i++) {
sum = sum + a[i][i];
}
System.out.println("对角线之和:" + sum);
}
}
【3】编写一程序,查找某一字符串是否包含有“abc”。
[解答]:
public class Test_3{
public static void main(String[] args) {
String s = "yangen abc";
int a = s.indexOf("abc");
//a位找到abc的下标,找不到则返回-1
if (a != -1) {
System.out.print("包含字符串abc");
} else {
System.out.print("不包含字符串abc");
(2)第一行元素的名字为a[0][0],a[0][1],a[0][2]
(3)置行1列2的元素为0,语句是a[0][1]=0;
(4)
for(int i=0;i<2;i++){
for(in j=0;j<3;j++){
a[i][j]=0;
}
}
(5)
int sum=0;
sum=a[0][2]+a[1][2];
第4章数组与字符串
【1】考虑一个2×3的数组a。
(1)为a写一个设声明。试问,这样的声明使a有多少行,多少列,多少元素?
(2)写出a的第1行的所有元素的名字。
//显示对角线之和
for (i = 0; i < 3; i++) {
sum = sum + a[i][i];
}
System.out.println("对角线之和:" + sum);
}
}
【3】编写一程序,查找某一字符串是否包含有“abc”。
[解答]:
public class Test_3{
public static void main(String[] args) {
String s = "yangen abc";
int a = s.indexOf("abc");
//a位找到abc的下标,找不到则返回-1
if (a != -1) {
System.out.print("包含字符串abc");
} else {
System.out.print("不包含字符串abc");
(2)第一行元素的名字为a[0][0],a[0][1],a[0][2]
(3)置行1列2的元素为0,语句是a[0][1]=0;
(4)
for(int i=0;i<2;i++){
for(in j=0;j<3;j++){
a[i][j]=0;
}
}
(5)
int sum=0;
sum=a[0][2]+a[1][2];
第4章数组与字符串
【1】考虑一个2×3的数组a。
(1)为a写一个设声明。试问,这样的声明使a有多少行,多少列,多少元素?
(2)写出a的第1行的所有元素的名字。
《C语言程序设计课件》第四章-数组
提示:程序在读入数时将其存储在一个数组中, 然后通过数组反向开始一个接一个地显示出数组 元素。
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
#include <stdio.h> #define N 10 int main(void)
{ int a[N], i; printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++)
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
20
a[1]
02
a[2]
44
a[3]
55
a[4]
88
a[5]
99
for(i=0;i<5;i++) if (a[i]>a[i+1]) { ……}
for(i=0;i<4;i++) if (a[i]>a[i+1]) { ……}
4.2 一维数组
一维数组主要用来存储一组类型相同并且数量一定 的数据。其中,每个数据称为数组的一个元素。
4.2.1 一维数组定义 一维数组的定义形式如下: 类型名 数组名[常量表达式]; int x[100]; char string[10]; double data[10];
常量表达式给出了数组的长度,在C语 言中定义数组时必须确定数组的长度。
600
xxx[[[654]]]
700
xxx[[[765]]]
800
xxx[[[876]]]
900
xxx[[[987]]]
第04章 数组
高 级 语 言 程 序 设 计 与 应 用 教 程
第4章
数
组
第 四 章
数 组
1
高 级 语 言 程 序 设 计 与 应 用 教 程
第4章:数 组
学习的意义
到目前为止,我们已经讨论了C语言中的基本数据类型, 如果用基本数据类型来定义某些变量,那么这些变量在内存 中将占用各自的内存单元,变量之间的制约关系无法体现, 不能表现出这些变量之间的关联性,看不出它们之间有任何 构造数据类型之一 有没有更好的方法来 的联系,我们把这些变量称之为‚离散变量‛,对它们的访 数组:把具有相同类型的若干变量按有序的形式 问只能通过变量名逐一进行 。 解决呢? 组织起来的集合,用数组名标识。 有!就是用数组来编程。 下面来思考一个问题:如何编程来实现对100个数进行排序呢? 数组元素:数组中的变量。用数组名和下标确定, 具有相同的名字,但有不同的下标。 解题思路: 太复杂了! 定义100个整型变量来 晕!!! 分别存放这100个整数,然 后再对这些变量的值进行比 较、交换等操作 。
//超出了数组的大小
(3) 只能给元素逐个赋值,不能给数组整体赋值。 例 int a[5] = {1, 1, 1, 1, 1}; 不能简化为: int a[10] = 1; ×
第 四 章
数 组
14
高 级 语 言 程 序 设 计 与 应 用 教 程
初始化赋值说明:
(4) 如果表达式的个数小于数组的大小,则未指定值的 数组元素被赋值为0;
4
高 级 语 言 程 序 设 计 与 应 用 教 程
第 四 章
4. 类型名int说明a数组中的10个数组元素都是整型,在每个 数组元素中只能存放整型数据。数组的类型实际上是指数 组元素的取值类型。对于同一个数组,其所有元素的数据 类型都是相同的。 5. 数组定义后, C语言的编译系统将给其分配一定大小的内 再例如: 存单元,其所占内存单元的大小与数组元素的类型和数组 float f[20]; //定义了有20个数据元素的float型数组f 的长度有关。上例中,系统为a数组在内存中开辟一段连 char str1[10], str2[20]; //定义了有10个和20个数据元素的char型 续的存储单元,如图所示。在图中标明了每个存储单元的 数组str1和str2 名字,可以用该名字直接引用每个存储单元。a数组在内 存中一共分配了10个int型的存储单元,而每个int型数据 占用4个字节(VC6.0),所以,a数组一共占用了40个字 节的连续存储单元。
第4章
数
组
第 四 章
数 组
1
高 级 语 言 程 序 设 计 与 应 用 教 程
第4章:数 组
学习的意义
到目前为止,我们已经讨论了C语言中的基本数据类型, 如果用基本数据类型来定义某些变量,那么这些变量在内存 中将占用各自的内存单元,变量之间的制约关系无法体现, 不能表现出这些变量之间的关联性,看不出它们之间有任何 构造数据类型之一 有没有更好的方法来 的联系,我们把这些变量称之为‚离散变量‛,对它们的访 数组:把具有相同类型的若干变量按有序的形式 问只能通过变量名逐一进行 。 解决呢? 组织起来的集合,用数组名标识。 有!就是用数组来编程。 下面来思考一个问题:如何编程来实现对100个数进行排序呢? 数组元素:数组中的变量。用数组名和下标确定, 具有相同的名字,但有不同的下标。 解题思路: 太复杂了! 定义100个整型变量来 晕!!! 分别存放这100个整数,然 后再对这些变量的值进行比 较、交换等操作 。
//超出了数组的大小
(3) 只能给元素逐个赋值,不能给数组整体赋值。 例 int a[5] = {1, 1, 1, 1, 1}; 不能简化为: int a[10] = 1; ×
第 四 章
数 组
14
高 级 语 言 程 序 设 计 与 应 用 教 程
初始化赋值说明:
(4) 如果表达式的个数小于数组的大小,则未指定值的 数组元素被赋值为0;
4
高 级 语 言 程 序 设 计 与 应 用 教 程
第 四 章
4. 类型名int说明a数组中的10个数组元素都是整型,在每个 数组元素中只能存放整型数据。数组的类型实际上是指数 组元素的取值类型。对于同一个数组,其所有元素的数据 类型都是相同的。 5. 数组定义后, C语言的编译系统将给其分配一定大小的内 再例如: 存单元,其所占内存单元的大小与数组元素的类型和数组 float f[20]; //定义了有20个数据元素的float型数组f 的长度有关。上例中,系统为a数组在内存中开辟一段连 char str1[10], str2[20]; //定义了有10个和20个数据元素的char型 续的存储单元,如图所示。在图中标明了每个存储单元的 数组str1和str2 名字,可以用该名字直接引用每个存储单元。a数组在内 存中一共分配了10个int型的存储单元,而每个int型数据 占用4个字节(VC6.0),所以,a数组一共占用了40个字 节的连续存储单元。
C++程序设计教程-第4章 数组和指针-106
可以将一个指针变量指向同类型数组的首 地址,这样就可以通过对该指针变量访问数 组元素。
4.2
对一维数组而言,数组名和指针有许多相 通的地方,归纳如下:
(1) 数组名a表示数组的起始地址。可以利 用a+i表示的第i+1个元素的地址,即&a[i];
(2) 将指针变量pInt指向数组a的起始地址 的方法有两种,即pInt=a或pInt=&a[0];
(2) 第二种方法是通过强制类型转换用一 个整型常数直接初始化指针类型的变量。这 种方法必须在清楚目前存储空间那些“空闲 ”的前提下才能使用,否则在程序运行过程 中将会出现致命错误。
4.2
指针变量的值始终是一个地址,它是一个 无符号整型数据。
指针变量所指向的数据的类型与指针的 类型一致,它的值可以用如下的方法获得:
*<指针变量>
这里的运算符“*”称为取内容运算符。该
运算符的运算结果为作为其操作数的指针变 量所指向的数据的值。
4.2
二、指针变量的操作 1、指针变量的赋值运算 (1) 将一个变量的地址直接赋给同类型的 指针变量。
(2)同类型的指针之间可以互相赋值,此 时这两个指针指向同一个内存单元。
(3)不同类型的指针变量之间可以通过类型 强制转换互相赋值。但这样的赋值通常没有 价值。
用的空间,由于它存放的是地址,因此该空
间通常与int类型的数据所占用的空间相同,
为4个字节;另一个为该指针变量所指向的数
据所占用的存储空间。如图下图所示(以字
符型指针ptrch1为例):
ptrch1:
20001
ptrch1所指向的数据:
地址为20001
4.2
指针变量的初始化方法有两种:
4.2
对一维数组而言,数组名和指针有许多相 通的地方,归纳如下:
(1) 数组名a表示数组的起始地址。可以利 用a+i表示的第i+1个元素的地址,即&a[i];
(2) 将指针变量pInt指向数组a的起始地址 的方法有两种,即pInt=a或pInt=&a[0];
(2) 第二种方法是通过强制类型转换用一 个整型常数直接初始化指针类型的变量。这 种方法必须在清楚目前存储空间那些“空闲 ”的前提下才能使用,否则在程序运行过程 中将会出现致命错误。
4.2
指针变量的值始终是一个地址,它是一个 无符号整型数据。
指针变量所指向的数据的类型与指针的 类型一致,它的值可以用如下的方法获得:
*<指针变量>
这里的运算符“*”称为取内容运算符。该
运算符的运算结果为作为其操作数的指针变 量所指向的数据的值。
4.2
二、指针变量的操作 1、指针变量的赋值运算 (1) 将一个变量的地址直接赋给同类型的 指针变量。
(2)同类型的指针之间可以互相赋值,此 时这两个指针指向同一个内存单元。
(3)不同类型的指针变量之间可以通过类型 强制转换互相赋值。但这样的赋值通常没有 价值。
用的空间,由于它存放的是地址,因此该空
间通常与int类型的数据所占用的空间相同,
为4个字节;另一个为该指针变量所指向的数
据所占用的存储空间。如图下图所示(以字
符型指针ptrch1为例):
ptrch1:
20001
ptrch1所指向的数据:
地址为20001
4.2
指针变量的初始化方法有两种:
C++_04_01_数组的应用
西南交通大学
24
西南交通大学
[例4-5]自动产生并 输出12行杨辉三角形
1
1
1 2
1
1
1
1 4
3
6
3
4
1
1
∶
∶
25
#include <iostream> #include <iomanip> using namespace std; const int N=5; void main() { int i,j,a[N][N]; for (i = 0; i < N; i++) { a[i][0] = 1; a[i][i] = 1; }
9
将数据存储到一维数组
西南交通大学
例如: string st[6]; int a[5]={19};
cin>>a[4];
getline(cin,st);
如果输入含有空格 的字符串,使用getline(), 而非cin
10
二维数组的定义及引用
例如: float a[3][4]; b[1][2]=a[2][3]/2 可以理解为
西南交通大学
26
西南交通大学
for (i = 2; i < N; i++) for (j = 1; j < i; j++) a[i][j] = a[i-1][j-1] + a[i-1][j]; for (i = 0; i < N; i++) { for (j = 0; j < (N * 3 - 3 * i); j++) cout<<" "; for (j = 0; j <= i; j++) cout<<setw(6)<<a[i][j]; cout<<endl; } }
《c++程序设计》第4章 数组
; (2)字符数组1必须足够大,以便容纳被复制的字符串; (3)字符串2后的'\0'也一起复制到字符数组1中; (4)在赋值运算符“=”没有重载之前,不能用赋值语句将一个字符串常量或字符数组
赋给另一个字符数组,只能用字符串复制函数来处理。例如下面操作是非法的: str2="C++ program"; str1=str2;
4.1 数组的定义与使用
4.1.1 一维数组的定义和使用
1.一维数组的定义与初始化赋值 (1)一维数组的定义
定义格式为:
〔存储类型〕 <类型> <数组名>[<常量表达式>]; 例:int a[10];
表示定义一个名为a的整型数组,有10个元素,分别为a[0]、a[1]、 a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9] 。
int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
二维数组的初始化赋值
② 给数组的部分元素赋初值 给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法 类似。
3.字符串连接函数strcat()
格式:strcat(<字符数组1>,<字符串2>) 功能:将字符串2连接到字符数组1中的字符串后,其结果存放在字符数组1中。 例如:
char str1[30]="I am a "; char str2[]="student."; strcat(str1,str2); 则字符数组1的内容为"I am a student."。 说明: (1)字符数组1必须是字符数组名,字符串2可以是字符数组名,也可以是字符串常量; (2)字符数组1必须足够大,以便容纳连接后的新字符串; (3)连接时字符串1之后的'\0'取消,只在新字符串最后保留一个'\0'。
赋给另一个字符数组,只能用字符串复制函数来处理。例如下面操作是非法的: str2="C++ program"; str1=str2;
4.1 数组的定义与使用
4.1.1 一维数组的定义和使用
1.一维数组的定义与初始化赋值 (1)一维数组的定义
定义格式为:
〔存储类型〕 <类型> <数组名>[<常量表达式>]; 例:int a[10];
表示定义一个名为a的整型数组,有10个元素,分别为a[0]、a[1]、 a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9] 。
int a[ ][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
二维数组的初始化赋值
② 给数组的部分元素赋初值 给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法 类似。
3.字符串连接函数strcat()
格式:strcat(<字符数组1>,<字符串2>) 功能:将字符串2连接到字符数组1中的字符串后,其结果存放在字符数组1中。 例如:
char str1[30]="I am a "; char str2[]="student."; strcat(str1,str2); 则字符数组1的内容为"I am a student."。 说明: (1)字符数组1必须是字符数组名,字符串2可以是字符数组名,也可以是字符串常量; (2)字符数组1必须足够大,以便容纳连接后的新字符串; (3)连接时字符串1之后的'\0'取消,只在新字符串最后保留一个'\0'。
《MATLAB程序设计》第4章数组及应用
数组在内 存中的地 址
0x0012FF68 a[0] 0x0012FF6C a[1] 0x0012FF70 a[2] 0x0012FF74 a[3]
数组元素
0x0012FF78 a[4]
0x0012FF7C a[5]
8
一维数组在内存中的存储形式
说明:
(1)数组名a表示内存首地址,是地址常量。
(2)数组a中每个数组元素占的内存空间根据 数组类型确定,整个数组占的内存为:数组元 素个数乘以每个元素所占内存空间如: int a[10]; 4×10=40 float b[20]; 4×20=80 double c[5]; 8×5=40 char d[8]; 1×8=8
第4章 数组
教学内容
数组的定义及应用
字符串处理函数
几个常用算法:排序算法(选择排序、
冒泡排序)
1
第4章 数组
重点、难点
数组的定义及应用
常用算法的设计(选择排序、
冒泡排序)
2
第4章 数组
教学目标
熟练掌握数组的定义及应用
掌握字符数组的定义及应用
掌握常用的字符串处理函数
熟练掌握几个常用算法:排序
算法(选择排序、冒泡排序)
分析:所谓转置就是将矩阵的行列互换,即将 a矩阵 的a[i][j]元素变成b矩阵的b[j][i]。
24
#include <iostream> using namespace std; int main() { int a[3][4] ={{1,2,3,4},{3,4,5,6},{5,6,7,8}}; int b[4][3],i,j; for(i=0;i<3;i++) //输出二维数组a[3][4] { for(j=0;j<4;j++) cout<<a[i][j]<<" "; cout<<endl; } for(i=0;i<4;i++) //将矩阵a转置给矩阵b for(j=0;j<3;j++) b[i][j]=a[j][i]; for(i=0;i<4;i++) //输出二维数组b[4][3] { for(j=0;j<3;j++) cout<<b[i][j]<<" "; cout<<endl; } return 0;}
0x0012FF68 a[0] 0x0012FF6C a[1] 0x0012FF70 a[2] 0x0012FF74 a[3]
数组元素
0x0012FF78 a[4]
0x0012FF7C a[5]
8
一维数组在内存中的存储形式
说明:
(1)数组名a表示内存首地址,是地址常量。
(2)数组a中每个数组元素占的内存空间根据 数组类型确定,整个数组占的内存为:数组元 素个数乘以每个元素所占内存空间如: int a[10]; 4×10=40 float b[20]; 4×20=80 double c[5]; 8×5=40 char d[8]; 1×8=8
第4章 数组
教学内容
数组的定义及应用
字符串处理函数
几个常用算法:排序算法(选择排序、
冒泡排序)
1
第4章 数组
重点、难点
数组的定义及应用
常用算法的设计(选择排序、
冒泡排序)
2
第4章 数组
教学目标
熟练掌握数组的定义及应用
掌握字符数组的定义及应用
掌握常用的字符串处理函数
熟练掌握几个常用算法:排序
算法(选择排序、冒泡排序)
分析:所谓转置就是将矩阵的行列互换,即将 a矩阵 的a[i][j]元素变成b矩阵的b[j][i]。
24
#include <iostream> using namespace std; int main() { int a[3][4] ={{1,2,3,4},{3,4,5,6},{5,6,7,8}}; int b[4][3],i,j; for(i=0;i<3;i++) //输出二维数组a[3][4] { for(j=0;j<4;j++) cout<<a[i][j]<<" "; cout<<endl; } for(i=0;i<4;i++) //将矩阵a转置给矩阵b for(j=0;j<3;j++) b[i][j]=a[j][i]; for(i=0;i<4;i++) //输出二维数组b[4][3] { for(j=0;j<3;j++) cout<<b[i][j]<<" "; cout<<endl; } return 0;}
第四章_数组
22
4.2
多维数组
下列程序段实现对数组 int s[3][5]的动态赋值: 4.2.3 二维数组元素的引用 for(i=0; i<=2; i++) /* 行标i从0开始变化到2*/ 二维数组的元素也称为双下标变量,其表示的形式为: for(j=0; j<=4; j++) /* 列标j从0开始变化到4*/ 数组名 ][ 列下标 ] scanf( “%d”[ , 行下标 &s[i][j]) ; /*二维数组元素如同普通 其中下标应为整型常量或整型表达式,其取值范围从 整型变量操作*/ 0开始,分别到行数 -1和列数-1。 例如: a[3][4] 通过前面的学习,对数组也可以这样理解:单个变量描述 了空间中‚点‛的概念,一维数组是对单个变量的扩展,它描 表示a数组中行标为3,列标为4的元素。 述了空间中‚线‛的概念,而二维数组又对一维数组做了扩展, 如果要引用数组中的全部元素,只要利用循环语句即 描述了空间中‚平面‛的概念。人们可以模仿二维数组的使用 可实现,这是对数组中元素进行操作的基本算法。对于一 方法来实现多维数组等各种数据容器。例如,可用如下方法定 维数组,只需用单重循环就可完成;而对于二维数组则需 义三维数组: int a[2][3][4]; 要使用两重循环来完成,外循环控制行标变化,内循环控 多维数组元素在内存中的排列顺序为:第一维的下标变化 制列标变化。 最慢,最右边的下标变化最快。
20
s[0][3]
s[1][1] s[1][2]
……
4.2
多维数组
4.2.2 二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。 二维数组可按行分段赋值,也可按行连续赋值。 例如对数组int s[3][5]: (1)按行分段赋值可写为: int s[3][5]={{80,75,92,61,65},{71,59,63,70,85},{87,90,76, 77,85}}; (2)按行连续赋值可写为: int s[3][5]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77, 85}; 这两种赋初值的结果是完全相同的。
4.2
多维数组
下列程序段实现对数组 int s[3][5]的动态赋值: 4.2.3 二维数组元素的引用 for(i=0; i<=2; i++) /* 行标i从0开始变化到2*/ 二维数组的元素也称为双下标变量,其表示的形式为: for(j=0; j<=4; j++) /* 列标j从0开始变化到4*/ 数组名 ][ 列下标 ] scanf( “%d”[ , 行下标 &s[i][j]) ; /*二维数组元素如同普通 其中下标应为整型常量或整型表达式,其取值范围从 整型变量操作*/ 0开始,分别到行数 -1和列数-1。 例如: a[3][4] 通过前面的学习,对数组也可以这样理解:单个变量描述 了空间中‚点‛的概念,一维数组是对单个变量的扩展,它描 表示a数组中行标为3,列标为4的元素。 述了空间中‚线‛的概念,而二维数组又对一维数组做了扩展, 如果要引用数组中的全部元素,只要利用循环语句即 描述了空间中‚平面‛的概念。人们可以模仿二维数组的使用 可实现,这是对数组中元素进行操作的基本算法。对于一 方法来实现多维数组等各种数据容器。例如,可用如下方法定 维数组,只需用单重循环就可完成;而对于二维数组则需 义三维数组: int a[2][3][4]; 要使用两重循环来完成,外循环控制行标变化,内循环控 多维数组元素在内存中的排列顺序为:第一维的下标变化 制列标变化。 最慢,最右边的下标变化最快。
20
s[0][3]
s[1][1] s[1][2]
……
4.2
多维数组
4.2.2 二维数组的初始化 二维数组初始化也是在类型说明时给各下标变量赋以初值。 二维数组可按行分段赋值,也可按行连续赋值。 例如对数组int s[3][5]: (1)按行分段赋值可写为: int s[3][5]={{80,75,92,61,65},{71,59,63,70,85},{87,90,76, 77,85}}; (2)按行连续赋值可写为: int s[3][5]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77, 85}; 这两种赋初值的结果是完全相同的。
电大C语言程序设计 第4章 数组和字符串
Байду номын сангаас
第4章 数组和字符串 4.4 使用typedef语句定义数组类型 2. 二维数组类型的定义语句 格式: typedef <元素类型关键字> <数组类型名> [<常量表达式1>] [<常 量表达式2>]; 格式举例: (1) typedef int Matrix[5][5]; (2) typedef char nameTable[10][NN]; (3) typedef double DataType[M+1][N+1]; 定义对象: (1) Matrix mx={{0}}; (2) nameTable nt={""}; (3) DataType dd={{0.0}};
第4章 数组和字符串 4.2 一维数组 3. 数组元素访问 数组元素可以象普通变量一样使用。如: (1) int a[5]={0,1,2,3,8}; (2) a[0]=4; (3) a[1]+=a[0]; (4) a[3]=3*a[2]+1; (5) printf("%d",a[a[0]]);
第4章 数组和字符串 4.1 数组的概念 一维数组可以表示和存储和一维相关的数据。 二维数组可以表示和存储和二维相关的数据。 三维数组可以表示和存储和三维相关的数据。 假定一个数列为a1,a2,…,an,可以用一维数组来 存储。一个矩阵可以用二维数组来存储。
第4章 数组和字符串 4.2 一维数组 1. 定义格式 <类型关键字><数组名>[<常量表达式>][={<初 值表>}] <类型关键字>:已存在的一种数据类型。 <数组名>:用户定义的标识符。 <常量表达式>只能含有通过#define命令定义的 符号常量,不能含有通过const语句定义的符号 常量,初值表为用逗号分开的一组表达式。
《C语言程序设计》教案 第四章 数组—一维数组
for(i=1;i<=100;i++)
if(a[i]>average)
printf(“%f\n”,a[i]);
(2)在这里,a代表数组名,a[i]代表a数组中的一个元素,i是数组元素的下标,当i的值为1时,a[i]代表a[1];当i的值为2时,a[i]代表a[2]。在循环中当i从1变化到100时,a[i]也就逐个代表a[1]到a[100]。
if(a1>average)printf(“%f\n”,al);
if(a2>average)printf(“%f\n”,a2);
……
if(a100>average)printf(“%f\n”,a100);这样的程序是无法让人接受的。
解决上述问题方法:(1)在C语言中,我们可以定义一个名叫a的变量,它不代表一个单一的成绩值,而是代表整个成绩组。使用数组元素a[1]、a[2]、…、a[100]来代替a1、…、a2、…、a100,则程序就会简单得多,只需要用一个for循环就能完成100次比较:
每个数组元素也都可以作为单个变量使用。
3、一维数组(45分钟)
(1)一维数组的定义(先定义后使用)
格式:类型说明数组名[常量表达式]
例如:
int grades[10]; /*定义了一个数组grades,元素个数为10,数组元素类型为整型。*/
说明:1)数组的类型就是数组各个元素的类型,对于一个数组,所有元素的数据类型都是相同的。
(3)数组的下标:是数组元素的位置的一个索引或指示。
(4)数组的维数:数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。
例如:int a[10];
定义了一个一维数组a,该数组由10个数组元素构成的,其中每一个数组元素都属于整型数据类型。
if(a[i]>average)
printf(“%f\n”,a[i]);
(2)在这里,a代表数组名,a[i]代表a数组中的一个元素,i是数组元素的下标,当i的值为1时,a[i]代表a[1];当i的值为2时,a[i]代表a[2]。在循环中当i从1变化到100时,a[i]也就逐个代表a[1]到a[100]。
if(a1>average)printf(“%f\n”,al);
if(a2>average)printf(“%f\n”,a2);
……
if(a100>average)printf(“%f\n”,a100);这样的程序是无法让人接受的。
解决上述问题方法:(1)在C语言中,我们可以定义一个名叫a的变量,它不代表一个单一的成绩值,而是代表整个成绩组。使用数组元素a[1]、a[2]、…、a[100]来代替a1、…、a2、…、a100,则程序就会简单得多,只需要用一个for循环就能完成100次比较:
每个数组元素也都可以作为单个变量使用。
3、一维数组(45分钟)
(1)一维数组的定义(先定义后使用)
格式:类型说明数组名[常量表达式]
例如:
int grades[10]; /*定义了一个数组grades,元素个数为10,数组元素类型为整型。*/
说明:1)数组的类型就是数组各个元素的类型,对于一个数组,所有元素的数据类型都是相同的。
(3)数组的下标:是数组元素的位置的一个索引或指示。
(4)数组的维数:数组元素下标的个数。根据数组的维数可以将数组分为一维、二维、三维、多维数组。
例如:int a[10];
定义了一个一维数组a,该数组由10个数组元素构成的,其中每一个数组元素都属于整型数据类型。
第4章 数组与自定义类型
(二)窗体的对话框模式 • 如果窗体被实例化以后,被调用该实例的ShowDialog方 法,那么该窗体便会以对话框模式显示。本任务中,将 窗体2作为对话框模式显示。该类型显示的窗体在被关闭 后,可以返回一个dialogresult(对话框结果)值,它描述 了窗体关闭的原因,例如OK,Cancel,yes,no等。为了让 窗体返回一个dialogresult,必须设置窗体的dialogresult值 ,或者在窗体的一个按钮上设置dialogresult属性。设定窗 体2的【确定】按钮的DialogResult属性为“OK”,设定【 取消】按钮的DialogResult属性为“Cancel”,根据用户点 击按钮的结果来决定窗体2结束时,该窗体返回的 dialogresult,再以此值来决定是否给当前数组元素重新赋 值。
4.2 多维数组
任务4.3 货品数量计算
已知某公司3个仓库的库存情况,如表4-5所示,请计算出每 个仓库的库存总量以及每种货品的总量。运行结果如图4-8 所示。
4.2 多维数组
任务4.3 任务实施
(一)创建项目和窗体 • (1)创建一个“Windows应用程序”项目。 • (2)向窗体上添加三个标签控件,一个命令按钮控件, 界面布局如图4-9所示,控件的属性值如表4-6所示。
C# 程序设计
第4章 数组与自定义类型
目 录
1 2 3 4
4.1 4.2
数组的概念 多维数组
4.3 数组列表与控件数组
4.4
自定义类型
第4章 数组与自定义类型
本章介绍了数组的声明和使用方法,多维数组的概念,数 组列表的概念和使用方法,常用的数组属性和方法,控件 数组的概念,数组参数的相关概念,结构、枚举等自定义 类型的使用等。
4.2 多维数组
任务4.3 货品数量计算
已知某公司3个仓库的库存情况,如表4-5所示,请计算出每 个仓库的库存总量以及每种货品的总量。运行结果如图4-8 所示。
4.2 多维数组
任务4.3 任务实施
(一)创建项目和窗体 • (1)创建一个“Windows应用程序”项目。 • (2)向窗体上添加三个标签控件,一个命令按钮控件, 界面布局如图4-9所示,控件的属性值如表4-6所示。
C# 程序设计
第4章 数组与自定义类型
目 录
1 2 3 4
4.1 4.2
数组的概念 多维数组
4.3 数组列表与控件数组
4.4
自定义类型
第4章 数组与自定义类型
本章介绍了数组的声明和使用方法,多维数组的概念,数 组列表的概念和使用方法,常用的数组属性和方法,控件 数组的概念,数组参数的相关概念,结构、枚举等自定义 类型的使用等。
第四章 数组
例如,对上例中定义的数组b来说,b[0]是 数组中的第一个元素,b[1]是数组中的第二 个元素,…,b[9]是数组中的最后一个元素, 而不包含b[10]。
4.1一维数组
数组元素在内存中是顺序存储的。对于 一维数组,就是简单地按下标顺序存储。 例如,对上面定义的整型数组a,在内存 中的存放顺序如图4-1所示:
4.1 一维数组
3 数组的赋值
1) 用“=”赋值 与数组的初始化不同,在给数组元素进行赋值
时,若必要须在逐数一组赋之值间。进行赋值,也只能一个 例如一:个对元于素下地述赋的值数组。初始化: 其等例样价如大的:小ii赋nn将 的tt值上 数aa形[[述 组式33]]数b如;=,{下组1可:,a2的以,3值利};赋用给下另面一的个循同环
的存储单元。 根据数组的维数,分为一维数组、二维数组
和多维数组,常用的是一维和二维数组。
4.1一维数组
1.一维数组的定义格式为: 类型 数组名[常量表达式]; 其中,类型是数组类型,即数组中各元素的数据
类型,可以是整型、浮点型、字符型等基本类型。
数组名是一个标识符,代表着数组元素在内存中 的起始地址,它的命名规则与变量名的命名一样。
→对a于[1二][维0]数→a组[1,][可1]以→把a[它1]看[2成]→是a由[1多][3个] 一 →维a数[2组][构0]成→的a[。2]例[1如]→上a例[2:][i2n]t →a[a2[]2[]3[]3;] 就 可以看成是由两个形如int a[3];的一维数 组构成的。
4.2 二维数组
常量表达式又称下标表达式,表示一维数组中元 素的个数,即数组长度(也称为数组大小),用 一对
方括号“[ ]”括起来。方括号“[ ]”的个数代表数 组
4.1一维数组
4.1一维数组
数组元素在内存中是顺序存储的。对于 一维数组,就是简单地按下标顺序存储。 例如,对上面定义的整型数组a,在内存 中的存放顺序如图4-1所示:
4.1 一维数组
3 数组的赋值
1) 用“=”赋值 与数组的初始化不同,在给数组元素进行赋值
时,若必要须在逐数一组赋之值间。进行赋值,也只能一个 例如一:个对元于素下地述赋的值数组。初始化: 其等例样价如大的:小ii赋nn将 的tt值上 数aa形[[述 组式33]]数b如;=,{下组1可:,a2的以,3值利};赋用给下另面一的个循同环
的存储单元。 根据数组的维数,分为一维数组、二维数组
和多维数组,常用的是一维和二维数组。
4.1一维数组
1.一维数组的定义格式为: 类型 数组名[常量表达式]; 其中,类型是数组类型,即数组中各元素的数据
类型,可以是整型、浮点型、字符型等基本类型。
数组名是一个标识符,代表着数组元素在内存中 的起始地址,它的命名规则与变量名的命名一样。
→对a于[1二][维0]数→a组[1,][可1]以→把a[它1]看[2成]→是a由[1多][3个] 一 →维a数[2组][构0]成→的a[。2]例[1如]→上a例[2:][i2n]t →a[a2[]2[]3[]3;] 就 可以看成是由两个形如int a[3];的一维数 组构成的。
4.2 二维数组
常量表达式又称下标表达式,表示一维数组中元 素的个数,即数组长度(也称为数组大小),用 一对
方括号“[ ]”括起来。方括号“[ ]”的个数代表数 组
4.1一维数组
C语言讲义第04章-数组
第四章
数组
《C语言程序设计》
主要内容
• • • • • 数组的概念 一维数组 多维数组 字符数组 小结
4.1
• •
数组的概念
4.1.1 数组的一般概念: 数组是有序数据的集合,数组中的每一个数据都具有 相同的数据类型。每个数组都用一个统一的标识符来 标识,称为数组名。数组中的每一个数据称为数组元 素,数组元素由数组名和下标(数组元素在数组中的 序号)唯一确定。数组元素也可称为下标变量。
4.3 多维数组
• 实现在一维存储器中存放二维数组,可有两种方式: 一种是按行优先存储,另一种是按列优先存储。 • 在C语言中,二维数组是按行存储的。 • 上面的二维数组的存储情况如图所示 :
4.3 多维数组
• 多维数组的定义:
类型说明符 数组名[常量表达式1][常量表达式2] …
• 多维数组在内存中的存放顺序为:按第一维的下标变 化最慢,最后一维的下标变化最快的规则存储
•
注意:
两个字符串比较大小时,只能用strcmp函数,而不能用条件 语句。
4.4 字符数组
6. 测字符串长度函数strlen(strlen为STRing LENgth 的缩写)
1. “下标”可以是非负的整型常量或其值为非负整型数据 的表达式,取值范围是0~(元素个数 - 1)。 2. 一个数组元素,实质上就是一个变量,它具有和相同类 型单个变量一样的属性,可以对它进行赋值和参与各种 运算 3. 在C语言中,数组不能作为一个整体参加数据运算,只 能对单个的元素进行处理
4.2
4.2
一维数组
– 对全部数组元素赋初值。例如:
float fscore [10] = { 85 , 76.5 , 92 , 65 , 82.5 , 76 , 58 , 46 , 69 , 83 } ;
数组
《C语言程序设计》
主要内容
• • • • • 数组的概念 一维数组 多维数组 字符数组 小结
4.1
• •
数组的概念
4.1.1 数组的一般概念: 数组是有序数据的集合,数组中的每一个数据都具有 相同的数据类型。每个数组都用一个统一的标识符来 标识,称为数组名。数组中的每一个数据称为数组元 素,数组元素由数组名和下标(数组元素在数组中的 序号)唯一确定。数组元素也可称为下标变量。
4.3 多维数组
• 实现在一维存储器中存放二维数组,可有两种方式: 一种是按行优先存储,另一种是按列优先存储。 • 在C语言中,二维数组是按行存储的。 • 上面的二维数组的存储情况如图所示 :
4.3 多维数组
• 多维数组的定义:
类型说明符 数组名[常量表达式1][常量表达式2] …
• 多维数组在内存中的存放顺序为:按第一维的下标变 化最慢,最后一维的下标变化最快的规则存储
•
注意:
两个字符串比较大小时,只能用strcmp函数,而不能用条件 语句。
4.4 字符数组
6. 测字符串长度函数strlen(strlen为STRing LENgth 的缩写)
1. “下标”可以是非负的整型常量或其值为非负整型数据 的表达式,取值范围是0~(元素个数 - 1)。 2. 一个数组元素,实质上就是一个变量,它具有和相同类 型单个变量一样的属性,可以对它进行赋值和参与各种 运算 3. 在C语言中,数组不能作为一个整体参加数据运算,只 能对单个的元素进行处理
4.2
4.2
一维数组
– 对全部数组元素赋初值。例如:
float fscore [10] = { 85 , 76.5 , 92 , 65 , 82.5 , 76 , 58 , 46 , 69 , 83 } ;
第4章 数组向量和数组
4.用函数生成等差元素的向量 格式: 向量名=linspace(初值,终值,个数) 例2, 生成向量(10,15,20,25,30)。 >> a= linspace(10,30,5) a= 10 15 20 25 30
4.1.2 向量的基本运算 1. 向量与数的四则运算 四则运算符:+ ,-, * , / ,\ 格式: 向量 运算符 数值 设向量A=(ai)m ,u是常量, 则 A 运算符 u=(ai 运算符 u) 例4-3 >> vec1=80:-9:10 vec1 = 80 71 62 53 44 35 26 17 >> vec1+101 ans = 181 172 163 154 145 136 127 118
2、生成向量的转置 格式:向量’ 例4-1,由列向量a1(15,21,27,93,101)生成行向量b。 >> a1=[15;21;27; 93; 101] a1 = 15 21 27 93 101 >> b=a1' b= 15 21 27 93 101
3.等差元素的行向量生成 格式: 向量名=初值:步长:终值 说明:步长为1时,可省略. 例4-2, 生成行向量(10,15,20,25,…,80)。 >> vec1=10:5:80 vec1 = Columns 1 through 8 10 15 20 25 30 35 40 45 Columns 9 through 15 50 55 60 65 70 75 80
3. 向量与向量之间的乘运算 格式:向量1*向量2 说明:向量1与向量2具有相同长度,且一个是列向量,另一个是 行向量. 设行向量A=(ai)m ,行向量B=(bi)‘m 。则 A*B=C m 其中, C abFra biblioteki 1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
问题的引出
实际应用的程序设计中,只用几个变量的情况是极 少的;更多的情况是处理大批量的相同类型或不同 类型的数据。用什么样的数据结构来描述这类应用 更简洁呢?
学号 20122824 20122825 20122830 20122831 20122845 20122847 20122853 20122854 成绩 88 91 81 84 84 88 90 85
24
示例
问题:有n个学生参加某门课程的考试,输 出高于平均成绩的学生学号和成绩。
分析:
对于学生的信息用数组表示。 用一维数组num表示学生的学号,则num[i] 表示第i个学生的学号。 用一维数组s表示学生的考试成绩,s[i]表示 第i个学生的考试成绩。
25
N-S流程图
当i<n
输入考试人数n
21
//找出5个数中的最大值 #include <iostream> using namespace std; void main( ) { int a[5],i, j; //定义一个包含5个元素的数组 cout<< "Input the number:"; for(i=0;i<5;i++) cin>>a[i]; //通过循环语句逐个从键盘接收元素 int high=a[0]; for(i=1;i<5;i++) { if(a[i]>high) { high=a[i]; j=i; //通过下标记录数组元素在数组中的具体位置 } } cout<<"The max_number is a["<<j+1<<"]="<<a[j]<<endl; }
9
数组名的构成 方法与一般变 量名相同。
以下程序有错吗?
#include<iostream> [ ]中必须是常量表达式。 using namespace std; 可改成:const int N=5; void main( ) int a[N]; { int n=5; 最后一个元素的下标为4。 int a[n]; a[5]是不合法的。 a[0]=2; a[5]=6; cout<<a[0]<<" "<<a[5]<<endl; }
10
1.一维数组的声明与引用
#include <iostream> using namespace std; void main( ) { int A[10],B[10]; int i; for(i=0; i<10; i++) { /*利用循环语句给数 组元素逐个赋值*/ A[i]=i*2-1; B[9-i]=A[i]; } for(i=0; i<10; i++) { /*利用循环语句逐个输 出数组元素的值*/ cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i <<"]=" <<B[i]<<endl; } }
11
2.一维数组的存储顺序
数组元素在内存中是从低地址开始顺序存放的, 各元素的存储单元占用内存大小相同,它们的地 址是连续的。各元素的存储单元之间没有空隙, 可以从数组第一个元素存储单元的起始地址计算 出任意一个元素存储单元的 a[0] 0x2000 起始地址。 数组名字a是数组首元素的 内存地址。
6
数组与数组元素及其存储方式
int fibon[10]={0,1,1,2,3,5,8,13,21,34};
数组名为fibon,这是一个包含10个 元素的整型一维数组,其第一个元素 为fibon[0],存放0,最后一个元素为 fibon[9],存放34。 数组元素的访问方式: 通过下标操作符(subscript),按元 素在数组中的位置进行访问,称为索 引访问(indexing)或下标访问 (subscripting)。 例如:a=fibon[3]; //第4个元素
14
示例:利用一维数组计算平均值
问题:某教师需要一个程序,用来计算和
显示其学生考试的平均成绩。 分析:可以把所有学生的成绩保存在一个 一维数组中,然后计算所有数组元素之和, 再除以学生总人数即可得到学生的平均成 绩。
15
流程图和程序
开始 i=0 total=0 i<数组大小 F T total=total+scores[i] i=i+1
#include <iostream> using namespace std; void main( ) { int dollars[7], i ;
cout<<"请输入一周中每天的花销:"<<endl;
dollars[i]>high?
T high=dollars[i] i=i+1 输出high的值 结束
5
数组的定义和引用
定义的格式:
类型说明符 数组名[常数表达式][……][,…..];
通常为int、float、 数组元素 double等 的个数
数组可以是一维、二维或多维数组,是几 维数组,数组名右边就有几对方括号,分 别确定各维的长度(元素个数)。 如 int a[5]; int a[3][4];
a[1] a[2] 0x2004 0x2008
a[3]
a[4]
0x200C
0x2010
12
3.一维数组的初始化
在声明数组的同时可以对数组元素赋初始值 例如:int a[5]={0,1,2,3,4}; 可以只给一部分元素赋初值(至少一个),当没有 为数组中每个元素提供初始值时,C++将未初始化 的元素赋值为默认值(即:0)。 例如:int a[5]={0,1,2}; // a[3]=0, a[4]=0 如果没有赋任何一个初值, C++不能自动初始化元 素,数组元素将包含垃圾数据。 在对全部数组元素赋初值时,可以不指定数组长度。 例如:int a[ ]={1,2,3,4,5} (数组长度为5)
第4章 数组的应用
1
主要内容
数组的概念 数组的定义、初始化和存储数据 对一维数组操作 对二维数组操作
字符串类的应用
典型例题
2
问题的引出
示例:编程实现求n个学生的“计算机程序设计”课程平均 成绩。 当n=3: #include<iostream> 当n=10 using namespace std; 当n=50 void main( ) { 当n=2000 float stua, stub, stuc, avg; cout<<"请依次输入三位同学的成绩:"; cin>>stua>>stub>>stuc; avg=(stua+stub+stuc)/3.0; cout.precision(4); cout<<"平均成绩是:"<<avg<<endl; }
a4
0x2014
20
//找出5个数中的最大值 #include <iostream> using namespace std; void main( ) { int a1,a2,a3,a4,a5, max; //定义5个变量a1~a5 cout<<"Input the number:"; cin>>a1>>a2>>a3>>a4>>a5; max=a1; if(max<a2) max=a2; if(max<a3) max=a3; if(max<a4) max=a4; if(max<a5) max=a5; cout<<"The max_number is:"<<max<<endl; }
for(i=0;i<7;i++) cin>>dollars[i]; int high=dollars[0]; i=1; while(i<7) { if(dollars[i]>high) high=dollars[i]; i=i+1; }
cout<<"本周最高花销是:"<<high<<endl;
}
18
变量和数组元素之间的联系与区别
从键盘接收5个整数,求出其中最大的一个数。 分析:可设置5个变量(若需要处理的数太多,则用 变量不适合),可定义变量: int a1,a2,a3,a4,a5; 也可以使用数组,数组长度为5,数组定义如下: int b[5];
/*数组长度为5,第1个元素的下标从0开始,则5个数组元素 分别为b[0],b[1],b[2],b[3],b[4] a1 b[0] a2 b[1] a3 b[2] a4 b[3] a5 b[4] */
16
确定存储在一维数组中的最大值
问题:某人需要一个程序,用来显示一周 中花费的最大金额。
分析:可以将一周中每天的花销保存在一
维数组中,然后找出数组中值最大的元素。
17
开始 定义数组dollars[7] 并输入各元素的值 high=dollars[0] i=1 i<数组大小 T F F
流程图和程序
22
课堂练习
问题的引出
实际应用的程序设计中,只用几个变量的情况是极 少的;更多的情况是处理大批量的相同类型或不同 类型的数据。用什么样的数据结构来描述这类应用 更简洁呢?
学号 20122824 20122825 20122830 20122831 20122845 20122847 20122853 20122854 成绩 88 91 81 84 84 88 90 85
24
示例
问题:有n个学生参加某门课程的考试,输 出高于平均成绩的学生学号和成绩。
分析:
对于学生的信息用数组表示。 用一维数组num表示学生的学号,则num[i] 表示第i个学生的学号。 用一维数组s表示学生的考试成绩,s[i]表示 第i个学生的考试成绩。
25
N-S流程图
当i<n
输入考试人数n
21
//找出5个数中的最大值 #include <iostream> using namespace std; void main( ) { int a[5],i, j; //定义一个包含5个元素的数组 cout<< "Input the number:"; for(i=0;i<5;i++) cin>>a[i]; //通过循环语句逐个从键盘接收元素 int high=a[0]; for(i=1;i<5;i++) { if(a[i]>high) { high=a[i]; j=i; //通过下标记录数组元素在数组中的具体位置 } } cout<<"The max_number is a["<<j+1<<"]="<<a[j]<<endl; }
9
数组名的构成 方法与一般变 量名相同。
以下程序有错吗?
#include<iostream> [ ]中必须是常量表达式。 using namespace std; 可改成:const int N=5; void main( ) int a[N]; { int n=5; 最后一个元素的下标为4。 int a[n]; a[5]是不合法的。 a[0]=2; a[5]=6; cout<<a[0]<<" "<<a[5]<<endl; }
10
1.一维数组的声明与引用
#include <iostream> using namespace std; void main( ) { int A[10],B[10]; int i; for(i=0; i<10; i++) { /*利用循环语句给数 组元素逐个赋值*/ A[i]=i*2-1; B[9-i]=A[i]; } for(i=0; i<10; i++) { /*利用循环语句逐个输 出数组元素的值*/ cout<<"A["<<i <<"]="<<A[i]; cout<<" B["<<i <<"]=" <<B[i]<<endl; } }
11
2.一维数组的存储顺序
数组元素在内存中是从低地址开始顺序存放的, 各元素的存储单元占用内存大小相同,它们的地 址是连续的。各元素的存储单元之间没有空隙, 可以从数组第一个元素存储单元的起始地址计算 出任意一个元素存储单元的 a[0] 0x2000 起始地址。 数组名字a是数组首元素的 内存地址。
6
数组与数组元素及其存储方式
int fibon[10]={0,1,1,2,3,5,8,13,21,34};
数组名为fibon,这是一个包含10个 元素的整型一维数组,其第一个元素 为fibon[0],存放0,最后一个元素为 fibon[9],存放34。 数组元素的访问方式: 通过下标操作符(subscript),按元 素在数组中的位置进行访问,称为索 引访问(indexing)或下标访问 (subscripting)。 例如:a=fibon[3]; //第4个元素
14
示例:利用一维数组计算平均值
问题:某教师需要一个程序,用来计算和
显示其学生考试的平均成绩。 分析:可以把所有学生的成绩保存在一个 一维数组中,然后计算所有数组元素之和, 再除以学生总人数即可得到学生的平均成 绩。
15
流程图和程序
开始 i=0 total=0 i<数组大小 F T total=total+scores[i] i=i+1
#include <iostream> using namespace std; void main( ) { int dollars[7], i ;
cout<<"请输入一周中每天的花销:"<<endl;
dollars[i]>high?
T high=dollars[i] i=i+1 输出high的值 结束
5
数组的定义和引用
定义的格式:
类型说明符 数组名[常数表达式][……][,…..];
通常为int、float、 数组元素 double等 的个数
数组可以是一维、二维或多维数组,是几 维数组,数组名右边就有几对方括号,分 别确定各维的长度(元素个数)。 如 int a[5]; int a[3][4];
a[1] a[2] 0x2004 0x2008
a[3]
a[4]
0x200C
0x2010
12
3.一维数组的初始化
在声明数组的同时可以对数组元素赋初始值 例如:int a[5]={0,1,2,3,4}; 可以只给一部分元素赋初值(至少一个),当没有 为数组中每个元素提供初始值时,C++将未初始化 的元素赋值为默认值(即:0)。 例如:int a[5]={0,1,2}; // a[3]=0, a[4]=0 如果没有赋任何一个初值, C++不能自动初始化元 素,数组元素将包含垃圾数据。 在对全部数组元素赋初值时,可以不指定数组长度。 例如:int a[ ]={1,2,3,4,5} (数组长度为5)
第4章 数组的应用
1
主要内容
数组的概念 数组的定义、初始化和存储数据 对一维数组操作 对二维数组操作
字符串类的应用
典型例题
2
问题的引出
示例:编程实现求n个学生的“计算机程序设计”课程平均 成绩。 当n=3: #include<iostream> 当n=10 using namespace std; 当n=50 void main( ) { 当n=2000 float stua, stub, stuc, avg; cout<<"请依次输入三位同学的成绩:"; cin>>stua>>stub>>stuc; avg=(stua+stub+stuc)/3.0; cout.precision(4); cout<<"平均成绩是:"<<avg<<endl; }
a4
0x2014
20
//找出5个数中的最大值 #include <iostream> using namespace std; void main( ) { int a1,a2,a3,a4,a5, max; //定义5个变量a1~a5 cout<<"Input the number:"; cin>>a1>>a2>>a3>>a4>>a5; max=a1; if(max<a2) max=a2; if(max<a3) max=a3; if(max<a4) max=a4; if(max<a5) max=a5; cout<<"The max_number is:"<<max<<endl; }
for(i=0;i<7;i++) cin>>dollars[i]; int high=dollars[0]; i=1; while(i<7) { if(dollars[i]>high) high=dollars[i]; i=i+1; }
cout<<"本周最高花销是:"<<high<<endl;
}
18
变量和数组元素之间的联系与区别
从键盘接收5个整数,求出其中最大的一个数。 分析:可设置5个变量(若需要处理的数太多,则用 变量不适合),可定义变量: int a1,a2,a3,a4,a5; 也可以使用数组,数组长度为5,数组定义如下: int b[5];
/*数组长度为5,第1个元素的下标从0开始,则5个数组元素 分别为b[0],b[1],b[2],b[3],b[4] a1 b[0] a2 b[1] a3 b[2] a4 b[3] a5 b[4] */
16
确定存储在一维数组中的最大值
问题:某人需要一个程序,用来显示一周 中花费的最大金额。
分析:可以将一周中每天的花销保存在一
维数组中,然后找出数组中值最大的元素。
17
开始 定义数组dollars[7] 并输入各元素的值 high=dollars[0] i=1 i<数组大小 T F F
流程图和程序
22
课堂练习