收藏 分享(赏)

chapter06_1010.ppt

上传人:dreamzhangning 文档编号:3258762 上传时间:2018-10-09 格式:PPT 页数:34 大小:627.50KB
下载 相关 举报
chapter06_1010.ppt_第1页
第1页 / 共34页
chapter06_1010.ppt_第2页
第2页 / 共34页
chapter06_1010.ppt_第3页
第3页 / 共34页
chapter06_1010.ppt_第4页
第4页 / 共34页
chapter06_1010.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第六章 数组,本章要点: 1.建立数组的概念 2.掌握一维数组和多维数组的定义 3.掌握数组的初始化和引用 4.掌握字符串与字符数组 5.掌握用数组进行编程的技术,C语言规定数组的下标从0开始计,数组名表示数组的首地址 (起始地址) 。,6.1 一维数组的定义和引用一、定义格式: 类型说明符 数组名 常量表达式说明:1. 类型说明符: 指构成数组的元素的数据类型。2. 数组名: 规则同用户标识符一样。3. 常量表达式: 表示数组长度,可以是常量和符号常量,但不能是变量。,请你判断正误?,数组定义正误判断int a 10 ;char ch 20 ;int a a ;char ch e a ; 以

2、上定义形式合法!int n;scanf ( “%d”, 非法定义形式!,示例,数组的存储 例如: int a10 ;则: a 数组有10个元素,a0a1, a9,存储示意,示例,二、 一维数组元素的引用格式: 数组名下标1. 只能逐个引用数组元素,而不能一次引用整个数组。如: int a10 ;数组元素为 : a0 , a1, a9 2.下标可以是 整型常量 如: a3和整常量表达式 如: a2*3 即 a6。 3. 数组元素可以参加各种运算。 如: a0 = a5 + a7 a2*3,例 6.1 (p123)main ( ) int i ,a10 ;for ( i = 0 ; i = 0 ;

3、 i )printf ( “%d ” , ai ) ;运行结果:9 8 7 6 5 4 3 2 1 0,数组元素做输出表项,a0 = 0,a1 = 1,a9 = 9,a 数组,a,三、一维数组的初始化1. 定义数组的同时对数组元素赋初值例如: int a6 = 0 , 1 , 2 , 3 , 4 , 5 ;a0 0, a1 1, a2 2 , a5 5 2. 定义时只使部分元素初始化例如:int a6 = 0 , 1 , 2 ; 3. 不能给数组整体赋初值int a6=1 , 1 ,1 , 1 ,1 , 1; 可以 int a6 = 1*6 ; 不行4. 在对全部元素赋初值时,可以不指明长度。

4、,说明,定义数组时可不指明长度情况 在对全部元素赋初值时,可以不指明长度。int a6 = 0 , 1 , 2 , 3 , 4 , 5 ; 等价于:int a = 0 , 1 , 2 , 3 , 4 , 5 ;若长度与赋值的元素个数不同时,则不 能省略。如: int a4 = 0 , 1 , 2 ; 不等价于:int a = 0 , 1 , 2 ;,说明,四、 一维数组程序举例 例 6.2 用数组来处理 Fibonacci 数列。 main ( ) int i ; int f 20 = 1 , 1 ;for ( i = 2 ; i 20 ; i + + ) f i = f i2 + f i1

5、;for ( i = 0 ; i 20 ; i + + ) if ( i % 5 = = 0 ) printf ( “ n ” ) ;printf ( “%ld” , f i ) ;,例 6.3 用起(冒)泡法对10个数排序(由小到大)9 8 88 9 55 5 44 4 2 2 2 00 0 9由上可见:如有n个数,则要进行 ( n 1) 趟比较。在第 j 趟比较中要进行 ( n j ) 次比较。,6个数第1趟经过5次比较,程序的结构:main ( ),1、定义相关的数组和相关变量,3、按冒泡算法对其升序排序 由于在排序中涉及到总共所需的趟次和每一趟中具体比较的次数,因此可用循环嵌套控制语句

6、来完成。,4、输出经排序后的十个数,2、输入待排序的十个数,main ( ) int a10 , i , j , t ;printf ( “ input 10 numbers : n” ) ;for ( i = 0 ; i ai+1 ) t = ai; ai = ai+1 ; ai+1 = t ; printf ( “ The sorted numbers : n ” ) ;for ( i = 0 ; i 10 ; i + + )printf ( “ %d ” , ai ) ; 第一趟比较完后a9中存放10个数中最大的数。,控制比较趟数,每趟中比较的次数,6.2 二维数组的定义和引用一、定义格

7、式: 类型说明符数组名常量表达式常量表达式如: int a34 ; float b56 ;说明:1. 多维数组的下标仍从0计起。例如:a23其元素个数为 6个,即:a00 , a01 , a02 a10 , a11 , a122. C 语言中,二维(或高维)数组中的元素是按行存放。如: a34 数组a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23,3. 对二维或高维数组可看成其元素也是数组的数组。如:a34可看成由三个元素 a0,a1,a2组成。而每个元素又是一个包含4个元素的一维数组。即a0 a00 a01 a02 a03 a1 a10 a11 a1

8、2 a13 a2 a20 a21 a02 a03二、二维数组元素的引用格式: 数组名下标下标注意: 下标值同数组大小的匹配。 如:int a34 ; .a34 = 3 ; (是错误的),a34,1. 分行赋初值 (即按行赋值) 如:int a34=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;3. 部分赋值(1) int a34 = 1 , 5 , 9 ; 1 0 0 05 0 0 09 0 0 0(2) int a34 = 1 , 0, 6 ,0, 0, 11;1 0

9、0 00 6 0 00 0 11 0,(3) int a34 = 1 , 5, 6 ; 1 0 0 05 6 0 00 0 0 0(4) int a34 = 1 , , 9 ; 1 0 0 00 0 0 09 0 0 04. int a34 = 1, 2, 3, 12 ;int a 4 = 1, 2, 3, 12 ;但不能写成: int a3 = 1, 2, 3, 12 ; 5. int a34 = 0, 0, 3, , 0, 10;int a 4 = 0, 0, 3, , 0, 10;,运行结果示意,四、 二维数组程序举列 ( p86)例 6.4 将一个二维数组行和列元素互换,存到一个二 维

10、数组中。 如:1 2 3 1 4 a = b = 2 5 4 5 6 3 6,算法:bji = aij,源程序,main ( ) int a23 = 1 , 2 , 3 , 4 , 5 , 6 ;int b32 , i , j ;for ( i = 0 ; i = 1 ; i + + ) for ( j = 0 ; j = 2 ; j + + ) printf(“%5d”,aij ) ;bji = aij ; printf ( “ n ”) ;printf ( “narray b : n ” ) ;for ( i = 0 ; i = 2 ; i + + ) for ( j = 0 ; j =

11、1 ; j + + )printf ( “ %5d ”, bij) ;printf ( “ n ”) ; ,行列互换结果 array a : 1 2 3 4 5 6 array b : 1 4 2 5 3 6,例 6.5 求一个 3 4 的的矩阵中最大的那个元素的值,以及其所在的行号和列号。 main ( ) int i, j , row = 0 , colum = 0 , max = 0 ;int a34=1,2,3,4,9,8,7,6,10,10,5,2;max = a00 ;for ( i = 0 ; i max ) max = aij; row= i ; colum = j ; pri

12、ntf (“max=%d,row=%d ,colum =%d n ” ,max , row , colum ) ;结果: max = 10 , row = 2 , colum = 1,6.3 字符数组一、 定义格式: 一维: char 数组名常量表达式二维: char 数组名常量表达式常量表达式 如: char c10 ; char a56 ; 二、初始化例如: char c8 = , H, e, l, l, o, w, ! ;c0 , c1 H, . c7 !说明: 1. 所赋的字符个数不能超过数组长度。2. 如所赋的字符个数小于数组长度,则其余元素自动赋为空字符 (0)。 如:char c

13、9 = , H, e, l, l, o, w, ! ;c0, c1H, . c7 !, c80,3. 如字符个数与数组长度相等,则可省略数组长度。由系统自动确定数组长度。 如:char c = ,H,e, l, l, o, w, !;4. 二维字符数组的初始化与上述一维字符数组的初始化相同。 如: char diamond55 = , , *, , *, , *, *, , , ,*, , *, , *, , , * ;,* * * * *,三、 字符数组的引用格式: 数组名下标 例 6.6 输出一个字符串。main ( ) char c10 = I,a,m,a,b, o,y ;int i ;

14、for ( i = 0 ; i 10 ; i + + )printf ( “ %c ” , ci ) ; printf ( “ n ” ) ; ,例 6.7 输出一个钻石 图形。main ( ) char diamond55 = , , *, , *, , *, *, , , ,*, *, , *, , , * ;int i , j ;for ( i = 0 ; i 5 ; i + + ) for ( j = 0 ; j 5 ; j + + )printf( “%c ”, diamondij) ;printf ( “ n ” ) ;,* * * * *,四、 字符串和字符串的结束标志C语言中规

15、定了一个“字符串结束标志”,用 0表示。例如:printf ( “ Hellow ! n” ) ; 遇到 0 就停止输出。可以用字符串常量来初始化字符数组。如:char c = “ I am happy ” ;char c = “ Iamhappy ” ;上述初始化等效于:char c =I,a,m,h,a,p,p,y, 0;(11个字符) 又如 : char c10 = “China” ;,C h i n a 0 0 0 0 0,说明:1. 逐个字符赋值时,并不要求最后字符为 0,但采用字符串常量赋值时,则会有 0。如: char c5 = C, h, i, n, a ; 如: char c

16、6 = “China” ;2. 字符型数据和整型数据在一定范围内是互相通用的。可用整型数组来处理字符数据。例如 : int c = C, h, i, n, a; 但不能用字符串常量来初始化整型数组。例如 : int c = “China” ; int c = “China”;,五、 字符数组的输入和输出1. 用 “%c” 格式,逐个输入或输出。如:例 6.6 中 printf(“ %c ”, ci ) ;2. 用 “%s”格式,将字符串一次性输入或输出。如: char c = “China” ; printf( “%s”, c ) ;注意:用“%s”格式时,输入和输出项都是字符数组名。说明:

17、对输出1. 输出字符不包括0字符。若字符数组中包含一个以上的 0,则遇第一个 0 就结束。2. 对用整型数组来处理字符数据时,不能用 “%s”格式输出字符串。,说明: 对输入1.可用scanf 函数和gets函数输入一个字符串。 char c6 ; scanf (“%s”, c ) ; 或 gets(c); 输入: China (此时系统自动在后面加一个 0 结束符 )2. 输入多个字符串,则以空格分开。如: char str15 , str25 , str35 ;scanf( “ %s %s %s ”, str1 , str2 , str3 ) ;输入: Howareyou? 如改成 cha

18、r str13 ;,H o w 0,a r e 0,Y o u ? 0,str1,str2,str3,scanf (“ %s ” , str ) ;仍输入 Howareyou? 此时数组 str 中只有 “How” + 0C 语言中,scanf 函数输入字符串时,以空格或回车符作为字符串间隔符。用 gets 函数则可以输入全部字符(包括空格),直到遇到回车符为止。如:char str13 ; gets ( str ) ;如输入 Howareyou?则数组 str 中接收全部字符(包括空格字符),H o w a r e y o u ? 0,H o w 0,六、 字符串处理函数1. puts 函数

19、 格式: puts(字符数组名)作用: 将一个以0作为结束符的字符串输出到终端。例如: char str = “China”;puts( str ) ;注意: 输出的字符串中可以包含转义字符。,程序举例,参考例程,puts 函数举例main( ) char str1 = “China n Beijing” ;char str2 = “China 0 Beijing” ;puts( str1) ;puts( str2) ; 输出: China Beijing China ?,自编程序实现 puts 函数功能main( ) char str = “China n Beijing” ;int i;

20、for (i =0; stri != 0; i+)printf (“%c”, stri);printf(“n”); ,六、 字符串处理函数2. gets 函数格式: gets(字符数组名) 作用: 从终端输入一个字符串到字符数组中。例如: char c6 ; gets ( c ) ;运行: 若输入 China 则 “China” 放入数组 c中,并自动加上一个0结束符。注意 :标准C中使用puts 和gets 函数应加 #include “stdio.h”,六、 字符串处理函数3. strlen 函数格式: strlen(字符数组名) 或 strlen(字符串常量) 作用: 测试一个字符串的长

21、度。 函数返回字符串的实际长度。 (不包含0结束符在内)如: char str10 = “China” ;printf (“ %d ”, strlen (str) ) ; 输出 5i = strlen ( “China” ) ; 则 i 为 5思考:i = strlen ( “Ch0ina” ) ; 则 i 为 ?,4. strcmp 函数格式: strcmp ( 字符串1 , 字符串2 )作用: 比较两个字符串的大小。如: strcmp ( str1 , str2 ) ;strcmp ( “China” , “Chengdu” ) ;strcmp ( str1 , “Beijing” ) ;

22、strcmp ( “China” , str1 ) ;注意: 对两个字符串按ASCII 码值的大小从左至右逐个字符相比较,直到出现不同的字符或遇到0为止。 (1) 字符串1 = 字符串2 , 函数值为 0。(2) 字符串1 字符串2 , 函数值为一正整数。(3) 字符串1 字符串2 , 函数值为一负整数。 作业:编程实现 strcmp 函数的功能,5. strcpy 函数格式: strcpy ( 字符数组名 ,字符串2 )作用: 将字符串2复制到字符数组1中去。如: char str110 , str2 = “China” ;strcpy ( str1 , str2 ) ;也可: char s

23、tr110 ; strcpy ( str1 , “China” ) ;6. 其它函数strcat ; strupr ; strlwr 等,请自学。注意: 标准 C 使用以上各函数应加:#include “string.h” 。,七、 字符数组应用举列补例: 下列程序是否有错。如有,请改正。main ( ) char c1 = “CHINA” ; int c2 = “Hellow” ;printf ( “ %sn ” , c1i ) ;printf ( “ %s ”, c2 ) ; main ( ) int i ; char c1 = “CHINA” ;int c2 = H , e , l ,

24、l , o , w ;printf ( “ %sn ” , c1) ;for ( i = 0 ; i 6 ; i + + )printf ( “ %c ”, c2i ) ; ,例 6.8 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。(由空格数目决定单词数),判断当前字符 为空格吗 ?,未出现新单词 ,使 word = 0 ,num不累加,前一字符为空格(由 word=0可判断),新单词出现,num 加 1,word = 1,前一字符为非空格(由 word=1可判断), 未出现新单词,num 不加 1。,Y,N,#include “stdio.h”main ( ) char str

25、ing80;int i , num = 0 , word = 0 ;char c ;gets ( string ) ;for ( i = 0 ; (c = stringi ) != 0 ; i + + )if ( c = = ) word = 0 ;else if ( word = = 0 ) word = 1 ; num + + ; printf(“%d words in the line n”, num ) ;输入: I am a boy. 输出: There are 4 words in the line,作标志。 word = 0 表示未 出现单词。如出现单词, 则 word 置 1。,分析: 第一次 : i=0 , c=I, 执行 word=1; num+ ;第二次 : i=1, c= 执行 word = 0 ; 此时 num=1第三次 :i=2 , c=a, 执行 word = 1 ; num+; 即num=2第四次 :i=3 , c=m, 不执行 word=1; num+; 语句.第五次 :i=4 , c = 执行 word = 0 ; 第六次 :i=5, c=a, 执行 word=1; num+; 即 num = 3,作业: p152 7.1 , 7.2 , 7.3 , 7.6,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报