如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第七章数组一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名[下标]其中:下标可以是常量或整型表达式例7.1数组元素的引用#include<stdio.h>voidmain(){inti,a[10];for(i=0;i<=9;i++)a[i]=i;for(i=9;i>=0;i--)printf(“%d”,a[i]);}一维数组的初始化初始化方式例7.2用数组求Fibonacci数列前20个数将一组无序的数列重新排列成从小到大或从大到小的顺序,就叫排序。排序的依据叫做排序的关键字。如按学号排序,学号就叫排序的关键字。排序的方式有两种:从小到大叫升序,从大到小叫降序。例如,在管理学生成绩的程序中,可以用一个数组表示某班的学生成绩,并按照从高到低的顺序重新排列,以便确定获得奖学金的学生。再如高考时,需按总分从高到低(降序)排序,以方便录取。排序的方法有多种,如冒泡法、希尔法、选择法等。为便于理解,我们先介绍选择法。补例7-1假设用户通过键盘输入一个整型数列。请编写一个程序,将其按照从小到大的顺序重新排列。(选择法)a[1]a[2]a[3]……a[N]第1轮:a[1]-a[2],a[1]-a[3]…a[1]-a[N]a[1]最小第2轮:a[2]-a[3],a[2]-a[4]…a[2]-a[N]a[2]次小……第i轮:a[i]-a[i+1],a[i]-a[i+2]…a[i]-a[N]a[i]第i小第N-1轮:a[N-1]-a[N]a[N-1]次大a[N]最大程序结构:①建立数组i=1—N-1,i++输入a[i]②排序:i=1N-1,i++j=i+1N,j++if(a[j]<a[i])则交换③输出排序结果:i=1N,i++输出a[i]#include<stdio.h>#defineN10/*参与排序的数据个数*/voidmain(){inta[N+1],i,j,t;printf("\nEnter%dintegers:",N);for(i=1;i<=N;i++){scanf("%d",&a[i]);}for(i=1;i<=N;i++)/*排序*/{for(j=i+1;j<=N;j++){if(a[j]<a[i]){t=a[i];a[i]=a[j];a[j]=t;}}/*后者小就换*/}printf("\nOrderinglistis:");/*输出排序后的结果*/for(i=1;i<=N;i++){printf("%5d",a[i]);}printf("\n");}例7.3-2用起泡法对10个数排序(由小到大)第一趟:i=N-1次第二趟:i=N-2次9888888555589555558444559444448224449222228022229000008000009(2)若有N个数,要进行N-1趟的比较交换。若用j表示比较的趟数,所以j=1--N-1。(3)第一趟要比N-1次,第二趟要比N-2次,……,第j趟要比N-j次。若用i表示每趟比较的次数,则i=1--N-j次。查找问题查找就是在一组数据中搜索是否存在满足给定条件的数据。如果存在,则表示查找成功,给出成功的标志;否则表示查找不成功,给出失败的标志。我们介绍两种查找方法:(1)顺序查找:顺序查找就是从第一个数据到最后一个数据逐个进行排查,看是否满足给定条件。这种方法的缺点是效率低,若有N个数据,平均搜索次数为N/2;优点是N个数据不用事先排序。(2)对分查找(书上叫二分查找):对分查找的特点是每次总是从中间一个数据查起。排除半个区间后,再从另外的半个区间的中点查起。如天平称量时加法码,查地下电缆的断点等。(单因素的优选法---0.618法)。这种方法的优点是效率高,若有N个数据,平均搜索次数为log2N。例7.4已知某个班级10名学生的某门课程的考试成绩。请编写一个程序,查看在这个班级中是否存在不及格的学生。算法描述#include<stdio.h>#defineN10/*学生人数*/voidmain(){intscore[N];inti;printf("请输入%d名学生的成绩:",N);for(i=0;i<N;i++){printf(“\nscore[%d]=?",i);scanf("%d",&score[i]);}for(i=0;i<N;i++)/*显示10名学生的考试成绩*/{printf("\n序号:%2d成绩:%3d",i+1,score[i]);}printf("\n");for(i=0;i<N;i++)/*查找不及格的学生*/{if(score[i]<60