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

    c语言课件 第六章.ppt

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

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

    c语言课件 第六章.ppt

    共 52 页 第 1 页,数 组,第六章,C语言程序设计,共 52 页 第 2 页,本章要点1.建立数组的概念;2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法;3.掌握一维字符数组的输入输出;4.掌握字符串处理函数的使用;5.掌握用数组进行编程的技术。,共 52 页 第 3 页,6.1 数组的概念,如何处理一个班学生的学习成绩?一行文字怎样存储?一个矩阵怎样存储?.,问题的提出:,一组具有相同数据类型的数据的 有序集合,这些数据的特点:1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据提供了一种构造数据类型:数组。,共 52 页 第 4 页,数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。,共 52 页 第 5 页,6.2 一维数组,6.2.1 一维数组的定义和引用1.定义一维数组的一般方式:类型说明符 数组名常量表达式;,说明:类型说明符:数组的类型。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。例如:float mark100;char str200;int a10;,共 52 页 第 6 页,其中:mark、str、a 是数组名。方括号内是数组的长度。下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。数组的成员称为数组元素。数组元素的类型称为该数组的基类型。数组mark的基类型是float,数组str的基类型是char。,例如:存储学生成绩用实型数组 mark100,存储一行文字用字符数组 str200,存储一个4*6的矩阵用二维整型数组 a46。,共 52 页 第 7 页,说明:(1)数组名后是用方括号而不是圆括号。,(2)数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。如:int a0,d(6);/*错误*/int b-8;/*错误*/int c2+3;/*正确*/(3)语言中不允许对数组的大小作动态定义。数组的说明语句必须在可执行语句之前。,#define N 5int aN;,int n;scanf(“%d”,共 52 页 第 8 页,2.一维数组的引用 C 语言规定,只能引用单个数组元素,不能一次引用整个数组。数组元素的引用形式:数组名 下标 如a3下标可以是整型常量、整型变量或整型表达式。如:a3=a0+ai+1;下标的值是数组元素的序号,且从0开始,直到n-1.int a10,说明数组a一共有10个元素,起始值是0。数组a的10个元素分别是:a0、a1、a9。数组的输入输出应采用循环的方法.int a10;for(i=0;i10;i+)scanf(”%d”,下标指出在数组中第几个元素,共 52 页 第 9 页,数组中的每个元素在功能上等价于一个一般的变量。例如:输入100个学生成绩,并求出总成绩。,引用数组元素的注意事项:,85,82,85,63,78,90,63,85,85,148,82,7950,148,226,316,7950,优点:数据重用 数据有序,共 52 页 第 10 页,引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的内容进行操作。,如引用 mark2:(1)计算 2000+2*4=2008(2)取出2008的内容,下标与地址的关系,为下标运算符,数组名、数组元素是两种不同性质的数据。,数组名是数组的首地址,是一个地址常量。,数组元素则是数值。,共 52 页 第 11 页,6.2.2 一维数组的初始化,在数组定义时为数组元素赋初值称为数组初始化.,方法:将初值依次写在花括号 内。,如:int a5=2,4,6,8,10;,存储形式:,存储单元,共 52 页 第 12 页,(1)给数组中部分元素赋初值,其他元素按零值处理。如:int a9=1,2;则 a0=1,a1=2,a2a8值全为0。,(2)对数组元素全部赋值可以不指定长度。int a=0,1,2,3,5;等价于:int a5=0,1,2,3,5;,(4)初值的个数不能超过数组总元素的个数。int a3=1,2,3,4;语法错!,说明:,(3)对数组中间元素赋值必须指明位置。int a5=,2,3,4;/*对第3-5个元素赋初值*/,共 52 页 第 13 页,数组元素在程序中赋值,利用输入函数main()char as26;int i;for(i=0;i26;i+)scanf(%c,.,利用赋值语句main()char as26,ch;for(ch=A;ch=Z;ch+)asch-A=ch;.,共 52 页 第 14 页,6.2.3 一维数组应用举例,例1 从键盘上输入10个实型数存入数组,然 后按输入顺序的逆序输出这10个数。,main()float a10;int i;for(i=0;i=0;i-)printf(“%10.2f”,ai);,数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。,共 52 页 第 15 页,例2 从键盘上输入10个数,求出其中最大值并输出。,#include stdio.h main()int a10,i,max;for(i=0;imax)max=ai;printf(max=%dn,max);,算法分析:采用打擂台的方法,先把10个数存在数组中,任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主变量中一定是最大的数。,共 52 页 第 16 页,例3从键盘上输入6个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。,main()int a6,i,j,k,t;for(i=0;i6;i+)scanf(%d,算法分析:采用循环设计。逆序操作可总结为:ai与aj进行交换,其中i=0,1,n/2-1,j=n-i-1,程序运行演示,共 52 页 第 17 页,例4 用冒泡法对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9,由以上可推知:6 个数要比较5趟 第一趟中要进行两两比较5次 第二趟中比较 4次 若 有n个数,则要进行n-1趟比较 第 i趟比较中要进行n-i次两两比较。,共 52 页 第 18 页,#include stdio.h#define N 6 main()int aN,i,j,t;for(i=0;iaj)t=aj-1;aj-1=aj;aj=t;printf(The sorted numbers:n);for(i=0;iN;i+)printf(%d,ai);,n个数比较n-1趟,第i趟比较n-i次,程序运行演示,共 52 页 第 19 页,冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。,例6 选择法排序。,选择排序法的基本思想:以冒泡排序法为基础,在两两比较后并不马上进行交换,而是在找到最小的数之后,记住最小数的位置(数组中的下标),待一轮比较完毕后,再将最小的数一次交换到位。,共 52 页 第 20 页,3 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9,选择法排序.,问题 将 3、6、1、9、4 从小到大排列。,共 52 页 第 21 页,选择排序算法 若有N个数,则需要进行N-1轮排序处理。第1轮排序从1N个数中找出最小的数,然后将它与第1个数交换。第1个数则是最小的数。第2轮排序从2N个数中找出最小的数,然后将它与第2个数交换。第2个数则是次小的数。经过 N-1 轮处理,完成全部N个数排序。编程时使用二重循环。外面的大循环控制进行N-1轮排序,内循环找出第 i 轮的最小值。,共 52 页 第 22 页,#include stdio.h#define N 5main()int aN,i,j,k,t;printf(Input numbers:n);for(i=0;iaj)k=j;if(k!=i)t=ai;ai=ak;ak=t;printf(The sorted numbers:n);for(i=0;iN;i+)printf(%d,ai);,程序运行演示,共 52 页 第 23 页,例如 int a33,6.3 二维数组6.3.1 二维数组的定义,第一个下标可能取值的个数,第二个下标可能取值的个数,共 52 页 第 24 页,说明:,二维数组除了维数比一维数组多一维外,其它性质与一维数组全部类似。,下面写法是否正确?,int a03;,用于定义数组长度的常量表达式的值必须是大于0的正整数。,int i=3,j=4;int aij;,定义数组元素的个数必须使用常量表达式,而不能使用变量。,共 52 页 第 25 页,6.3.2 二维数组的引用 二维数组的引用与引用一维数组元素一样,也用下标法引用二维数组元素。二维数组元素表示形式:数组名下标1下标2 下标1和下标2是整型常量、整型变量或整型表达式。其编号是从0开始的。,例如:若有 int a2*53*4,i=15;则使用 a3*30,a1i-5都是合法的。,说明:数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元 素a00的地址。数组名是常量,不可对它赋值。,下标不要越界,共 52 页 第 26 页,一、二维数组的初始化1.分行给二维数组赋初值。如:int a23=2,3,1,1,2,3;,2.将所有数据写在一个 内,按顺序赋值。即按数组元素在内存中排列的顺序赋初值。int a23=2,3,1,1,2,3;,6.3.3 二维数组的初始化和输入输出,共 52 页 第 27 页,3.对部分元素赋值如:int a33=1,0,1,0,0,1;相当矩阵:,4.如果对数组全部元素赋初值,第一个下标可省略,但第二个下标不可省略。如:a34=0,1,3,1,2,1,0,2,1,1,2,0;可写成 a 4=0,1,3,1,2,1,0,2,1,1,2,0;,int a33=1,0,0,1;相当矩阵:,共 52 页 第 28 页,1.二维数组的输入 int a23,i,j;for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”,2.二维数组的输出 int a23,i,j;for(i=0;i2;i+)for(j=0;j3;j+)printf(“%5d”,aij);,二、二维数组的输入、输出,共 52 页 第 29 页,6.3.4 二维数组程序举例例1 将一个矩阵a 23转置存到另一个矩阵b 32中。,分析:用数组a、b分别代表矩阵a、b;a 矩阵的行数必须要等于b 矩阵的列数。执行:bji=aij;即可完成转换。涉及到两个下标的,一般用两重循环。求矩阵转置问题也可以在矩阵本身进行,但应是方阵。,共 52 页 第 30 页,main()int a23=1,2,3,4,5,6;int b32,i,j;printf(“array a:n”);for(i=0;i2;i+)for(j=0;j3;j+)printf(“%5d”,aij);bji=aij;printf(“n”);,printf(“array b:n”);for(i=0;i3;i+)for(j=0;j2;j+)printf(“%5d”,bij);printf(“n”);,运行结果如下:array a:1 2 3 4 5 6 array b:1 4 2 5 3 6,共 52 页 第 31 页,例2求方阵A4*4的转置阵,并将该转置阵输出(限定在一个数组进行),main()int a44,i,j,t;printf(array a:n);for(i=0;i4;i+)for(j=0;j4;j+)scanf(%d,程序运行情况:array a:2 3 4 6 7 8 10 11 12 14 15 16 rotated a:5 9 13 6 10 147 11 154 8 12 16,转置部分还可改写如下:for(i=1;i4;i+)for(j=0;ji;j+)t=aij;aij=aji;aji=t;,共 52 页 第 32 页,程序:main()int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,7,4,6,-1,2,0,8;max=a00;for(i=0;imax)max=aij;row=i;colum=j;printf(“max=%d,row=%d,colum=%dn”,max,row,colum);,运行结果为:max=9,row=1,colum=0,例3 求34矩阵中最大元素的值及其所在行和列号。,共 52 页 第 33 页,将程序修改完整#include stdio.hmain()int a,i,j,sum;for(i=0;i;i+)for(j=0;j;j+)scanf(%d,例4编写求整型矩阵A3*3的副对角线元素之积的程序。,共 52 页 第 34 页,6.4 字符数组6.4.1 一维字符数组的定义 用来存放字符数据的数组是字符数组。C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。格式:char 数组名常量表达式,强调:字符串实际占有单元的数量等于字符串长度+1。定义时应注意考虑元素总个数应比实际长度多1。,例如:char c6,b10;C 数组具有6个元素,可以存放长度等于或小于5的字符串。,共 52 页 第 35 页,1.用单个字符对字符数组初始化例如:char ch6=C,H,I,N,A,0;把5个字符分别赋给ch0到c4.在内存中存放情况:,6.4.2 一维字符数组的初始化,说明:(1)初值的个数不能超过数组元素的个数,否则语法错(2)初值的个数小于数组长度,系统自动添入结束符0(3)初值的个数与数组元素相等,定义时可省略长度(4)因字符串常量自动加0,因此常人为地在字符数组后加一个0。,共 52 页 第 36 页,2.用字符串对字符数组初始化:char ch6=CHINA;char ch6=CHINA;/*省略*/char ch=CHINA;/*省略长度值*/char d12=“How are you”与char d=H,o.w,a,r,e,y,o,u,0;等价,共 52 页 第 37 页,例如:char a6=g,r,e,e,n;char b5=“123”;a2=0;a5=b1;printf(“%cn”,a1);printf(“%s”,a);,6.4.3 一维字符数组的引用,共 52 页 第 38 页,main()int i;char a3;for(i=0;i3;i+)scanf(%c,输入数据顺序:dos输出数据顺序:dos,6.4.4 字符数组的输入与输出,1.单字符输入输出(用格式符c或字符输入函数),char a3;for(i=0;i3;i+)ai=getchar();for(i=0;i3;i+)putchar(ai);printf(n);,共 52 页 第 39 页,char a7;scanf(%s,a);,2.字符串整体或部分输入输出(用格式符s),-输入输出项必须是以字符串的地址形式出现;也可以是字符串常量:printf(%sn,abcd);-只能输入不包括空格、t和n的字符串;-若要输入空格,用gets函数;-数组名前不加&符号。,如:char a10;scanf(%s,a);printf(%sn,a);输入:How are you输出:How,空格、跳格和回车是输入数据的结束标志.,共 52 页 第 40 页,用s输出字符串时,从输出项提供的地址开始输出,直到遇字符串结束符0 为止。若字符串长度与数组定义长度相等,则字符串结束标志无法存储,输出字符串后继续输出后续存储单元内容,直到遇到结束符0为止。,若:char b3=xyz,c=H,a10=abcd072;printf(b=%sn,b);printf(a=%sn,a);printf(%cn,a2);,输出:b=xyzHabcd a=abcd c,共 52 页 第 41 页,C函数库中提供一些用来处理字符串的函数:puts 输出字符串 gets 输入字符串(使用时注意前边加:#include)strcat 字符串连接strcpy 字符串复制strcmp 字符串比较strlen 字符串长度strlwr 将字符串中的大写字符转换为小写字符strupr 将字符串中的小写字符转换为大写字符(使用时注意前边加:#include),6.4.5 字符串处理函数,共 52 页 第 42 页,(1)puts(字符数组)将一个字符串输出到终端并换行。,(2)gets(字符数组)输入一个字符串到字符数组,该字符数组的起始地址为该函数值。可以输入带空格的字符串,用scanf的%s格式不行.,main()char str=book;puts(str);,main()char str12;gets(str);puts(str);,输入:How are you输出:How are you,共 52 页 第 43 页,(3)strcat(字符数组1,字符数组2)连接两个字符串,把字符数组2连到字符数组1上,该数值为字符数组1的地址。如:char str1=“C language”;char str2=“program”;printf(“%s”,strcat(str1,str2);输出:C language program,(4)strcpy(字符数组1,字符数组2)将字符数组2拷贝到字符数组1中去。字符数组1的长度应大于字符串2的长度。如:char str110,str2=“red flag”;strcpy(str1,str2);不能用赋值形式 str1=str2,共 52 页 第 44 页,(5)strcmp(字符串1,字符串2)两个串的比较;,注意:不能用if(str1=str2)形式进行比较,可以用if(strcmp(str1,str2)=0)形式。确定字符串大小的基本规则:按照串中对应位置字符的ASCII码值的大小确定大小。例如:”abc”abadef”因为字符 c a,共 52 页 第 45 页,(6)strlen(字符数组)测试字符数组的长度(不包括0”);如:char str10=“yellow”;printf(“%d”,strlen(str);结果:(7)strlwr(字符串)将大写字符串变小写字符串。(8)strupr(字符串)将小写字符串变大写字符串。,共 52 页 第 46 页,例1:输出字符串中的数字字符。#include“stdio.h”main()char a80;int i=0;gets(a);while(ai!=0)if(_)putchar(ai);,6.4.6 字符数组应用举例,共 52 页 第 47 页,main()char c=*,space=;int i,j;for(i=0;i0;j-)printf(%c,space);for(j=0;j=i;j+)printf(%c,c);printf(n);,例2:打印以下图形:*,共 52 页 第 48 页,#include”stdio.h”main()char c=*,s=;int i,j;for(i=0;i0;j-)printf(%c,s);for(j=0;j2*i+1;j+)printf(%c,c);printf(n);,打印以下图形:*,打印前空格,打印*号,共 52 页 第 49 页,#include“stdio.h”main()char str120,str220;int i=0;printf(“Input a string:”);scanf(“%s”,str1);while(str1i!=0)str2i=str1i;i+;str2i=0;printf(“%s”,str2);,程序运行演示,例3:从键盘输入一个字符串,复制到另一个字符数组后显示。,将第一个字符串字符逐个添加到数组str2数组中。去掉第一个串的结束符0,添加第二个数组的结束符0。,添加结束符0,输入字符串,共 52 页 第 50 页,#includestdio.hmain()int nl=0;char c;while(c=getchar()!=EOF)if(c=n)nl+;printf(nl=%dn,nl);,程序运行演示,判断输入是否结束符,例4:从键盘输入若干行文本,每行以回车结束,以EOF(ctrl+z)作为输入结束符,统计输入行数。分析:不必存储文本内容,只须定义一个字符变量暂存读入的字符。用 getchar()函数读入字符,判断读入的是否回车符,定义一个整型变量计数回车符,以实现统计行数的功能。,共 52 页 第 51 页,#include stdio.hmain()char str150=abcdef,str220=1234567;int i,j;i=j=0;while(str1i!=0)i+;while(str1i+=str2j+)!=0);puts(str1);puts(str2);,程序运行演示,例5:连接两个字符串。,共 52 页 第 52 页,本章注意问题1.C语言中数组的下标从0开始;2.C语言不进行下标的越界检查;3.数组名是地址;4.字符数组在定义时必须考虑到串结束符的位置;5.注意区别数组与简单变量初始化的方法,特别是字符数组的初始化方法;6.掌握运用字符串的操作函数。,

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开