《C语言程序设计》教学课件04数组

上传人:sat****105 文档编号:324059021 上传时间:2022-07-12 格式:PPTX 页数:81 大小:18.89MB
返回 下载 相关 举报
《C语言程序设计》教学课件04数组_第1页
第1页 / 共81页
《C语言程序设计》教学课件04数组_第2页
第2页 / 共81页
《C语言程序设计》教学课件04数组_第3页
第3页 / 共81页
《C语言程序设计》教学课件04数组_第4页
第4页 / 共81页
《C语言程序设计》教学课件04数组_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《《C语言程序设计》教学课件04数组》由会员分享,可在线阅读,更多相关《《C语言程序设计》教学课件04数组(81页珍藏版)》请在金锄头文库上搜索。

1、第4章数 组第4章 数组前面各案例使用的数据都属于基本数据类型(整型、实型和字符型),其特点是一个数据对应一个变量,各变量之间相互独立。除此之外,C语言还提供了构造类型的数据,包括数组类型和结构体类型等,将数据按特定的规则进行组合,数据之间有特定的关联。本章将结合经典案例学习数组的相关知识和操作,涉及的案例与知识要点如图4-1所示。学习目标CONTENTS案例1:选 举 班 长案例2:冒 泡 排 序案例3:创意格点图案案例4:统计单词量案例5:百变字符串案例1:选 举 班 长计算机应用技术1801班有50名同学,新学期开始,需要选举班长。采用不记名投票方式,用数字15分别代表5位候选人,投票时

2、同学们只需在心目中的新班长编号上画钩即可,最后对选票进行统计,得票最多者获胜。请用C语言程序模拟投票选举过程。要求输入参加选举的人数和投票内容(数字15),最后统计得票并将选举结果显示出来。案例1:选 举 班 长案例描述案例1:选 举 班 长相关知识数组的概念一维数组的定义一维数组的初始化一维数组的引用1.数组的概念案例1:选 举 班 长01020403数组数组元素数组元素的下标数组的维度案例1:选 举 班 长2.一维数组的定义一维数组的定义方式如下:类型说明符 数组名 常量表达式;在C语言中,数组必须先定义,后使用。(1)类型说明符是任一种基本数据类型或构造数据类型。(2)数组名是用户定义的

3、标识符,必须遵循C语言标识符的命名规则。数组名不能与其他变量名相同。(3)“”中的常量表达式表示数组中数据元素的个数,也称数组长度,必须是一个整型常量或常量表达式。数组元素的下标必须从0开始计算。(4)允许在同一个类型说明中,说明多个数组和变量。注意3.一维数组的初始化给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值的方法。数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化的一般形式为:数据类型 数组名常量表达式=初值表)其中,在中的初值表即为各元素的初值,各值之间用逗号间隔。案例1:选 举 班 长int a5=0,1,2,3,4;举例说明(1)可只给部分元素赋初值

4、。当“”中值的个数少于元素个数时,前面元素赋值,后面元素自动赋0值。例如:int a5=0,1,2;/*表示给a0、a1、a2依次赋值0、1、2、a3、a4自动赋0值*/(2)初始元素个数不能超过定义的数组元素长度。例如:int a3=1,2,3,4/*写法错误*/(3)只能给元素逐个赋值,不能给数组整体赋值。例如,给5个元素全部赋1值,只能写为:int a5=1,1,1,1,1;而不能写为:int a5=1;(4)若给全部元素赋值,则在数组定义中,可以不给出数组元素的个数。例如:int a5=0,1,2,3,4;可写为:int a=0,1,2,3,4;案例1:选 举 班 长注意4.一维数组的

5、引用数组元素的访问形式为:数值名下标;案例1:选 举 班 长下标只能为整型常量或整型表达式,下标说明了数组元素的位置,下标从0开始,引用第n个元素时应该使用n-1作为下标。注意案例1:选 举 班 长案例实现算法分析流程图表达代码实现运行结果1.算法分析案例1:选 举 班 长 根据案例描述,先确定程序中使用的变量 输入实际参加投票的人数及每个投票人的投票内容用for循环加switch语句实现对每个候选人的得票情况进行统计对统计后得到的票数,运用求极值方法求出得票最多的候选人将最终投票及获胜情况进行打印输出2.流程图表达案例1:选 举 班 长图4-2 程序算法流程图3.代码实现#include /

6、标准输入/输出函数头文件#include /system()函数的头文件void main()/主程序开始 int student50,n;/定义投票者数组(选票数组)及 投票者数量n int stuTotle5=0,0,0,0,0;/定义5位候选人 (票数计数器)int Max,Max_i,i;/定义票数最大值变量、最大值对应的候选人变量 printf(请输入投票人数(不大于50):);scanf(%d,&n);/输入投票人数 printf(请输入%d张选票内容(15数字,以空格分隔):n,n);for(i=0;i n;i+)/for循环实现输入所有投票内容 scanf(%d,&studen

7、ti);案例1:选 举 班 长 for(i=0;i n;i+)/for循环+switch语句统计每个候选人的票数 switch(studenti)case 1:/投票内容是1 stuTotle0+;/第1个候选人票数计数器加1 break;case 2:/投票内容是2 stuTotle1+;/第2个候选人票数计数器加1 break;case 3:/投票内容是3 stuTotle2+;/第3个候选人票数计数器加1 break;case 4:/投票内容是4 stuTotle3+;/第4个候选人票数计数器加1 break;案例1:选 举 班 长 case 5:/投票内容是5 stuTotle4+;/

8、第5个候选人票数计数器加1 break;Max=stuTotle0;Max_i=0;for(i=1;i Max)Max=stuTotlei;Max_i=i;案例1:选 举 班 长 printf(n得票情况汇总:n);for(i=0;i 5;i+)/for循环显示每个候选人的票数 printf(候选人%d得票:%dn,i+1,stuTotlei);printf(n候选人%d得票最多,恭喜胜出!n,Max_i+1);sytem(pause);/暂停屏幕,便于观察结果,按任 意键退出 return 0;案例1:选 举 班 长案例1:选 举 班 长案例2:冒 泡 排 序初始化一个一维数组,应用冒泡排序

9、算法,按从小到大的顺序排序并输出结果。案例2:冒 泡 排 序案例描述案例2:冒 泡 排 序相关知识除了最后一个元素外,将第一轮比较后剩余的元素按与第一步同样的操作执行一遍,就可将数组中第二大的数放在倒数第二的位置上,从而完成第二轮比较从第一个元素开始,往后依次比较相邻的两个元素,如果第一个比第二个大,则交换位置依此类推,重复上面描述的相邻两数比较大小的步骤,直到全部元素从小到大排列为止案例2:冒 泡 排 序案例2:冒 泡 排 序案例实现算法分析流程图表达代码实现运行结果案例2:冒 泡 排 序1.算法分析(1)定义一个足够长的数组arr,以容纳指定的数组大小,定义一个变量n,接收键盘输入指定数组

10、大小。(2)用双重for循环实现相邻两数的比较与交换,设置两个循环控制变量i、j,i控制比较的轮数,j控制相邻两数。注意,i的取值范围是0n-1,j的取值范围是0n-1-i(n是数组的长度)。两数a、b交换的方法:引入一个临时变量temp,先把a的值给temp暂存,然后把b的值给a,再将temp里暂存的a的值给b,从而完成两数的交换操作。(3)将排好序的数组打印输出。为了清晰演示冒泡排序过程,将每一轮的排序结果打印出来,最后一轮比较完成后,即冒泡排序后的结果。2.流程图表达程序算法流程如图4-5所示。3.代码实现#include /标准输入/输出函数的头文件#include /system()

11、函数的头文件int main()/主函数开始 int arr20,n,i,j,temp;/定义所需数组入各变量 printf(请输入数组长度(不大于20):);scanf(%d,&n);/输入数组长度 printf(请输入数组元素(%d个整数,以空格分隔):n,n);for(i=0;in;i+)scanf(%d,&arri);/依次输入数组的每个元素 printf(n冒泡排序前:);for(i=0;i n;i+)/显示排序前的原始数组 printf(%d,arri);案例2:冒 泡 排 序 printf(n);/以下是冒泡排序过程 for(i=0;i n-1;i+)/外循环控制比较的轮数 fo

12、r(j=0;j arrj+1)/如果前一个数比后一个相邻数大 temp=arrj;/则交换位置 arrj=arrj+1;arrj+1=temp;案例2:冒 泡 排 序 printf(第%d轮排序后:,i+1);/每一轮比较后,输出比较结果,最后 /一轮完成后,即得到排序后的最终结果 for(j=0;j n;j+)printf(%d,arrj);printf(n);/输出一行后换行 system(pause);/暂停屏幕,便于观察结 果,按任意键退出 return 0;案例2:冒 泡 排 序案例2:冒 泡 排 序4.运行结果程序运行结果如图4-6所示。案例3:创意格点图案格点图案即在一个由相同大

13、小的小方格组成的阵列中,通过将小方格涂成黑色或填充一个字符来完成一个图案创意,如图47所示。本案例将结合二维数组来输出具有创意性的格点图案,如心形图案、笑脸图案等。案例3:创意格点图案案例描述案例3:创意格点图案案例3:创意格点图案相关知识二维数组的定义二维数组的初始化二维数组的引用1.二维数组的定义二维数组可以理解为一个一维数组的每一个元素也是一个存储相同类型多个值的一维数组。二维数组的定义方式为:类型说明符 数组名 常量表达式1常量表达式2;案例3:创意格点图案常量表达式1表示二维数组的行数,常量表达式2表示二维数组的列数。二维数组有两个维度,每个维度的值都是从0开始,最大到相应的行或列数

14、目减1。类型说明符和数组名的规则和一维数组一样。如表4-1所示为数组a23中的元素。注意2.二维数组的初始化1)逐行赋值例如,“int a23=1,2,3,4,5,6;”的存储方式如表4-2所示。2)按行逐个赋值例如:int a23=1,2,3,4,5,6;3)使用赋值语句赋值例如:int a23;a00=1;a01=2;a02=3;a10=4;a11=5;a12=6;案例3:创意格点图案案例3:创意格点图案3.二维数组的引用二维数组元素的引用和一维数组一样,也是采用“数组名+下标”的方式,二维数组的元素采用行和列双下标。二维数组元素的访问形式为:数组名下标1下标2;案例3:创意格点图案案例实

15、现算法分析流程图表达代码实现运行结果案例3:创意格点图案1.算法分析(1)图4-7所示图案可以利用前面章节所学知识直接用printf函数一行一行输出,也可以观察规律后用for循环输出,本算法将借助二维数组来输出。(2)根据图案大小定义一个二维数组并初始化,用数字1代表“*”,用数字0代表空格“”,这是关键的一步。(3)对数组进行遍历,并判断如果arrij为1,则输出“*”,否则输出空格“”,流程执行完毕,则输出完整的图案。本算法思想在游戏开发中经常会用到,如围棋、五子棋游戏中的棋盘,就对应一个二维数组,落棋后,则将对应数组中的位置赋值为数字1,否则赋值为数字0;再次落棋子时,就可根据数组元素是

16、否为1判断待落棋子位置是否已有棋子存在;如果该位置已存在棋子,则不能再落棋子,否则可以落棋子。2.流程图表达程序算法流程如图4-8所示。3.代码实现#include /标准输入/输出函数的头文件#include /system()函数的头文件int main()/主函数开始 /定义一个二维数组,存储心形图案 int arr1529=0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号