高级语言程序设计_C语言(第六章 数组)共31页
合集下载
程序设计基础c语言 高克宁 06章课件 清华大学出版社

一维数组初始化
提示 初始化的数据个数不能超过数组元素的个数,可以少于数组元 素的个数 数组的元素不能自动初始化 采用语句 int cj[10]={0};将数组cj的元素初始化为0 若数组元素的个数定义省略,则系统根据初值的个数来确定数 组元素的个数 例如:int a[3]={1,2,3}; 数组有3个数组元素:a[0]=1,a[1]=2,a[2]=3 若省略数组元素个数的定义,则初值必须完全给出 C 语言编译系统将自动根据初始化数据的个数来确定 数组的长度
基本概念
什么是数组?
是一组具有固定数目的、有序的、类型相同的数据的集合 是同类型有序数据的集合 可以为该数据集合起一个名字,称为数组名 该数据集合中的各数据项称为数组元素,用数组名 和下标表示 根据数组下标的多少,数组可以分为一维数组和多维数组 一维 只有一个下标,例如:cj[10] 二维 有两个下标,初始化
对数组的部分元素赋初值
例
int
num[5]={1,2,3} ;
num
1 2 3 0 0 num[0] num[1] num[2] num[3] num[4]
该语句执行: num[0]=1;num[1]=2;num[2]=3;num[3]=0;num[4]=0;
一维数组
int整型常量表达式整型常量表达式55表示表示aa数组有数组有55个数组元素个数组元素数组元素的引用数组元素的引用下标表达式下标表达式22和和11均表示数组元素的下标均表示数组元素的下标a5是错误的数组元素引用因为下标从是错误的数组元素引用因为下标从00开始所以数开始所以数组元素的下标小于组元素的下标小于55下标已经越界下标已经越界系统不检查数组元素下标是否越界系统不检查数组元素下标是否越界只能由编程者自己掌握只能由编程者自己掌握下标越界会破坏其它变量的值下标越界会破坏其它变量的值编程时一定要保证数组元素下标不越界编程时一定要保证数组元素下标不越界问题1
C语言程序设计第六章课件

6.3嵌套循环
使用嵌套循环的注意事项 使用复合语句,以保证逻辑上的正确性 – 即用一对花括号将各层循环体语句括起来 内层和外层循环控制变量不能同名,以免造 成混乱 采用右缩进格式书写,以保证层次的清晰性
2017/9/7
27/62
选择三种循环的一般原则
如果循环次数已知,计数控制的循环 – 用for
1!, 2!, 3!, … , n!
2017/9/7
24/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
利用前项 计算后项
2017/9/7
25/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
每次单独计算 累加项
2017/9/7
26/62
counter<6 true input n sum ← sum + n counter++ output sum
n
2 3 5 6 4
counter-controlled 计数器每次增1
使用了3个变量
2017/9/7
end
6/62
6.2计数控制的循环
counter ← initial value
test counter true
2017/9/7
end
条件控制的循环
当 型 循 环
假 假 真 假
条 件P
A
条 件P
真
A
直 到 型 循 环
2017/9/7
10/62
while循环语句
C语言程序设计第六章PPT课件

char str[20]; scanf(“%s”,str); /*str是地址 */ 2. printf的s格式串可以实现字符串的输出,例: printf(“%s”,str); /*str是地址 */ 3. gets从终端输入字符串行 形式:gets(str); str是存放字符串的起始地址。可以是字符数组名、字符数组
第3页/共16页
6.2 二维和多维数组
6.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2]
6.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元,数组元素按 行顺序存放,先放行下标是0的元素,再放行下标是1的元 素 , . . . 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]
第11页/共16页
6.3 字符数组和字符串
6.3.4.1字符串输入输出 --包含头文件stdio.h 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存
储单元中的字符,直到遇到第一个‘\0’为止。并自动输出 一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组 元素地址或下一章将要介绍的字符指针。 6.3.4.2字符串处理函数 -- 包含头文件string.h 1.字符串复制函数strcpy。调用形式如下:
第7页/共16页
6.3 字符数组和字符串
6.3.2 字符串
C语言中没有字符串变量,通过字符数组可以实现相关的功能, 字符串是字符数组最普通的具体应用。
当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上
第3页/共16页
6.2 二维和多维数组
6.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2]
6.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元,数组元素按 行顺序存放,先放行下标是0的元素,再放行下标是1的元 素 , . . . 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]
第11页/共16页
6.3 字符数组和字符串
6.3.4.1字符串输入输出 --包含头文件stdio.h 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存
储单元中的字符,直到遇到第一个‘\0’为止。并自动输出 一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组 元素地址或下一章将要介绍的字符指针。 6.3.4.2字符串处理函数 -- 包含头文件string.h 1.字符串复制函数strcpy。调用形式如下:
第7页/共16页
6.3 字符数组和字符串
6.3.2 字符串
C语言中没有字符串变量,通过字符数组可以实现相关的功能, 字符串是字符数组最普通的具体应用。
当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上
C++高级语言程序设计第六章

-21-
6.2.4指针的关系运算和逻辑运算
相同类型的指针可以进行各种关系运算。比较 两个指针相等还是不相等。 进行指针“大于”、“小于”的比较,只是要 判定指针在内存中的相对位置。 指针和一般的整数比较是没有意义的,也是不 允许的。惟一可以和指针比较的整数是0。通 过指针和0的比较来判定指针本身是不是空指 针。
int d1[3];
123
int *pi=(int*)memcpy(d1,s1,12);
cout<<*pi<<" "<<*(pi+1)<<" "<<*(pi+2)<<endl;
}
2020/12/9
-26-
6.2.6 指针类型转换
实际应用的指针变量都是有类型的,指针类型就是 指针所指的地址空间所存放的数据的类型。 除了void指针,不同类型的指针是不可以自动类 型转换的,也就不能进行赋值运算。在例6-1中的 语句pvf1=pva1(整型指针赋值给float指针)就是 有语法错误的语句。 指针类型不仅不能自动转换,也不能进行强制类型 转换。
//间接访问结果是
ppva=&pva;
cout<<"*ppva="<<*ppva<<endl; //间接访问结果是 地址
cout<<"pva="<<pva<<endl; 2020/12/9的内容
//就是指针pva
-17-
6.2.2 间接引用运算
2020/12/9
-18-
6.2.3 指针的算术运算
float vf1='A',*pvf1,*pvf2;
c语言程序设计第6章PPT课件

End Sub
第20页/共49页
6.2 函数过程的定义与调用
• 【例6-6】 编写计算阶乘的函数过程,当用户单击窗体时,利用下列近似公式计算 (直到最后一项小于10-7为止)。
Private Sub Form_Click() 调用函数Fact的程序代码如下:
Dim n!
Private Function Fact(x!)
c > a + b Then MsgBox "输入的三条边
不能构成一个三角形!" Else Call area(a, b, c, w) txtMj.Text = Str(w) End If
End Sub
第11页/共49页
6.1 子过程的定义与调用
• 2. 把过程名作为一个语句来用 语法: 过程名 [实参1[,实参2……]] 它与Call语句的不同点是:去掉了Call关键字和实参列表的括号。 如上例中可以改成:area a,b,c,w
(3)在函数体内,函数名可以当变量使用,函数
第14页/共49页
6.2 函数过程的定义与调用
• (4)如果函数体内没有给函数名赋值,则返回对应类型的缺省值, 数值函数返回0,字符串函数返回空字符串,变体型函数返回Empty。
• (5)As类型:是指函数返回值的类型,若省略,则函数返回变体类 型值(Variant)。
• 6.3.2 变量的作用域 • 1. 局部变量 在过程内部(如Command1_Click)使用Dim或者Static关键字来声明的变量,只在声明它们的 过程中才能被访问或改变该变量的值,别的过程不可访问。所以可以在不同的过程中声明相同名字的 局部变量而互不影响。
第26页/共49页
6.3 变量、过程的作用域
C语言程序设计(第二版)课件第6章

6.2函数
❖ 运行结果:
main函数是主调函数,max是被调函数。其中x,y是实参,在数据传 递过程中x,y必须是确定的值。a,b是形参,用之前形参的数据类型 与实参相匹配。最后通过return语句返回a,b中较大值。
6.2函数
6.2.2 函数的声明
❖ 在本章例6.2中,如果被调函数的定义在main函数的后面,那么在 主函数main中需要对被调函数的进行声明。这种方式和变量相同, 先定义后使用。主要目的是使编译系统知道被调函数返回值类型, 以便在主调函数中对此类型的函数值作相应的处理。
❖ C程序的全部工作是由各种功能的函数完成的,C语言 称为函数式语言。采用函数模块式的结构,C语言实现 了结构化程序设计,使程序的层次结构清晰,方便程序 的编写、阅读、调试。
本章目录
6.1函数分类 6.2函数 6.3 函数调用 6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
其中第一,第二行对str函数和f函数预先作了说明。 因此在以后各 函数中无须对str和f函数再作说明就可直接调用。 ❖ 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用 include命令包含在源文件前部。
6.2函数
❖ 6.2.3函数的参数
❖ 函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、 实参的特点和两者的关系。形参出现在函数定义中,在整个函数体 内都可使用,离开该函数不能使用。实参出现在主调函数中,进入 被调函数后,实参变量也不能使用。实参和形参之间的数据传递是 单项值传递,相当于实参的值复制到形参中,并且形参的任何变化 不影响实参。
6.1函数分类
C语言中可从不同的角度对函数分类。
❖ 1. 从函数定义的角度,函数分为库函数和用户定义函数。
高树芳C语言程序设计--第六章

[解决方案]设置一个长度为10的类型为整型的数组
存储老题的年龄。
程序代码
5
6.1 一维数组的定义与使用
相关知识: 1.数组的概念 同类型的一组数据。 2.数组的维数 下标的个数 3.一维数组的定义 类型 数组名[常量表达式] 4.一维数组元素的引用 数组名[下标],如:a[1]
6
6.1 一维数组的定义与使用
案例6-10 输出中文大写数字 [案例任务] C语言的字符串知识
[解决方案]使用两维字符数组存储汉字的“壹”
和“拾”等字符串数据。
程序代码
28
6.3字符数组及字符串
相关知识: C语言的字符串知识应用: 数字转换为中国大写汉字数字字符。
29Biblioteka 编写C程序,输入8个整数,将其逆序输出,同 时要输出它们的和。
10
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数 案例6-5 整数四则运算测试程序
11
6.2 二维数组的定义与使用
案例6-4 求二维数组中最大数
[案例任务]
对于如下3×4的矩阵: 1 2 3 4 6 9 5 4 -10 10 0 -5 编程求出其中的最大值,并输出其所在的行 号和列号。
24
6.3字符数组及字符串
[课堂训练6-4] 统计字符数组中某类字符的个数。设有 一个长度不超过30的字符串s,统计其 中数字字符、大写字母、小写字母、其 它字符的个数。
25
6.3字符数组及字符串
案例6-9字符串处理函数 [案例任务] 从键盘输入两个字符串s1,s2,要求使用 字符串的常用处理函数strlen、strcat、 strcpy、strcmp等。
[解决方案]见流程图。
程序代码
《高级语言程序设计教学课件》第6章数组课件

二维数组的使用
通过实例演示,掌握二维数组的操作方法,如访问和修改元素,以及使用嵌 套循环处理二维数组的常见算法。
《高级语言程序设计教学 课件》第6章数组课件
通过本课件学习数组的基本概念、元素类型和存储方式,了解初始化、赋值 以及多维数组的使用。还将介绍数组在排序和查找算法中的应用。
介绍数组
数组是一种数据结构,可以存储多个相同类型的元素。它提供了方便的方式 来组织和访问数据,适用于各种编程任务。
数组的定义及基本概念
数组的下标及合法范围
了解数组下标的概念和用法,以及合法范围的限制。学习如何正确使用数组下标来访问和修改数组中的 元素。
一维数组的使用
学习如何声明、初始化和操作一维数组。通过实际示例演示使用一维数组解决常见的编程问题。
二维数组的定义及初始化
介绍二维数组的概念和用法,并学习如何声明和初始化二维数组。了解二维 数组在矩阵和图像处理中的应用。
了解如何定义数组,并掌握相关术语,如数组长度、数组元素和下标,以型和存储方式
学习不同类型的数组元素,例如整数、浮点数和字符,以及数组在内存中的存储方式,为更深入的理解 和应用提供基础。
数组的初始化和赋值
掌握数组的初始化方法,包括直接初始化和循环初始化。了解如何对数组进行赋值,以便存储和操作数 据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一轮
若有6个数。第一次将8和9对调, 第二次将第2和第3个数(9和5)对 调……如此共进行5次,得到8-5 -4-2-0-9的顺序,可以看到: 最大的数9已“沉底”,成为最下面
一个数,而小的数“上升”。最小 的数0已向上“浮起”一个位置。经 第一轮(共5次)后,已得到最大的数。
然后进行第二轮比较,对余下的前 面5个数按上法进行比较,经过4次 比较,得到次大的数8。如此进行 下去。可以推知,对6个数要比较5 趟,才能使6个数按大小顺序排列。
6.4 程序举例
3*4的矩阵,编程求出其中值最 大的那个元素的值,以及其所在 的行号和列号。
程序的思路:请问定义的二维数
组有几行几列。 存放顺序是怎么样的。
访问行与列都可以采用循环 如何找出最大的数
6.4 程序举例
输入n个整数,输出其升序排序的结果。
冒泡法的思路是:将相邻两个数比较,
将小的调到前头。
//若后面的元素比前面元素小,则交换
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
6.4 程序举例
某电影院为了方便观众购票,及 时反映上座情况,用矩阵形式显 示座位卖出情况,要求计算上座 率。
程序的思路:电影院的座位位置由几
排几座两个数据确定,因此用二维数组来 处理比较合理;每个座位卖出情况有两个 状态:卖出和未卖,分别用1和0两个数字 模拟,因此可以定义一个二维整型数组, 数组元素取值为1或0,来保存上座情况; 为了让观众直观看到上座情况,按行输出
数据类型
C语言的数据类型
整型
基本类型
字符型 浮点型
单精度型
双精度型 枚举类型
构造类型
数组类型 结构体类型
指针类型 空类型
共用体类型
6.1 一维数组
一维数组的定义
一维数组的定义方式为 类型说明符 数组名[常量表达式]; 例如:
int a[10]; 它表示数组名为a,此数组有10个元素。
需要注意的几点
int n;
scanf("%d",&n);
int a[n];
6.1.2 一维数组元素的引用
数组必须先定义,然后使用。 C语言规定只能逐个引用数组元素而不能一次 引用整个数组。
数组元素的表示形式为 数组名[下标]
下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3]
6.1.3 一维数组的初始化
C语言程序设计
第六章 数 组
本次课的主要内容
重点
6.1 一维数组√ 6.2 二维数组√ 6.3 字符数组与字符串 √ 6.4 程序举例 √
如何实现三个数比较大小? 可采用相关排序算法,程序比较容易实现
– 思考: 假如需要实现四个数,或者更多的数比较 大小?怎么进行程序设计呢?
定义若干个变量,程序繁复,容易出错
体现不出各数据间的关系,同时可能带来阅读和 理解的困难
迄今为止,我们使用的都是属于基本类型(整 型、字符型、实型)的数据,C语言还提供了 构造类型的数据,它们有:数组类型、结构 体类型、共用体类型。构造类型数据是由基 本类型数据按一定规则组成的,因此有的书 称它们为“导出类型”。
本章只介绍数组。数组是有序数据的集合。数 组中的每一个元素都属于同一个数据类型。 用一个统一的数组名和下标来唯一地确定数 组中的元素。有关数组的概念和其他高级语 言中介绍的是相同的,不再赘述。
二维数组;上座率=卖出座位数/总座位
数,卖出座位数=二维数组元素值为1
的个数,总座位数=二维数组元素总数。
学生成绩管理系统中数组如何运用?
封面与菜单设计
6.2 二维数组
二维数组的定义
二维数组的定义方式为 类型说明符 数组名[常量表达式][常量表
达式] ; 例如:
例如:float a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5行 10列)的数组。
C语言对二维数组采用这样的定义方式,使 我们可以把二维数组看作是一种特殊的一
第二轮
得到什么规律
如果有n个数,则要进行n-1轮比较。 在第1轮比较中要进行n-1次两两比 较,在第j轮比较中要进行n-j次两 两比较。
伪代码描述算法如下
for(i=0;i<N-1;i++) //10个元素循环9轮 {
for(j=0;j<N-i-1;j++) //每轮比较10-i-1次
{
if(a[j+1]<a[j])
1)常量表达式表示元素的个数,即数组长度。例 如,在a[10]中,10表示a数组有10个元素,下 标从0开始,这10个元素是,a[0],a[1],a [2],a[3],a[4],a[5],a[6],a [7],a[8],a[9]。注意不能使用数组元素 a[10]。
2)常量表达式中可以包括常量和符号常量,不能 包含变量。也就是说,C不允许对数组的大小作动 态定义,即数组的大小不依赖于程序运行过程中变 量的值。例如,下面这样定义数组是不行的:
维数组:它的元素又是一个一维数组。
例如,可以把a看作是一个一维数组,它有 3个元素:a[0]、a[1]、a[2],每个元素 又是一个包含4个元素的一维数组。
二维数组的引用
二维数组的定义方式为 类型说明符 数组名[常量表达式][常量表
达式] ; 例如:
例如:float a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5行 10列)的数组。
二维数组的初始化
(1) 分行给二维数组赋初值。如 int a[3][4]={{1,2,3,4},{5,6,7,8义一个数组a[10],实现a[0]~a[9] 的值为0~9,然后逆序输出。
程序的思路:如何定义数组,如
何实现数组赋值
int a[10]={0,1,2,3,4,5,6,7,8,9};
对数组元素的初始化可以用以下方法实现:
(1) 在定义数组时对数组元素赋以初值。例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过
上面的定义和初始化之后,a[0]=0,a[1] =1,a[2]=2,a[3]=3,a[4]=4,a[5] =5,a[6]=6,a[7]=7,a[8]=8,a[9] =9。