i-;I/还原到删除位置,以处理连续删除del++;Afor(i=0;i<10-del;i++)printf("%4d",a[i]);A3、查找二分法检索(在序列x中检索y的位置)前提:有序数列(以递增序为例)原理:等分区间;若y小于中间数,则取左半边,否则取右半边。再等分,再比较..例:对于区间[a,b] 等分为若 y==x[K] 则位置为k若y<x[K]则取新区间[a,k-1](即b=k-1)若y>x[K]则取新区间[k+1,b] (即a=k+1)二分法查找递增序列mainOkint x[10]=[34,56,78,87,88,90,101,112,520,888];int y,i,k,a=0,b=9;for(i=0;i<10;i++) printf("%d ",x[i]);scanf("%d",&y);while(a<=b)/二分法查找k=(b+a)/2; printf("x[%d]=%d\n",k,x[k]);if(y==x[k)) break;if(y<x[k]) b=k-1;elsea=k+1if(a>b) printf("ERROR");elseprintf("Inx[%d]=%din",k,x[k]);getch);课堂提问讨论小结、作业布置思考题、课后作业主要参考资料课后自我
i-; //还原到删除位置,以处理连续删除 del++; } } for(i=0;i<10-del;i++) printf("%4d",a[i]); } 3、查找 二分法检索 (在序列x[]中检索y的位置) 前提:有序数列 (以递增序为例) 原理: 等分区间; 若y小于中间数,则取左半边,否则取右半边。 再等分,再比较 . 例: 对于区间[a, b] 等分为 若 y==x[k] 则位置为k 若y<x[k] 则取新区间 [a,k-1] (即b=k-1) 若y>x[k] 则取新区间 [k+1,b] (即a=k+1) 二分法查找递增序列 main(){ int x[10]={34,56,78,87,88,90,101,112,520,888}; int y,i,k,a=0,b=9; for(i=0;i<10;i++) printf("%d ",x[i]); scanf("%d",&y); while(a<=b){ //二分法查找 k=(b+a)/2; printf("x[%d]=%d\n",k,x[k]); if(y==x[k]) break; if(y<x[k]) b=k-1; else a=k+1; } if(a>b) printf("ERROR"); else printf("\nx[%d]=%d\n",k,x[k]); getch(); } 课堂提问讨论 小结、作业布置 思考题、 课后作业 主要 参考资料 课后自我
总结分析备注《计算机程序设计基础C语言》教案总学时36第23学时一第24学时授课内容第4章数组和指针一二维及多维数组教学目的二维数组定义、初始化、引用;多维数组和要求重点:重点二维数组定义、初始化、引用难点矩阵操作教30分钟讲解实验三循环结构程序设计学讲授安一、二维数组的定义和初始化排1.定义需要两个下标才能标识数组中某个元素的位置,也称为矩阵。Useatwo-dimensional arrayiftwo otheridentifiersareneededtodeterminethevalueofinterest.定义格式为:类型定义符数组名[常量表达式1][常量表达式2]2.二维数组的初始化和引用两种初始化方式:按行初始化:每一对花括号对应一行的元素。按存放顺序初始化:按内存中的存放顺序将初始值分别赋值给对应的元素。int a[2][3]={[1,2,3],[4,5,6];int a[2][3]={1,2,3,4,5,6];int a[[3]={1,2,3,4,5,6];int d[3][4]-{1],[2,3],[4,5,6];int d[4]={{1],[2,3],{4,5,6];int d[3][4]-[1,0,0,0,2,3,0,0,4,5,6];int d[4]={1,0,0,0,2,3,0,0,4,5,6];inte[3][4]={[0,0,0,1],[0,0,2,3],[0,4,5,6]
总结分析 备注 《计算机程序设计基础C语言》教案 总学时36 第 23学时 — 第 24学时 授课内容 第4章 数组和指针——二维及多维数组 教学目的 和要求 二维数组定义、初始化、引用;多维数组 重点 难点 重点: 二维数组定义、初始化、引用 矩阵操作 教 学 安 排 30分钟讲解实验三循环结构程序设计 讲授 一、二维数组的定义和初始化 1. 定义 需要两个下标才能标识数组中某个元素的位置,也称为矩阵。Use a twodimensional array if two other identifiers are needed to determine the value of interest. 定义格式为: 类型定义符 数组名[常量表达式1] [常量表达式2] 2. 二维数组的初始化和引用 两种初始化方式: 按行初始化:每一对花括号对应一行的元素。 按存放顺序初始化:按内存中的存放顺序将初始值分别赋值给对应的元素。 int a[2][3]={{1,2,3},{4,5,6}}; int a[2][3]={1,2,3,4,5,6}; int a[][3]={1,2,3,4,5,6}; int d[3][4]={{1},{2,3},{4,5,6}}; int d[][4]={{1},{2,3},{4,5,6}}; int d[3][4]={1,0,0,0,2,3,0,0,4,5,6}; int d[][4]={1,0,0,0,2,3,0,0,4,5,6}; int e[3][4]={{0,0,0,1},{0,0,2,3},{0,4,5,6}};
int e[4]={(0,0,0,1],[0,0,2,3],[0,4,5,6];int e[3][4]=[0,0,0,1,0,0,2,3,0,4,5,6];3.二维数组在内存中的存放M行N列的二维数组a,a[i]j]的位置公式为:i*N+j+1数组元素a[i]j]存储映射关系为:a[]i]a[O][N*i+j]1Real computermemory has only onedimension, i.e.each location isidentifiedwithonlyonecomponentofaddress.因此,二维数组元素可用它相对数组首元素[0][0]位置的偏移量来表示(称为存储映射关系storagemapping)。对二维数组元素的操作除了用二重循环外,还可以用一重循环实现。In C, or any other language supporting arrays with dimension sizesgreater than one, two-dimensional arrays simulate the effect of using twocomponents of address.To dothis,the arrayismapped into consecutivememorywithrowO'svaluesfirst,thenrowone'svalues,etc.TYoucanthinkofthis asa setofonedimensional arraysholdingthecolumnvaluesasasinglevalueintherow'svalues.二、二维数组元素的引用对二维数组inta[3][4]中各元素的输出操作① for(i=0;i<3;i++)for(j=0;j<4;j++)printf("%4d",a[]]);② for(i=0;i<3;i++)for(i=0;j<4;j++)1用相对a[0][0]位置的偏移量来表示printf("%4d",a[0][4*i+jl);③ for(i=0;i<12;i++)1/用相对a[0][0]位置的偏移量printf("%4d",a[0][i]);三、二维数组的应用举例1矩阵#defineN3main()int i,j,s=0,a[N][N]={{1,1,1],2,1,1],[2,2,1]]I 显示矩阵a[3][3]printf("对于矩阵a[%d][%d])n",N,N);for(i=0;i<N;i++)Kfor(j=0;j<N;j++)
int e[][4]={{0,0,0,1},{0,0,2,3},{0,4,5,6}}; int e[3][4]={0,0,0,1,0,0,2,3,0,4,5,6}}; 3. 二维数组在内存中的存放 M行N列的二维数组a,a[i][j] 的位置公式为:i*N+j+1 数组元素a[i][j]存储映射关系为:a[i][j] a[0][N*i+j] l Real computer memory has only one dimension, i.e. each location is identified with only one component of address. l 因此,二维数组元素可用它相对数组首元素[0][0]位置的偏移量来表示(称 为存储映射关系storage mapping )。对二维数组元素的操作除了用二重循 环外,还可以用一重循环实现。 l In C, or any other language supporting arrays with dimension sizes greater than one, two-dimensional arrays simulate the effect of using two components of address. To do this, the array is mapped into consecutive memory with row 0’s values first, then row one’s values, etc. l You can think of this as a set of one dimensional arrays holding the column values as a single value in the row’s values. 二、二维数组元素的引用 对二维数组int a[3][4]中各元素的输出操作 ① for(i=0;i<3;i++) for(j=0;j<4;j++) printf("%4d",a[i][j]); ② for(i=0;i<3;i++) for(j=0;j<4;j++) //用相对a[0][0]位置的偏移量来表示 printf("%4d",a[0][4*i+j]); ③ for(i=0;i<12;i++) //用相对a[0][0]位置的偏移量 printf("%4d",a[0][i]); 三、二维数组的应用举例 l 矩阵 #define N 3 main ( ){ int i,j,s=0,a[N][N]={{1,1,1},{2,1,1},{2,2,1}}; // 显示矩阵 a[3][3] printf("对于矩阵 a[%d][%d]\n",N,N); for(i=0;i<N;i++){ for(j=0;j<N;j++)