您好,欢迎访问三七文档
C语言程序设计第5章数组第5章数组教学目标:掌握一维数组和二维数组的定义和初始化及引用;掌握一维数组的编程应用和二维数组的简单编程应用;知识点:C一维数组、二维数组的定义、初始化、存储结构和元素引用方法;数组典型应用算法。Page1C语言程序设计第5章数组第5章数组重点:一维数组、二维数组的定义和典型应用难点:插入算法、删除算法、查找算法、排序算法;矩阵的相加、相乘、转置算法;Page2C语言程序设计第5章数组5.1一维数组一维数组的定义和引用使用一个下标标识数组元素的数组叫作一维数组。如:每个班的学生排成一队,只需要指出某个学生在队列中的编号,就可以确定这个学生。Page3C语言程序设计第5章数组5.1一维数组一维数组的定义格式:类型名数组名[常量表达式];inta[10];定义a为一维数组,由10个元素组成,可独立存放10个整型数据,系统为数组a分配10个存储单元,共2*10=20个字节,且这些存储单元是连续的。类型标识符数组名常量表达式,数组大小数组aPage4C语言程序设计第5章数组5.1一维数组一维数组元素的引用——下标法格式:数组名[下标]下标可以是常量/变量/表达式[]:下标运算符,优先级1如,a[0],a[1],a[m],a[m*n](intm=3,n=2;)注意:①数组元素的下标从0开始②数组元素下标的最大值等于数组的大小减1a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]数组aPage5C语言程序设计第5章数组5.1一维数组一维数组的初始化格式:类型名数组名[常量表达式]={数据表列};例如:inta[10]={1,2,3,4,5,6,7,8,9,10};结果:将花括号中的常量依次赋给各个数组元素,即数组元素a[0],a[1],……,a[9]的值分别为1,2,……,10。只能为常量Page6C语言程序设计第5章数组5.1一维数组例如:inta[10]={2,3};结果:将花括号中的常量依次赋给各个数组元素,即数组元素a[0]的值为2,a[1]的值为3,其它各数组元素的值均为0。例如:inta[]={1,2,3,4,5,6,7,8,9,10};对全部数组元素赋初值时,可以不指定数组长度,系统自动按初值个数取长度为10可为部分元素赋初值Page7C语言程序设计第5章数组5.1一维数组注意:inta[];是不允许的。注意:若要使数组所有元素具有相同的初值,如inta[]={10*5};是不允许的。Page8C语言程序设计第5章数组5.1一维数组一维数组元素的输入和输出#includestdio.hvoidmain(){inta[10],i;for(i=0;i10;i++)scanf(%d,&a[i]);printf(\n);for(i=0;i10;i++)printf(%5d,a[i]);printf(\n);}Page9C语言程序设计第5章数组一维数组程序举例例5.3:为一个一维数组赋值,然后按相反顺序输出#includestdio.hvoidmain(){inti,a[10];for(i=0;i10;i++)a[i]=i;for(i=9;i=0;i--)printf(%d,a[i]);printf(“\n”);}Page10C语言程序设计第5章数组一维数组程序举例例5.6在一组无序且不重复的数据中查找一个数,若有则显示该数所在位置,否则输出提示“NotExist!”。解法一:inta[15]={21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8};inti,x,f_at,flag=0;/*flag用于判断是否找到,f_at记录找到数所在位置*/scanf(%d,&x);for(i=0;i15;i++)if(a[i]==x){flag=1;f_at=i;break;}Page11C语言程序设计第5章数组一维数组程序举例接上页if(flag==1)printf(%4disfound,it'sat%4d.\n,x,f_at);elseprintf(Notexist!\n);Page12C语言程序设计第5章数组举例在数组中顺序查找一个数解法二:scanf(“%d”,&x);for(i=0;i15;i++)if(a[i]==x)break;if(i15)printf(%4disfound,it'sat%4d.\n,x,i);elseprintf(“Notexist!\\n”);}两个出口非结构化程序Page13C语言程序设计第5章数组举例在数组中顺序查找一个数解法三:scanf(“%d”,&x);for(i=0;i15&&a[i]!=x;i++);if(i15)printf(%4disfound,it'sat%4d.\n,x,i);elseprintf(“Notexist!\\n”);}Page14C语言程序设计第5章数组一维数组程序举例例5.8在一组不重复数据中,删除指定位置的数。#includestdio.hvoidmain(){inta[12]={1,3,5,0,-3,6,9,15,7,2,-8,10};printf(Pleaseinputanumber:);scanf(%d,&del_at);/*输入待删除指定位置*/for(i=del_at;i11;i++)a[i]=a[i+1];/*各元素值依次被后续元素值替代*/for(i=0;i11;i++)/*输出数组时不包括最后一个元素*/printf(%4d,a[i]);printf(\n);}Page15C语言程序设计第5章数组上机作业输入要查找的数num;i=0当a[i]!=num&&iNi++TFj=i打印没找到!jN-1后面的数组元素向前移j++打印删除后的数组iN输入一个数,查找该数是否在一个一维数组中,若存在则删除该数组元素(后面的数依次向前移动),否则输出“notfound”。Page16C语言程序设计第5章数组举例插入数到已排序数列中使仍然有序习题5.3分析:假设n个由小到大排列的数存放在数组a中,待插入数存放在x中。首先必须在数组a中查找插入x的位置,当找到插入位置p后,将a(p)到a(n)中的数往后顺移一个位置以腾出a(p)放入x值。注意:插入数的位置有两种情况:有序数列之中的某个位置和最后一个数之后,应考虑周全。Page17C语言程序设计第5章数组举例插入数到已排序数列中使仍然有序#defineN5voidmain(){inta[N+1]={10,20,50,90,100},i,j,num;printf(“\n请输入要插入的数”);scanf(“%d”,&num);if(numa[N-1])a[N]=num;else{for(i=0;a[i]num&&iN;i++);for(j=N-1;j=i;j--)a[j+1]=a[j];a[i]=num;}printf(“\n插入完成!形成新数列:”);for(i=0;iN+1;i++)printf(“%d”,a[i]);printf(“\n”);}Page18C语言程序设计第5章数组一维数组程序举例例5.9将一维数组中元素向左循环移位,移位次数由键盘输入。inta[9]={1,2,3,4,5,6,7,8,9};inti,j,n,temp;printf(Pleaseinputtimes:);scanf(%d,&n);/*输入待移位次数*/for(i=1;i=n;i++){temp=a[0];for(j=0;j=7;j++)a[j]=a[j+1];/*各元素值依次被后续元素值替代*/a[8]=temp;}Page19C语言程序设计第5章数组一维数组程序举例例5.10将存放在数组中的一组数据按逆序重排,并实现输出。解法一:#includestdio.h#defineN7voidmain(){inta[N]={1,2,3,4,11,12,13};inti,temp;for(i=0;iN/2;i++){temp=a[i];a[i]=a[N-1-i];a[N-1-i]=temp;}for(i=0;iN;i++)printf(%4d,a[i]);}Page20C语言程序设计第5章数组一维数组程序举例解法二:#includestdio.h#defineN7voidmain(){inta[N]={1,2,3,4,11,12,13};inti,temp;for(i=0,j=N-1;ij;i++,j--){temp=a[i];a[i]=a[j];a[j]=temp;}for(i=0;iN;i++)printf(%4d,a[i]);}Page21C语言程序设计第5章数组一维数组程序举例例5.7用折半查找法在一组按升序排列且不重复的数据中查找一个数,若有则显示该数所在位置,否则输出提示“NotExist!”。#includestdio.hvoidmain(){inta[10]={7,9,12,18,21,25,33,39,45,60};intx,left,mid,right,flag=0;printf(Inputanumbertobesearched:);scanf(%d,&x);Page22C语言程序设计第5章数组接上页if(x=a[left]&&x=a[right])/*若x位于查找区间则开始查找*/while(!flag&&left=right){mid=(left+right)/2;if(a[mid]==x)flag=1;elseif(xa[mid])left=mid+1;elseright=mid-1;}if(flag==1)printf(%4disfound,it'sat%4d.\n,x,mid);elseprintf(Notexist!\n);}Page23C语言程序设计第5章数组起泡(冒泡)排序法对10个数(a[0]~a[9])进行从小到大起泡法排序的思路是:第0趟:依次将a[0]~a[9]中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时数组a的最大数“沉底”到了a[9];第1趟:依次将a[0]~a[8]中每对相邻元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时当前最大数即数组a的次大数“沉底”到了a[8];Page24C语言程序设计第5章数组起泡(冒泡)排序法中间过程以此类推……第8趟:将a[0]~a[1]中两个元素进行比较,使两数中的小数上冒、大数下沉,于是本趟结束时数组a的第9大的数“沉底”到了a[1],a[0]则存放数组的最小数。共经过了9趟,完成了10个数的递增排序。Page25C语言程序设计第5章数组第0趟比较交换0次1次2次3次4次5次6次7次8次结果a[0]5333333333a[1]3544444444a[2]4452222222a[3]2225000000a[4]0000500000a[5]0000050000a[6]0000005000a[7]0000000500a[8]0000000051a[9]1111111115Page26C语言程序设计第5章数组第1趟比较交换0次1次2次3次4次5次6次7次结果a[0]333333333a[1]442222222a[2]224000000a[3]000400000a[4]000040000a[5]000004000a[6]000000400a[7]000000041a[8]111111114a[9]555555555Page27C语言程序设计第5章数组一维数组程序举例例5.11利用冒泡法对键盘输入的10个数按从小到大顺序排列。for(i=9;i=1;i--){k=i;/*k为每轮比较范围的终止元素下标*/for(j=0;j=k-1;j++){if(a[j]a[j+1]){temp=a[j];a[j
本文标题:C语言数组课件
链接地址:https://www.777doc.com/doc-3563493 .html