欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    c语言课件第7章数组7.ppt

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

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

    c语言课件第7章数组7.ppt

    第七章 数 组(The Array),掌握一维数组、二维数组的定义、初始化和引用。 掌握字符串和字符数组的概念及其处理函数。 掌握用数组进行编程的技术。,先看一个例子:,例:给出10个儿童的体重,要求计算平均体重 并打印出低于平均体重的数值。,用变量来解决问题: main() int w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; int t; scanf( “%d%d%d%d%d%d%d%d%d%d“,t=(w1+w2+w3+w4+w5+w6+w7+w8+w9+w10)/10; if( w1 t ) printf( “%dn“, w1 ); if( w2 t ) printf( “%dn“, w2 ); if( w3 t ) printf( “%dn“, w3 ); if( w4 t ) printf( “% dn“, w4 ); if( w5 t ) printf( “%dn“, w5 ); if( w6 t ) printf( “%dn“, w6 ); if( w7 t ) printf( “%dn“, w7 ); if( w8 t ) printf( “%dn“, w8 ); if( w9 t ) printf( “%dn“, w9 ); if( w10 t ) printf( “%dn“, w10 ); ,用数组来解决问题: main() int w10; /* 定义 1 个整型数组存放体重 */ int t, i; for( i=0; i10; i+ ) scanf( “%d“, ,数组及其相关概念,数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。,数组下标,每个数组都有一个名字,称之为数组名。 为标识数组中的每个元素,需要对它们进行编号,称为数组元素的下标。,下标使数组元素在数组中的位置(或排列顺序)被唯一地确定下来;用数组名加上下标可以准确地访问数组中的某个元素。,如:w0代表数组w中的第一个元素 w9代表数组w中的第十个元素,注意:C语言规定下标从0开始。,说明:数组名代表数组的起始地址。 数组元素在内存中是连续存储的。,7.1 一维数组的定义和引用 (One Dimension Array),一、一维数组的定义,指明数组元素的数据类型,指明数组所含的元素个数,例如:int a10; /*定义的整型数组a含10个元素*/ float b20; /*定义的实型数组b含20个元素*/,说明:, 数组名的命名规则同变量名的命名规则一样;,数组名后用方括号 ,不能用();,常量表达式必须是大于0的整型常量表达式,不 能包含变量,即其大小不依赖运行过程中变量值; (4)定义数组时,数组的长度必须是确定的,C语言 不允许对数组的大小作动态定义,。,int a(10);,例如:,int n; int an,char name0; float weight10.3; float array-100;,二、一维数组的初始化,1 .定义时初始化,方法:将初值依次写在花括号 内。,如: int a5= 2 , 4 , 6 , 8 , 10 ;,存储形式:,存储单元,说明:,如果定义一维数组时给出了全部元素的初值,则数组的下标允许省略。此时编译系统自动根据初始化数据的个数来确定数组的长度。,如: int a = 2 , 4 , 6 , 8 , 10 ;,int a ; ,初始化的数据个数允许少于数组的长度,但不 能多于数组的长度。当初始化的数据个数(至 少要有一个)少于数组的长度时,未初始化部 分将被编译系统自动用 0 赋值。,如:int a5= 2 , 4 ;,相当于:a0=2, a1=4, a2=0, a3=0, a4=0,int a5=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; ,2 .使用其它方法初始化,利用输入语句初始化 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; . ,三、一维数组的引用,数组元素类似于单个变量,可以自由地存取。但是,它与一般变量相比,有以下特殊之处:, 数组元素是通过数组名加上该元素在数组中的位置(即数组元素的下标)来访问的。,如: a3,其中,下标可以是整型常量、整型变量或整型表达式。,如: int a10 ; float i=3 ; ai=10 ;, 数组元素的下标是从0开始的。 如果定义了an,则可使用a0、a1、an-1。但是,不能使用an。 C语言编译系统不检查数组下标越界的错误,在编程的时候要注意避免这种错误。,如:int a2; scanf(“%d,%d”, 数组元素的赋值是逐个元素进行的,不允许把一个数组作为一个整体赋给另一个数组。除了数组初始化外,也不允许用在花括号中列表的方式对数组整体赋值。,例1: int a5= 2 , 4 , 6 , 8 , 10 , b5 ; b5=a5 ;,例2 :int a5 ; a5= 2 , 4 , 6 , 8 , 10 ;, 数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元素a0的地址。,四、一维数组应用举例,例1:从键盘上输入10个实型数存入数组,然 后按输入顺序的逆序输出这10个数。,main() float a10; int i; for(i=0 ; i=0 ; i-) printf(“%10.2f”,ai); ,例7.2:用数组来处理求斐波纳契数列: 1,1,2,3,5,8的前20个数。,main() int f20=1,1; for(i=2 ; i20 ; i+) /*f2是数组第3个元素*/ fi=fi-2+fi-1; for(i=0 ; i20 ; i+) printf(“%10d”,fi); if(i%2=0) printf(“n”); /*每行打印2个数*/ ,数学表示:f(0)=f(1)=1, f(n)=f(n-2)+f(n-1),例7.3:用冒泡法对n=6个数排序(由小到大)。,冒泡法的思路是:将相邻两个数比较,将小的 调到前头。,9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9,第一轮排序,比较了5次 ,获得第一次结果。,轮数 剩数 比较次数 j= n-j+1 n-1 1n-1 1 6 5 2 5 4 3 4 3 4 3 2 5 2 1,main() int a7, i , j , t ; printf(“Input 6 numbers : n“); for(i=1 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=1 ; i=6 ; i+) printf(“%d“,ai); ,main() int a6, i , j , t ; printf(“Input 6 numbers : n“); for(i=0 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=0 ; i=5 ; i+) printf(“%d“,ai); ,7.2 二维数组的定义和引用,先看一个例子: 某校近三年招收各专业本科生人数如下:,计算机 电子 管理 数学 1999 90 40 80 30 2000 100 50 90 40 2001 95 45 100 50,要把这些数据组织起来,可以有两种选择:,按从左到右从上到下的顺序存入一个一维数 组中。(查询困难),每年用一个一维数组,把这些数据分别存入 三个数组中。 (增加一年数据困难),一、二维数组的定义,如: int a34;,说明:,二维数组除了维数比一维数组多一维外, 其它性质与一维数组是全部类似的。,看看下面写法是否正确?, int a03;,用于定义数组长度的常量表达式的值必须是大于0的正整数。, int i=3 , j=4 ; int aij ;,定义数组元素的个数必须使用常量表达式,而不能使用变量。,二、二维数组的初始化,这里主要介绍定义时初始化,其它方法初始化和一维数组类似。定义时初始化有两种方法:,分行初始化,例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,省略掉内层的花括号 即按数组元素在内存中排列的顺序赋初值。,例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,说明:, 对二维数组初始化时,可以只对部分数组元素初始化,未被初始化的数组元素将自动赋 0 。,对二维数组初始化时,如果对全部元素都赋初值,或分行赋初值(每行至少一个数据),则可以省略第一维数组长度。但是,第二维数组长度不允许省略。,int a10=1,0; float f2=1.1,2.2;,三、二维数组的引用,与引用一维数组元素一样,是用下标法引用二维数组元素的。,例如:若有 int a2*53*4, i=15; 则使用 a3*30, a1i-5都是合法的。,说明: (1)数组名a代表的是a在内存中的首地址,因此可以用数组名a来代表数组元 素a00的地址。,例如:若有 int a34, 设a的首地址为2000,则aij的地址为2000+i*3+j*4; a00的地址为2000,与a相同。 (2)二维乃至多维数组是若干个比其低一维的数组的集合。换句话说,二维乃至多维数组可以化成多个降低维数后的数组使用。 例如:若有 int a34,则等价于有了3个一维整型数组a0,a1,a2。,四、二维数组应用举例,例1:使用数组保存“九九乘法表”,然后输出。,main() int a991010, i, j ; for(i=1; i 10; i+) for(j=1; j=i; j+) a99ij=i*j; for(i=1; i10; i+) for(j=1;j=i; j+) printf(“%6d“,a99ij); printf(“n“); ,main() int a23=1,2,3,4,5,6; int b32, i,j; printf(“ array a:n“); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(“%5d“,aij); bji=aij;, printf(“n“); printf(“n array b:n“); for(i=0;i3;i+) for(j=0;j2;j+) printf(“%6d“,bij); printf(“n“); ,例7.5:求3*4数组中的最大值及其下标。,main() int max,row,colum,i,j; int a4=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;imax) max=aij; row=i; colum=j; printf(“max=%d,row=%d,colum=%d“,max,row,colum); ,7.3 字符数组和字符串 (Character Array and Strings),一、字符数组(Character Array ),当数组的元素类型为字符型时,被称为字符数组。,如:char c10; 则c为字符数组。,字符数组的定义、初始化和元素的引用与一般的数组相同。,如:main() char ch5=c, h , i , n , a; for(i=0; i5; i+) printf(“%c”,chi); ,说明:,定义字符数组的类型说明符一般为char, 如: char c10; 由于字符型与整型的互相通用性, 因此,上面定义也可改为:int c10;,初始化赋值的字符个数允许少于字符数组的长度,但不能多于字符数组的长度。当初始化赋值的字符数(至少要有一个)少于字符数组的长度时,未初始化部分将被编译系统自动用空字符0 赋值。,如:int c8=H,e,l,l,o; 则:c0=H, c1= e, c2= l, c3= l, c4= ,o c5=0, c6=0, c7=0,二、字符串与字符数组,字符串常量是用双引号括起来的一串字符,由系统自动加上一个字符串结束标志0。它占内存,但不记入字符串长度。,如:“china” 占内存6个字节,但字符串长度是5,在C语言中用字符数组来处理字符串,每个数组元素存放一个字符型数据。,字符型数组可用一般数组的初始化方式初始化外,还可以使用字符串常量初始化:,如:char message=“Hello”; 或 char message=“Hello”; ,(这时,字符数组长度是6,字符串长度是5。),注意:它与一般初始化方式: char message=H, e, l, l, o; 初始化的结果是不同的。,说明:字符数组本身并不要求它的最后一个元素一定是0,例如:char ch2=A, B;是合法的。当定义字符数组用字符串常量赋初值时,最后有一个元素其值为0。为了使处理方法一致,在字符数组中也常常人为地加上一个值为0的元素。,如:char message=H, e, l, l, o, 0;,例7.7 输出一个钻石图形 main() char diamond5 = , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,*; int i,j; for(i=0;i5;i+) for(j=0;j5;j+) printf(“%c”,diamondij); printf(“n”); ,* * * * * * * *,三、字符数组的输入输出,字符数组的输入输出可以有以下两种方法:,逐个字符输入输出 用格式符“%c”输入或输出一个字符。,将整个字符串一次输入或输出 用格式符“%s”输入输出字符串。,例如:char c=“Hello” ; printf(“%s”, c) ;,注意:,输出字符不包括结束符0。,用“%s”格式符输出字符串时,printf函数的 输出项是字符数组名,而不是数组元素名。,main() char a5; int i=0; while(i=4) scanf(“%c”, ,输入数据: abc cdg,main() char a5; int i=0 scanf(“%s”,a); printf(“%s”,a); ,a0,a1,a2,a3,a4,a,b,c,0,0,a1,a2,a3,a4,a,b,c,c,a0,输出字符数组时,遇到第一个0 ,输出就结束。,用“%s”格式符输入字符串时,scanf函数的输出项 是字符数组名时,不要再加地址符&,因为C语言 中数组名代表该数组的起始地址。,如: char str10; scanf(“%s”,用“%s”格式符输入字符串时,scanf函数的输入项是 字符数组名时,从键盘输入的字符串应短于已定义 的字符数组的长度。系统自动在后面加 个0结束符。,利用scanf函数输入多个字符串时,是以空格、回车、跳格分隔。因此不要试图利用scanf函数从键盘输入How are you? 赋给一个字符串。 例如,如果要输入How are you? 给一个字符串,则必须: Char str15,str25,str35; Scanf(“%s%s%s”,str1,str2,str3);,H o w 0,a r e 0,y o u ? 0,四、字符串函数,、字符串输入输出函数,1.字符串输入gets()函数,功能:从终端输入一个字符串(直到回车键) 到字符数组中。,例如:char str20; gets(str); 若从键盘输入:Hello World! 则将字符串“Hello World!”送到字符数组str中。,2.字符串输出puts()函数,功能:将一个字符串输出到终端。在输出时,将字符串结束标志转换成n, 即输出 完字符串后换行。,例如:char str=“ChinanBeijing”; puts(str); 输出:China Beijing,注意:使用puts和gets函数前,要用预编译命令: #include “stdio.h”。,、字符串处理函数,1. 求字符串长度strlen()函数,功能:计算字符串长度,函数值是字符串中0 之前的字符个数(不包括0字符)。,例如:char str80=“abn012/” ; printf(“%d”,strlen(str) ;,输出:10,char str80=“abn0y012/” ; printf(“%d”,strlen(str) ;,输出:3,注意:使用这些函数前,要用#include “string.h”,2. 字符串比较strcmp()函数,其中,字符串可以是字符串常量或字符数组。,功能:比较两个字符串。,比较的原则:两个字符串从左至右逐个对应字 符按其 ASCII码值大小相比较, 直到出现不同的字符或遇到0为止。,例如:char str120, str210 ; (将str120和str210赋初值) if(strcmp(str1,str2)0) puts(str1);,注意:不能写成 if(str1str2),strcmp(“China”,”Korea”);,3.字符串连接strcat()函数,功能:连接两个字符串,把字符串2连接到字符 串1的后面,连接后的字符串放在字符 数组1中。,说明:字符数组1必须足够大以便能够容纳字符串2。 连接时只在新串最后保留一个0。,4. 字符串复制strcpy()函数,功能:将字符串2复制到字符数组1中 (其后自动加一个0)。,例如:char str120, str210 ; strcpy(str1,“hello world”); strcpy(str2,str1);,其中,字符串2可以是字符串常量或字符数组。,Strcpy使用举例:,#include #include main() char filewing20=“wing.txt”,filehori20=“fuselage.txt”,filefuse20=“tail.txt“; coutnumpart; switch(numpart) case 1: strcpy(filedes,filewing);cout“正在计算机翼, 请稍等”;break; case 2: strcpy(filedes,filehori);cout“正在计算机身, 请稍等“;break; case 3: strcpy(filedes,filefus1);cout“正在计算尾翼, 请稍等“;break; case 4: default; ifstream in(filedes,ios:in); if(!in)cout“cannot open Inputfile “'n'exit(1); ,说明:,字符数组1必须足够大以便能够容纳被 复制的字符串。,不能用赋值语句将一个字符串常量或字符 数组直接赋值给一个字符数组。,例如:char str120, str220; str1=“hello”; str2=str1 ;,五、字符数组应用举例,例1:(例题7.8)统计字符串中的单词数。,#include main() char string81,c; int i,num=0,word=0; gets(string); for(i=0;stringi!='0'i+) if(stringi=' ') word=0; else if(word= =0)word=1;num+; printf(“nThere are %d words.”, num); ,I am a boy,s0,word=0 (后面是单词),s= ,word=0,num+ word=1 (后面不是单词),Y,Y,N,Y,N,N,I am a boy,学习数组这一章要注意的几个问题: 1.在C语言中数组的下标是从0开始; 2.C语言不进行下标的越界检查,不论是在编译阶段还是 在运行阶段,这个问题交给程序员。这样就给初学者 带来一定的风险。 3.数组名是地址,这在字符串处理中已经看到,这个我 们要先强记,以后在讲指针时再详细讲。 4.字符数组在定义时必须考虑到串结束符的位置,因为 它要占一个字符的位置. 5.要注意数组初始化的方法与简单变量的区别,特别是 字符数组的初始化方法。 6.字符串的操作有许多专用函数,请注意掌握并运用。,本章作业:,1.复习本章内容,将书中例题看懂,会独立编写。,2.编写并上机调试下列习题:,1)用冒泡法对任意输入的n个数( n10 )排序(由大到小)。 2)矩阵的转置。,a=,1 2 3 4 6 7 8 9 10 11 12,b=,1 5 9 2 6 10 3 7 11 4 8 12,转换成,3)对一段英文的文章进行统计,分别计算输出其单词数、空格数,不考虑标点符号(标点符号与单词之间有空格)。 例如:I am a teacher._you are students. 4)在字符数组中存一段英文,按书上例6.10译成密码,取字符的ASCII码的移动值为4,除英文字符外,其它符号不译码。按提示一给出一段或数段英文句子,打开一个数据文件,将译码后的英文输出到该数据文件。 5)将提示二给出的几句英文句子翻译成原文。(选做),FILE *fp;/定义文件指针 char parag100=“That may change in the near future.”, “With it,two people are talking can see each other.”;/字符数组赋初值 /新建名为parag.txt的数据文件 if(fp=fopen(“parag.txt“,“w“)=NULL) printf(“cannot open this filen“); paragki !=0/译码时循环继续的条件 /循环将字符数组中的字符输出到上述数据文件 for(k=0;k5;k+) fprintf(fp,“%sn“,pk); fclose(fp);/关闭前面打开的数据文件,提示一,char parag100= “Ytifd ujtuqj hfs zxj ymj umtsj yt yfqp bnym tymjwx fqrtxy fsdbmjwj ts ymj jfwym.“, “Gzy bmjs dtz zxj ymj umtsj,dtz its'y xjj ymj ujwxts dtz fwj yfqpnsl bnym.“, “Ymfy rfd hmfslj ns ymj sjfw kzyzwj.“, “Ytifd xtrj ujtuqj fwj zxnsl f pnsi tk yjqjumtsj hfqqji ymj unhyzwj umtsj tw anxnts umtsj.“, “Bnym ny,ybt ujtuqj fwj yfqpnsl hfs xjj jfhm tymjw.“ ;,提示二,

    注意事项

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

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




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开