书签 分享 收藏 举报 版权申诉 / 60
上传文档赚钱

类型c++程序设计--数组课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2921302
  • 上传时间:2022-06-11
  • 格式:PPT
  • 页数:60
  • 大小:1.70MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《c++程序设计--数组课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    c+ 程序设计 数组 课件
    资源描述:

    1、1第第 4 4 章章 数组数组 2主要内容主要内容4.1 一维数组一维数组4.2 二维数组二维数组4.3 字符数组与字符串字符数组与字符串34.1 一维数组 4.1.1 一维数组定义一维数组定义【存储类型【存储类型】 数据类型数据类型 数组名数组名常量表达式常量表达式 int age40; float f6*6; 例如:以下是合法的数组定义语句:int i;i=10;int datai; 以下是不合法的数组定义语句:44.1.3 一维数组元素的引用一维数组元素的引用数组定义之后,就可以在程序中引用元素。数组定义之后,就可以在程序中引用元素。引用格式为:引用格式为:数组名数组名下标表达式下标表达

    2、式说明:说明:下标表达式是整型常量或整型变量表达式。下标表达式是整型常量或整型变量表达式。 例如定义:例如定义: int b,c,a5;数组数组a可引用的元素有:可引用的元素有:a0,a1,a2,a3,a4。 给元素赋值方法给元素赋值方法: a0=0; a1=1;a2=2;a3=3 ; a4=4 ; for(i=0;i100A6【例【例4.1】读入一维数组,并按相反顺序输出各元素。】读入一维数组,并按相反顺序输出各元素。算法分析:算法分析: (1)设数组)设数组a含有含有10个元素,下标为个元素,下标为09。(2)以下标作为循环控制变量)以下标作为循环控制变量for(i=0;i=9;i+) 在

    3、循环体内进行数组元素在循环体内进行数组元素ai的引用的引用 7 #include using namespace std;#include void main() int i,a10; for(i=0;iai; for(i=9;i=0;i-) coutsetw(6)max,则则max=ai 、position=i;1225213 82794936010max:position:513 827949360100246i13程序清单程序清单void main() int a10; int i,max,position; for(i=0;iai; position=0; max=a0; for(i=

    4、1;imax) max=ai;position=i; coutmax=max position=positionendl; /输出最大值及其位置输出最大值及其位置 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 数组数组a521382794936010imaxposition100 51maxai2aimax3132maxaimaxaimaxaimaxaimaxaimaxaimaxai496max=49 position=65 2 13 8 27 9 49 36 0 10 14【例4.4】使用冒泡法将6个数据从小到大排序。算法分析:算法分析: 排序是将一组随机排放的数按从小到大排序

    5、是将一组随机排放的数按从小到大(升序升序)或从大到小或从大到小(降降序序)重新排列。重新排列。排序方法采用多的有:冒泡法、选择法和插入法等。排序方法采用多的有:冒泡法、选择法和插入法等。冒泡法的思路是:冒泡法的思路是: 将相邻两个数将相邻两个数ai和和ai+1比较,将大数调到后头,小数调到比较,将大数调到后头,小数调到前头前头;第一轮比较下来,将最大值放入第一轮比较下来,将最大值放入a6;第二轮比较下来,次大数放入了第二轮比较下来,次大数放入了a5;如此循环如此循环n-1轮,则将轮,则将6个数按从小到大分别存在个数按从小到大分别存在a1,a2,a6中。中。15冒泡法图示 交换 5 2 6 4

    6、1 3 不交换 交换 交换 交换 2 5 6 4 1 3 2 5 6 4 1 3 2 5 4 6 1 3 2 5 4 1 6 3 2 5 4 1 3 6 最大值 图4.2 冒泡排序法图示 16void main() int a7,i,j,t; coutinput 6 numbers:n; for(i=1;iai; for(i=1;i6;i+) for(j=1;jaj+1) t=aj; aj=aj+1; aj+1=t; for (i=1;i=6;i+) coutai“ ”;a0a1a2a3a4a5a6可省略可省略itj _5 2 6 4 1 3 526413input 6 numbers:1 1

    7、52552226654 46 416 61136 63 633 4 5 621 154234 531 4133 441 2132 351226 1 2 3 4 5 6 _174.2 二维数组及多维数组 用用2个下标区分具体元素的数组称为二维数组。个下标区分具体元素的数组称为二维数组。 用用3个及个及3个以上下标表示的数组称为多维数组。个以上下标表示的数组称为多维数组。4.2.1 二维数组及多维数组定义二维数组及多维数组定义二维数组定义的一般形式为:二维数组定义的一般形式为: 存储类型存储类型 数据类型数据类型 数组名数组名常量常量常量常量; int a23,b5l0;同理定义一个三维数组:同理

    8、定义一个三维数组: int c234;184.2.2 二维数组及多维数组的存储形式二维数组中元素的排列顺序是按行连续存放的,二维数组中元素的排列顺序是按行连续存放的,即在内存中先顺序存放完第一行元素,即在内存中先顺序存放完第一行元素,再继续存放第二行元素,再继续存放第二行元素,直到最后一行。直到最后一行。例如:例如:int a23;二维数组二维数组a中元素排列顺序中元素排列顺序 a00 a01 a02 a10 a11 a12二维数组二维数组a在内存中的存储格式在内存中的存储格式 a00 a01 a02 a10 a10 a11 2000 2004 2008 200C 2010 2014 多维数组

    9、元素在内存中的存放规律与二维数组相同,多维数组元素在内存中的存放规律与二维数组相同,元素最左边的下标变化最慢,最右边的下标变化最快。元素最左边的下标变化最慢,最右边的下标变化最快。 194.2.3 二维数组元素的引用数组不能对其整体引用,只能对具体元素进行引用。数组不能对其整体引用,只能对具体元素进行引用。格式:格式: 数组名数组名下标表达式下标表达式下标表达式下标表达式 说明:说明:(1)下标表达式可是整型常量或变量表达式。)下标表达式可是整型常量或变量表达式。 例如:例如: int a23;合法引用:合法引用: a01, aij,a3*2-56%3等。等。(2)同样在数组引用中要特别注意下

    10、标越界问题。)同样在数组引用中要特别注意下标越界问题。 204.2.4 二维数组的初始化 二维数组初始化方式有两种方式二维数组初始化方式有两种方式1按行对二维数组初始化。按行对二维数组初始化。例如:例如: int a23=1,2,3,4,5,6;2按数组元素存放顺序对初始化。按数组元素存放顺序对初始化。例如,例如, int a23=l,2,3,4,5,6;21说明:说明:(1)初始化时可对数组全部元素初始化,也可以只对部)初始化时可对数组全部元素初始化,也可以只对部分元素初始化。分元素初始化。 例如:例如: int a341,2,3; 它的作用是只对各行第一列的元素赋初值,其余元素它的作用是只

    11、对各行第一列的元素赋初值,其余元素值自动为值自动为0。 0123012 i jaij12300000000022说明:说明:也可以只对某几行赋初值,也可以只对某几行赋初值,例如例如:int a34=1,2,3; 0123012 i jaij12003000000023说明:说明:(2)对全部元素初始化时,可以省略数组第一维的对全部元素初始化时,可以省略数组第一维的长度,但第二维的长度不能省略。长度,但第二维的长度不能省略。例如:例如: int a 3=1,2,3,4,5,6;01201 i jaij142536 由于未指定数组第一维的长度,由于未指定数组第一维的长度,C C编译程序将编译程序将

    12、根据数组第二维的长度以及初始化数据的个数,确根据数组第二维的长度以及初始化数据的个数,确定数组第一维的长度为定数组第一维的长度为2 2,保证数组大小足够存放,保证数组大小足够存放全部初始化数据。全部初始化数据。24说明:说明:(3)按行初始化时,对全部或部分元素初始化均可省略数组)按行初始化时,对全部或部分元素初始化均可省略数组第一维的长度,第一维的长度,例如:例如: int a32=1,2,3;还可写成:还可写成: int a 2=1,2,3;系统能根据初始值分行情况自动确定该数组第一维的长度为系统能根据初始值分行情况自动确定该数组第一维的长度为3。 01012 i jaij10320025

    13、b4.2.5 二维数组程序设计举例【例4.5】将一个二维数组的行和列元素互换(即矩阵的转置),将结果存到另一个数组中。 矩阵的转置算法:矩阵的转置算法: aij=bji123456456a123b123456456a123bij=aji ijij26#include void main() int a23=1,2,3,4,5,6,b32; int i,j; coutarray a is:endl; for (i=0;i2;i+) for (j=0;j3;j+) coutsetw(10)aij; coutendl; array a is:123456abij12345627 coutarray

    14、b is:endl; for(i=0;i3;i+) for(j=0;j2;j+) bij=aji; coutsetw(10)bij; coutendl; abarray b is:iij123j45641123456236514253628void main() int a4=3,16,87,65,4,32,11,108,10,25,12,27; int b3,i,j,rowmax; for(i=0;i=2;i+) rowmax=ai0; for(j=1;jrowmax) rowmax=aij; bi=rowmax; 16 87 6532 11 108a3425 12 2710browmaxi

    15、j6512874 32 11108108103 16 87252727【例4.6】在二维数组a中选出各行最大的元素组成一个一维数组b。29 coutarray a is:endl; for(i=0;i=2;i+) for(j=0;j=3;j+) coutsetw(10)aij; coutendl; coutarray b is:endl; for(i=0;i=2;i+) coutsetw(10)bi; coutendl; 8710827b16 87 6532 11 108a3425 12 2710316 87 65432 11 10810 25 12 278710827array a is:a

    16、rray b is:_304.3 字符数组与字符串所谓所谓“字符串字符串”是指若干有效字符的序列。是指若干有效字符的序列。C程序中的字符串可以包括字母、数字、专用字符、转义字程序中的字符串可以包括字母、数字、专用字符、转义字符等。符等。 例如,下列字符串都是合法的。例如,下列字符串都是合法的。HelloC program35.29ChinatBeijingnC语言中没有字符串变量,字符串不是存放在一个变量中,语言中没有字符串变量,字符串不是存放在一个变量中,而是存放在一个字符型的数组中。而是存放在一个字符型的数组中。在在C语言中,字符串被作为字符数组来处理。语言中,字符串被作为字符数组来处理。

    17、314.3.1 4.3.1 字符数组与字符串字符数组与字符串 用于存放字符串数据的数组是字符数组,用于存放字符串数据的数组是字符数组,字符数组中的一个元素存放一个字符。字符数组中的一个元素存放一个字符。定义一维字符数组的一般格式为:定义一维字符数组的一般格式为: char 数组名数组名常量表达式常量表达式;例如,例如, char str10;由于字符型与整型是相互通用的,因此由于字符型与整型是相互通用的,因此上面定义还可以改为:上面定义还可以改为: int str10;1. 字符数组的定义字符数组的定义str10合法合法引用引用越界越界 str0 str1 str2 str3 str4 str

    18、5 str6 str7 str8 str9str322. 字符数组的初始化字符数组的初始化 字符数组的初始化有两种方式。字符数组的初始化有两种方式。(1)逐个给数组中的各元素赋初值,即将字符常量依次放在花括逐个给数组中的各元素赋初值,即将字符常量依次放在花括号中。号中。 char str15=C, ,p,r,o,g,r,a,m;cprogram 0 0 0 0 0 0注意:注意:0在在C语言中是字符串结束标志。即使初始化语言中是字符串结束标志。即使初始化时时0后面还有其他字符,系统也会认为后面还有其他字符,系统也会认为0之前的字之前的字符才是字符串中的字符。例如:符才是字符串中的字符。例如:c

    19、har str15=C, ,p,r,o,g,r,a,m,0,&,C,+,+; 33(2)直接使用字符串常量初始化,字符串常量加不加花直接使用字符串常量初始化,字符串常量加不加花括号都可以。括号都可以。例如,例如,char str15=C program; 或者或者 char str15=C program; C编译程序会自动在字符串的末尾增加编译程序会自动在字符串的末尾增加1个个0字符。字符。注意:注意:初始化时,一定要使定义的数组的大小至少比初始化时,一定要使定义的数组的大小至少比所赋的字符串长度大所赋的字符串长度大1。(3) 初始化时也可以不指定数组的大小,上面初始化初始化时也可以不指定数

    20、组的大小,上面初始化的语句也可写成:的语句也可写成: char str =C program;这时,系统会根据实际字符串的长度决定数组的大小。这时,系统会根据实际字符串的长度决定数组的大小。 344.3.2 4.3.2 字符数组的输入与输出字符数组的输入与输出字符串的输入输出有如下两种方式字符串的输入输出有如下两种方式1. 用格式符用格式符“%c”实现逐个字符输入实现逐个字符输入/输出。输出。【例【例4.7】阅读程序,写出程序结果。】阅读程序,写出程序结果。#includevoid main() char str5; int i; printf(input four characters:n)

    21、; scanf(%c,%c,%c,%c,&str0,&str1,&str2,&str3); for(i=0;i4;i+) printf(%c,stri);input four characters:a,b,c,d a b c dbcdabcda 035【例【例4.8】阅读程序,写出程序结果。】阅读程序,写出程序结果。#includevoid main() char str5; printf(input four characters:n); scanf(“%s”,str); /读入字符串,读入字符串,格式串用格式串用%s printf(%s,str); /输出字符串输出字符串 input fo

    22、ur characters:abcd a b c dbcdabcda2. 用格式符%s实现整个字符串输入/输出。 036将将【例【例4.8】改用】改用C+风格,程序如下:风格,程序如下:#include using namespace std;void main() char str5; coutinput four characters:str; /读入字符串读入字符串 coutstrendl; /输出字符串输出字符串 37注意:(1)用)用scanf()函数输入字符串时,字符串中不能包含空格,函数输入字符串时,字符串中不能包含空格,否则空格将作为字符串的结束标志。否则空格将作为字符串的结束

    23、标志。 例如:例如:char str15; scanf(%s,str); 如果输入如果输入11个字符个字符How are you,实际上并不是把这,实际上并不是把这11个字符加上个字符加上0存到数组存到数组str中,而只将第一个空格前中,而只将第一个空格前的的How字符串送到字符串送到str中,中,str实际值为实际值为How0,系统把第一个空格当作了结束标志。系统把第一个空格当作了结束标志。 38(2)在)在C语言中,数组名代表的是该数组的首地址。语言中,数组名代表的是该数组的首地址。 因此,当因此,当scanf函数的输入项是字符数组名时,则函数的输入项是字符数组名时,则不要加取地址符,不要

    24、加取地址符,例例 scanf(%s,str)但如果但如果str不是数组名,这种写法将是错误的。不是数组名,这种写法将是错误的。 39(3)二维数组可当作一维数组来处理,因此,一个二维数组可存储多个字符串。对二维数组输入/输出多个字符串时,可用循环完成。例如:例如:char str210;for(i=0;i2;i+) scanf(%s,stri); /stri代表行首地址代表行首地址for(i=0;i a; while( ai!=0 ) bi=ai+3; /加密加密 if(biz|biZ&bia) bi=bi-26; i+; bi=0; /写入字符串结束标志写入字符串结束标志 42/*解密解密*

    25、/ i=0; while(bi!=0) ci=bi-3; if(ciZ|ciA) ci=ci+26; i+; ci=0; coutbendlcendl;student vwxghqwstudent434.3.3 4.3.3 字符串处理函数字符串处理函数 C语言本身不提供字符串处理的功能,但语言本身不提供字符串处理的功能,但C语言编译系统语言编译系统提供了大量的字符串处理库函数提供了大量的字符串处理库函数. 头文件头文件“stdio.h”包含用于输入包含用于输入/输出的字符串函数输出的字符串函数头文件头文件“string.h” 包含用于比较、拷贝、合并等用途包含用于比较、拷贝、合并等用途的字符串

    26、函数的字符串函数441. 1. 字符串输出函数字符串输出函数调用格式:调用格式:puts(字符数组名字符数组名);功能:功能:把字符数组中的字符输出到标准输出设备把字符数组中的字符输出到标准输出设备(显示器),字符串结束标志转换成回车换行符。(显示器),字符串结束标志转换成回车换行符。puts函数完全可以用函数完全可以用printf函数取代,当需要按一函数取代,当需要按一定格式输出时,通常用定格式输出时,通常用printf函数。函数。 452. 2. 字符串输入函数字符串输入函数调用格式:调用格式:gets(字符数组名字符数组名);功能:功能:从标准输入设备从标准输入设备(键盘键盘)上输入一个

    27、字符串。本上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。函数得到一个函数值,即为该字符数组的首地址。注意:注意:gets()函数和使用函数和使用“%s”格式的格式的scanf()函数区别。函数区别。对于对于scanf函数,函数,“回车回车”或或“空格空格”都作为字符串都作为字符串结束标志;结束标志;而对于而对于gets函数,只有函数,只有“回车回车”才是字符串结束标才是字符串结束标志;志;“空格空格”则是字符串的一部分。则是字符串的一部分。46【例4.10】字符串输入/输出函数举例。void main() char str15; coutinput a string:“字符串

    28、字符串2,返回值为一正整数;,返回值为一正整数; 字符串字符串1=字符串字符串2,返回值为,返回值为0; 字符串字符串1字符串字符串2,返回值为一负数;,返回值为一负数;字符串比较的方法是对两个字符串对应的字符相比,字符串比较的方法是对两个字符串对应的字符相比,例如:例如:“A”“9”,“THIS”“these” 注意:注意:if(strl=str2) printf(yesn); /错误错误 只能引用只能引用strcmp()函数进行字符串比较。()函数进行字符串比较。506. 6. 测字符串长度函数测字符串长度函数调用格式:调用格式: strlen(字符串字符串);功能:功能:测字符串的实际长

    29、度测字符串的实际长度(不含字符串结束标不含字符串结束标志志0)并作为函数返回值。并作为函数返回值。返回值返回值是正整数,即字符串的长度。是正整数,即字符串的长度。例如:例如: strlen(“C language”)=10 strlen(C0language“)=1517. 7. 大小写转换函数大小写转换函数(1)小写字母转换成大写字母小写字母转换成大写字母调用格式:调用格式:strupr(字符串字符串);功能:功能:将字符串中的小写字母转换成大写字母,其将字符串中的小写字母转换成大写字母,其他字符不转换。他字符不转换。(2) 大写字母转换成小写字母大写字母转换成小写字母调用格式:调用格式:s

    30、trlwr(字符串字符串);功能:功能:将字符串中的大写字母转换成小写字母,其将字符串中的大写字母转换成小写字母,其他字符不转换。他字符不转换。 524.3.4 字符数组程序设计举例 【例4.11】从键盘输入一个字符串,要求不使用库函数,将字符串复制到另一个字符数组后显示出来。void main() char str120,str220; int i=0; coutinput string1:“endl; gets(str1); while(str1i!=0) str2i=str1i; i+; str2i=0; aainput string1:istr1str2Clanguage0C lang

    31、uage languag eCClanguageClangage0u053 coutstring 1 is: ; puts(str1); coutstring 2 is: “endl; puts(str2);aastring 1 is: string 2 is:Clangageu0Clangageu0str1str2C language C language 54【例【例4.124.12】在】在3 3个字符串中,找出其中最大者。个字符串中,找出其中最大者。#include using namespace std; void main() char string20; char str320;

    32、int i; coutinput three strings:“endl; for(i=0;i0) strcpy(string,str0); else strcpy(string,str1); if(strcmp(str2,string)0) strcpy(string,str2); coutthe largest string is:“stringendl;the largest string is:stringstrstr0str1str20CPascal0Basic0Pascal0Pascal0Pascal564.5 数组程序举例【例【例4.13】编写在一组数据中查找一个数据的程序。】编

    33、写在一组数据中查找一个数据的程序。问题是:在一维数组问题是:在一维数组a10中,中, 查找一个整数查找一个整数key;算法分析:算法分析: 结果结果1、若找到则输出数组元素;、若找到则输出数组元素; 结果结果2、否则输出、否则输出not found!。(1)查找的方法主要有:使用顺序查找法)查找的方法主要有:使用顺序查找法顺序查找法的思路是:顺序查找法的思路是: 将数组元素逐一和将数组元素逐一和key比较,若相等则查找成功,提前退出查比较,若相等则查找成功,提前退出查找的循环;找的循环; 若直到数组结束也没有找到,则查找失败,正常结若直到数组结束也没有找到,则查找失败,正常结束循环,则下标为束

    34、循环,则下标为10; 57void main() int i,key,a10; /i记录所找数的位置记录所找数的位置 coutinput 10 integers:endl; for(i=0;iai; /输入数组输入数组 coutinput an searching integer: key; /输入待查找的整数输入待查找的整数 for(i=0;i10;i+) if(ai=key) break; /若当前元素与若当前元素与key相等,结束查找相等,结束查找 if(i10) /若找到若找到key则,下标则,下标i的值小于的值小于10 coutkey is in array a,the positi

    35、on is iendl; else cout“not found!n”; /给出查找信息给出查找信息Input 10 integers:19 38 67 10 5 92 23 12 81 50 input an searching integer:10 10 is in array a,the position is 3再运行一次结果为:再运行一次结果为:19 38 67 10 5 92 23 12 81 50 input an searching integer:20 not found!58【例【例4.144.14】求一个矩阵的对角线元素的和】求一个矩阵的对角线元素的和 算法分析:算法分析

    36、:矩阵可以用二维数组来存储,矩阵对角线元素的特矩阵可以用二维数组来存储,矩阵对角线元素的特点是行号和列号相等,因此需要遍历整个二维数点是行号和列号相等,因此需要遍历整个二维数组,将符合上述条件的元素累加即可。组,将符合上述条件的元素累加即可。 59void main() int a33,sum=0; int i,j; coutplease input the elements of a matrix:endl; for(i=0;i3;i+) for(j=0;jaij; /读入二维数组读入二维数组a for(i=0;i3;i+) sum=sum+aii; /将对角线的元素累加到将对角线的元素累加到sum中中 coutthe sum of diagonal is sumendl; please input the elements of a matrix:运行时输入:运行时输入:1 2 34 5 67 8 9运行结果为:运行结果为:the sum of diagonal is 15 60作业与实验实验实验 p39实验实验7:数组及其应用数组及其应用作业作业习题习题:p123一、一、 二、二、 三、三、 四、四、 2、程序设计:、程序设计: p128五(五(1、3、4)

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c++程序设计--数组课件.ppt
    链接地址:https://www.163wenku.com/p-2921302.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库