资源预览内容
第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
第9页 / 共54页
第10页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1第六章 数组n主要内容p6.1 数组概述p6.2 一维数组p6.3 二维数组p6.4 字符数组p6.5 综合应用举例n重点p熟练掌握一维数组和字符数组的定义和引用,掌 握用数组方法实现排序算法、查找方法;p深刻理解一维的字符数组与字符串之间的关系, 比较熟练地掌握使用一维字符数组来处理字符串 。 26.1 数组概述在许多数学问题中,经常遇到数列和矩阵 的概念。n数列和矩阵是用来描述一批数据之间的关 系的。p表示x数列时通常写成: x1,x2,x3,xnp表示一个23矩阵y可以写成:位置号行号列号3n分析数列和矩阵不难发现它们有三个特点 :p有一批数据;p这些数据之间有一定的内在联系;p这些数据的类型相同。nC语言中用数组来表达数列和矩阵。数组名数组名数列名数列名 ( (如如x x数列数列) )矩阵名矩阵名 ( (如如y y矩阵矩阵) )下标用一下标用一 个数表示个数表示下标用两下标用两 个数表示个数表示一维数组一维数组二维数组二维数组x x2 2y y1313x2x2y13y134n不用数组时,要处理下面的两个问题会感到 相当困难:p将输入的50个数逆序输出。p把输入的30个成绩中高于平均分的成绩输出。n数组的定义:p所谓数组是指一组有序数据的集合,用一个统一 数组名标识这一组数据,用下标来指示数组中元 素的位置(序号)。n数组是最简单的一种构造类型,其数组元素 为同一类型,p既可以为简单类型(如整型、实型、字符型等),p也可以是构造类型。56.2 一维数组一维数组的定义n语法格式为:类型符 数组名元素个数;n例如:int a5; 定义了一个数组a,每个元素的类型为int ,可以称a为整型数组。它有5个元素:a0 a1 a2 a3 a4 n又如: float x2*5;/* Ok */ char sn;/* Error */常量或 常量表达式第一个元素的下标为 0最后一个元素的下标为 元素个数-16一维数组的引用n一般的引用格式为:数组名下标 如:n=4; a0=3*a3-an-2;n数组元素实际上的一种带下标的变量(简 称下标变量),它与简单变量(不带下标的 变量)在使用上并无不同。请比较: int m,n,p,a5; m=10;a2=5; n=2*m;a1=a2*3; scanf(“%d“, scanf(“%d“, 可以为常量、 变量、表达式7n引用数组元素更常用的形式:aip若i=0,aia0p若i=1,ai a1n用这种方式可以访问数组中的所有元素, 这称为数组的“遍历“。n遍历数组时是通过循环来改变下标的。 n例6.1 将输入的5个数逆序输出。 读入:for(i=0;i=0;i-) printf(“%3d“,ai);8例6.1 将输入的5个数逆序输出。 main() int a5,i; for(i=0;i=0;i-) printf(“%3d“,ai); printf(“n“); 注意注意:1、循环控制变量的初值、终值及控制条件。2、不能整体输出数组 例:例:printf(“%d“,aprintf(“%d“,a); );是是错误错误错误错误 的。的。9一维数组的初始化n在定义数组时给元素赋初值。一般语法为 : 类型符 数组名元素个数=常量表;n如: int a5=1,2,3,4,5; n编译系统为数组的所有 元素顺序分配存储单元。n初始化时是把常量表中 的常量按内存分配顺序 依次存入相应的数组元 素。1 1 2 2 3 3 4 4 5 510说明:n若给所有元素赋初值,“元素个数“可以省 略。如:int a =1,2,3,4,5; n可以只给一部分元素赋初值,但元素个数 不能省略。未被赋初值的元素则为0。如: int a5=1,2,3;n若使全部元素都为0,可以将其定义为“全 局变量“或“静态变量“ ,也可以写成:int a5=0;n若数组在定义时未进行初始化,则各元素 的值是随机的。如: int a5;5 5,0,0;,0,0;,0,0,0,0;,0,0,0,0;=?,?,?,?,?;=?,?,?,?,?; 例例 数组b在定义时未进行初始化#include main() int i,a5=3,4,5,b5;printf(“narray a is:“);for(i=0;imax, 则aimax,i pi+;5 52 27 79 96 60 1 2 3 4 50 1 2 3 4 5a amaxmaxi ip p5 57 79 9maxmaxp p14例6.3 找出输入的5个数据中的最大值及所在位置。main() int a5,max,p,i; for(i=0;i“ABC“/* 字符串比较 */ “abc“+“defg“/* 字符串连接 */ n在C语言中这些操作都不能直接完成。n处理字符串通过库函数来完成。n在程序开头将字符串库文件包含到程序中: #include 371、输出字符串函数 n格式:puts(字符串表达式)n功能:将“字符串表达式“输出后并换行。n如:char str = “China“;puts(str);n输出:China_与 printf(“%sn“,str); 完全等价382、输入字符串函数n格式:gets(字符串变量)n功能:将键盘输入的一行字符串存入“字符 串变量“中,当输入回车时才认为字符串输 入结束,这就解决了scanf()函数不能接收带 空格的字符串的问题。 如:char str80;gets(str);puts(str); n运行:How are you? How are you? 393、字符串复制函数n格式:strcpy(字符串变量,字符串)n功能:将“字符串“复制到“字符串变量“中 ,字符串变量的空间必须足够大。 如:char str80;strcpy(str, “China“);puts(str); 输出:Chinan注意:字符串不能直接送字符串变量,即 :str= “China“; /* Error */ 404、字符串连接函数n格式:strcat(字符串变量,字符串)n功能:将“字符串“连接到“字符串变量“的 后面,字符串变量的空间应足够大。 如:char str80= “I love “;strcat(str, “China“);puts(str); 输出:I love Chinan注意:C语言中不能使用“+“完成字符串的 连接,即: str=str+ “China“; /* Error */ 415、字符串比较函数 n格式:strcmp(字符串1,字符串2)n功能:完成“字符串1“与“字符串2“的关系比 较,即对两个字符串自左至右逐个字符按其 ASCII码值相比,直到出现不同的字符或遇 到0为止。比较的结果由函数值获得:p如果“字符串1“=“字符串2“,函数值为0;p如果“字符串1“字符串2“,函数值为一 正数;p如果“字符串1“0)x=y;426、测字符串长度函数n格式:strlen(字符串)n功能:得到“字符串“的长度。n字符串长度:p是指双引号括起来的字符个数p或,0前面字符的个数p或,0所在的下标位置 如:char str80= “abcd“;printf(“%d“,strlen(str); 结果:4 437、小写字符转换为大写字符串函数 n格式:strupr(字符串)n功能:将字符串中的小写字母换为大写字母 。 如:printf(“%s“,strupr(“China“); 结果:CHINA 448、大写字符转换为小写字符串函数 n格式:strlwr(字符串)n功能:将字符串中的小写字母换为大写字 母。 如:printf(“%s“,strlwr(“China“);n结果:china 45n例6.9 将一个字符串复制到另一个字符串 中,即完成strcpy函数的功能。n分析:把源字符串中的字符一个一个地传送 (赋值)到目标字符数组中对应位置,直到遇 到了字符串结束标志0: 四、字符数组的程序举例 46n思路1先判断后赋值。 A AB BC C000istr1i!=0str1istr2ii+nyA AB BC C不是0是047n思路2先赋值后判断。 A AB BC C00A AB BC C0istr2i!=0str1istr2ii+ny不是000是048 例例6.10 6.10 用冒泡法对用冒泡法对1010个数排序个数排序第1次, a0和a1比较较9 8 5 4 2 0 6 1 3 78 9 5 4 2 0 6 1 3 78 5 9 4 2 0 6 1 3 78 5 4 9 2 0 6 1 3 78 5 4 2 9 0 6 1 3 7 8 5 4 2 0 9 6 1 3 78 5 4 2 0 6 9 1 3 78 5 4 2 0 6 1 9 3 78 5 4 2 0 6 1 3 9 78 5 4 2 0 6 1 3 7 9第2次, a1和a2比较较第j次, aj和aj+1比较较9 89 59 49 29 7for (j=0;jaj+1) temp=aj;aj=aj+1;aj+1=temp;6.5 综合应用举例49从第一个元素开始,两两比较,较大的一个放在 后面 for (j=0;jaj+1)temp=aj,aj=aj+1;aj+1=temp; 第一次循环后,最大的在最后. 8 5 4 2 0 6 1 3 7 9 第二次循环 for (j=0;jaj+1)temp=aj,aj=aj+1;aj+1=temp;50如果有n个元素,一共要比较n-1次(外循环次数) 在第j次比较时,需要从0比较到n-i #include “stdio.h” main() int a10=9,8,5,4,2,0,6,1,3,7,i,n=10;for (i=0;iaj+1) temp=aj,aj=aj+1;aj+1=temp;for (i=0;ixx,right=mid-1right=mid-1amid=x 找到!amidamidxx,right=mid-1right=mid-1leftright 没找到!amidamidxx,right=mid-1right=mid-1left=0;right=N-1; while(leftx)right=mid-1;else if(amidx)left=mid+1;else break; if(left=right) printf(“%d“,mid); else printf(“未找到“);Program实验四 数组和指针应用的程序设 计531定义一个一维数组count,从键盘上输入10 个整数,将其按从小到大的顺序排列,并将 排序后的数组输出。 (1)作出流程图。 (2)用数组的方法编写程序(算法可参考冒 泡排序法)实验四 数组和指针应用的程序设 计542输入2个字符串,将这两个字符串连接起来 并输出,再将连接后的字符串反向。 (1)分别输出连接后的字符串和反向后的字 符串,并求连接后的字符串长度。 (2)用字符数组的方法编写程序
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号