浙江大学C颜晖原版C7_第1页
浙江大学C颜晖原版C7_第2页
浙江大学C颜晖原版C7_第3页
浙江大学C颜晖原版C7_第4页
浙江大学C颜晖原版C7_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、精选课件第七章 数组 一维数组 二维数组 字符串精选课件输入 30 个数,将它们排序后输出。 数组:相同类型数据的有序集合 在内存中连续存放用数组名和下标唯一地确定数组元素每个元素都属于同一类型s0 1 2 29 s0 s1 s29s0、s1、s2、s29 精选课件一批相同类型的变量使用同一个数组变量名,用下标来相互区分优点:表述简洁,可读性高便于使用循环结构s0 1 2 29 s0 s1 s29精选课件7.1 一 维 数 组7.1.1 一维数组的定义和引用1、定义 类型名 数组名数组长度类型名:数组元素的类型数组名:数组变量的名称(数组),标识符数组长度:常量表达式,给定数组的大小int a

2、10 ; 定义一个含有10个整型元素的数组 a精选课件int a10 ; 定义一个含有10个整型元素的数组 achar c200 ; 定义一个含有200个字符元素的数组 cfloat f5; 定义一个含有5个浮点型元素的数组 f精选课件2、数组元素的引用先定义,后使用只能引用单个的数组元素,不能一次引用整个数组数组元素的引用:数组名下标下标:整型表达式取值范围:,数组长度-1int a10 ;10个元素:a0、a1、 a9下标不要越界,不能使用a10精选课件定义数组: 类型名 数组名数组长度引用数组元素:数组名下标数组元素的使用方法与同类型的变量相同int k, a10;k=3; a0=23;

3、ak-2=a0+1;scanf(%d, &a9);精选课件区分 定义数组 和引用数组元素定义数组: 类型名 数组名数组长度引用数组元素:数组名下标int a10;a0=a1=a9=0;下标不要越界精选课件main( ) int a10; int i; for(i = 0; i 10; i+) a i = i; for(i = 0; i 10; i+) printf(%d , ai);输出: 0 1 2 3 4 5 6 7 8 9 a0 a1 a9a 0 1 2 3 4 5 6 7 8 9精选课件main( ) int i; int a10; for(i = 0; i 10; i+) scanf

4、(“%d”, &ai); for(i = 0; i =0; i-) printf(%d , ai);输入: 1 2 3 4 5 6 7 8 9 10 a0 a1 a9a 1 2 3 4 5 6 7 8 9 10输出:1 2 3 4 5 6 7 8 9 1010 9 8 7 6 5 4 3 2 1精选课件3、程序举例例 7.1 输入10个数, 求和.例 7.2 用数组计算fibonacci数列的前20个数,并按每行打印5个数的格式输出。1, 1, 2, 3, 5, 例7.3 输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Fou

5、nd”。精选课件程序举例例 7.4_1 输入10个数, 求最小值.例 7.4_2 输入n(n10), 再输入n个数,求最小值。例 7.4_3 输入n(n10), 再输入n个数, 输出最小值和它所对应的下标。例 7.4_4 输入n(n10), 再输入n个数,将最小值与第一个数交换,输出交换后的n个数。例 7.5 输入n(n10), 再输入n个数,用选择法将它们从小到大排序后输出。精选课件例 7.1求和输入10个数, 求和.main( ) int i, a10; long sum; for(i = 0; i 10; i+) scanf(“%d”, &ai); sum = 0; for(i = 0;

6、 i 10; i+) sum = sum+ai; printf(%ldn , sum);精选课件# include “stdio.h”void main( ) int a10, i; long sum=0; for(i = 0; i 10; i+) scanf(“%d”, &ai); sum = sum+ai; printf(%ldn , sum); 精选课件用数组计算fibonacci数列的前20个数,并按每行打印5个数的格式输出。1, 1, 2, 3, 5, 8, 13, 分析:用数组计算并存放fibonacci数列的前20个数f0=f1=1fn=fn-1+fn-2 2n19例 7.2 计

7、算fibonacci数列精选课件main( ) int i, fib20; fib0=fib1=1; for(i=2; i20; i+) fibi=fibi-1+fibi-2; for(i=0; i20; i+) printf(“%6d, fibi); if(i+1)%5=0) printf(“n); 精选课件输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。例7.3查找精选课件输入:2 9 8 9 6 9输出: 1void main( ) int i, x, a5; for(i=0; i5; i+) scanf(

8、“%d”, &ai); scanf(“%d”, &x); for(i=0; i=5) printf(“Not Foundn”); 精选课件13void main( ) int i, x, a5; for(i=0; i5; i+) scanf(“%d”, &ai); scanf(“%d”, &x); for(i=0; i5; i+) if(ai=x) printf(%dn, i); 输入:2 9 8 9 6 9输出: 精选课件输入:2 9 8 9 6 9输出: 3void main( ) int i, x, sub, a5; for(i=0; i5; i+) scanf(“%d”, &ai);

9、scanf(“%d”, &x); for(i=0; i5; i+) if(ai=x) sub=i; printf(%dn, sub); 精选课件输入10个数, 求最小值.main( ) int i, min, a10; for(i = 0; i 10; i+) scanf(“%d”, &ai); min = a0; for(i = 1; i 10; i+) if ( ai min) min = ai; printf(%dn , min);例 7.4_ 1 求最小值精选课件输入n(n10), 再输入n个数,求最小值。main( ) int i, min, n, a10; scanf(“%d”,

10、&n); for(i = 0; i n; i+) scanf(“%d”, &ai); min = a0; for(i = 1; i n; i+) if ( ai min) min = ai; printf(%dn , min);例 7.4_2 求最小值(n个数)精选课件输入n(n10), 再输入n个数, 输出最小值和它所对应的下标。用index记录最小值对应的下标aindex就是最小值例 7.4_3 求最小值(下标)精选课件输出最小值和它所对应的下标 N-S流程图输入数组aindex=0for i=1 to n-1ai aindexindex=i输出最小值aindex和下标indexYN精选课

11、件main( ) int i, min, n, a10; scanf(“%d”, &n); for(i = 0; i n; i+) scanf(“%d”, &ai); index=0; for(i = 1; i n; i+) if (aiaindex) index=i; printf(%d %dn , aindex, index); 精选课件输入n(n10), 再输入n个数,将最小值与第一个数交换,输出交换后的n个数。用index记录最小值对应的下标aindex就是最小值最小值与第一个数交换aindex a0例 7.4_4 最小值交换精选课件例 7.5 选择法排序35281输入n(n10),

12、再输入n个数,用选择法将它们从小到大排序后输出。 n=5(1) 1 5 2 8 3 (2) 2 5 8 3 (3) 3 8 5 (4) 5 8 精选课件3 5 2 8 1 (n=5) 5个数(a0a4)中找最小数,与a0交换(1) 1 5 2 8 3 a4 a0 4个数(a1a4)中找最小数,与a1交换(2) 1 2 5 8 3 a2 a1 3个数(a2a4)中找最小数,与a2交换(3) 1 2 3 8 5 a4 a2 2个数(a3a4)中找最小数,与a3交换(4) 1 2 3 5 8 a4 a3精选课件(1) n个数(a0an-1)中找最小数,与a0交换(2) n-1个数(a1an-1)中找

13、最小数,与a1交换 (n-1) 2个数(an-2an-1)中找最小数,与an-2交换(1) 5个数(a0a4)中找最小数,与a0交换(2) 4个数(a1a4)中找最小数,与a1交换(3) 3个数(a2a4)中找最小数,与a2交换(4) 2个数(a3a4)中找最小数,与a3交换精选课件n个数(a0an-1)中找最小数,与a0交换N-S流程图输入数组aindex=0for i=1 to n-1ai aindexindex=iaindexa0YN精选课件N-S流程图(选择排序)输入数组aindex=kfor i = k+1 to n-1ai aindexindex=iaindexakYNfor k=

14、0 to n-2输出数组a精选课件void main() int i, index, k, n, temp, a10; scanf(“%d”, &n); for(i=0; in; i+) scanf(“%d”, &ai); for(k=0; kn-1; k+) index=k; for(i=k+1; in; i+) if(ai aindex) index=i; temp=aindex; aindex=ak; ak=temp; for(i=0; in; i+) printf(“%d ”, ai); 精选课件7.1.2 一维数组的初始化定义数组时,对数组元素赋初值类型名 数组名数组长度= 初值表;

15、1. 对全部元素赋初值int a10=0,1,2,3,4,5,6,7,8,9;a0=0, a1=1,. a9=9静态数组、全局数组、自动型数组初始化 static int b5=1, 2, 3, 4, 5; 静态存储的数组如果没有初始化,自动给所有元素赋0 static int b5精选课件2. 部分元素初始化static int b5=1,2,3;b0=1, b1=2, b2=3, b3=0, b4=0 auto int fib20=0,1;如果对全部元素都赋初值,可以省略数组长度int a =0,1,2,3,4,5,6,7,8,9;建议不要省略数组长度精选课件7.2 二维数组多维数组的空间

16、想象二维数组: 一个表格或一个平面矩阵一维数组: 一列长表或一个向量多维数组: 多维空间的一个数据列阵三维数组: 三维空间的一个方阵精选课件7.2.1 二维数组的定义和引用1、定义类型名 数组名行长度列长度int a32; 定义1个二维数组a,3行2列,6个元素int b510; 5 行 10 列, 50 个元素 精选课件2、数组元素的引用先定义,后使用定义:类型名 数组名行长度列长度数组元素的引用: 数组名行下标 列下标行下标的取值范围是0,行长度-1列下标的取值范围是0,列长度-1下标不要越界精选课件int a32;3 行 2 列, 6 个元素表示1个3行2列的矩阵a00 a01 a10

17、a11 a20 a21 二维数组的元素在内存中按行/列方式存放a00a01a10a11a20a21 精选课件遍历二维数组行下标和列下标分别做为循环变量, 通过二重循环,遍历二维数组通常将行下标做为外循环的循环变量a00 a01 a10 a11 a20 a21 for(i = 0; i 3; i+) for(j=0; j2; j+) aij = i+j;i=0 j=0i=0 j=1i=1 j=0i=1 j=1i=2 j=0i=2 j=1 0 11 22 3精选课件输入二维数组int a32;for(i = 0; i 3; i+) for(j=0; j2; j+) scanf(“%d”,&aij

18、);输入:1 2 3 4 5 6a00 a01 a10 a11 a20 a21 1 23 45 6精选课件按矩阵的形式输出二维数组int a32;for(i = 0; i 3; i+) for(j=0; j2; j+) printf(“%d”,&aij ); printf(“n”);a00 a01 a10 a11 a20 a21 精选课件3、程序举例例7.6 定义1个3*2的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。 aij=i+j(0i2,0j1) 例7.7 找出矩阵中绝对值最小的元素,以及它的行下标和列下标。 例7.8 方阵转置(行列互换)精选课件定义1个3*2的二维数组a,

19、数组元素的值由下式给出,按矩阵的形式输出a。 aij=i+j(0i2,0j1)例7.6 精选课件#include void main( ) int i, j; int a32; for(i=0; i3; i+) for(j=0; j2; j+) aij=i+j; for(i=0; i3; i+) for(j=0; j2; j+) printf(%4d, aij); printf(n); 精选课件找出矩阵中绝对值最小的元素,以及它的行下标和列下标。求绝对值函数 abs( ) 或 fabs( ) 头文件 math.hrow记录绝对值最小的元素的行下标col记录 列下标arowcol就是绝对值最小的

20、元素例7.7 精选课件#include #include void main( ) int i, j; int a32; for(i = 0; i 3; i+) for(j=0; j2; j+) scanf(“%d”,&aij ); 精选课件 row=col=0; for(i=0; i3; i+) for(j=0; j2; j+) if(abs(aij)abs(arowcol) row=i; col=j; printf(“a%d%d=%dn, row, col, arowcol); 输入:3 2 10 -9 6 -1 3 210 -9 6 -1精选课件int aNN; N是正整数数组元素 ai

21、j,i和j的取值范围0,N-1用二维数组a表示N*N方阵时,对应关系:a00 a01 a02 主对角线 a10 a11 a12 上三角a20 a21 a22 下三角方阵 i=ji=j精选课件输入一个正整数n (1n6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。 aij=i*n+j+1(0in-1,0jn-1)int a66例7.8 精选课件分析1 2 3 4 5 67 8 91 4 7 2 5 83 6 9a01 a10 a02 a20a12 a21aij aji精选课件#include void main( ) int i, j, n, t; int a66; sc

22、anf(“%d”, &n); for(i=0; in; i+) for(j=0; jn; j+) aij=i*n+j+1; 输入 31 2 3 4 5 67 8 9精选课件 for(i=0; in; i+) for(j=0; jn; j+) t=aij; aij=aji; aji=t; for(i=0; in; i+) for(j=0; jn; j+) printf(%4d, aij); printf(n); 精选课件 for(i=0; in; i+) for(j=0; j n; j+) t = aij; aij = aji; aji = t; i=0:1 4 7 2 5 63 8 9i=1:

23、1 2 7 4 5 83 6 9i=2:1 2 3 4 5 67 8 91 2 3 4 5 67 8 9精选课件 for(i=0; in; i+) for(j=0; j n; j+) if(i = j ) t = aij; aij = aji; aji = t; 1 2 3 4 5 67 8 9主对角线:i = j上三角: i =ji=0:1 4 7 2 5 63 8 9i=1:1 4 7 2 5 83 6 9精选课件 for(i=0; in; i+) for(j=0; j n;j+) if(i = j ) t=aij; aij=aji; aji=t; 1 2 3 4 5 67 8 9主对角线

24、:i = j上三角: i =jfor( j = i; j n; j+)精选课件7.2.2 二维数组的初始化1、分行赋初值int a33 = 1,2,3,4,5,6,7,8,9;static int b43 = 1,2,3,4,5;数组a1 2 3 4 5 67 8 9数组b1 2 30 0 04 5 00 0 02、顺序赋初值int a33 = 1,2,3,4,5,6,7,8,9;static int b43 = 1,2,3,0,0,0,4,5;精选课件省略行长度对全部元素都赋了初值,int a 3=1,2,3,4,5,6,7,8,9;或分行赋初值时,在初值表中列出了全部行static int

25、 b 3=1,2,3,4,5,建议不要省略数组a1 2 3 4 5 67 8 9数组b1 2 30 0 04 5 00 0 0精选课件7.3 字符串字符串的存储和运算用一维字符数组实现7.3.1 一维字符数组定义、引用、初始化char str80 ; 定义一个含有80个字符型元素的数组str char t5=H, a, p, p, y;初始化数组 t t0 t1 t4t H a p p y精选课件7.3.1 一维字符数组char t5=H, a, p, p, y;static char s6=H, a, p, p, y; s0 s1 s5s H a p p y 0 t0 t1 t4t H a

26、p p ystatic char s6=H, a, p, p, y, 0;0代表字符0,也就是ASCII码为0的字符 static char s6=H, a, p, p, y, 0;精选课件一维字符数组char t5=H, a, p, p, y;for(i=0; i 对字符数组的操作存储static char s6=H, a, p, p, y, 0;字符数组初始化: 用字符串常量static char s6=Happy;static char s6= Happy;精选课件字符串static char s6= Happy;数组长度 = 字符串的有效长度+1char t5Happy 不能存入t s

27、0 s1 s5s H a p p y 0精选课件字符串auto char s80= Happy; s0 s1 s5s H a p p y 0 ? ?字符串遇0结束第一个0前面的所有字符和0一起构成了字符串Happy”0之后的其他数组元素与该字符串无关精选课件计算字符串的有效长度,并输出该字符串字符串的有效长度:有效字符的个数数组中第一个0前面的字符个数例7.10 字符串的有效长度 s0 s1 s5s H a p p y 0 ? ?精选课件void main( ) int i=0, len; char s80=Happy; for(i=0; si!=0; i+) ; len=i; printf(

28、len = %dn, len); for(i=0; si!=0; i+) putchar(si); s0 s1 s5s H a p p y 0 ? ?输出len=5Happy精选课件输出字符串for(i=0; si!=0; i+) putchar(si);for(i=0; i80; i+) putchar(si);for(i=0; i 对字符数组的操作存储字符数组初始化: 用字符串常量static char s6= ”Hello;赋值s0=a; s1=0;等价static char s6= a;精选课件字符串区分 “a” 和 a“a” 2个字符a和0a 1个字符常量精选课件输入字符串 把字符串放入一维字符数组(存储) 对字符串的操作 = 对字符数组的操作存储 字符数组初始化: static char s6= ”Happy; 赋值:s0=a; s1=0; 输入 0代表空操作,无法输入输入时,设定一个输入结束符将输入结束符转换为字符串结束符0精选课件输入一个以问号结束的字符串(少于80个字符),统计其中数字字符的个数。分析:数组长度取上限80以?做为输入结束符例7.11 统计精选课件void main( ) int cou

温馨提示

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

评论

0/150

提交评论