【文档说明】C语言一维数组课件.ppt,共(64)页,1.342 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-7163.html
以下为本文档部分文字说明:
定义例:格式:类型说明符数组名[常量表达式];inta[5];charc[20];floatx[10];定义一个数组元素为整型的,包含五个数组元素的一维数组定义一个数组元素为字符型的,包含20个数组元素的一维数组定义一个数组元素为浮点
型的,包含10个数组元素的一维数组决定数组元素的类型用户为数组起的名字决定数组元素个数2说明:1.数组名定名规则和变量名相同,遵循标识符定名规则。2.在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的
个数,即数组长度。3.常量表达式中可以包括常量和符号常量,但不能包含变量。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。33二、引用一维数组变量的数组元素原则:数组型变量必须先定义,后使用。只能逐个引用数组元素,不能直接引用整个数组
型变量。数组下标从0开始。a[0]a[1]a[2]例如,定义数组a:inta[3],数组元素为:44二、引用一维数组变量的数组元素原则:数组型变量必须先定义,后使用。只能逐个引用数组元素,不能直接引用整个数组型变量。数组下标从
0开始。a[0]a[1]a[2]例如,定义数组a:inta[3],数组元素为:对数组变量的处理只能一个数组元素一个数组元素地处理例inta[10];printf(“%d”,a);()()必须for(j=0;j<10;j++printf(“%
d\t”,a[j]);6注意:定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”是有区别的。例如∶inta[10];t=a[6];例题巩固在C语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式C)整型常量或整型表达式D)
任何类型的表达式C语言中,数组名代表A.数组全部元素的值B.数组首地址C.数组第一个元素的值D.数组元素的个数合法的数组定义是A.inta[]=”string”;B.inta[5]={0,1,2,3,4,5};C.chara=”string”;
D.chara[]={0,1,2,3,4,5};若有定义和语句:chars[10];s={a,b,c,d};printf(“%s\n”,s);则结果是(以下u代表空格)A.输出abcdB.输出aC.输出abcduuuuuD.编译不通过若有说明:inta
[10];则对a数组元素的正确引用是。A)a[10]B)a[3.5]C)a(5)D)a[10-10]以下能对一维数组a进行正确初始化的语句是。A)inta[10]=(0,0,0,0,0);B)inta[10]={};C)inta[]={0};D)inta[10]=”10*1”;
对以下说明语句的正确理解是。inta[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5]B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确若已定义数组:float
a[8];则下列对数组元素引用正确的是。Aa[0]=1;B.a[8]=a[0];C.a=1;D.a[3.5]=1;阅读程序,写出运行结果:main(){inti,a[10];for(i=0;i<10;i++)scanf(“%d”,&a[i]);while(i>0){printf(“
%3d”,a[--i]);if(!(i%5))putchar(„\n‟);}}输入数据12345678910,则运行结果为:A.12345678910B.10987654321C.12345678910D.10987654321执行下面的程序段后,变量k中的值为________
__。intk=3,s[2];s[0]=k;k=s[1]*10;A)不定值B)33C)30D)10下列程序执行后的输出结果是__________。main(){inta,b[5];a=0;b[0]=3;printf("%d,%d\n",b[0],b[1]);}A)3
,0B)30C)0,3D)3,不定值以下程序的输出结果是________。main(){inti,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2};for(i=1;i<10;i++)if(a[i]<
a[p])p=i;printf("%d,%d\n",a[p],p);}A)-3,4B)0,1C)9,2D)2,9有如下说明:inta[10]={0,1,2,3,4,5,6,7,8,9};则数值不为9的表达式是________。A)a[10-
1]B)a[8]C)a[9]-0D)a[9]-a[0]有如下程序main(){intn[5]={0,0,0},i,k=3;for(i=0;i<k;i++)n[i]=i+1;printf("%d\n",n[k]);
}该程序的输出结果是________。A)不确定的值B)4C)2D)02121使用数组编程:步骤:1.定义数组;2.对数组进行初始化;3.引用数组,对数组进行相应的操作;4.对结果数组进行输出;例.使用数组编程,计算
出前10项fibonacci数列,要求一行打印5个数。斐波那契数列:1、1、2、3、5、8、13、21、34、55……怎么做?2222例:计算出fibonacci数列前10项,要求一行打印5个数。目标1:使用数组存放这10个数;目标2:输出时,一行打
印5个数定义整型数组f:intf[10]输出f[i],i:0~9输出5个数换一次行。2323f[1]:第二项,为1;f[0]:第一项,为0;f[0]=1;f[1]=1;从第三项开始,每一项为:它的前两项之和,即:f[i]=f[i-1]+f[i-2];(
i:2~9)计算fibonacci中的项:intf[10];f[0]=1;f[1]=1;ff[0]f[1]f[2]f[3]f[4]f[5]f[6]f[7]f[8]f[9]for(i=2;i<10;i++)f
[i]=f[i-1]+f[i-2];for(i=0;i<10;i++){if(i%5==0)printf("\n");printf("%4d",f[i]);}11235813213455813213455523执行过程:11252
5四、对数组进行输入和输出C语言规定,对数组的使用只能逐个引用数组元素,不能一次引用整个数组变量。同样,对数组的输入和输出也是依次对每个元素进行的。即:printf和scanf语句的操作对象是每个数组元素。例:
输入10个数到数组a中,然后将它们输出。怎么做?2627例6.4求若干个数(不多于10个)的最大数,最小数#defineN10#include"stdio.h"voidmain(){intI,n;floata[N],max,min;printf("input
datanumbers:");scanf("%d",&n);printf("enternumbers:");for(i=0;i<n;i++)scanf("%f",&a[i]);max=min=a[0];for(i=1;i<n;i++){if(a[i]>
max)max=a[i];if(a[i]<min)min=a[i];}printf("\nmax=%f,min=%f\n",max,min);}2929五、应用举例3030五、应用举例1、排序1、冒泡法排序2、选择法
排序2、查找1、顺序查找2、折半查找3131用数组编程时,可以这样思考:1.在存储器中有一片连续的内存区,名称为a。2.将需要处理的一组数据,依次放入这片连续内存区的每一个单元中。对应的名称分别为:a[0]a[1]a[2]a[3]……a[n-2]a[n
-1]a[0]a[1]a[2]a[3]……a[-2]a[-1]3.根据问题的需要,对这组数据中的每一个数据元素进行相应的处理,处理时的访问方式为:a[i],即:数组a中下标为i的位置处的数组元素。32321.有一个一维数组,有10个整数存放其中,找出其
中最大的一个数。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]0123456789数组amax=a[0];for(i=1;i<10;i++)if(a[i]>max)max=a[i];定义main(){inti,max,x[10];printf("enterdat
a:\n");for(i=0;i<10;i++)scanf("%d",&x[i]);max=x[0];for(i=1;i<10;i++)if(x[i]>max)max=x[i];输入处理输出printf("max=%d\n",max);}34342.用冒泡法对10个整数按从小到大的顺
序排列。1.什么是"冒泡法排序"?2.排序的过程3.核心程序段4.完整程序怎么做?3535冒泡法排序的思想–假设有n个数,将相邻的两个数依次进行比较,使小的在前,大的在后,那么第一轮比较n-1次就把最大的数排到了最后。–第二轮比较n-2次,就把次大的数排到了倒数第二,
依此类推,直到第n-1轮比较1次,将最小的数排到了第一,算法结束。–算法的整体思路是让大的数不断地往下沉,小的数不断地往上冒,所以叫"冒泡排序法"。inta[5]13219032-113213290-1第一轮的结果:将最大的数移到了最后一个位置(n-1)。1321
32-190a[0]a[1]a[2]a[3]a[4]第一轮21139032-113219032-1inta[5]132132-190a[0]a[1]a[2]a[3]a[4]132132-1901321-13290第二轮132132-190第二轮的结果:将第二大的数移到了n-2的位置。inta
[5]a[0]a[1]a[2]a[3]a[4]1321-13290第三轮1321-1329013-1213290第三轮的结果:将第三大的数移到了n-3的位置。inta[5]a[0]a[1]a[2]a[3]a[4]第四轮1
3-1213290-113213290-113213290结果:最后一轮的结果:将最小的数移到了第0的位置。排序程序段:4142423.选择法排序①要求:将n个数按照从大到小的顺序排列。②前提:n个数放入一个一维数组中。③选择法排序的思想
:a)第一次,从n个数中,找出一个最大的,放到第一个数组元素的位置处。b)第二次,从剩下的n-1个数中,找出一个最大的,放到第二个数组元素的位置处。c)以此类推,第n-1次,从剩下的两个数中,找出一个最大的放到第n-1个数组元素
的位置处。引例:从一组数中,找出其中最大的一个数。引例:从一组数中,找出其中最大的一个数。引例:从一组数中,找出其中最大的一个数。46463.选择法排序①要求:将n个数按照从大到小的顺序排列。②前提:n个数放入一个一维数组中。③选择法排序的思
想:a)第一次,从n个数中,找出一个最大的,放到第一个数组元素的位置处。b)第二次,从剩下的n-1个数中,找出一个最大的,放到第二个数组元素的位置处。c)以此类推,第n-1次,从剩下的两个数中,找出一个最大的放到第n-1个数组元素的位置处。474848写一选择法排序算
法(小→大)写一冒泡法排序算法(大→小)思考题:4949五、应用举例1、排序1、冒泡法排序2、选择法排序2、查找1、顺序查找2、折半查找5050关于查找:首先,待查找的数据放在一个一维数组中
;问题:到这样一个一维数组中去寻找一个满足某种特征的数组元素,如果找到,返回一个整数值,标志这个数在数组中的位序;如果找不到,返回整数0。查找的方法:计算机中有许多的查找方法,在这里,我们只介绍两个方法:顺序查找和折半查找。
51511、顺序查找顺序查找方法适用于无序存放的一组数据。查找从一维数组的最后一个数组元素开始比较,直到找到指定的数组元素或已到达数组的头部依然没找到。52521、顺序查找说明:如果待查找的数据有n个,那么,我们定义一个拥有n+1
个数组元素的一维数组;其中,下标为0的数组元素留作他用,待查找的数据从下标为1的位置开始存放。查找时,首先将指定的数据放入下标为0的位置,然后开始查找。5353顺序查找过程:•顺序查找时的内存状态:1098765432100号单元空置数据元素从1号单元开始存放5454顺序
查找过程:10987654321021378819920564568075ST假设给定值key=64,要求nkk64kkK=7ST[k]==key,问:k=?5555顺序查找过程:10987654321021378819920564568075ST假设给定值e=60,要求ST[k]==
e,问:k=?nkk60kkK=0k5656查找的结果:如果在查找表中存在要查找的元素,则返回该元素所在的位置的下标;如果在查找表中不存在要查找的元素,则返回整数0;程序描述如下:58582、"折半"查找•若数组中的数据已经按照从小到大的顺序排好序,则查找过程可以基于"折半"进行。
•折半查找又称为二分查找。5959折半查找基本思想先与“中间位置”的数组元素值比较,若相等则查找成功,否则:将给定值与"中间位置"的数组元素值比较,如果:给定值>"中间位置"的数组元素值,则在后半部继续进行折半查找。否则,在前半部进行折半查找。6060折半查找算法•设待查元素所在区域的下
界为low,上界为high,则中间位置mid=(low+high)/2①若mid元素值等于给定值,则查找成功;②若mid元素值小于给定值,则在区域[mid+1,high]进行折半查找;③若mid元素值大于给定值,则在区域[low,mid-1]内进行折半查找;6
161例如:key=64的查找过程如下:low指示查找区间的下界high指示查找区间的上界mid=(low+high)/2051319213756647580889201234567891011lowhighmidlowmidhighmid主要代码:假设已有定义:inta[N],key,i
,low,high,mid,find=0;low=0;high=N-1;while(low<=high){mid=(low+high)/2;if(key==a[mid]){find=1;break;}elseif(key<a[mid])high=mid-1;elsel
ow=mid+1;}6364