计本-C语言(第六章).ppt_第1页
计本-C语言(第六章).ppt_第2页
计本-C语言(第六章).ppt_第3页
计本-C语言(第六章).ppt_第4页
计本-C语言(第六章).ppt_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章 数组 第6章 数组 第6章 数组 数 据 类 型 构 造 类 型 基 本 类 型 指 针 类 型 空 类 型 整型 int 实型 float 字符型 char 数组类型 a 结构体类型 struct 共用体类型 union 枚举类型 enum 文件类型 file 单精度型 float 双精度型 double C语言的数据类型(结构) 无值类型 void 第6章 数组 说明: 构造类型数据是由基本类型数据按一定规则组成的,因此有 的书称它们为“导出类型”。 数组是有序数据的集合。数组中的每一个元素都属于同一个 数据类型。用一个统一的数组名和下标来唯一地确定数组中的 元素。 第6章 数组 6.1 一维数组的定义和引用(重点/掌握) 6.2 二维数组的定义和引用(重点/掌握) 6.3 字符数组(重点/掌握) 第6章 数组 第6章 数组 6.1.1 一维数组的定义 1.定义方式: 类型说明符 数组名常量表达式; 如: int a10; 意义: 数组名为a,此数组有10个元素。 6.1 一维数组的定义和引用(重点/掌握) 第6章 数组 2.说明: 数组名定名规则和变量名相同,遵循标识符定名规则。 (2) 数组名后是用方括弧括起来的常量表达式,不能用圆括弧, 下面用法不对:int a(10); 第6章 数组 (3) 常量表达式表示元素的个数,即数组长度。 例如,在a10中,10表示a数组有10个元素,下标从0开 始,这10个元素是,a0,a1,a2,a3,a4 ,a5,a6,a7,a8,a9。注意不能使 用数组元素a10。 (4) 常量表达式中可以包括常量和符号常量,不能包含变量。 也就是说,c不允许对数组的大小作动态定义,即数组的大 小不依赖于程序运行过程中变量的值。 例如,下面这样定义数组是不行的: int n; scanf(“%d“, int an; 第6章 数组 6.1.2 一维数组元素的引用 数组必须先定义,然后使用。c语言规定只能逐个引用数组元 素而不能一次引用整个数组。 数组元素的表示形式为数组名下标 下标可以是整型常量或整型表达式。例如: a0=a5+a7-a2*3 第6章 数组 例6.1 数组元素的引用。 main() int i,a10; for (i=0; i=0; i-) printf(“%d “,ai); 运行结果: 9 8 7 6 5 4 3 2 1 0 a0到a9的值为09 逆序输出 第6章 数组 6.1.3 一维数组的初始化(方法) 在定义数组时对数组元素赋以初值。 如: int a10=0,1,2,3,4,5,6,7,8,9; 将数组元素的初值依次放在一对花括弧内。经过上面的定 义和初始化之后,a0=0,a1=1,a2=2,a3=3 ,a4=4,a5=5,a6=6,a7=7,a8=8,a 9=9。 (2) 可以只给一部分元素赋值。 如: int a10=0,1,2,3,4; 定义a数组有10个元素,但花括弧内只提供5个初值,这表 示只给前面5个元素赋初值,后5个元素值为0。 第6章 数组 (3) 如果想使一个数组中全部元素值为0,可以写成 int a10=0,0,0,0,0,0,0,0,0,0; 不能写成 int a10=0*10; 这是与FORTRAN语言不同的,不能给数组整体赋初值。 (4) 在对全部数组元素赋初值时,可以不指定数组长度。例如: int a5=1,2,3,4,5; 可以写成 int a=1,2,3,4,5 在第二种写法中,花括弧中有5个数,系统就会据此自动定义a数 组的长度为5。 第6章 数组 但若被定义的数组长度与提供初值的个数不相同,则数组长度不 能省略。 例如,想定义数组长度为10,就不能省略数组长度的定义, 而必须写成 int a10=1,2,3,4,5; 只初始化前5个元素,后5个元素为0。 第6章 数组 6.1.4 一维数组程序举例 例6.2 用数组来处理求fibonacci数列问题。 程序如下: main() int i; int f20=1,1; for(i=2;iai+1) 第6章 数组 t=ai;ai=ai+1;ai+1=t; printf(“the sorted numbers :n“); for(i=1;imax) max=aij; row=i; colum=j; 第6章 数组 printf(“max=%d,row=%d,colum=%dn“,max,row, colum); 输出结果: max=10,row=2,colum=1 由于数值型数组的概念和应用与其他高级语言差不多,读者比较 熟悉,因此不再赘述。 第6章 数组 6.3 字符数组 用来存放字符数据的数组是字符数组。字符数组中的一个元 素存放一个字符。 6.3.1 字符数组的定义 定义方法与前面介绍的类似。例如: char c10; c0=I;c1= ;c2=a;c3=m;c4= ;c 5=h;c6=a;c7=p;c8=p;c9 =y; 定义c为字符数组,包含10个元素。在赋值以后数组的状态如图 7.7所示。 6.3 字符数组(重点/掌握) 第6章 数组 图7.7 也可以用整型数值来存放字符型数据,因此上面第一行也可以改 用: int c10;/*合法,但浪费存储空间*/ 第6章 数组 6.3.2 字符数组的初始化 对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各 元素。如:char c10=I, ,a,m, ,h, a,P,P,y;把10个字符分别赋给c0到c910 个元素。 如果花括弧中提供的初值个数(即字符个数)大于数组长度,则按 语法错误处理。如果初值个数小于数组长度,则只将这些字符 赋给数组中前面那些元素,其余的元素自动定为空字符(即 0)。如: char c10=c, ,P,r,o,g,r,a, m; 数组状态如图7.8所示。 第6章 数组 图7.8 如果提供的初值个数与预定的数组长度相同,在定义时可以 省略数组长度,系统会自动根据初值个数确定数组长度 。如: char c=I, ,a,m, ,h,a, p,p,y; 第6章 数组 数组c的长度自动定为10。用这种方 式可以不必人工去数字符的个数, 尤其在赋初值的字符个数较多时, 比较方便。 也可以定义和初始化一个二维字符数 组,如: char diamond55= , ,*, ,*, , *, *, , , ,*, ,*, ,*, , , *; 用它代表一个钻石形的平面图形,见 图7.9。完整的程序见例7.7。 图7.9 第6章 数组 例6.6 输出一个字符串。 main() char c10=I, ,a,m, ,a, ,b ,o,y; int i; for(i=0;i“a”,“computer”“compare”, “these”“that”,“36+54”“! int i,num=0,word=0; char c; getS(String); 第6章 数组 for (i=0;(c=Stringi)!=0;i+) if(c=) word=0; else if(word=0) word=1; num+; printf(“There are %d wordS in the line.n“, num); 运行情况如下: 第6章 数组 I am a boy. There are 4 words in the line. 程序中变量i作为循环变量 ,num用来统计单词个数 ,word作为判别是否单 词的标志,若word=0表 示未出现单词,如出现 单词word就置成1。算法 见图7.17所示。 图7.17 第6章 数组 解题思路: 单词的数目可以由空格出现的次数决定(连续的若干个空格 作为出现一次空格;一行开头的空格不统计在内)。如果测出某 一个字符为非空格,而它的前面的字符是空格,则表示“新的 单词开始了” ,此时使num(单词数)累加1。如果当前字符为非 空格而其前面的字符也是非空格,则意味着仍然是原来那个单 词的继续,num不应再累加1。前面一个字符是否空格可以从 word的值看出来,若word=0,则表示前一个字符是空格;如果 word=1,意味着前一个字符为非空格。可以用图7.18表示。 第6章 数组 图7.18 程序中for语句中的“循环条件”为 (c=Stringi)!=0 它的作用是先将字符数组的某一元素(一个字符)赋给字符变量c。 此时赋值表达式的值就是该字符,然后再判定它是否结束符。这 个“循环条件”包含了一个赋值操作和一个关系运算。可以看 到用for循环可以使程序简练。 第6章 数组 例6.9 有3个字符串,要求找出其中最大者。 今设一个二维的字符数组Str,大小为320,即有3行20列,每 一行可以容纳20个字符。 图7.19表示此二维数组的情况。 图7.19 第6章 数组 如前所述,可以把str0、str1、str2看作3个一维字 符数组,它们各有20个元素。可以把它们如同一维数组那样进行 处理。可以用gets函数分别读入3个字符串。经过二次比较,就 可得到值最大者,把它放在一维字符数组String中。 程序如下: main ( ) char string20; char str3 20; int i; for (i=0;i0)strcpy (string,str0); else strcpy(string,str1); if (strcmp(Str2,string)0)strcpy(string,str2); printf(“nthe largest string isn%sn“,string); 运行结果如下: 第6章 数组 china holland america the largest string is holland 当然,这个题目也可以不采用二维数组,而设3个一维字符数组来处 理。读者可自己完成。 第6章 数组 习题 6.1 用筛法求100之内的素数。 6.2 用选择法对10个整数排序。 6.3 求一个33矩阵对角线元素之和。 6.4 已有一个已排好序的数组,今输入一个数,要求按原来排序的 规律将它插入数组中。 第6章 数组 6.5 将一个数组中的值按逆序重新存放。例如,原来顺序为 8,6,5,4,1。要求改为1,4,5,6,8。 6.6 打印出以下的杨辉三角形(要求打印出10行)。 1 11 121 1331 14641 15101051 第6章 数组 6.7 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大 ,在该列上最小。也可能没有鞍点。 6.8 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出 其中英文大写字母、小写字母、数字、空格以及其他字符的个数。 6.9 有一行电文,已按下面规律译成密码: aZaz bYby cXcx 即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。 非字母字符不变。要求编程序将密码译回原文,并打印出密码和原 文。 第6章 数组 6.10 编一程序,将两个字符串连接起来,不要用Strcat函数。 6.11 编一个程序,将两个字符串S1和S2比较,如果S1S2,输出一个 正数;S1=S2,输出0;S1S2,输出一个负数。不要用Strcmp函数。两 个字符串用ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论