欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言教学课件之数组.ppt

    • 资源ID:5426317       资源大小:2.76MB        全文页数:95页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言教学课件之数组.ppt

    ,C 程 序 设 计,问 题,如果需要处理1名学生的10门课程的成绩,用什么来存储这些数据?方法一:定义10个变量,每个变量中存放1门成绩。方法二:定义一个可以存储10门成绩一维数组。,变量:杯子,一个变量只能存放一个数据,数组:带多个杯子的托盘,一个数组可以存放多个数据,数轴上的一维向量x=1,2,-2,1,0,3;就相当于一维数组,直角坐标系中的矩阵就相当于二维数组,4.1 一维数组 4.2 二维数组 4.3 字符数组,一维数组定义格式:类型说明符 数组名 整型常量表达式;例如:int a10;就定义了一个包含10个整型元素的数组a,它的内存大小可以存放10个整型数据。,4.1.1 一 维数组的定义,类型说明符 数组名 整型常量表达式;,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 an;,【例 4.1】判断以下数组定义是否合法,并说明原因。,(1)int a2.5;(2)int a-3;(3)int i=3;(4)int i;int ai;scanf(“%d”,一维数组元素的引用,一维数组引用格式:数组名下标,a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,注意:1.数组必须先定义,再使用。2.只能逐个引用数组元素,不能一次引用整个数组。例如:int a10;可以使用a0、a1.a9。若有 a=1;或者a10=1;出错。a10不代表整个数组,它是下标为10的元素,越界!,1,3.下标可以是常量或变量,它表示元素的序号。例如:int i=3,a10;ai=1;表示给下标为3的元素赋值为1。4.一维数组在内存中连续存放,先存放下标为0的元素,再存放下标为1的元素,依次直至存放完所有元素。,【例 4.2】定义一个包含3个整型元素的数组a,输出其元素值。,只定义数组,不给数组元素赋值,数组元素中存放的是随机值。一般要先给数组元素赋值,再使用。,数组名a中存放的是数组起始元素的地址,【例 4.3】定义一个包含3个整型元素的数组a,从键盘给数组元素输入值,然后输出。,【例 4.4】定义一个包含10个整型元素的数组a,从键盘给数组元素输入值,然后输出。,一维数组的初始化,定义一维数组的同时给数组元素赋初值称为一维数组的初始化。其一般格式为:类型说明符 数组名N=初值1,初值2,初值N;其中,N是表示数组元素个数的常量。,一维数组的初始化方式有以下几种:(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;,在对数组的所有元素赋初值时,可以不指定数组长度。系统自动定义其长度为5,初值个数不能超过数组长度。否则,会出现语法错误。,(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;错误,【例 4.5】定义一个含有10个元素的整型一维数组并全部初始化,将数组中所有元素逆序输出。,【例4.6】:用冒泡法对5个数排序。解:冒泡排序过程如后面图所示,其中,红圈以内为已排好序的记录。,规则:令相邻位置的数依次比较,若上面的数大,则交换。,4,1,4,1,3,5,2,41 交换,43 交换,3,45 不交换,5,2,52 交换,1,13 不交换,3,4,34 不交换,2,42 交换,5,1,3,2,4,5,13 不交换,32 交换,1,2,3,4,5,12不交换,结果 1,2,3,4,5,R,第0趟,第1趟,第2趟,第3趟,第0次,第1次,第2次,第3次,for(i=0;iRj+1 的值)则交换 j增1 for(j=0;j4i;j+)/内循环 如果(Rj的值Rj+1的值)则不交换 j增1,冒泡算法逻辑过程,i,j,i=0,j=1;比较Rj 和 Rj+1的大小 int temp;/定义新的存储单元 如果(R1的值R2的值)temp R1;R1 R2;R2 temp;j增加1,比较Rj 和 Rj+1的大小 如果(Rj的值Rj+1的值)j增加1,比较Rj 和 Rj+1 的大小,实现交换,R1,R2,4,3,temp,2.交 换 过 程 与 核 心 程 序,4,3,4,int i;,int j;,for(i=0;i=3;i+),for(j=0;j=3i;j+),int temp;,if(Rj的大小Rj+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;j=ni2;j+),定义新的存储空间,置前,防止重复定义,int temp;,比较大小判断是否满足交换条件,if(RjRj+1),满足交换条件,则交换;在程序中将赋值箭头转换为赋值等号,temp=Rj;Rj=Rj+1;Rj+1=temp;,标出交换的起始位置,标出内循环的起始位置,标出外循环的起始位置,4.冒 泡 算法整理,int i,j;/定义int 类型的变量i,j int temp;/定义新的存储单元 tempfor(i=0;iRj+1)/比较数组R 中相邻元素值的大小/开始交换 temp=Rj;/先将Rj中的值赋给 temp Rj=Rj+1;/再将Rj+1中的值赋给Rj Rj+1=temp;/最后又把temp中的值赋给Rj+1/结束交换/内循环for2结束/外循环for1结束/经过n1=4 次循环,完成排序功能,5.冒泡算法真实程序,6.优化推广程序,改进的冒泡排序算法,例如:待排序的数组元素为:3,1,2,5,4,3,1,3,1,2,4,5,31 交换,32 交换,2,24 不交换,4,5,1,13 不交换,2,3,34 不交换,4,5,45 不交换,12不交换,结果 1,2,3,4,5,R,i=0,i=1,j=0,j=1,j=2,j=3,设置一个标识量,若某趟中一次交换也没有进行,设置标识量的值,代表数据已完全排好,不需要进行后面的排序。,【例 4.7】改进冒泡排序算法。,【例 4.8】从键盘输入10个学生成绩,计算出 平均成绩,并输出高于平均分的学生成绩。,【例】求fibonacci数列的前20项,并输出。,fibonacci:1,1,2,3,5,8,13,21,4.1 一维数组4.2 二维数组 4.3 字符数组,问 题,如果需要处理3名学生的期末成绩,每名学生有4门课程的成绩,用什么来存储这些数据?方法一:定义12个变量,每个变量存储1个学生的1门课程成绩。方法二:为3名学生各定义3个数组,每个数组可以存放4门成绩。方法三:用一个3行4列的二维数组来存储。,4.2.1 二维数组的定义,1.格式:类型说明符 数组名常量表达式M常量表达式N;例:float a34;,012,0 1 2 3,M和N只能是正整数,例:float a34,2.二维数组可以看成是由一维数组组成的,3.二维数组在内存中连续存放,先顺序存放第一行的元素,再存放第二行的元素,依次直至存放完所有元素。,4.2.2 二维数组的引用,引用格式:数组名行下标列下标;例:int a23;a00、a01、a02 a10、a11、a12,常出现的错误:下标越界!a23=3;/*应为a12=3;*/,4.2.3 二维数组的初始化,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 12,2、全部数据写在一个花括号内,按数组排列的顺序对各元素赋初值:例:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,赋初值时,数组的行下标可以省略,例如:int a 4=.。,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 0 0 9 0 0 0 功能:仅对a00、a10、a11、a20赋值,其余为0,【例4.9】求一个3*4矩阵的最大值及其所在 行列下标。,【例4.10】3名学生各有4门课程的成绩,计算每个学生的平均成绩。,【例4.11】打印输出杨辉三角形(输出前10行),多维数组定义格式:类型 数组名常量表达式1常量表达式2;例:int a333;注意:多维数组的元素在内存中的排列顺序是按行存放。引用格式:数组名下标下标例:a000=100;a012=20;a222=50;一个n维数组可以看成由多个n-1维数组构成。,4.1 一维数组 4.2 二维数组4.3 字符数组,在程序中如果要存储姓名、地址等类型的数据,例如:“小明”、“成都市高新西区西园大道1号”等需要使用什么样的类型呢?这些是字符串,C语言中没有专门的字符串变量,如果要存储字符串,需要用到字符数组。字符数组是专门用来存放字符数据的。字符数组中的一个元素存放一个字符。,4.3.1 字符数组,字符数组中可以存储普通字符序列,也可以存储字符串,两者依据字符数组末尾是否有字符串结束符0来区分。例如:,(1)char c11=“I am happy”;或 char 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存储的是字符串,(5)char c10=I,a,m,h,a,p,p,y;或 char c=I,a,m,h,a,p,p,y;,这种方式,字符数组c存储的是普通字符序列,若要重新给字符数组(字符串变量)赋值,使它改而存放别的字符串,应注意以下几点:,(1)应充分估计新字符串所需的最大空间,不要出现越界情况。例如:char c=“fish”;数组c的长度是5。若要将“chicken”赋给c,新字符串需要8个字节的内存空间,就会出错。为了防止这类的错误发生,习惯上将字符数组长度设置大一些。例如:char c20=“fish”;,(2)不能使用赋值语句对字符串变量集体赋值,而应该使用赋值语句为每个字符数组元素单独赋值。例如:char c=“fish”;若要将数组c的内容修改为“cat”,直接写为:c=“cat”;或者c=“cat”;都是错误的。可以对c中的元素逐个重新赋值:c0=c;c1=a;c2=t;c3=0;注意:不要省略给c3赋值为 0,否则c中新的字符串内容为“cath”。,字符数组的输入输出,一、使用 scanf 函数输入字符串到字符数组中。(1)以单个字符的格式逐个输入。例如:char c5;scanf(“%c%c%c%c%c”,数组元素跟普通变量一样,前面要加取地址符,(2)以字符串的格式输入。例如:char c5;scanf(“%s”,c);说明:1.%s是字符串的格式字符,数组名代表数组的起始地址,因此输入表列中只需要给出数组名即可。若写为&c,程序出错。2.输入字符串时,空格或者回车键是输入结束符,不能作为有效的字符输入。,假如从键盘输入cat或者cat。数组c中存入cat后,C编译系统会自动在后面补上一个 0。3.输入的字符串长度应该比字符数组的长度短。例如:从键盘输入catcat,数组c中存入catca,没有 0的位置,容易出现内存错误。,4.可以用scanf 输入多个字符串,输入时以空格键或回车键隔开。例如:char c15,c25,c35;scanf(“%s%s%s”,c1,c2,c3);从键盘输入Catordog?,二、使用 printf 函数将字符数组中的字符串输出。(1)以单个字符的格式逐个输出。例如:char c5;printf(“%c%c%c%c%c”,c0,c1,c2,c3,c4);(2)以字符串的格式输出,将数组名写在输出表列中。例如:char c5;printf(“%s”,c);,注意:,(1)若数组长度大于字符串的实际长度,也只输出到遇到0结束。例如:char c10=“China”;printf(“%s”,c);(2)如果一个字符数组中包含一个以上0,则遇第一个0时输出就结束。,【例4.12】删除字符串中的空格,并输出。,三、使用scanf和 printf 为二维数组输入输出字符串二维数组可看作由一维数组组成。如果将一维字符数组看作是存放字符串的变量,那么二维字符数组就可以看作是存放字符串的一维字符串数组。例如:定义char c35;相当于定义了3个字符串变量。c0、c1、c2分别是3个字符串的起始地址。可以使用scanf 和 printf 函数为其输入、输出字符串。,【例4.13】利用二维字符数组输入、输出字符串。,【例】输出一个菱形图。,4.3.3 字符串处理函数,C语言提供了多个常用的字符串处理函数。字符串输入函数、输出函数、比较函数、连接函数及求字符串长度等函数。注意:字符串函数均在头文件 string.h 中定义,要使用这些函数,需将此文件包含进来。有的编译器会自动包含。,1.字符串输出函数 puts,格 式:puts(字符串)功 能:将字符串结束符0转换成n后输出字符串。,例如:char c6=“China”;执行函数:puts(c);等价于:printf(%sn,c);,puts函数也可以直接输出字符串常量。例如:puts(“China”);,2.字符串输入函数 gets,格 式:gets(字符数组)功 能:从键盘输入一个字符串到字符数组中。,例如:char s10;执行函数:gets(s);从键盘输入:China 将包括0在内的6个字符送到字符数组s中。,gets、puts与scanf、printf函数的使用区别:(1)gets()、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);,(2)使用gets函数输入的字符串以回车符结束;而 scanf函数以空格或回车符结束字符串的输入。例如:char s130,s230;从键盘输入HELLO WORLD!,1.执行gets(s1);gets(s2);执行结果:s1中存入字符串“HELLO WORLD!”,光标等待用户再次输入字符串,从键盘输入hello world!s2中获得字符串“hello world!”。,例如:char s130,s230;从键盘输入HELLO WORLD!,2.执行scanf(“%s%s”,s1,s2);执行结果:s1中存入字符串“HELLO”,s2中存入字符串“WORLD!”。,3.字符串连接函数 strcat,格 式:strcat(字符数组1,字符数组2或字符串)功 能:把字符数组2中的字符串连接到字符数组1中的字符串的后面,结果放到字符数组1中。,注 意:1)数组1必须足够大,以容纳连接后的新字符串。2)连接时串1后面的0被覆盖,只在新串后保留1个0,字符数组2可为字符串常量,1呢?,例如:char s10=“te”;strcat(s,“st!”);执行过程中数组s的存储情况:,【例4.14】使用strcat函数实现两个字符串连接的功能。,【例4.15】不使用strcat函数实现两个字符串连接的功能。,4.字符串复制函数 strcpy,格 式:strcpy(字符数组1,字符数组2或字符串)功 能:将字符串2复制到字符数组1中,该字符数组1 中原有内容被覆盖。说明:(1)字符数组1必须足够大,能容纳复制过来的字符串(2)复制时连同0一起复制到字符数组1中。,(3)不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。例如:char str130=“China”,str230;str2=str1;(4)可以用strncpy函数将字符串2中的前n个字符复制到字符数组中。字符数组其他位置的元素不发生变换。例如:char str130=Chengdu;char str230=Beijing;strncpy(str1,str2,2);执行结果:str1为Beengdu。,【例4.16】使用strcpy函数实现字符串的拷贝。,【例4.17】不使用strcpy函数实现字符串的拷贝。,5.字符串比较函数 strcmp,格 式:strcmp(字符串1,字符串2)功 能:比较“字符串1”和“字符串2”。比较规则:自左至右逐个字符比较ASCII码,直到遇到不同字符或0,比较的结果由函数值带回。字符串1 字符串2,函数返回正整数,1,例如:strcmp(“a”,“b”);函数返回-1 即:“a”“compare”,例如:strcmp(“CHINA”,“china”);函数值是-1 表示:“CHINA”“CHINA”注意:字符串只能用strcmp 函数比较,不能用关系运算符“=”、“”等直接比较。例如:要判断str1是否比str2大,若使用str1str2就会出错,应该使用strcmp(str1,str2)0。,【例4.18】使用strcmp函数比较两个字符串。,【例4.19】不使用strcmp函数比较两个字符串。,6.求字符串长度函数 strlen,格 式:strlen(字符数组或字符串)功 能:测字符串实际长度,不包含0在内。例 如:char str20=“Test”;printf(“%d”,strlen(str);说明:输出结果不是 20,也不是5,而是4。,【例4.20】使用strlen函数测字符串长度的功能。,【例4.21】不使用strlen函数测字符串长度的功能,7.字符串大小写转换函数,格 式:strupr(字符数组)功 能:将字符数组中字符串的小写字母转换成大写字母。例 如:char str1“abcdef”;strupr(str1);puts(str1);结果:ABCDEF,8.字符串大小写转换函数,格 式:strlwr(字符数组)功 能:将字符数组中字符串的大写字母转换成小写字母。例 如:char str2=“ABCDEF”;strlwr(str2);puts(str2);结果:abcdef,字符数组应用举例,【例】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。,【例】输入有3个字符串,要求找出其中最大者。设一个二维字符数组str,大小为320,即有3行20列,每一行可以容纳20个字符。,str320,

    注意事项

    本文(C语言教学课件之数组.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开