资源描述
第五章 数 组在C语言中,数组是一种构造类型,即它是由基本类型数据按照一定规则组成的新类型.数组中每个值的类型必须与数组的类型相同,使用数组名和下标来唯一确定数组中的元素。5.1一维数组的定义和使用5.1.1一维数组的定义类型说明符数组名常量表达式;例如:inta10;/*数组名为a,有10个int类型元素*/doublescores50*2;/*数组名为scores,有100个double元素*/定义数组时需要注意以下几个问题:数组名命名规则和变量名相同,应遵循标识符命名规则;常量表达式表示数组元素的个数(即数组的长度),在定义数组时必须指定该值。引用元素时下标从0开始。常量表达式中可以包括常量和符号常量,但不能包含变量。数组元素在内存中是连续存放的,数组名本身表示内存的首地址。5.1.2一维数组元素的引用C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式为:数组名下标;例如:inta10;a数组的10个元素分别是:a0、a1、a2、a3、a4、a5、a6、a7、a8、a9。例6-1输入10个学生的成绩并求总分。main()inti;floatscores10,sum=0;for(i=0;i10;i+)scanf(%f,&scoresi);sum+=scoresi;printf(sum=%.2f,sum);getch();运行结果如下:56 67 84 46 81 90 32 55 63 92sum=66.605.1.3一维数组的初始化1对全部元素赋值。例如:inta10=1,2,3,4,5,6,7,8,9,10;2只对部分元素赋值。例如:inta10=1,2,3,4,5;3如果在中指定了所有元素的值,则数组的长度可省略不写。例如:inta10=1,2,3,4,5,6,7,8,9,10;可改写为:inta=1,2,3,4,5,6,7,8,9,10;例6-2输出Fibonacci序列的前10个数。main()inti;inta10=1,1;/*序列的第1,2个数值为1*/for(i=2;i10;i+)/*从第3个数开始,按规律求值*/ai=ai-1+ai-2;for(i=0;i10;i+)printf(%4d,ai);getch();运行结果如下:1 1 2 3 5 8 13 21 34 555.2.1二维数组的定义及引用二维数组的定义方式为:数组名数组名 行标行标 列标列标 注意:数组下标从0开始,因此 行标范围是0 M-1,列标范围是0 N-1。例如:#define M 3#define N 5int cMN;定义了二维数组c,它是一个具有M行N列的二维数组,共有MN个元素。C采用行优先的方式来存储二维数组,即先在内存中顺序存储第一行(行标为0)的元素,再存放第二行的元素,依此类推。5.2.2二维数组的定义及引用1分行全部赋值分行全部赋值。例如:inta34=1,2,3,4,5,6,7,8,9,10,11,12;2分行部分赋值分行部分赋值。例如:inta34=1,2,5,9,10,11;3按一维数组形式赋值按一维数组形式赋值。例如:inta34=1,2,3,4,5,6,7,8,9,10,11,12;4。如果对全部元素赋值如果对全部元素赋值(无论是一维形式还是分行形式),则定义数组时可省略第一维长度,但第二维长度不能省略。定义数组时可省略第一维长度,但第二维长度不能省略。例如:inta4=1,2,3,4,5,6,7,8,9,10,11,12;例6-3输入一个3*4矩阵,找出矩阵中负数的个数并输出。main()inta34;inti,j,count=0;printf(inputmatrix:n);for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,&aij);if(aij0)count+;printf(thenumberofnegativeis%d,count);getch();5.3字符数组的定义和使用5.3.1字符数组的定义及元素引用字符数组的定义类似于前面所介绍的数组定义,例如:chars10;5.3.2字符数组的初始化chars110=f,a,s,h,i,o,n;该定义只对前8个元素赋值,后2个元素为零值(即ASCII码为0的字符)。它在内存中的表示如图5-4所示。fashion00由于采用字符串常量的方式对字符数组初始化时,系统会系统增加一个 0,因此对于语句:char s2=fashion;系统将认为数组s的长度是7,占8个字节。该数组在内存中的表示如:上述语句等价于:char s28=f,a,s,h,i,o,n;fashion05.3.3字符数组的输入输出同其他类型的数组一样,字符输出的输入与输出可以逐个元素进行处理。例如:chars10;for(i=0;i10;i+)scanf(“%c”,&si);for(i=0;i A)“abCdef”小于“abcd”(因为C c)“ABC”等于“ABC”“COM”小于“COMPUTER”调用函数strcmp(s1,s2)的结果:若s1 小于s2,则函数值 0。该函数的返回值返回比较的结果:字符数组1=字符数组2,函数值=0;字符数组1字符数组2,函数值0;字符数组1字符数组2,函数值0)printf(“biggern”);5.4数组的应用举例例6-4:找出10个学生中成绩低于其平均成绩的人数并输出。分析:可以定义一个长度为10的实型数组scores存储10个学生成绩。先计算出平均成绩,然后统计成绩低于平均成绩的人数。程序如下:main()inti,count=0;/*count存储人数,初始化为0*/floatscores10,ave;/*ave存储平均成绩*/for(i=0;i10;i+)scanf(%f,&scoresi);ave+=scoresi;/*累加成绩求总分*/ave/=10;/*求出平均成绩*/for(i=0;i10;i+)if(scoresiave)count+;/*若低于平均成绩,计数器加1*/printf(%2d,count);getch();例5-5:输入5个学生的3门课程成绩,求得每个学生的平均成绩和每门课程的平均成绩。例5-6已有一个排好序的序列,输入一个数插入到该序列中,使之仍然保持有序。例如:将15插入到有序序列3,7,10,12,18,20中。例5-7编写一个程序,将字符串转置后并输出。例如“abcde”“edcba”。结束语当你尽了自己的最大努力时,失败也是伟大的,所以不要放弃,坚持就是正确的。When You Do Your Best,Failure Is Great,So DonT Give Up,Stick To The End谢谢大家荣幸这一路,与你同行ItS An Honor To Walk With You All The Way演讲人:XXXXXX 时 间:XX年XX月XX日
展开阅读全文