1、CONTENTS 目 录提出问题 引入新课自主学习 明确考点案例分析 交流提升仿真演练 体验探索提出问题 引入新课PART 011、对数组的操作其实是建立 在对各个数组元素操作的基础上,每个数组元素实际是形式上较为特殊的单个变量,拥有统一的名称和按规律变化的下标号。数组实质是一个有序的集合体,是把一批数据组织在一起的,它们之间存在逻辑上的联系,因此在对数组元素进行处理时,要利用 其名称变化及取值的规律,与循环语句结合,实现对数组元素的连续、有规律的操作。2、C语言在程序设计中,引用数组的前提条件是具有相同数据类型的元素。思考提出问题 引入新课自主学习 明确考点PART 02#include s
2、tdio.hvoid main()int i,a10;int b6=0,0,0,0,0,0;printf(enter the score:n);for(i=0;i10;i+)scanf(“%d”,&ai);switch(ai/10)case 6:b0+;break;case 7:b1+;break;程序代码如下:将10个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分数段的人数存到b数组中:成绩为60到69的人数存到b0中,成绩为70到79的人数存到b1,成绩为80到89的人数存到b2,成绩为90到99的人数存到b3,成绩为100的人数存到b4,成绩为60分以下的人数存到b5中。案例一
3、case 8:b2+;break;case 9:b3+;break;case 10:b4+;break;default:b5+;printf(the result is:);for(i=0;i6;i+)printf(%dt,bi);#define N 10/*定义符号常量N为10*/#include main()int aN,k;printf(enter the oraginal number:n);for();printf(the new order is:n);for()printf(%d,);将输入的10个数按输入次序相反的顺序输出。程序部分语句代码已给出如下,请补充完整程序运行结果:e
4、nter the oraginal number:1 2 3 4 5 6 7 8 9 10 the new order is:10 9 8 7 6 5 4 3 2 1案例二1、排序的含义及作用:排序是数据处理过程中一种重要运算,其作用是将无序的数据按从大到小(降序)或从小到大(升序的顺序排列。2、C语言程序设计中常用的方法方法有冒泡排序法、选择法、插入法、希尔法,这时首先介绍冒泡排序法、选择法。案例三:数组的排序3、冒泡法排序的基本过程(按从小到大):假设有5个数问题分析:(1)先定义一个空间容量为5的一维数组a,通过键盘输入5个数进行初始化。(2)将5个数按冒泡法思想进行排序。(3)输出排序
5、后的结果。(1)第1轮,从头到尾把数据中的两个相邻的数据进行比较,如果前1个数a0小于第2个数a1,则交换这两个数的位置,依次进行一直将该序列中最小的数沉到序列的最后位置。if(ajaj+1)temp=aj;aj=aj+1;aj+1=temp;(2)第2轮,先去掉第1轮排在最后的那个数据,然后将剩下的数再从头到尾依次比较,以将数列中次小的数沉到最小数前面的位置。(3)依此类推最终将该序列排好。至此,5个原本杂乱无章的数就排序完毕。设置变量i代表比较轮数,变量j代表该轮数组的下标值,则0=i5;0=j5-i 4、冒泡法的主要思想:案例三:数组的排序案例三:数组的排序算法介绍:将相邻的两个数比较将
6、小的调到前面。以5个数为例说明排序的过程。设int a5=9,7,5,6,8;则a0 97777a1 79555a2 55966a3 66698a4 88889 第一次 第二次 第三次 第四次 结果案例三:数组的排序可以看出通过第一轮的比较和交换,最大值沉到了底部,这正是我们所希望的,所以a4 不需要再参与第二轮的比较。a0 7555a1 5766a2 6677a3 8888 第一次 第二次 第三次 结果如此通过四轮后,就可以将5个数排好序。案例三:数组的排序程序代码如下:方式1:冒泡法下面对N个数(以5个数为例)按从小到大顺序进行排列(9,7,5,6,8)#include#define N
7、5main()int i,j,k,temp;int aN;/*定义变量*/for(i=0;iN;i+)scanf(%d,&ai);/*初始化数组*。for(i=0;i=N;i+)/*排序进行*/for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;for(i=0;iN;i+)printf(%5d,ai);/*输出结果*/方法2:选择法排序:(对10个整数排序(从大到小)算法介绍:设有10个元素a0到a9,将a0与a1到a9比较,若a0比a1到a9都大则不进行交换。a1到a9中有一个以上比a0大,则用最大的一个和a0交换,此时,a0中存放了10个数中最大的。第二轮将a1
8、与a2到a9比较,将剩下的9个数中最大的与a1对换。此时a1中存放的是10个数中次大的。依此类推,共进行9轮比较,a0到a9就已按由小到大顺序存放。案例三:数组的排序案例三:数组的排序程序如下:#include#define N 7main()int i,j,k,temp;int aN;for(i=0;iN;i+)scanf(%d,&ai);for(i=0;iN-1;i+)k=i;for(j=i+1;jaj)k=j;if(i!=k)temp=ai;ai=ak;ak=temp;for(i=0;iN;i+)if(i%10=0)printf(n);printf(%5d,ai);利用数组,求斐波拉契数
9、列的前20项,并按一行5个数输出。案例四斐波拉契数列是指某个元素等于其相邻的前两个元素之和。具体算法请看书本P83页。#include#define N 5main()int a20=1,1;int i;for(i=2;i20;i+)ai=ai-1+ai-2;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%5d,ai);案例分析 交流提升PART 03【例1】、分析以下程序填空以下程序可求出所有水仙花数(提示:所谓水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数),请填空。407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数)。#i
10、ncludemain()int x,y,z,a8,m,i=0;printf(”The special umbers are(in the arrange of l000):n”);for(;m+)x=m/100;y=;z=m%10;if(x*100+y*10+z=x*x*x+y*y*y+z*z*z);i+;for(x=0;xi;x+)printf(”%6d”,ax);【例2】、分析以下程序的运行后输出结果()#includemain()int i,m,n,s=0;int x,a=1,2,3,4,5,6,7,8,9;m=3,n=7;for(i=m;in;i=i+2)s=s+ai;printf(%
11、d,s);getch();仿真演练,体验探索PART 04改错题:使用冒泡排序法对含有10个元素的数组按从小到大的顺序进行排序输出,在排序前后输出数组各元素的值。程序如下#01#include#02 main()#03#04 int a9,i,j,t;#05 for(i=0;i10;i+)#06 scanf(%d,&ai);#07 for(i=0;i9;i+)#08 for(j=0;jaj+1)#10 aj=t;aj+1=aj;t=aj+1;#11 for(i=0;i10;i+)#12 printf(%d,ai);#13 2、阅读程序题(1)运行以下程序后的输出结果是()#define N 6
12、void main()int i,j,aN;for(i=1;i1;j-)aj+=aj-1;for(j=1;j=i;j+)printf(“%4d”,aj);printf(“n”);(2)、运行以下程序后的输出结果是()#include#define M 4void main()int i,j,k,m,a4;printf(“Enter 4 numbers:“);for(i=0;i0;i-)k=M-1;for(j=M-1;j0;j-)aj=aj-1;a0=k;for(m=0;mM;m+)printf(“%d”,am);printf(“n”);设一维数组a的4个输入整数是1,2,3,4,则程序的输出是
13、什么?(3)、以下程序的功能是:判断任意整数x是否为回文数(回文数:顺读与反读都一样的数)提示:(1)求出x的每一位数,放入数组各个元素中(2)数组元素首尾比较,判断是否为回文数(3)for(i=首下标,j=末下标;ij;i+,j-)main()long x;int i,j,n=0,d20;scanf(“%ld”,&x);dodn=x%10;x=x/10;n+;while(x!=0);for(i=0,j=n-1;ij;i+,j-)if(di!=dj)break;if(ij)printf(“NOT”);else printf(“YES”);3、编程题(1)从键盘输入20个整数,求出它们的最小值,并求最小值所在位置。(2)已知五个整数3,5,8,2,9,按从大到小的顺序排列起来