




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、会计学1C语言数组语言数组记录记录1个学生成绩,可用个学生成绩,可用int s1;记录记录2个学生成绩,可用个学生成绩,可用int s1,s2;记录记录3个学生成绩,可用个学生成绩,可用int s1,s2,s3;记录记录100个数,用个数,用int s1,s2,s100; ?如何处理有相同属性的批量数据呢?如何处理有相同属性的批量数据呢?数数组组int score100;代表一个元素个数为代表一个元素个数为100的整型数组的整型数组score0,score1,score2,.,score99 100个整型变量个整型变量数组计数从数组计数从0开始开始第1页/共58页基本数据类型:基本数据类型:
2、char int float double一个基本数据类型的变量一次只能存储一个数值一个基本数据类型的变量一次只能存储一个数值构造数据类型构造数据类型, 由基本数据类型通过一定的规由基本数据类型通过一定的规则组合而成,亦称导出类型。则组合而成,亦称导出类型。数组数组就属于构造数据类型,用数组一次可以表就属于构造数据类型,用数组一次可以表示一批属于相同数据类型的数据。示一批属于相同数据类型的数据。int score100;定义一个数组定义一个数组score100后,内存中将开辟连续的后,内存中将开辟连续的100个个int的空间单元,存储的空间单元,存储int 变量变量score0, score9
3、9第2页/共58页1)定义)定义 类型名类型名 数组名数组名数组长度数组长度 ;数组的大小必须在定义时给定,在程序的运行过程中它是不能被改变的数组的大小必须在定义时给定,在程序的运行过程中它是不能被改变的.数组(变量)的名称,标识符数组(变量)的名称,标识符数组元素的类型数组元素的类型int a10;定义一个含有定义一个含有10个整型元素的数组个整型元素的数组 achar c200;定义一个含有定义一个含有200个字符元素的数组个字符元素的数组 cfloat f5;定义一个含有定义一个含有5个浮点型元素的数组个浮点型元素的数组 f常量表达式常量表达式第3页/共58页 先定义,后使用先定义,后使
4、用 只能引用单个的数组元素,不能一次引用整个数组只能引用单个的数组元素,不能一次引用整个数组数组名数组名下标下标下标:整型表达式下标:整型表达式取值范围:取值范围:0,数组长度,数组长度-1int a10;10个元素:个元素:a0、a1、 a9 数组元素的使用方法与同类型的变量相同数组元素的使用方法与同类型的变量相同scanf(%d, &ai);printf(%d , ai);2)引用)引用1. 一维数组的定义和引用一维数组的定义和引用引用时千万不能越界,如引用时千万不能越界,如a10第4页/共58页 内的是数组元素的下标内的是数组元素的下标下标可以是一个整型表达式下标可以是一个整型表
5、达式下标的值不能越界下标的值不能越界, 0.N1 内的是数组的长度内的是数组的长度数组长度必须是常量数组长度必须是常量(表达式)表达式)一旦指定,就不能改变一旦指定,就不能改变 定义数组定义数组 类型名类型名 数组名数组名数组长度数组长度;int a10; 引用数组元素引用数组元素 数组名数组名下标下标a0 = a9 = 0;ak = temp;第5页/共58页 在定义数组时,对数组元素赋初值在定义数组时,对数组元素赋初值 类型名类型名 数组名数组名数组长度数组长度 = 初值表初值表;int a10 = 1,2,3,4,5,6,7,8,9,10;a0=1, a1=2,. a9=10,静态存储的
6、数组如果没有初始化,所有元素自动赋静态存储的数组如果没有初始化,所有元素自动赋0 动态存储的数组如果没有初始化,所有元素视为随机值动态存储的数组如果没有初始化,所有元素视为随机值. 如:如: auto int c5; 或或 int c5; 在引用前必须赋初值。在引用前必须赋初值。 首先考虑是否给变量赋初值是编程的好习惯!首先考虑是否给变量赋初值是编程的好习惯!第6页/共58页 针对部分元素的初始化针对部分元素的初始化int b5 = 1, 2, 3; b0 = 1, b1 = 2, b2 = 3, b3 = 0, b4 = 0 如果对全部元素都赋初值,可以省略数组长度如果对全部元素都赋初值,可
7、以省略数组长度 int a = 0, 1, 2 等价于等价于 int a3 = 0, 1, 2 实际编程最好不要省略数组长度实际编程最好不要省略数组长度在在TC,VC中,其余元素实际值是被赋值为中,其余元素实际值是被赋值为0第7页/共58页例例 7-2 用数组计算用数组计算 fibonacci 数列的前数列的前20个数,个数,并按每行打印并按每行打印5个数的格式输出。个数的格式输出。1, 1, 2, 3, 5, 8,分析:分析:用数组计算并存放用数组计算并存放 fibonacci 数列的前数列的前20个数个数 int f20; f0 = f1 = 1; fn = fn-1 + fn-2 ; 2
8、n19第8页/共58页#include int main(void) int i; int fib20 = 1, 1; /* 数组初始化数组初始化 */ for (i = 2; i 20; i+) fibi = fibi - 1 + fibi - 2; for (i = 0; i 20; i+) printf(%6d, fibi); if (i + 1) % 5 = 0) /* 5个数换行个数换行 */ printf(n); return 0;第9页/共58页要求:输入要求:输入5个互异的整数,将它们存入数组个互异的整数,将它们存入数组a中,再输入一个数中,再输入一个数x,然后在数组中查找,然
9、后在数组中查找x,如果找到,输出相应的下标,否则,输出,如果找到,输出相应的下标,否则,输出“Not Found”。输入:输入:2 9 8 1 6 9输出:输出:1输入:输入:2 9 8 1 6 7输出:输出:Not Found第10页/共58页#include int main(void) int i, flag, x; int a5; printf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); flag = 0; for (i = 0; i
10、 5; i+) if (ai = x) printf(Index is %dn, i); flag = 1; break; if(flag = 0) printf(Not Foundn); return 0; Enter 5 integers: 2 9 8 1 9Enter x: 9Index is 1如果允许输入相同的数如果允许输入相同的数Enter 5 integers: 2 9 8 1 9Enter x: 9Index is 1Index is 4输出所有满足条件的数的下标输出所有满足条件的数的下标第11页/共58页#include int main(void) int i, index
11、, x; int a5; printf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); index = -1; for (i = 0; i 5; i+) if (ai = x) index = i; if (index != -1) printf(Index is %dn, index); else printf(Not Foundn); return 0;Enter 5 integers: 2 9 8 1 9Enter x: 9Index is
12、 4若要求输出最后一个相同数的下标若要求输出最后一个相同数的下标第12页/共58页#include int main(void) int i, flag, x; int a5; printf(Enter 5 integers: ); for(i = 0; i 5; i+) scanf(%d, &ai); printf(Enter x: ); scanf(%d, &x); flag = 0; for (i = 0; i =0; i-)第13页/共58页 要求:输入一个正整数要求:输入一个正整数n(n a0,a1,假设假设min=a0, 与与i1,n-1所有的数进行比较,所有的数进
13、行比较, 如果如果ai min min=ai; 所有的数都比较所有的数都比较,一共循环一共循环n-1次次第14页/共58页#include int main(void) int i, min, n; int a10; printf(Enter n: ); scanf(%d, &n); printf(Enter %d integers: , n); for (i = 0; i n; i+) scanf(%d, &ai); min = a0; for (i = 1; i n; i+) if(ai min) min = ai; printf(min is %d n, min); re
14、turn 0;第15页/共58页 要求:输入一个正整数要求:输入一个正整数n(n10),再输入再输入n个整数,将它个整数,将它们存入数组们存入数组a中。中。 (1) 输出最小值和它所对应的下标输出最小值和它所对应的下标 (2) 将最小值与第一个数交换,输出交换后的将最小值与第一个数交换,输出交换后的n个数个数在求最小值的过程中,在求最小值的过程中,用用index记录最小值对应的下标记录最小值对应的下标 aindex就是最小值就是最小值第16页/共58页#include int main(void) int i, index, n; int a10; printf( Enter n: ); sc
15、anf(%d, &n); printf( Enter %d integers: , n); for(i = 0; i n; i+) scanf(%d, &ai); index = 0; for(i = 1; i n; i+) if(ai aindex) index = i; printf(min is %dtsub is %dn, aindex, index); return 0;例例7-4(2)求最小值及其下标求最小值及其下标第17页/共58页要使最小值与第一个数交换要使最小值与第一个数交换 要求:输入一个正整数要求:输入一个正整数n(n10),再输入再输入n个整数,将它们个
16、整数,将它们存入数组存入数组a中。中。 (1) 输出最小值和它所对应的下标输出最小值和它所对应的下标 (2) 将最小值与第一个数交换,输出交换后的将最小值与第一个数交换,输出交换后的n个数个数aindex a0temp = a0;a0 = aindex;aindex = temp;第18页/共58页temp = aindex; aindex= ak; ak = temp; 任意两个数组元素值任意两个数组元素值aindex和和ak的交换的交换515aindex=5,ak=1;temp=0;第19页/共58页 3 5 2 8 1(1) 1 5 2 8 3 (2) 2 5 8 3 (3) 3 8 5
17、 (4) 5 8 选择法:每次从未排序的数中通过选择最小数进行排选择法:每次从未排序的数中通过选择最小数进行排序。序。第20页/共58页(4) 1 2 3 5 8 a4 a3第21页/共58页(1) 5个数个数 (a0a4) 中找最小数,与中找最小数,与 a0 交换交换(2) 4个数个数 (a1a4) 中找最小数,与中找最小数,与 a1 交换交换(3) 3个数个数 (a2a4) 中找最小数,与中找最小数,与 a2 交换交换(4) 2个数个数 (a3a4) 中找最小数,与中找最小数,与 a3 交换交换(1) n个数个数 (a0an-1) 中找最小数,与中找最小数,与 a0 交换交换(2) n-1
18、个数个数 (a1an-1) 中找最小数,与中找最小数,与 a1 交换交换 (n-1) 2个数个数 (an-2an-1) 中找最小数,与中找最小数,与 an-2 交换交换 an-1n个数排序,个数排序, n-1次找最小数以及交换操作次找最小数以及交换操作第22页/共58页#include int main(void) int i, index, k, n, temp; int a10; printf( Enter n: ); scanf(%d, &n); printf( Enter %d integers: , n); for(i = 0; i n; i+) scanf(%d, &
19、;ai); for(k = 0; k n-1; k+) /* 对对n个数排序个数排序 */ index = k; for(i = k + 1; i n; i+) if(ai aindex) index = i; temp = aindex; aindex = ak; ak = temp; printf(After sorted: ); for(i = 0; i n; i+) /* 输出输出n个数组元素的值个数组元素的值 */ printf(%d , ai); return 0;第23页/共58页for(i = 0; i n; i+) scanf(%d , ai); 数组:相同类型数据的有序集合
20、,在内存中连续存放数组:相同类型数据的有序集合,在内存中连续存放。l由数组名和下标惟一地确定每个数组元素由数组名和下标惟一地确定每个数组元素l 每个元素都属于同一类型每个元素都属于同一类型 在数组中,一批相同类型的变量使用同一个数组变量名,用下标来相互区分。在数组中,一批相同类型的变量使用同一个数组变量名,用下标来相互区分。int a10;第24页/共58页 if(in0) /* 先向左找到最高位的位数先向左找到最高位的位数 */power=power/10;temp+;k = k * 10; power=in; while(temp0) /* 再向右计算每位数值再向右计算每位数值*/temp
21、 -; k = k/10;digit = power / k;power = power % k; printf(%-2d,digit); 第25页/共58页 int i,digit10,number,temp ; while(number != 0) digiti = number %10; i+; number = number /10 ; temp = i-1; for(i = temp ; i = 0; i -) printf(%-2d,digiti);第26页/共58页int a6;int b 3 6;一维数组用于表示一列长表,一个多维向量一维数组用于表示一列长表,一个多维向量访问单
22、个变量元素时,访问单个变量元素时,由两个下标同时决定。由两个下标同时决定。 二维数组二维数组3行6列700b12=700;第第j行、第行、第k列的元素为列的元素为bjk第27页/共58页 二维数组常用于表示矩阵的运算二维数组常用于表示矩阵的运算int a32; int b32;int c32;for (j = 0; j3; j+) for (k=0; k2; k+) cjk = ajk + bjk ; Mc = Ma + Mb第28页/共58页int a6;int b36;int c1036;访问单个变量元素时,访问单个变量元素时,由三个下标同时决定。由三个下标同时决定。 三维数组三维数组多维
23、数组的空间想象多维数组的空间想象一维数组:一维数组: 一列长表或一个向量一列长表或一个向量二维数组:一个表格或一个平面矩阵二维数组:一个表格或一个平面矩阵4*3*34*5三维数组:三维数组:三维空间的一个数据阵三维空间的一个数据阵多维数组:多维数组: 多维空间的一个数据列阵多维空间的一个数据列阵第29页/共58页1、定义、定义 类型名类型名 数组名数组名行长度行长度列长度列长度;数组元素的类型数组(变量)的名称,标识符数组(变量)的名称,标识符常量表达式,给定数组的大小;int a32;定义一个二维数组定义一个二维数组a,3行行2列,列,3*2=6个个int元素元素float b510;定义一
24、个二维数组定义一个二维数组b,5 行行 10 列列, 5*10=50个个float元素元素 第30页/共58页下标不能越界下标不能越界7.2.2 二维数组的定义和引用二维数组的定义和引用先定义,后引用先定义,后引用2、引用、引用数组元素的引用格式:数组元素的引用格式:数组名数组名行下标行下标 列下标列下标行下标和列下标:整型表达式行下标和列下标:整型表达式行下标的取值范围是行下标的取值范围是0,行长度,行长度-1列下标的取值范围是列下标的取值范围是0,列长度,列长度-1int a32; 3 行行 2 列,列, 3*2=6 个个int元素元素a 0 0 a01 a 1 0 a11 a 2 0 a
25、21第31页/共58页二维数组的元素在内存中按先行后列的方式存放二维数组的元素在内存中按先行后列的方式存放a00a01a10a11a20a21第32页/共58页数组数组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; int b43 = 1,2,3,0,0,0,4,5;后面缺省的项均为零后面缺省的项均为零第33页/共58页数组数组a1 2 3 4 5 67 8 9数组b1 2 30 0 04 5 00 0 07.2.3 二维数组的初始化二维数组的初始化第
26、34页/共58页7.2.3 二维数组的初始化二维数组的初始化P130static int b43 = 1,2,3, , 4,5 ; int b43 = 1,2,3, , 4,5 ;int a10 = ;第35页/共58页利用行下标和列下标分别做为循环变量利用行下标和列下标分别做为循环变量, 通过二通过二重循环,遍历二维数组重循环,遍历二维数组第36页/共58页定义定义1个个 3*2 的二维数组的二维数组a,数组元素的值由下式,数组元素的值由下式给出,按矩阵的形式输出给出,按矩阵的形式输出a。 a ij = i + j(0i2,0j1)分析:分析:a00 a01 a10 a11 a20 a21
27、aij0 11 22 3int a32;第37页/共58页#include int main(void) int i, j; int a32; for(i = 0; i 3; i+) for(j = 0; j 2; j+) aij = i + j; for(i = 0; i 3; i+) for(j = 0; j 2; j+) printf(%4d, aij); printf(n); return 0;a00 a01 a10 a11 a20 a21 i = 0 j = 0i = 0 j = 1i = 1 j = 0i = 1 j = 1i = 2 j = 0i = 2 j = 1 0 11 2
28、2 3第38页/共58页例例7-5 将将1个个3*2的矩阵存入的矩阵存入1个个3*2的二维数组的二维数组中,找出最大值以及它的行下标和列下标,中,找出最大值以及它的行下标和列下标,并输出该矩阵。并输出该矩阵。第39页/共58页#include int main(void) int i, j, col, row; int a32; printf(Enter 6 integers:n) ; for(i = 0; i 3; i+) for(j = 0; j 2; j+) scanf(%d, &aij); for(i = 0; i 3; i+) for(j = 0; j 2; j+) prin
29、tf(%4d, aij); printf(n); row = col = 0; for(i = 0; i 3; i+) for(j = 0; j arowcol) row = i; col = j; printf(max = a%d%d = %dn, row, col, arowcol); return 0;row 记录最大值的行下记录最大值的行下标标col 最大值的列下最大值的列下标标arowcol 就是最大值就是最大值第40页/共58页a00 a01 a10 a11 a20 a21 for(j = 0; j 2; j+) for(i = 0; i 3; i+) scanf(%d, &
30、;aij);Enter 6 integers: 3 2 10 -9 6 -1Enter 6 integers: 3 2 10 -9 6 -13 -9 2 610 -1max = a20 = 10max = a10 = 10 3 2 10 -9 6 -1第41页/共58页i=j 主对角主对角线线i=j下三角下三角a00 a01 a02a10 a11 a12a20 a21 a22i+j=N-1 副对角副对角线线第42页/共58页1 2 34 5 67 8 91 4 7 2 5 83 6 9 a01 a10 a02 a20 a12 a21aij aji 分析:分析:int a66; n=3时时第43
31、页/共58页第44页/共58页 /* 行列互换行列互换*/ for(i = 0; i n; i+) for(j = 0; j n; j+) if (i = j) temp = aij; aij = aji; aji = temp; 1 2 3 4 5 67 8 9主对角线:主对角线:i = j上三角:上三角: i =ji=01 4 7 2 5 63 8 9i=11 4 72 5 83 6 9for( j = i; j n; j+)(i j)for( j = i+1; j n; j+)第45页/共58页 /* 行列互换行列互换*/ for(i = 0; i n; i+) for(j = 0; j
32、 n; j+) temp = aij; aij = aji; aji = temp; 1 2 3 4 5 67 8 9i=01 4 7 2 5 63 8 9i=11 2 74 5 83 6 9i=21 2 3 4 5 67 8 9第46页/共58页分析:分析: 月月 0 1 2 3 11 12非闰年非闰年 0 31 28 31 30 31闰年闰年 0 31 29 31 30 31int tab213= 0, 31, 28, 31, 30,31,30,31,31,30,31, 30,31 0, 31, 29, 31, 30,31,30,31,31,30,31, 30,31自定义自定义1个函数个函
33、数day_of_year(year, month, day),返回返回year, month和和day所对应的是该年的第几天。所对应的是该年的第几天。day_of_year(2000, 3, 1) 返回返回61day_of_year(1981, 3, 1) 返回返回60第47页/共58页第48页/共58页 t0 t1 t4t H a p p y输出数组输出数组 t 的所有元素的所有元素for(i=0; i5; i+) putchar( ti );char t5=H, a, p, p, y;char t5;第49页/共58页字符串常量字符串常量:用一对双引号括起来的字符序列用一对双引号括起来的字符序列一个字符串的结束符:一个字符串的结束
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- JG/T 310-2011人行自动门用传感器
- JG/T 3051-1998PVC塑料地弹簧门
- JG/T 183-2006住宅整体卫浴间
- GB/T 42081-2022志愿服务基础数据元
- DZ/T 0171-1997大比例尺重力勘查规范
- CJ/T 518-2017潜水轴流泵
- CJ/T 5021-1995轻轨交通车辆通用技术条件
- CJ/T 380-2011污水提升装置技术条件
- CJ/T 32-2004液化石油气钢瓶焊接工艺评定
- CJ/T 170-2018超滤水处理设备
- 活动策划服务投标方案(技术方案)
- 湖南省 2023-2024 年普通高中学业水平合格性考试(一) 语文试卷(含答案)
- 计算机专业英语ppt课件(PPT 326页)
- 桡骨远端骨折临床路径PPT课件
- 预制梁场验收及质量管理实施细则
- 爱莲说对比阅读(1)
- 大理石打磨工程装饰协议合同
- 链轮齿数尺寸对照表二
- 国有资产管理情况整改报告
- 110kV输电线路工程冬季施工组织设计
- 模具中英文对照1
评论
0/150
提交评论