C语言教案第6章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第页1复习字符数据类型、字符和字符串新授第六章数组前面使用了一些基本的数据类型如整型、实型等,可以满足数据的基本要求,然而在现实中对数据的处理仅依赖于已的基本数据类型是不够的,为了解决比较复杂的问题,C语言提供了一种最简单的构造类型──数组。6.1一维数组的定义和引用6.1.11维数组的定义数组是同类型数据的在序集合,即数组由若干数组元素组成,期中所有元素都属于同一个数据类型,即它们的先后次序是确定的。数组同变量一样,也必须先定义、后使用。1维数组是只有1个下标的数组,定义形式如下:数据类型数组名[常量表达式][,数组名2[常量表达式2]……];(1)“数据类型”是指数组元素的数据类型。(2)数组名,与变量名一样,必须遵循标识符命名规则。(3)“常量表达式”必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。(4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。6.11维数组的定义和引用6.22维数组的定义和引用6.3字符数组与字符串6.1.11维数组的定义6.1.21维数组元素的引用6.1.31维数组元素的初始化6.1.41维数组应用举例第页2(5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。6.1.2数组元素的引用引用数组中的任意一个元素的形式:数组名[下标表达式]1.“下标表达式”可以是任何非负整型数据,取值范围是0~(元素个数-1)。2.1个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。3.在C语言中,数组作为1个整体,不能参加数据运算,只能对单个的元素进行处理。6.1.31维数组元素的初始化初始化格式:数据类型数组名[常量表达式]={初值表}(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。(2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。(3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。案例1:一维数组的输入与输出Main(){inti,a[4];以P苏大87页例7-2、88页例7-4进行练习。注意:C语言中不允许动态定义数组。特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是本书所约定的可选项第页3Printf(“inputdata;”);For(i=0;i4;i++)Scanf(“%d”,&a[i]);Printf(“\noutputdata”);for(i=0;i4;i++)Printf(“\a[%d]=%d”,I,a[i]);}案例1:求数组元素中的最大和最小值Main(){intI,max,min,inta[10];Printf(“inputdata;”);For(i=0;i10;i++)Scanf(“%d”,&a[i]);Max=a[0];Min=a[0];for(i=0;i10;i++){if(a[i]min)min=a[i];If(a[i]max)max=a[i];Printf(“max=%d”,max);Printf(“min=%d”,min);}6.1.41维数组应用举例1、已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10%、20%、20%、50%。的描述符号!特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。以高教出版社P113-114的两个例子上机进行程序编写。第页4/*案例代码文件名:AL6_2.C*//*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10%,20%,20%,50%的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/#include“stdio.h”main(){inti=1,j;charcon_key=‘\x20’;/*‘\x20’空格键的ASCII码*/floatscore[5],ratio[4]={0.1,0.2,0.2,0.5};/*定义成绩、比例系数数组*/while(con_key=='\x20')while(con_key=='\x20'){clrscr();printf(输入第%2d个学生的成绩\n,i++);printf(平时实习测验期末成绩\n);score[4]=0;/*score[4]:存储总评成绩*/for(j=0;j4;j++){scanf(%f,&score[j]);score[4]+=score[j]*ratio[j];}printf(总评成绩为:%6.1f\n,score[4]);printf(\n按空格键继续,其它键退出);con_key=getch();/*getch()函数等待从键盘上输入一个字符*/}}2、线性查找:从数组的第一个元素开始,依次将要查找的数和第页5数组中元素比较,直到找到该数或找遍整个数组为止。main(){inta[10]={0,2,4,6,8,10,12,14,16,18};Intx,i,find=0;printf(inputthenumforsearch);scanf(“%d”,&x);for(i=0;i10;j++)ifx==a[i];{find=1;Break;}If(find==1)Pfintf(“%disina[%d]\n”,x,I);Elseprintf(notfindthenum:%d\n”,x);}3、从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。排序的方法有很多,本题采用冒泡法。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。由A[n]~A[1]组成的n个数据,进行冒泡排序的过程可以描述为:(1)首先将相邻的A[n]与A[n-1]进行比较,如果A[n]的值小于A[n-1]的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较A[n-1]与A[n-2],同样使小的上浮,大的下沉。依此类推,直到第页6比较完A[2]和A[1]后,A[1]为具有最小排序码(数值)的元素,称第一趟排序结束。(2)然后在A[n]~A[2]区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A[2];重复进行n-1趟后,整个排序过程结束。/*案例代码文件名:AL6_1.C*//*功能:从键盘上任意输入10个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。*/#includestdio.h#defineNUM10/*定义符号常量(数据个数N)*/main(){intdata[NUM];/*定义1个1维整型数组data*/inti,j,temp;/*定义循环变量和临时变量*/clrscr();/*库函数clrscr():清屏*/printf(Pleaseinput10numbers:\n);for(i=0;iNUM;i++)scanf(%d,&data[i]);/*冒泡法排序*/for(i=0;iNUM-1;i++)/*外循环:控制比较趟数*/for(j=NUM-1;ji;j--)/*内循环:进行每趟比较*/if(data[j]data[j-1])/*如果data[j]大于data[j-1],交换两者的位置*/{temp=data[j];data[j]=data[j-1];data[j-1]=temp;};第页7/*输出排序后的数据*/printf(\ntheresultofsort:\n);for(i=0;iNUM;i++)printf(%d,data[i]);getch();/*等待键盘输入任一字符,目的使程序暂停*/}小结数组定义的形式、引用方法以及赋值第页8复习一维数组定义的形式、引用方法以及赋值格式。新授6.2二维数组的定义和引用6.2.1二维数组的定义二维数组的定义方式如下:数据类型数组名[行常量表达式][列常量表达式][,数组名2[行常量表达式2][列常量表达式2]……];1.数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。2.设有一个m*n的数组x,则第i行第j列的元素x[i][j]在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。3.可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。例如,对x[3][2],可以把x看作是一个1维数组,它有3个元素:x[0]、x[1]、x[2],每个元素又是一个包含2个元素的1维数组,如图6-4所示。即把x[0]、x[1]、x[2]看作是3个1维数组的名字。6.2.22维数组元素的引用引用2维数组元素的形式为:数组名[行下标表达式][列下标表达式]1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。2.“行下标表达式”和“列下标表达式”的值,都应在已定义数组大6.2.12维数组的定义6.2.22维数组元素的引用6.2.32维数组元素的初始化6.2.42维数组应用举例第页9小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。3.对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的2维数组元素。6.2.32维数组元素的初始化1.按行赋初值数据类型数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。2.按2维数组在内存中的排列顺序给各元素赋初值数据类型数组名[行常量表达式][列常量表达式]={初值表};赋值规则:按2维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。[案例1]给一个2*3的2维数组各元素赋值,并输出全部元素的值。/*案例代码文件名:AL6_3.C*//*功能:从键盘上给2*3数组赋值,并在屏幕上显示出来。*/#defineRow2#defineCol3#includestdio.hmain(){inti,j,array[Row][Col];/*定义1个2行3列的2维数组array*/第页10for(i=0;iRow;i++)/*外循环:控制2维数组的行*/for(j=0;jCol;j++)/*内循环:控制2维数组的列*/{printf(pleaseinputarray[%2d][%2d]:,i,j);scanf(%d,&array[i][j]);/*从键盘输入a[i][j]的值*/}printf(\n);/*输出2维数组array*/for(i=0;iRow;i++){for(j=0;jCol;j++)printf(%d\t,array[i][j]);/*将a[i][j]的值显示在屏幕上*/printf(\n);}getch();}例2:例:求4×3矩阵最大元素值及其所在位置。main(){inti,j,row,col,max;inta[4][3]={1,3,5,7,2,4,6,8,1,2,3,4};max=a[0][0];row=col=0;/*假定a[0][0]最大*/for(i=0;i=3;i++)for(j=0;j=2;j++)if(a[i][j]max){max=a[i][j];/*刷新max*/row=i,col=j;}/*更新row、col*/printf(Max=%d,

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功