江南大学c语言程序设计本科第七章

上传人:suns****4568 文档编号:118906870 上传时间:2019-12-28 格式:PPT 页数:72 大小:1,009KB
返回 下载 相关 举报
江南大学c语言程序设计本科第七章_第1页
第1页 / 共72页
江南大学c语言程序设计本科第七章_第2页
第2页 / 共72页
江南大学c语言程序设计本科第七章_第3页
第3页 / 共72页
江南大学c语言程序设计本科第七章_第4页
第4页 / 共72页
江南大学c语言程序设计本科第七章_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《江南大学c语言程序设计本科第七章》由会员分享,可在线阅读,更多相关《江南大学c语言程序设计本科第七章(72页珍藏版)》请在金锄头文库上搜索。

1、回顾 循环: 减少重复劳动,简化程序 存在问题: 循环增量的改变,保证不出现死循环 循环嵌套的使用,循环的终止等 问题 把绿柱染成红柱 ? 整体,数组 没有其他工具, 只能一个个依次 染,若用麻袋, 就可一次染 输入全班同学20个人某门课成绩。 v 需要定义20个变量,写20个scanf函数 v 定义数组,只要1个变量,利用循环实现 main() int day,month,year,sum=0,leap; printf(nplease input year,month,dayn); scanf(%d,%d,%d, switch(month-1) case 11:sum+=30; case 1

2、0:sum+=31; case 9:sum+=30; case 8:sum+=31; case 7:sum+=31; case 6:sum+=30; case 5:sum+=31; case 4:sum+=30; case 3:sum+=31; case 2:sum+=28; case 1:sum+=31; break; 例:输入某年某月某日,判断这一天是这一年的第几天? default:printf(data error);exit(0); sum=sum+day; if(year%4=0 elseleap=0; if(leap=1 printf(It is the %dth day.,su

3、m); #include void main() static int day_tab13= 0,31,28,31,30,31,30,31,31,30,31,30,31 ; int year,month,day; int flag,j; printf(nInput a date:); scanf(n%d%d%d, flag=(year%4=0 for(j=1;j2) day=day+flag; printf(it is %dst of the year.,day); 第七章 数组 Focus 1. 一维数组的定义和使用 2. 二维数组的定义和使用 3. 字符数组以及相关函数 一、一维数组的定义

4、 定义格式:类型说明符 数组名 常量表达式; ex: int a10; 说明: 1、类型说明符用于说明数组中存放的数据的数据类型。 2、数组名命名规则和变量名相同,遵循标识符命名规则。 3、存储(内存映象): 按序连续存放。 4、常量表达式的值为数组的长度,即表示数组中的元素个 数,必须为整数。常量表达式可为整型常量或符号常量。 a0 a1 a2 : : a9 第一节第一节 一维数组的定义和引用一维数组的定义和引用 6、常量表达式是用方括号 ,而不能用圆括号( ) 7、可同时说明多个数据类型相同的数组,以逗号为 分隔符, ex:int a10,b20; main( ) int n; scanf

5、(“%d”, int sn, gn*10; 不能动态 定义; 5、不允许对数组的 大小作动态定义。 二、一维数组元素的引用 C语言中规定只能逐个引用数组元素而不能 一次引用整个数组 引用格式:数组名下标 可以是整型变量 , 整型表达式 main( ) int a10=1,2,3,4,5,6,7,8,9,10, b10; for(k=0;k10;k+) bk=ak; for(k=0;k10;k+) printf(“%d”, bk); 若:b=a ; 错! 若: printf(“%d”, b); 错 ! 1、数组的引用只能逐个下标引用 2、数组元素是变量,数组名不是变量 3、下标最小值是0,最大值

6、为数组长度-1, C编译不作越界检查 int a3;包括 a0 a1 a2 int a25, b1020; /* a 、b 数组的第一个元素分别是 a0, b00 */ /* a 、b 数组的最后一个元素分别是 a24, b919*/ 说明: 1、数组元素 赋值方法 说明: 1)、2)在程序运行阶段实现,没有赋值的元素,其值不确定 3)编译阶段实现,没有赋值的元素,系统给一定值0或0 三、数组的初始化 int a3; a0=1;a1=2; 1)赋值语句给数组元素赋值 2)用输入函数从键盘或从数据文件中读取数据 并存放在数组元素中 4)定义数组的同时,为数组元素赋值 3)用随机函数生成随机数赋值

7、 2、数组初始化的方法 1) 定义数组时,对数组所有元素赋值 int a3=1,2,3; 2)定义数组时,对部分元素赋值 int a3=0,1; /* a0=0,a1=1,a2=0;*/ 3)在对全部元素赋初值时,可不指定数组长度 int a =1,2,3,4,5; int a5=1,2,3,4,5; 例:利用随机函数生成10个整型数存放在a数组中,然 后输出; 再对10个按从小到大顺序排序输出。 分析: 1.调用随机函数生成10个赋给数组a 2.排序 随机函数rand() 产生一个0-RAND_MAX之间的随机数 RAND_MAX在中定义,值不小于 32767 生成a,b之间的随机数 a+r

8、and()/(b-a+1) srand() main( ) int a10, i, j , t ; printf( “原数据序列为: ”); for( i=0; i10; i+) aI=rand(); printf( “%4d”,ai); printf(“n”); 四、一维数组的应用(排序) 例1:用冒泡法对任意给定的一组数组按从小到大排列 。 基本思路:采用若干次轮回,在每一轮回中,对 指定的数据两两比较。 若是从小到大排序(升序),则把大数放到指定序列的最后位置 。 若是从大到小排序(降序),则把小数放到指定序列的最前位置 。 第一趟排序: a1a2a3a4an-1 an a2 结果:n个

9、数中最大数在an位置。 a1a3a4an-1an a2 a3 a1a2 a1 a2 使 a1a2a3 a3 a4 a1a2a3a4 a4 a5 a1a2a3a4an-1 an-1 an an 第二趟排序: a1a2a3a4an-1 an a2 结果:前n-1个数中最大数在an-1位置。 a1a3a4an-1an a2 a3 a1a2 a1 a2 使 a1a2a3 a3 a4 a1a2a3a4 a4 a5 a1a2a3a4an-1 an-2 aj for j=1 to n-i for i=1 to n-1 输入n个数 a0到an-1 N main( ) int a6, i, j , t ; pr

10、intf( “原数据序列为: ”); for( i=0; i6; i+) aI=rand(); printf( “%4d”,ai); printf(“n”); for ( i=1; i=5;i+) for ( j=1;ja j ) t=aj-1; aj-1=aj ; aj =t; printf(“排序结果为: ”); for( i=0; iaj Y 交换amin和aj for j=i+1; jN; j+ min=i for i=0 to n-1 #define N 6 main( ) int aN=10,5,6,7,2,9, i, j , t ; printf( “原数据序列为: ”); fo

11、r( i=0; iN; i+) printf( “%4d”,ai); printf(“n”); for(i=0; iN-1; i+) min=i; for(j=i+1;jaj) min=j; t=ai; ai=amin; amin=t; printf(“排序结果为: ”); for( i=0; iN; i+) printf(“%4d”,ai); printf(“n”); main( ) int I,a20=1,1; 1 1 2 3 5 for(i=2;i20;i+) 8 13 21 34 55 ai=ai-1+ai-2; 89 144 233 377 610 for(i=0;i20;i+) 9

12、87 1597 2584 4181 6765 if(i%5=0) printf(“n”); printf(“%12d”, ai); 例2:用数组来处理Fibonacci数列,求前20项,每行 打印5个数。 一、二维数组的定义 一般形式为: 类型说明符 数组名 常量表达式 常量表达式 int b44; 说明: 1)存储:按行存放; b00b01b02b03 b10b11b12b13 b20 b21 . b30 . b00 b01 b02 b03 b10 b11 b12 : 第二节第二节 二维数组的定义和引用二维数组的定义和引用 二、二维数组的引用 表达形式: 数组名下标1下标2 0= 下标1 行

13、数 0=下标2max bji=aij; for j=0 to 3 for i=0 to 2 a的初始化 a3 4 , i, j, max=a00 row=0 column=0 main() int a34=2,4,15,8,6,3,7,1,4,9,0,6; int b43, I, j, max=a00, row, column; for(I=0;I3;I+) for(j=0;jmax) max=aIj; row=I; column=j; printf(“%d,%d,%d”,max,row,column); for(I=0;I4;I+) for(j=0;j3;j+) printf(“%d”,bIj); 例2:成绩处绩处 理问题 某小组有3人,期末考试成绩如下: 试计算每人的总分。 学生的成绩是一个矩阵。矩阵是由向量组成的。可以将3个人 的成绩(学号、数学成绩、物理成绩、英语成绩、总分)分别 用一个一维数组(向量)a05、a15、a25存储。由于数 组只能存储同类型的数据,把学号和各门课 的成绩定义为 同 一种类型实型,都能兼顾。 如果把每一个一维数组看作同一类型的数据(都是实型,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号