书签 分享 收藏 举报 版权申诉 / 34
上传文档赚钱

类型一维数组的定义课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3577761
  • 上传时间:2022-09-20
  • 格式:PPT
  • 页数:34
  • 大小:392KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《一维数组的定义课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    数组 定义 课件
    资源描述:

    1、一、一维数组的定义一、一维数组的定义 定义方式:定义方式:类型说明符类型说明符 数组名数组名整型常量表达式整型常量表达式;例:例:int a10;说明:说明:数组名的定名规则和变量名相同,遵循标识符定名规数组名的定名规则和变量名相同,遵循标识符定名规 则。则。数组名后的常量表达式用数组名后的常量表达式用 括起来。括起来。常量表达式表示数组元素的个数,即数组长度。常量表达式表示数组元素的个数,即数组长度。例:例:a10表示数组表示数组a中包括中包括10个元素,分别为个元素,分别为 a0a9 第第6 6章章 数数 组组6.1.1 6.1.1 一维数组的定义和引用一维数组的定义和引用a0 a2 a4

    2、 a6 a8 a1 a3 a5 a7 a9二、一维数组元素的引用二、一维数组元素的引用 数组必须先定义,然后使用。数组必须先定义,然后使用。C语言规定只能语言规定只能逐个逐个引用数引用数组元素而不能一次引用整个数组。组元素而不能一次引用整个数组。引用形式为:引用形式为:数组名数组名下标下标 常量表达式中可以包括常量和符号常量,不能包含变常量表达式中可以包括常量和符号常量,不能包含变 量,即定义时必须确定数组的大小。量,即定义时必须确定数组的大小。例例1.1 main()int i,a10;for(i=0;i=9;i+)ai=i;for(i=0;i=0;i-)ai);(i=0;i=9;i+)a9

    3、-i);int n;scanf(%d,&n);int an;通过赋值语句给通过赋值语句给数组元素赋值数组元素赋值例例1.2 main()int i,a10;for(i=0;i=9,i+)scanf(%d,&ai);for(i=0;i=9;i+)printf(%4d,a9-i);三、一维数组的初始化三、一维数组的初始化 可以用可以用赋值语句赋值语句或或输入语句输入语句使数组中的元使数组中的元素得到值,但占运行时间,同时也可以使数组素得到值,但占运行时间,同时也可以使数组在程序运行之前初始化,即在编译期间使之得在程序运行之前初始化,即在编译期间使之得到初值。到初值。通过输入语句给通过输入语句给数组

    4、元素赋值数组元素赋值对数组元素的初始化可以用以下方法实现:对数组元素的初始化可以用以下方法实现:在定义数组时,对数组元素赋以初值。在定义数组时,对数组元素赋以初值。如:如:int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分元素赋值。可以只给一部分元素赋值。如:如:int a10=0,1,2,3,4;表示只给前表示只给前5个元素赋初值,后个元素赋初值,后5个元素自动赋以个元素自动赋以0值。值。对对static数组不赋初值,系统会对所有元素自动赋数组不赋初值,系统会对所有元素自动赋以以0值。值。即即,如果想使数组如果想使数组a中全部元素值为中全部元素值为0,可以这样定,可以这样

    5、定义数组义数组:static int a5 a0 a2 a4 a1 a30 0 0 00 也可以也可以 int a5=0;例例2用数组来处理求用数组来处理求Fibonacci数列问题数列问题(求前求前40项项)在对全部数组元素赋初值时,可以不指定数组长度。在对全部数组元素赋初值时,可以不指定数组长度。int a5=1,2,3,4,5;int a =1,2,3,4,5;1100000000.f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 .235813213455static static main()int i;static long int f40=1,1;for(i=2;i40

    6、;i+)fi=fi-2+fi-1;for(i=0;i40;i+)if(i%5=0)printf(n);printf(%12ld,fi);例例3将将n个整数按逆序重放在数组中个整数按逆序重放在数组中(n=50)。算法算法:设设n n=7=734526176650t3503456645217234526176650t=xi;xi=xn-i-1;xn-i-1=t;x0 x1 x2 x3 x4 x5 x6main()int x50,t,n,i;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&xi);for(i=0;i=(n-1)/2;i+)t=xi;xi=xn-1-i;xn-

    7、1-i=t;for(i=0;in;i+)printf(%5d,xi);printf(n);程序:程序:main()int x50,t,n,i,j;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&xi);for(i=0,j=n-1;ij;i+,j-)t=xi;xi=xj;xj=t;for(i=0;in;i+)printf(%5d,xi);printf(n);程序:程序:6.1.2 6.1.2 一维数组的应用一维数组的应用1.1.冒泡排序算法冒泡排序算法:用冒泡法对10个数排序(1)从数组A1到A10,把相临的两个数两两进行比较。即A1和A2比较,比较完后,A2再与A3比

    8、较,最后是A9和A10比较。(2)在每次进行比较的过程中,如果前一个数比后一个数大,则对调两个数,也就是说把较大的数调到后面,较小的调到前面。比如在第一次的比较中,如果A1比A2大则A1和A2的值就互换。下图用6个数据来说明以上的算法。假设假设6个数据是:个数据是:A1 A2 A3 A4 A5 A6 5 7 4 3 8 6 第一次,第一次,A1和和A2比较,比较,54,进行对调,进行对调,5 4 7 3 8 6 第三次,第三次,A3和和A4比较,比较,73,进行对调,进行对调,5 4 3 7 8 6第四次,第四次,A4和和A5比较,比较,76,进行对调,进行对调,5 4 3 7 6 8 由上例

    9、可以看出,对于由上例可以看出,对于6个数,排好一个数(最大的数个数,排好一个数(最大的数)需要进行)需要进行5次比较,可以推断出,对于次比较,可以推断出,对于N个数,一趟个数,一趟(排好一个数的过程)需要(排好一个数的过程)需要N-1次比较操作。次比较操作。上述算法已经把上述算法已经把N个数中最大的数放到了个数中最大的数放到了AN中,再重中,再重复上述算法,把复上述算法,把A1到到AN-1中最大的数放到中最大的数放到AN-1中,这中,这样样AN-1中存放的就是第二大的数,接着把中存放的就是第二大的数,接着把A1到到AN-2中中最大的数放到最大的数放到AN-2中,中,最后把最后把A1到到A2中大

    10、的那个中大的那个数放到数放到A2中,每重复一次两两比较后,比较的范围就朝前中,每重复一次两两比较后,比较的范围就朝前移动一个位置,此算法经过移动一个位置,此算法经过N-1次就完成了次就完成了A1到到AN中的中的的数由小到大的排列。的数由小到大的排列。注意:如果要由大到小排列则在比较时前一个数比后一个数注意:如果要由大到小排列则在比较时前一个数比后一个数小就进行对调,方法相反。小就进行对调,方法相反。由此可以看出,冒泡法的基本思想就是:在待排序的数据中由此可以看出,冒泡法的基本思想就是:在待排序的数据中,先找到最大的数据将它放到最后面,再从第二个数据开始,先找到最大的数据将它放到最后面,再从第二

    11、个数据开始,找到第二大的数据将它放到第二个位置,以此类推,直到,找到第二大的数据将它放到第二个位置,以此类推,直到只剩下最后一个数为止。这种排序方法在排序的过程中,是只剩下最后一个数为止。这种排序方法在排序的过程中,是小的数就如气泡一样逐层上浮,而使大的数逐个下沉,于是小的数就如气泡一样逐层上浮,而使大的数逐个下沉,于是就形象地取名为起泡排序,又名冒泡排序。就形象地取名为起泡排序,又名冒泡排序。输入n 个数给a1 到 anfor j=1 to n-1for i=1 to n-jaiai+1真假aiai+1输出a1 到 an#include main()int a11,i,j,t;printf(

    12、Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,&ai);printf(n);for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);2.打擂法:打擂法:求10个数最大值和最小值步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较(循环)若maxxi,令min=xi3.输出:max和min#include main()int x10,i

    13、,max,min;for(i=0;i10;i+)scanf(%d,&xi);max=min=x0;for(i=1;i10;i+)if(maxxi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value is%dn,min);6 62 2 二维数组的定义和引用二维数组的定义和引用一、二维数组的定义一、二维数组的定义类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式 例:例:float a34,b510;a0 a00 a01 a02 a03 a1 a10 a11 a12 a13 a2 a20 a21 a22 a

    14、23 说明:说明:可以把二维数组看作是一种特殊的一维数组。可以把二维数组看作是一种特殊的一维数组。a00 a02 a10 a12 a20 a22 a01 a03 a11 a13 a21 a23 二维数组在内存中按行存放二维数组在内存中按行存放 多维数组定义方式与二维数组类似多维数组定义方式与二维数组类似 int x342;float y423;二、二维数组的引用二、二维数组的引用 引用形式为:引用形式为:数组名数组名下标下标下标下标 注:下标可以是整型表达式,但应在已定义的数组大小的注:下标可以是整型表达式,但应在已定义的数组大小的 范围内。范围内。三、二维数组的初始化三、二维数组的初始化 分

    15、行给二维数组赋初值。如:分行给二维数组赋初值。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以将所有数据写在花括弧内,按数组排列的顺可以将所有数据写在花括弧内,按数组排列的顺序对各序对各 元素赋初值。元素赋初值。int a34=1,2,3,4,5,6,7,8,9,10,11,12 可以对部分元素赋初值,不赋的为可以对部分元素赋初值,不赋的为0。如:。如:int a34=1,5,9 int a34=1,0,6,0,0,11;如果对全部元素都赋初值,则定义数组时对第一如果对全部元素都赋初值,则定义数组时对第一维的长维的长 度可以不指定,但第二维的长度不能省。度可以不指

    16、定,但第二维的长度不能省。int a33=1,0,3,4,0,0,0,8,0 int a 3=1,0,3,4,0,0,0,8,0 int a 3=1,0,3,4,0,0,0,8,0例例1将一个二维数组行和列元素互换,放到另个二将一个二维数组行和列元素互换,放到另个二 维数组中。维数组中。aba00 a01 a02a10 a11 a12b00 b01b10 b11b20 b21for(i=0;i=1;i+)for(j=0;j=2;j+)bji=aij;main()static int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=

    17、1;i+)for(j=0;j=2;j+)printf(%5d,aij);printf(n);for(i=0;i=1;i+)for(j=0;j=2;j+)bji=aij;printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);例例2有一个有一个34的矩阵,编程求出其中值最大的那的矩阵,编程求出其中值最大的那个元素,以及其所在的行号和列号。个元素,以及其所在的行号和列号。(最大值唯一最大值唯一)1 2 3 4 9 8 7 10 -10 6 -5 2a1maxi ji ji j2i j3 4 9i ji ji

    18、 ji ji j10i ji ji j main()int i,j,row=0,colum=0,max;static int a34=1,2,3,4,9,8,7,10,-10,6,-5,2;for(i=0;i3;i+)for(j=0;j4;j+)printf(%3d,aij);printf(n);max=a00;for(i=0;i3;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);一、字符数组的定义一、字符数组的定义 char 字符数组名字符数组名整型常量表达式整型常量表达式

    19、 例:例:char c10,d23;二、字符数组的初始化二、字符数组的初始化 例例:char c10=I,a,m,h,a,p,p,y;char c32=,*,*,*;注注:对静态字符数组未被赋值的元素系统自动对静态字符数组未被赋值的元素系统自动将其赋值为空将其赋值为空(0)。三、字符数组元素的引用三、字符数组元素的引用 同简单变量同简单变量6.3 6.3 字符数组字符数组例例1输出一个字符串输出一个字符串 I am a boymain()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(%c,ci);printf(n);Iamaboy例例2输

    20、出一个图形输出一个图形main()static char c55;int i,j;for(i=0;i5;i+)ci0=*;cii=*;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,cij);printf(n);*四、字符串和字符串结束标志四、字符串和字符串结束标志 在在C语言中,用字符数组来处理字符串,同时,语言中,用字符数组来处理字符串,同时,C语言规定以字符语言规定以字符0(null)作为字符串结束标志。作为字符串结束标志。对字符数组初始化,可以用字符串常量来使字对字符数组初始化,可以用字符串常量来使字符数组初始化。如:符数组初始化。如:char c=“I a

    21、m happy”;(可以不指定数组长度可以不指定数组长度,其其char c=“I am happy”;长度由系统检测长度由系统检测+1确定确定)char c14=“I am happy”;(也可以指定数组长度也可以指定数组长度 但应保证其长度至少比其字符个数但应保证其长度至少比其字符个数+1要大要大,多多余部分自动赋予余部分自动赋予null(0)I a m h a p p y 0五、字符数组的输入输出五、字符数组的输入输出 输入输出控制字符有两种输入输出控制字符有两种%c和和%s%c 逐个字符输入逐个字符输入/输出输出%s 一次输入一次输入/输出整个字符串输出整个字符串 输出应注意的问题输出应

    22、注意的问题 用用%s格式输出字符时,输出遇格式输出字符时,输出遇0时结束,时结束,printf函数中的输出项是函数中的输出项是字符数组名字符数组名,而不是数组元素。,而不是数组元素。例:例:char c11=china;printf(%s,c);c h i n a 0输出输出 china不能写成不能写成c0也可写成也可写成char c=“china”;int i;for(i=0;i=9;i+)printf(“%c”,ci);3.输入时应注意:输入时应注意:在使用在使用scanf函数时,若用函数时,若用%s格式输入字符格式输入字符串,则后面跟串,则后面跟数组名数组名,且不带,且不带&符号,数组名

    23、指符号,数组名指向该数组的起始地址。向该数组的起始地址。例:例:char c11;scanf(%s,c);printf(“%s”,c);输入输入 I am happy I 0 注:用函数注:用函数scanf输入(格式字符输入(格式字符%s)无法输入空无法输入空格,必须用字符串处理函数完成。格,必须用字符串处理函数完成。六、字符串处理函数六、字符串处理函数 所有函数都包含在头文件所有函数都包含在头文件string.h中中1.1.字符串输出函数字符串输出函数putsputs格式:格式:putsputs(字符数组字符数组)功能:向显示器输出字符串(输出完,换行)功能:向显示器输出字符串(输出完,换行

    24、)说明:字符数组必须以说明:字符数组必须以00结束结束2.2.字符串输入函数字符串输入函数getsgets格式:格式:getsgets(字符数组字符数组)功能:从键盘输入一以功能:从键盘输入一以回车结束回车结束的字符串放入字符数组中,的字符串放入字符数组中,并自动加并自动加00说明:输入串长度应小于字符数组维数说明:输入串长度应小于字符数组维数例#include main()char string80;printf(“Input a string:”);gets(string);puts(string);输入:How are you?输出:How are you?strcat(字符数组字符数组

    25、1,字符数组,字符数组2)连接两个字符数组中的字符串,把字符串连接两个字符数组中的字符串,把字符串2接到字接到字符串符串 1的后面,结果放到字符数组的后面,结果放到字符数组1中,函数调用后得中,函数调用后得到一个函数值到一个函数值字符数组字符数组1的地址。的地址。说明:说明:字符数组字符数组1必须足够大,以便容纳连接后的新必须足够大,以便容纳连接后的新字符串。字符串。连接时,自动取消数组连接时,自动取消数组1后的后的0,只在新串最,只在新串最后保留一个后保留一个0。strcpy(字符数组字符数组1,字符串,字符串2)作用:作用:将字符串将字符串2拷贝到数组拷贝到数组1中去。中去。说明:说明:字

    26、符数组字符数组1必须足够大,以便容纳被拷贝的字必须足够大,以便容纳被拷贝的字符串。符串。“字符数组字符数组1”必须写成数组名形式,必须写成数组名形式,“字符字符串串2”可以是字符数组名,也可以是一个字符串常量。可以是字符数组名,也可以是一个字符串常量。拷贝时连同字符串后面的拷贝时连同字符串后面的0一起拷贝到字符一起拷贝到字符数组数组1中中 不能用赋值语句将一个字符串常量或字符数组不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。直接赋给一个字符数组。(str1=str2;str1=“HELLo”)可以用可以用strcpy函数将字符串函数将字符串2中前面若干个字中前面若干个字符拷贝到

    27、字符数组符拷贝到字符数组1中去。中去。strcpy(str1,str2,2)(有些系统不支持有些系统不支持)拷贝拷贝str2的前的前2个字符,然后再加一个个字符,然后再加一个0 strcmp(字符串字符串1,字符串,字符串2)作用作用:比较字符串比较字符串1和字符串和字符串2 对两个字符串自左至右逐个相比,直到出现不同的字符或对两个字符串自左至右逐个相比,直到出现不同的字符或遇到遇到0为止,如全部字符相同,则认为相等;若出现不相为止,如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准,比较同的字符,则以第一个不相同的字符的比较结果为准,比较的结果由函数值带回。

    28、的结果由函数值带回。(以字符的以字符的ASCII码为准码为准)字符串字符串1=字符串字符串2,函数值为,函数值为0 字符串字符串1字符串字符串2,函数值为一正整数函数值为一正整数字符串字符串1字符串字符串2,函数值为一负整数函数值为一负整数 strlen(字符数组)字符数组)测试字符串长度的函数,函数的值为字符串的实际长度,测试字符串长度的函数,函数的值为字符串的实际长度,不包括不包括0在内。在内。Strlen(“China”)函数返回值是函数返回值是5。字符串是数组类型而非字符串是数组类型而非简单类型,不能用关系简单类型,不能用关系运算进行大小比较运算进行大小比较 if(ABCDEF)/*错

    29、误的字符串比较错误的字符串比较*/例例1有三个字符串有三个字符串(长度不超过长度不超过20),要求找出其中最,要求找出其中最大者。大者。str0str1str2 string大大大大#include stdio.h main()char string20,str320;int i;for(i=0;i0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);printf(nthe largest string is:n%sn,string);例例2编一程序,将两个字符串连接起来,不使用编一程序,将两个字符串连接起来,不使用strcat函数。函数。main()char s180,s280;int i=0,j=0;scanf(%s,s1);scanf(%s,s2);while(s1i!=0)i+;while(s2j!=0)s1i=s2j;i+;j+;s1i=0;printf(%sn,s1);/*求求s1中的有效字符个数中的有效字符个数*/*将将s2接到接到s1后后*/

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:一维数组的定义课件.ppt
    链接地址:https://www.163wenku.com/p-3577761.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库