您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计6--李2012
学习目标1.掌握一维数组、二维数组和字符数组的定义、使用和初始化2.重点掌握一维数组的三个排序程序①冒泡法②比较交换法排序③选择法排序3.重点掌握字符串处理的四个库函数的①功能②参数的个数和类型③函数的返回值④编程实现这四个库函数的功能:strlen()strcpy()strcmp()strcat()2020/1/28《C语言程序设计》-第六章3基本类型构造类型派生类型整型int结构体struct数组类型字符型char共用体(联合)型union指针类型实型float枚举型enum双精度型Double用户定义类型typedef空值型void构造数据类型(导出类型):由基本数据类型按一定规则组合而成的。广义上包括表中的构造类型和派生类型。2020/1/28《C语言程序设计》-第六章46.1数组和数组元素6.2一维数组6.3多维数组6.4字符数组目录2020/1/28《C语言程序设计》-第六章5●数组:同一类型的、顺序排放的数据集合,这些数据在计算机内存中占一片连续的存储区域。●同一数组中的每个元素:都用统一的数组名和不同的下标确定。●数组的特点:数组的长度一定数组元素排列有序数据类型相同数组元素的值可以改变。●数组的用途:处理具有相同数据类型、批量有序的数据6.1数组和数组元素2020/1/28《C语言程序设计》-第六章66.1数组和数组元素数组是一种数据结构,处于这种结构中的变量具有相同的性质,并按一定的顺序排列。数组的定义:数据类型数组名[数组长度];例:inta[6];a[0]0145a[1]a[2]a[3]a[4]a[5]23a数组元素(下标变量)数组中的每个分量,用下标来表示其所处位置,各分量排列有序且数据类型相同。数组元素的表示:数组名[下标]例:a[3],data[3][4]数组名表示数组存储区域的首地址,数组的首地址也就是第一个元素的地址,是一个地址常量,不能向它赋值。例:a或&a[0]下标用来表示该数组元素在数组中的相对位置,是整型常量,最小值为0,最大值为数组长度-1。例:a[3]中的下标32020/1/28《C语言程序设计》-第六章7一维数组:带有一个方括号的数组。a[6]二维数组:带有两个方括号的数组。data[3][4]三维数组:带有三个方括号的数组。c[3][4][5]n维数组:带有n个方括号的数组。b[4]…[4]多维数组[例6.1]用数组表示向量D和矩阵A数组d[10]表示向量D:d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],d[8],d[9]数组a[4][3]表示矩阵A:a[0][0],a[0][1],……,a[3][2]3231302221201211100201009876543210),,,,,,,,,(aaaaaaaaaaaaAddddddddddD6.1数组和数组元素2020/1/28《C语言程序设计》-第六章86.2一维数组的定义1.一维数组的定义:类型数组名[数组长度];例:inta[6];数组长度:用常量表达式来表示数组元素的个数2.一维数组元素的使用:数组名[下标]例:a[0]=100;2020/1/28《C语言程序设计》-第六章9数组定义时:类型说明符用来说明数组元素的类型的,可以是基本类型或构造类型。数组名后是用方括号括起来的常量表达式,不能用圆括号inta(10)×常量表达式:表示数组元素的个数,即数组长度。C规定数组元素的下标从0开始,每维下标的最大值是维定义数值减1。6.2一维数组的定义2020/1/28《C语言程序设计》-第六章10数组定义时:常量表达式:可以是整型常量、符号常量,不能包含变量在C语言里不允许用变量定义数组的大小。①intn;inta[n];×……②intn;scanf(“%d”,&n);/*在程序中临时输入数组元素的大小*/inta[n];×……不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值。6.2一维数组的定义2020/1/28《C语言程序设计》-第六章11一维数组的引用:数组必须先定义,后使用。※C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的使用方法同变量。下标可以是整型常量或整型表达式。例如:a[0]=a[5]+a[7]-a[2*3]6.2一维数组的使用2020/1/28《C语言程序设计》-第六章12一维数组的引用:注意区别两种形式:定义数组时用到的“数组名[常量表达式]”引用数组元素时用到的“数组名[下标]”。例如:inta[10];/*定义数组长度为10*/t=a[6];/*引用a数组中序号为6的元素,此时6不代表数组长度*/注意区别下标:表示数组长度时,下标必须是整型常量或符号常量引用数组元素时,下标可以是整型变量6.2一维数组的使用2020/1/28《C语言程序设计》-第六章139876543210main(){inti,a[10];for(i=0;i=9;i++)a[i]=i;/*将元素a[0]~a[9]分别赋值*/for(i=9;i=0;i--)printf(“%d”,a[i]);/*循环输出元素a[9]~a[0]的值*/}例6.2一维数组元素的赋值和输出2020/1/28《C语言程序设计》-第六章141.一维数组的初始化:在说明时对数组的元素进行赋值类型数组名[数组长度]={常量表达式1,常量表达式2,…};inta[]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4,5,6,7,8,9};inta[10]={0,1,2,3,4};inta[4]={1,2,3,4,5};(╳)6.2.2一维数组的初始化2020/1/28《C语言程序设计》-第六章15注意:数组长度可省略,设初值时系统自动按初值的个数分配空间。(若数组长度和初值个数不同,则数组长度不能省略)花括号中的常量个数常小于数组长度,相应赋值后,其余赋0。若数组长度小于初值个数,则编译错误。6.2.2一维数组的初始化2020/1/28《C语言程序设计》-第六章16如果想使数组中全部元素值为0,则可写成:inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};一般不写成:inta[10]={0*10};6.2.2一维数组的初始化2020/1/28《C语言程序设计》-第六章17例6.3整型数组的初始化main(){inti;inta[]={0,1,0,0,1};for(i=0;i5;i++)printf(%d,a[i]);}010012020/1/28《C语言程序设计》-第六章18(补例)用数组来处理Fabonacci数列问题#includestdio.hmain(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}printf(“\n”);}6.2.2一维数组的初始化例6.4冒泡法从小到大排序程序排序过程:设有n个数据,存放到a1到an的n个数组元素中。(1)从a1到an,依次把两个相邻元素两两比较,即a1与a2比,a2与a3比,…,an-1与an比;(2)每次两相邻元素比较后,若前一个元素值比后一个元素值大,则交换两元素值;否则,不交换。(3)重复上述算法,把a1到an中的最大值换到an,再把a1到an-1中最大值换到an-1,……最后把a1到a2中最大值换到a2中,即完成排序。假如数组a中a[1]~a[8]存放8个数据如下:26541983第1轮:a[1]~a[8]内两两元素依次比较如下:a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]26541983不交换26541983交换25641983交换25461983交换25416983不交换25416983交换25416893交换•5416839比较顺序:第1轮:a1与a2比,a2与a3比,a3与a4比,a4与a5比,a5与a6比,a6与a7比,a7与a8比,(比较完,最大的数为a8)第2轮:a1与a2比,a2与a3比,a3与a4比,a4与a5比,a5与a6比,a6与a7比(比较完a7为次大的数)....2020/1/28《C语言程序设计》-第六章19main(){inti,j,t,a[9];printf(Input8numbers:\n);for(i=1;i=8;i++)scanf(“%d”,&a[i]);/*输入8个数*/printf(\n);for(j=1;j=7;j++)/*比较轮数*/for(i=1;i=8-j;i++)/*每轮比较次数*/if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf(thesortednumbers:\n);for(i=1;i=8;i++)printf(%d,a[i]);}例6.5比较交换法从大到小排序程序2020/1/28《C语言程序设计》-第六章20排序过程:将当前尚未排序的首位元素与其后的各元素比较交换。具体:(1)通过比较交换将数组元素a1到an中的最大值放入a1中;(2)再次比较交换将数组元素a2到an中的最大值放入a2中;(3)以此类推,将ai到an中的最大值存入到ai中,直到最后二个元素an-1与an进行一次比较,依条件交换,较大值存入an-1中,即达到了按从大到小的排序。假如数组a中a[1]~a[6]存放6个数据如下:574386第1轮:a[1]与a[2]~a[6]两两元素依次比较如下:a[1]a[2]a[3]a[4]a[5]a[6]574386交换754386不交换754386不交换754386交换854376不交换854376比较顺序:第1轮:a1与a2比,a1与a3比,a1与a4比,a1与a5比,a1与a6比(a1里放最大数)第2轮:a2与a3比,a2与a4比,a2与a5比,a2与a6比(a2里放次大数)第3轮:a3与a4比,a3与a5比,a3与a6比(a3里放第3大数)……………..#defineN6main(){inti,j,t,a[N+1];printf(Input6numbers:\n);for(i=1;i=N;i++)scanf(%d,&a[i]);printf(\n);for(i=1;i=N-1;i++)for(j=i+1;j=N;j++)if(a[i]a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf(thesortednumbers:\n);for(i=1;i=N;i++)printf(%d,a[i]);}2020/1/28《C语言程序设计》-第六章21例6.6选择法排序从大到小排序排序过程:在每一轮比较中不是每当aiaj时就交换,而是用一个变量k记下其中值较大的元素的下标值,在ai与ai+1到an都比较后,只将ai与ai+1到an中值最大的那个元素交换,为此,在每一轮只需将ai与ak的值交换即可。比较方法:a[1]a[2]a[3]a[4]a[5]a[6]574386i=1k1=1k2=2k3=5874356i=2k1=2874356i=3k1=3k2=5k3=6876354i=4k1=4k2=5876534i=5k1=5k2=6•76543#defineN6main(){inti,j,t,k,a[N+1];printf(Input6numbers:\n);for(i=1;i=N;i++)scanf(%d,&a[i]);printf(\n);for(i=1;i=N-1;i++){k=i;for(j=i+1;j=N;j++)if(a[j]a[k])k=j;if(k!=i){t=a[i];a[i]=a[k];a[k]=t;}}printf(thesortednumbers:\n);for
本文标题:C语言程序设计6--李2012
链接地址:https://www.777doc.com/doc-3357789 .html