C语言教学之数组.pptx

上传人:一*** 文档编号:71937737 上传时间:2023-02-07 格式:PPTX 页数:95 大小:2.28MB
返回 下载 相关 举报
C语言教学之数组.pptx_第1页
第1页 / 共95页
C语言教学之数组.pptx_第2页
第2页 / 共95页
点击查看更多>>
资源描述

《C语言教学之数组.pptx》由会员分享,可在线阅读,更多相关《C语言教学之数组.pptx(95页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、问 题如果需要处理1名学生的10门课程的成绩,用什么来存储这些数据?方法一:定义10个变量,每个变量中存放1门成绩。方法二:定义一个可以存储10门成绩一维数组。课程课程1课程课程2课程课程3课程课程4课程课程5课程课程6课程课程7课程课程8课程课程9课程课程1090819377926879839470第1页/共95页变量:杯子,一个变量只能存放一个数据数组:带多个杯子的托盘,一个数组可以存放多个数据第2页/共95页数轴上的一维向量x=1,2,-2,1,0,3;就相当于一维数组 第3页/共95页直角坐标系中的矩阵就相当于二维数组 第4页/共95页E4.1 一维数组 4.2 二维数组 4.3 字符

2、数组第5页/共95页一维数组定义格式:类型说明符 数组名 整型常量表达式;例如:int a10;就定义了一个包含10个整型元素的数组a,它的内存大小可以存放10个整型数据。一 维数组的定义第6页/共95页类型说明符类型说明符 数组名数组名 整型常量表达式整型常量表达式;int,char等都可以,说明此数组中每个 元素都属于此类型命名规则与变量一致不能和其他变量重名指定元素的个数,最小为0,不能是变量#define N 3int aN;int a3+5;int a1.5;int n;scanf(“%d”,&n);int an;int a;int a3;int a,b3;int n=3;int a

3、n;第7页/共95页【例 4.1】判断以下数组定义是否合法,并说明原因。(1)int a2.5;(2)int a-3;(3)int i=3;(4)int i;int ai;scanf(“%d”,&i);int ai;(5)#define N 3 (6)int a;int a N;int a3;(7)int a2+3;(8)int i,a3,b0;第8页/共95页一维数组元素的引用一维数组引用格式:数组名下标 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9注意:1.数组必须先定义,再使用。2.只能逐个引用数组元素,不能一次引用整个数组。例如:int a10;可以使用a0、a1.a9。

4、若有 a=1;或者a10=1;出错。a10不代表整个数组,它是下标为10的元素,越界!1第9页/共95页3.下标可以是常量或变量,它表示元素的序号。例如:int i=3,a10;ai=1;表示给下标为3的元素赋值为1。4.一维数组在内存中连续存放,先存放下标为0的元素,再存放下标为1的元素,依次直至存放完所有元素。第10页/共95页【例 4.2】定义一个包含3个整型元素的数组a,输出其元素值。只定义数组,不给数组元素赋值,数组元素中存放的是随机值。一般要先给数组元素赋值,再使用。第11页/共95页数组名a中存放的是数组起始元素的地址第12页/共95页【例 4.3】定义一个包含3个整型元素的数组

5、a,从键盘给数组元素输入值,然后输出。第13页/共95页【例 4.4】定义一个包含10个整型元素的数组a,从键盘给数组元素输入值,然后输出。第14页/共95页一维数组的初始化定义一维数组的同时给数组元素赋初值称为一维数组的初始化。其一般格式为:类型说明符 数组名N=初值1,初值2,初值N;其中,N是表示数组元素个数的常量。第15页/共95页一维数组的初始化方式有以下几种:(1)全部元素初始化:char a3=1,2,n;int b5=2,11,3,14,5;int b =2,11,3,14,5;int b4=2,11,3,14,5;在对数组的所有元素赋初值时,可以不指定数组长度。系统自动定义其

6、长度为5初值个数不能超过数组长度。否则,会出现语法错误。第16页/共95页(2)全部元素初始化:int a10=0,1,2;char a10=1,2;(3)全部元素初始化为0:int a10=0;将a0a2依次初始化为0、1、2。未赋值的元素a3a9值全部被初始化为int中表示假的值0。将元素a0a9 全部初始化为0将a0a1依次初始化为0、1。未赋值的元素a2a9值全部被初始化为char中表示假的值0。若想全部初始化为1int a10=1;错误第17页/共95页【例 4.5】定义一个含有10个元素的整型一维数组并全部初始化,将数组中所有元素逆序输出。第18页/共95页【例4.64.6】:用冒

7、泡法对5个数排序。解:冒泡排序过程如后面图所示,其中,红圈以内为已排好序的记录。规则:令相邻位置的数依次比较,若上面的数大,则交换。第19页/共95页414135241 交换43 交换342 交换1 13 不交换34 32 交换513245 12 交换12345 12不交换结果 12345R 第0趟 第1趟 第2趟 第3趟第0次第1次第2次第3次for(i=0;iRj+1 的值)则交换 j增1 for(j=0;j4i;j+)/内循环 如果(Rj的值R2的值)temp R1;R1 R2;R2 temp;j增加1,比较Rj 和 Rj+1的大小 如果(Rj的值Rj+1的值)j增加1,比较Rj 和 R

8、j+1 的大小实现交换43 交换R1R243 不交换4R25R32R4temp 2.交 换 过 程 与 核 心 程 序434第21页/共95页 int i;int j;for(i=0;i=3;i+)for(j=0;jRj+1的大小)temp Rj;Rj Rj+1;Rj+1 temp;3.循 环 与 核 心 程 序 的 组 合 int i,j;类型一样,合并在一起外循环,将处理5个数推广到处理n个数 for(i=0;i=n-2;i+)内循环for(j=0;jRj+1)满足交换条件,则交换;在程序中将赋值箭头转换为赋值等号temp=Rj;Rj=Rj+1;Rj+1=temp;标出交换的起始位置标出内

9、循环的起始位置标出外循环的起始位置第22页/共95页4.冒 泡 算法整理 int i,j;/定义int 类型的变量i,j int temp;/定义新的存储单元 tempfor(i=0;i=n-2;i+)/外循环 for1 /外循环for1开始 for(j=0;jRj+1)/比较数组R 中相邻元素值的大小 /开始交换 temp=Rj;/先将Rj中的值赋给 temp Rj=Rj+1;/再将Rj+1中的值赋给Rj Rj+1=temp;/最后又把temp中的值赋给Rj+1 /结束交换 /内循环for2结束 /外循环for1结束 /经过n1=4 次循环,完成排序功能第23页/共95页5.冒泡算法真实程序

10、第24页/共95页第25页/共95页6.优化推广程序第26页/共95页第27页/共95页改进的冒泡排序算法例如:待排序的数组元素为:3,1,2,5,4第28页/共95页313124531 交换32 交换224 不交换451 13 不交换23 34 不交换45 45 不交换 12不交换结果 12345R i=0 i=1j=0j=1j=2j=3排好设置一个标识量,若某趟中一次交换也没有进行,设置标识量的值,代表数据已完全排好,不需要进行后面的排序。第29页/共95页【例 4.7】改进冒泡排序算法。第30页/共95页第31页/共95页【例 4.8】从键盘输入10个学生成绩,计算出 平均成绩,并输出高

11、于平均分的学生成绩。第32页/共95页第33页/共95页【例】求fibonacci数列的前20项,并输出。fibonacci:1,1,2,3,5,8,13,21 第34页/共95页 4.1 一维数组E4.2 二维数组 4.3 字符数组第35页/共95页问 题如果需要处理3名学生的期末成绩,每名学生有4门课程的成绩,用什么来存储这些数据?方法一:定义12个变量,每个变量存储1个学生的1门课程成绩。方法二:为3名学生各定义3个数组,每个数组可以存放4门成绩。方法三:用一个3行4列的二维数组来存储。成绩表成绩表数学数学英语英语计算机计算机C语言语言学生学生1928996.580学生学生288.567

12、9070学生学生371908860第36页/共95页二维数组的定义1.格式:类型说明符 数组名常量表达式M常量表达式N;例:float a34;0120 1 2 3M和N只能是正整数第37页/共95页例:float a342.二维数组可以看成是由一维数组组成的第38页/共95页3.二维数组在内存中连续存放,先顺序存放第一行的元素,再存放第二行的元素,依次直至存放完所有元素。第39页/共95页二维数组的引用 引用格式引用格式:数组名行下标列下标;例:int a23;a00、a01、a02 a10、a11、a1212 15 365 8 13常出现的错误:下标越界!a23=3;/*应为a12=3;*

13、/第40页/共95页二维数组的初始化1、分行赋初值:例:int a34=1,2,3,4,5,6,7,8,9,10,11,12;1 2 3 4 5 6 7 8 9 10 11 122、全部数据写在一个花括号内,按数组排列的顺序对各元素赋初值:例:int a34=1,2,3,4,5,6,7,8,9,10,11,12;赋初值时,数组的行下标可以省略,例如:int a 4=.。第41页/共95页3、对部分元素赋初值:(1)int a34=0,1,2;0 1 2 0 0 0 0 0 0 0 0 0 功能:仅对a00、a01、a02赋值,其余为0(2)int a34=1,5,6,9;1 0 0 0 5 6

14、 0 0 9 0 0 0 功能:仅对a00、a10、a11、a20赋值,其余为0第42页/共95页【例4.9】求一个3*4矩阵的最大值及其所在 行列下标。第43页/共95页第44页/共95页【例4.10】3名学生各有4门课程的成绩,计算每个学生的平均成绩。第45页/共95页【例4.11】打印输出杨辉三角形(输出前10行)第46页/共95页第47页/共95页第48页/共95页 多维数组多维数组定义格式:类型 数组名常量表达式1常量表达式2;例:int a333;注意:多维数组的元素在内存中的排列顺序是按行存放。引用格式:数组名下标下标例:a000=100;a012=20;a222=50;一个n维

15、数组可以看成由多个n-1维数组构成。第49页/共95页 4.1 一维数组 4.2 二维数组E4.3 字符数组第50页/共95页在程序中如果要存储姓名、地址等类型的数据,例如:“小明”、“成都市高新西区西园大道1号”等需要使用什么样的类型呢?这些是字符串,C语言中没有专门的字符串变量,如果要存储字符串,需要用到字符数组。字符数组是专门用来存放字符数据的。字符数组中的一个元素存放一个字符。第51页/共95页字符数组字符数组中可以存储普通字符序列,也可以存储字符串,两者依据字符数组末尾是否有字符串结束符0来区分。例如:第52页/共95页(1)char c11=“I am happy”;或 char

16、c =“I am happy”;(2)char c11=“I am happy”;或 char c =“I am happy”;(3)char c11=I,a,m,h,a,p,p,y,0;或 char c =I,a,m,h,a,p,p,y,0;(4)char c11=I,a,m,h,a,p,p,y;这四种方式,字符数组c存储的是字符串第53页/共95页(5)char c10=I,a,m,h,a,p,p,y;或 char c =I,a,m,h,a,p,p,y;这种方式,字符数组c存储的是普通字符序列第54页/共95页若要重新给字符数组(字符串变量)赋值,使它改而存放别的字符串,应注意以下几点:(

17、1)应充分估计新字符串所需的最大空间,不要出现越界情况。例如:char c =“fish”;数组c的长度是5。若要将“chicken”赋给c,新字符串需要8个字节的内存空间,就会出错。为了防止这类的错误发生,习惯上将字符数组长度设置大一些。例如:char c20=“fish”;第55页/共95页(2)不能使用赋值语句对字符串变量集体赋值,而应该使用赋值语句为每个字符数组元素单独赋值。例如:char c=“fish”;若要将数组c的内容修改为“cat”,直接写为:c=“cat”;或者c=“cat”;都是错误的。可以对c中的元素逐个重新赋值:c0=c;c1=a;c2=t;c3=0;注意:不要省略给

18、c3赋值为 0,否则c中新的字符串内容为“cath”。第56页/共95页字符数组的输入输出一、使用 scanf 函数输入字符串到字符数组中。(1)以单个字符的格式逐个输入。例如:char c5;scanf(“%c%c%c%c%c”,&s0,&s1,&s2,&s3,&s4);数组元素跟普通变量一样,前面要加取地址符第57页/共95页(2)以字符串的格式输入。例如:char c5;scanf(“%s”,c);说明:1.%s是字符串的格式字符,数组名代表数组的起始地址,因此输入表列中只需要给出数组名即可。若写为&c,程序出错。2.输入字符串时,空格或者回车键是输入结束符,不能作为有效的字符输入。第5

19、8页/共95页假如从键盘输入cat或者cat。数组c中存入cat后,C编译系统会自动在后面补上一个 0。3.输入的字符串长度应该比字符数组的长度短。例如:从键盘输入catcat,数组c中存入catca,没有 0的位置,容易出现内存错误。第59页/共95页4.可以用scanf 输入多个字符串,输入时以空格键或回车键隔开。例如:char c15,c25,c35;scanf(“%s%s%s”,c1,c2,c3);从键盘输入Catordog?第60页/共95页二、使用 printf 函数将字符数组中的字符串输出。(1)以单个字符的格式逐个输出。例如:char c5;printf(“%c%c%c%c%c

20、”,c0,c1,c2,c3,c4);(2)以字符串的格式输出,将数组名写在输出表列中。例如:char c5;printf(“%s”,c);第61页/共95页注意:(1)若数组长度大于字符串的实际长度,也只输出到遇到0结束。例如:char c10=“China”;printf(“%s”,c);(2)如果一个字符数组中包含一个以上0,则遇第一个0时输出就结束。第62页/共95页【例4.12】删除字符串中的空格,并输出。第63页/共95页三、使用scanf和 printf 为二维数组输入输出字符串二维数组可看作由一维数组组成。如果将一维字符数组看作是存放字符串的变量,那么二维字符数组就可以看作是存放

21、字符串的一维字符串数组。例如:定义char c35;相当于定义了3个字符串变量。c0、c1、c2分别是3个字符串的起始地址。可以使用scanf 和 printf 函数为其输入、输出字符串。第64页/共95页【例4.13】利用二维字符数组输入、输出字符串。第65页/共95页【例】输出一个菱形图。第66页/共95页字符串处理函数C语言提供了多个常用的字符串处理函数。字符串输入函数、输出函数、比较函数、连接函数及求字符串长度等函数。注意:字符串函数均在头文件 string.h 中定义,要使用这些函数,需将此文件包含进来。有的编译器会自动包含。第67页/共95页1.字符串输出函数字符串输出函数 put

22、s格 式:puts(字符串)功 能:将字符串结束符0转换成n后输出字符串。例如:char c6=“China”;执行函数:puts(c);等价于:printf(%sn,c);puts函数也可以直接输出字符串常量。例如:puts(“China”);第68页/共95页2.2.字符串输入函数字符串输入函数 getsgets格 式:gets(字符数组)功 能:从键盘输入一个字符串到字符数组中。例如:char s10;执行函数:gets(s);从键盘输入:China 将包括0在内的6个字符送到字符数组s中。第69页/共95页gets、puts与scanf、printf函数的使用区别:(1)gets()、

23、puts()函数一次只能输入输出一个字符串;scanf()、printf()则可以输入输出多个字符串。例如:char s110,s210;1.gets(s1);gets(s2);puts(s1);puts(s2);2.scanf(“%s%s”,s1,s2);printf(“%sn%sn”,s1,s2);第70页/共95页(2)使用gets函数输入的字符串以回车符结束;而 scanf函数以空格或回车符结束字符串的输入。例如:char s130,s230;从键盘输入HELLO WORLD!,1.执行gets(s1);gets(s2);执行结果:s1中存入字符串“HELLO WORLD!”,光标等待

24、用户再次输入字符串,从键盘输入hello world!s2中获得字符串“hello world!”。第71页/共95页例如:char s130,s230;从键盘输入HELLO WORLD!,2.执行scanf(“%s%s”,s1,s2);执行结果:s1中存入字符串“HELLO”,s2中存入字符串“WORLD!”。第72页/共95页3.3.字符串字符串连接连接函数函数 strcat格 式:strcat(字符数组1,字符数组2或字符串)功 能:把字符数组2中的字符串连接到字符数组1中的字符串的后面,结果放到字符数组1中。注 意:1)数组1必须足够大,以容纳连接后的新字符串。2)连接时串1后面的0被

25、覆盖,只在新串后保留1个0字符数组2可为字符串常量,1呢?第73页/共95页例如:char s10=“te”;strcat(s,“st!”);执行过程中数组s的存储情况:第74页/共95页【例4.14】使用strcat函数实现两个字符串连接的功能。第75页/共95页【例4.15】不使用strcat函数实现两个字符串连接的功能。第76页/共95页4.4.字符串复制函数字符串复制函数 strcpy 格 式:strcpy(字符数组1,字符数组2或字符串)功 能:将字符串2复制到字符数组1中,该字符数组1 中原有内容被覆盖。说明:(1)字符数组1必须足够大,能容纳复制过来的字符串(2)复制时连同0一起

26、复制到字符数组1中。第77页/共95页(3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。例如:char str130=“China”,str230;str2=str1;(4)可以用strncpy函数将字符串2中的前n个字符复制到字符数组中。字符数组其他位置的元素不发生变换。例如:char str130=Chengdu;char str230=Beijing;strncpy(str1,str2,2);执行结果:str1为Beengdu。第78页/共95页【例4.16】使用strcpy函数实现字符串的拷贝。第79页/共95页【例4.17】不使用strcpy函数实现字符串的拷贝。第

27、80页/共95页5.5.字符串比较函数字符串比较函数 strcmp格 式:strcmp(字符串1,字符串2)功 能:比较“字符串1”和“字符串2”。比较规则:自左至右逐个字符比较ASCII码,直到遇到不同字符或0,比较的结果由函数值带回。字符串1 字符串2,函数返回正整数,1例如:strcmp(“a”,“b”);函数返回-1 即:“a”“compare”第81页/共95页例如:strcmp(“CHINA”,“china”);函数值是-1 表示:“CHINA”“CHINA”注意:字符串只能用strcmp 函数比较,不能用关系运算符“=”、“”等直接比较。例如:要判断str1是否比str2大,若使

28、用str1str2就会出错,应该使用strcmp(str1,str2)0。第82页/共95页【例4.18】使用strcmp函数比较两个字符串。第83页/共95页【例4.19】不使用strcmp函数比较两个字符串。第84页/共95页第85页/共95页6.6.求字符串长度函数求字符串长度函数 strlen格 式:strlen(字符数组或字符串)功 能:测字符串实际长度,不包含0在内。例 如:char str20=“Test”;printf(“%d”,strlen(str);说明:输出结果不是 20,也不是5,而是4。第86页/共95页【例4.20】使用strlen函数测字符串长度的功能。第87页/

29、共95页【例4.21】不使用strlen函数测字符串长度的功能第88页/共95页7.7.字符串大小写转换函数字符串大小写转换函数 格 式:strupr(字符数组)功 能:将字符数组中字符串的小写字母转换成大写字母。例 如:char str1“abcdef”;strupr(str1);puts(str1);结果:ABCDEF第89页/共95页8.8.字符串大小写转换函数字符串大小写转换函数 格 式:strlwr(字符数组)功 能:将字符数组中字符串的大写字母转换成小写字母。例 如:char str2=“ABCDEF”;strlwr(str2);puts(str2);结果:abcdef第90页/共95页字符数组应用举例【例】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。第91页/共95页第92页/共95页【例】输入有3个字符串,要求找出其中最大者。设一个二维字符数组str,大小为320,即有3行20列,每一行可以容纳20个字符。C h i n a 0 str0str1 str2J a p a n 0 I n d i a 0 0 1 2 3 4 5 6 7 8 9 10 19 str320第93页/共95页第94页/共95页感谢您的观看。第95页/共95页

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

当前位置:首页 > 管理文献 > 管理工具

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁