C语言教案:第5章数组.ppt

上传人:小飞机 文档编号:6503866 上传时间:2023-11-07 格式:PPT 页数:49 大小:578KB
返回 下载 相关 举报
C语言教案:第5章数组.ppt_第1页
第1页 / 共49页
C语言教案:第5章数组.ppt_第2页
第2页 / 共49页
C语言教案:第5章数组.ppt_第3页
第3页 / 共49页
C语言教案:第5章数组.ppt_第4页
第4页 / 共49页
C语言教案:第5章数组.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C语言教案:第5章数组.ppt》由会员分享,可在线阅读,更多相关《C语言教案:第5章数组.ppt(49页珍藏版)》请在三一办公上搜索。

1、2023/11/7,1,第 五 章 数 组,2023/11/7,2,5.1 数组的概念,5.2 数组的定义和初始化,5.3 数组的赋值、输入和输出,5.4 字符型数组,5.5 数据处理,2023/11/7,3,5.1 数组的概念,二、为什麽引入数组,1、存储批量数据,2、体现数据间的关系,3、便于访问、处理,一、什麽是数组,数组是一组有序的、同类型数据的集合。,三、名词解释,数组,数组元素,数组维数,2023/11/7,4,5.2 数组的定义和初始化,一、数组的定义,目的:,名称,类型,维数,大小,格式:,说明:,1、常量表达式仅可为整型常量/符号常量;值大于0。,2、表达式的个数表明数组的维

2、数。,2023/11/7,5,例:,int a10;,float b34;,char c30;,int a30;,int i=3,j=4;int aij;,二、数组元素的引用,引用格式:,说明:,1、表达式(下标)值从 0开始。,2、数组名代表该数组在内存中的首地址。,2023/11/7,6,三、数组的存储结构,一维数组:,从左到右顺序存放,例:,定义 int a5;,数组中数据为,2、4、23、6、78,a0,a1,a2,a3,a4,设数组起始地址为2000,则数组元素依次存入:,2000、2002、2004、2006、2008 单元,2023/11/7,7,b00,b01,b02,b10,

3、b11,b12,二维数组:,按行存放,例:,定义 float b23;,数组中数据为,.3 7.2 3.44.4 5.1 6.2,设数组起始地址为2000,则各数组元素依次存入,2000、2004、2008、2012、2016、2020 单元,2023/11/7,8,四、数组的初始化,1、一维数组的初始化,int data8=50,30,82,12,23,34,55,10;,说明:,(1)常量个数少于数组元素个数,则自动以0补充。,(2)常量个数多于数组元素个数,则出错。,(3)可隐含定义数组大小。,int a=0,1,2,3,4,5,0;,(4)号中值可以省略,但逗号不能省。,float a

4、rray5=,2,3,4,;,2023/11/7,9,2、二维数组的初始化,int data33=5,3,8,2,3,34,5,10,6;,说明:,(1)可对数组进行部分初始化,未初始化部分则 自动清零。,int data33=5,3,8,2,3,34,5,10,6;,或:,例:,比较下面两种初始化情况,int a23=5,6,7,8;,int a23=5,6,7,8;,2023/11/7,10,(2)可以省略第一维长度,但第二维长度不可省。,例:,int a4=1,2,3,4,5,6,7,8;,int a2=1,2,3,4,5,6,7,8;,2023/11/7,11,5.3 数组的赋值、输入

5、和输出,一、数组的赋值,常用赋值方法:,1、无规律数据,各元素分别赋值,2、有规律数据,利用循环进行赋值,一维数组用单循环,二维数组用双循环,例:,int a5,i;for(i=0;i5;i+)ai=(i+1)*100;,int b23,i,j;for(i=0;i2;i+)for(j=0;j3;j+)bij=i+j;,2023/11/7,12,(1)只能对数组元素赋值,不能对数组名实施整 体赋值。(字符数组除外),注意:,如:,int a5,i;a=100,200,300,400,500);,(2)注意下标界大小。,如:,int b23,i,j;for(i=0;i=2;i+)for(j=0;j

6、=3;j+)bij=i+j;,2023/11/7,13,二、数组的输入输出,float x10;int k;for(k=0;k10;k+);scanf(“%f”,1、数组输入,2、数组输出,:for(i=0;i3;i+)for(j=0;j4;j+)printf(“%6.2f”,bij);printf(“n);:,2023/11/7,14,三、应用举例,例1:(p191 例6.2),例2:(p188 例题6.1),设有矩阵,2 3 45 6 7 8,(1)将其存入数组,(2)并以以下矩阵形式,1 52 63 74 8,存入另一数组,(3)分别输出两数组,例3:,要求编程实现:,2023/11/7

7、,15,问题分析:,1、定义数组,2、将数据送入a数组,a24、b42,3、根据数据排列的情况将a数组数据赋 予b数组,a、b数组间关系为:,b j i=a i j,4、分别输出a、b数组数据,a的行=b的列,a的列=b的行,2023/11/7,16,根据分析编写程序如下:,for(i=0;i2;i+)for(j=0;j4;j+)b j i=a i j;,main(),int a24=1,2,3,4,5,6,7,8,b42,i,j;,for(i=0;i2;i+)for(j=0;j4;j+)printf(“%dt”,aij);,printf(“n”);,printf(“n”);,printf(“

8、%dt”,b j i);,2023/11/7,17,设有矩阵,例4:,0 1 2 3 4 5 1 2 3 4 5 6 2 3 4 5 6 7 3 4 5 6 7 8 4 5 6 7 8 9 5 6 7 8 9 10,(1)将矩阵存入一个二维数组,要求:,(2)将二维数组中的数据送入一个一维数组,(3)分别输出两个数组,2023/11/7,18,问题分析:,1、定义数组,2、将数据送入a数组,a66、b36,b k=a i j,4、分别输出a、b数组数据,3、将a数组数据赋予b数组,a数组的数据可自动生成,a i j=i+j,2023/11/7,19,根据分析编写程序如下:,for(i=0;i3

9、6;i+),main(),int a66,b36;,for(i=0;i6;i+)for(j=0;j6;j+),printf(“n”);,printf(“%d”,b i);,int i,j k=0;,K+;,a i j=i+j;,bk=a i j;,printf(“%dt”,a i j);,printf(“n”);,2023/11/7,20,5.4 字符型数组,元素类型为字符的数组,两种用法:,(1)作为字符(单个字符操作),(2)作为字符串(整体操作),一、字符数组的初始化,1、用字符对字符数组初始化,2、用字符串常量对字符数组初始化,char str26=HELLO;,char str15=

10、T,h,e,;,2023/11/7,21,说明:,(1)字符串以0作为结束标志。,(2)初始化时也可省略花括号。,char panic=HELLO;,(3)注意字符与字符串的区别。,单引号,双引号,用0作为串的结束标志,无结束标志,长度=字符个数,长度=字符个数+1,2023/11/7,22,应用举例:,例1:作为普通数组处理,main()char ary110=P,L,O,T,ary210;char ch;int i,j;for(i=0;i4;i+)printf(“%c”,ary1i);printf(“请输入一行字符n”);for(i=0;i10;i+)scanf(“%c”,2023/11/

11、7,23,例2:作为字符串处理,main()char ary110=“PLOT”,ary210;printf(“%s”,ary1);printf(“请输入一行字符n”);scanf(“%s”,ary2);printf(“%s”,ary2);,注意:,Printf、scanf处理字符串数组时可使用数组名作为函数参数。,2023/11/7,24,二、字符串的输入,1、用scanf函数加%s控制,char str30;scanf(%s,str);,例:,注意:,(1)输入的字符串中不能有空格。,(2)要保证字符数组的长度足够大。,(3)数组名前不能加&符号。,如上例输入:,Fortran Langu

12、age,则数组中仅存有:,Fortran,2023/11/7,25,2、用gets函数,调用格式:,说明:,(1)该函数专用于输入字符串。,(2)函数参数只能用数组名。,(3)gets函数接收换行符之前所有 的字符。,2023/11/7,26,#include#define LEN 80main()char name1LEN;printf(“请输入一个姓名:);scanf(%s,name1);printf(“n读入的名字是:%sn,name1);,例1:,请输入一个姓名:,于 航,读入的名字是:,于,2023/11/7,27,#include#define LEN 80main()char n

13、ameLEN;printf(你好,请输入姓名:);gets(name);printf(“n%s:你的名字真好n,name);,例2:,你好,请输入姓名:,于 航,于 航:你的名字真好,2023/11/7,28,三、字符串的输出,1、用printf函数加%s控制,char str=“This is a book.”;printf(“n%s,str);,例:,2、用puts函数,调用格式:,其中:,参数可以是字符串常量/字符串变量。,2023/11/7,29,puts与printf()的不同:,1、puts()函数专门用于字符串输出,printf()函数用于各种类型数据输出,2、puts()函数输

14、出后自动换行。,printf()函数必须用“n”强行换行。,建议:,多种类型的混合输入输出时,选用scanf和printf;,当大量文字信息输入输出时,使用gets和puts。,2023/11/7,30,例:,#include#define PR 这是预定义字符串main()char str=这是初始化字符串 puts(这是直接使用字符串常量);puts(PR);puts(str);,输出:,这是直接使用字符串常量,这是预定义字符串,这是初始化字符串,2023/11/7,31,四、字符串处理函数,函数原型存放在string.h文件中。,1、strlen函数,测试字符串的长度,2、strcat函

15、数,连结两个字符串,3、strcmp函数,比较两个字符串的大小,4、strcpy函数,字符串的拷贝,2023/11/7,32,例:密码检查程序,#include#include#define SIZE 80#define PASSWORD Wang#define TIMES 3,main()int try=0;char inputSIZE;,puts(请输入密码);,2023/11/7,33,dogets(input);if(strcmp(input,PASSWORD)!=0)puts(密码输入错,请再试一次);else break;while(+tryTIMES);,if(tryTIMES)

16、pus(密码正确,请继续运行程序.);else puts(非法用户,不能使用本程序);,2023/11/7,34,5.5 数据处理,数据分档(分类)、数据排序、数据检索,一、数据分档,常用数据分类的方法,利用if语句,利用switch语句,缺点:,程序冗长、占机时多,随机输入一组数据,数据在1 4之间,输入结束统计出各类数据的个数。,例:,2023/11/7,35,分析问题给出算法一:,1、输入数据到x,2、判断该数据属于那类,分别记数,4、分别输出a、b、c、d的值,3、反复执行1、2步骤直到数组输完,为1 记入a中,为2 记入b中,为3 记入c中,为4 记入d中,2023/11/7,36,

17、编程方法一:(用基本数据类型),main(),Loop:scanf(“%d”,int x,a,b,c,d;,a=b=c=d=0;,if(x=9999)goto end;,if(x=5|x1)goto loop;,end:printf(“1 的个数为:%d”,a);printf(“2 的个数为:%d”,b);printf(“3的个数为:%d”,c);printf(“4 的个数为:%d”,d);,2023/11/7,37,分析问题给出算法二:,2、输入数据到x,3、判断该数据属于那类,分别记数,5、分别输出a1 a4的值,4、反复执行2、3步骤直到数组输完,a1中记1的个数,1、设定一个数组a存放

18、统计结果,a5,a4中记4的个数,a3中记3的个数,a2中记2的个数,aX+=1,2023/11/7,38,编程方法二:(用数组),main(),int a5=0,0,0,0,0,x,i;,scanf(“%d”,while(x!=9999)ax+=1;scanf(“%d”,for(i=1;i5;i+)printf(“na%d=%d“,i,ai);,2023/11/7,39,二、数据排序,1、“交换”排序法,过程:用当前数据逐个与后续数据比较,例:,设数据存于A数组中,按降序排。,A(0)与A(1)比 A(0)A(1)不换,否则对调A(0/1)与A(2)比 A(0/1)A(2)不换,否则对调::

19、,p193,2023/11/7,40,2、“冒泡”排序法,特点:逐个对数组中每相邻二数进行比较,例1:,设数据存于A数组中,按降序排。,A(0)与A(1)比 A(0)A(1)不换,否则对调A(1)与A(2)比 A(1)A(2)不换,否则对调:A(n-2)与A(n-1)比 A(n-2)A(n-1)不换,否则对调,2023/11/7,41,例:有一组学生平均成绩如下表,将其按 从大小排序,83.8 83.5 85.8 80 78.283.8 85.8 83.5 8085.8 83.8 83.585.8 83.885.8,比较圈数,每圈比较的次数,结论:,n个数需n-1圈的比较,i=1 to n-1

20、,每圈需n-i次比较,j=1 to n-i,2023/11/7,42,“冒泡”法排序 for(i=0;i aj+1)t=aj;aj=aj+1;aj+1=t;,2023/11/7,43,2、“选择”排序法,例1:,有5个随机数如下,用“选择”排序法从小到大排序。,特点:不断在数组中寻找基准数据,2023/11/7,44,29 71 58 54 31 29 31 58 54 71 29 31 54 58 71 29 31 54 58 71,比较圈数,每圈比较次数及基准变化,结论:,n个数需n-1圈,i=1 to n-1,每圈需比较:,j=i+1 to n,29 31 54 58 71,54 71

21、58 29 31,2023/11/7,45,for(i=0;iaj)p=j;if(p!=i)t=ai;ai=ap;ap=t;,“选择”排序法的结构形式:,例:,给出一组国家名称,利用“选择”法排序。,2023/11/7,46,三、数据查询,1、顺序查询:,2、两分法查询:,要求数据排列有序,速度快,对数据排列无要求,速度慢,查询过程:,(1)将数列对分,找出中间数据,(2)用此数据与要查的数据比较,(3)数值相等则结束查询,否则根据比较结果 继续对分数列,(4)重复以上过程,直到找到该数据,2023/11/7,47,应用举例:,例1:,顺序查询,例2:,快速查询,2023/11/7,48,四、数组元素的插入、删除,1、插入数据,插入过程:,(1)确定数据插入位置,(2)向后移动原数组元素(ai+1=ai),(3)将数据插入到指定下标元素中,2、删除数据,删除过程:,(1)确定数据删除位置,(2)向前移动原数组元素(ai=ai+1),2023/11/7,49,第六章习题,6.1、6.3、6.5、6.8、6.13,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号