C语言数组课件_第1页
C语言数组课件_第2页
C语言数组课件_第3页
C语言数组课件_第4页
C语言数组课件_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组2内容提要数组的基本概念一维数组的定义和引用二维数组的定义和引用字符数组的定义和引用37.1基本概念前面所讲的数据类型都是基本类型(整型、实型、字符型)基本类型的存储特点是每个变量单独存储,称简单变量构造类型:是由基本类型构造而成的(数组、结构体、共同体、枚举)构造类型的每一个分量是一个变量,它可以是一个简单类型或者构造类型构造类型分量的使用方法与简单变量使用方法相同构造类型的分量占用相邻的存储空间构造类型的重点是访问其分量的方法4数组的概念计算机处理数据时,经常出现数据是用某种有序的形式进行组织的情况,如随温度而改变的实验数据、按学号排列的成绩表、线性方程组的系数矩阵这些数据的共同特征:都是由若干个分量组成数据的诸分量都是同一数类型这些分量都是按一定顺序排列数组:按序排列的具有相同类型的变量的集合用一个符号名来表示这一组数用数字名跟下标来唯一地确定数据中的元素数组首地址、数组元素的类型和个数57.1一维数组定义一维数组类型说明符数组名[常量表达式]常量表达式表示数组的长度/整形的数组名的命名规则与简单变量名相同常量表达式决定了数组元素的个数类型说明符决定了数组中元素的类型如:intA[10],b[2+3];charc[8];floatx[20],y[4*M+1](M为一个符号常量),6一维数组的存储用连续的各个单元存放数组元素如inta[5]保存数组所需内存量与数组元素的基本类型和数组大小相关总字节数=sizeof(基本类型)*数组元素个数a[0]a[1]a[2]a[3]a[4]DFF0DFF2DFF4DFF6DFF8a7一维数组的引用数组必须是先定义后引用C语言规定只能引用数组中的元素而不能引用整个数组引用一维数组元素的形式数组名[下标]下标可以是整形常量和整形表达式数组元素的下标一律从0开始8一维数组的初始化在定义数组时对数组元素赋以初值如inta[4]={1,2,3,4}给部分元素赋初值如inta[4]={1,2}若对全部数组元素赋初值时,可用不指定数组长度如inta[]={1,2,3,4,5}注意:若定义的数组长度与提供初值的个数不相同,则数组长度不能省略910例7-3:用数组来求Fibonacci数列问题F1=1;F2=1;Fn=Fn-2+Fn-1(n大于等于2)117-4统计全班某门功课期末考试的平均分数和最高分数(设全部人数30)127-6用冒泡法对6个数进行排序(从小到大)冒泡法的思路:将相邻两个数比较,将小的调到前头985420开始(一)854209经第一趟(5次)比较后大数9沉底,小数浮起(二)542089经第二趟(4次)比较后次大数8沉底,排在第二个倒数位置(三)420589(四)204589(五)024589结果024589推知:对n个数进行排序,需要n-1趟比较,第j趟需要n-j次比较,因为已经有j-1个数排好序了137-6用冒泡法对6个数进行排序(从小到大)由前面分析可知:要排序的数必须存放在数组中;整个排序过程用二重循环外循环j控制趟数(最多n-1趟)内循环i控制每趟的比较次数(n-j)147.3二维数组C语言中,数组的元素还可以是数组,这样就构成二维数组,所以二维数组可以看成是“数组的数组”。同样,还可以构成三维数组,四维数组(称多维数组)等等,二维数组是多维数组中最简单,最常用的数组,代表多维数组的基本特征二维数组的定义类型说明符数组名[常量表达式1][常量表达式2];例:intarray[3][4];数据类型是数组全体数组元素的数据类型数组名用标识符表示两个整型常量表达式分别代表数组具有的行数和列数数组元素的下标一律从0开始15可以将二维数组看作是一个特殊的一为数组,其中每个元素又是一个一维数组如inta[3][4]可以将a看做是一个一维数组,其中包含3个元素,其中每个元素又是一个包含四个元素的一维数组16二维数组的存储二维数组从概念上可理解为行列矩阵,但存储器是一维的,需按一定规则转换二维数组在内存中的存储是按行存放的17二维数组的引用二维数组元素的引用格式数组名[下标1][下标2];每个元素同一般变量一样使用例:inta[2][3],i=1,j=2,k=0;合法引用a[i][k],a[j-1][i],a[1][j+k],a[i][k]=a[i-1][j]+a[1][j];错误引用a[2][3]下标越界a[3][2],行下标越界a[1,0],a(1)(2)C++语言不进行数组的越界检查,在引用时不要使数组越界

18二维数组二维数组的初始化形式

数据类型数组名[整常量表达式][整常量表达式]={初始化数据};在{}中给出各数组元素的初值各初值之间用逗号分开把{}中的初值依次赋给各数组元素初始化方式分行进行初始化按二维数组在内存中的排列顺序初始化分行进行初始化例:inta[2][3]={{1,2,3},{4,5,6}};在{}内部再用{}把各行分开初始化的数据个数不能超过数组元素的个数,否则出错19二维数组按二维数组在内存中的排列顺序初始化例:inta[2][3]={1,2,3,4,5,6};把{}中的数据依次赋给a数组各元素(按行赋值)为部分数组元素初始化例:inta[2][3]={{1,2},{4}};省略第一维的定义,但不能省略第二维的定义系统根据初始化的数据个数和第2维的长度可以确定第一维的长度例:inta[][3]={1,2,3,4,5,6};a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是220省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1例如inta[][3]={1,2,3,4};等价于:inta[2][3]={1,2,3,4};

21二维数组二维数组的初始化提示只对部分数组元素初始化。未被初始化的数组元素将被编译系统自动清0两种初始化方法得到的初始结果是不同的inta[2][3]={{5,6},{7,8}};5,6,07,8,0inta[2][3]={5,6,7,8}5,6,78,0,022二维数组举例例7-8:二维数组的输入输出通常用二重循环来进行控制,即用循环变量的值来控制数组的下标23【例】:阅读下列程序,选择程序的运行结果。

main()

{inta[6][6],m,n;

for(m=1;m<6;m++)

for(n=1;n<6;n++)

a[m][n]=(m/n)*(n/m);

}for(m=1;m<6;m++)

{for(n=1;n<6;n++)printf(“%d”)a[m][n]);

cout<<endl;

}A)1111111111111111111111111B)0000100010001000100010000C)1000001000001000001000001D)1000101010001000101010001

二维数组24二维数组应用例将一个二维数组的每个元素按逆序存放在另一个数组中main(){inta[2][3]={{1,2,3},{4,5,6}};intb[2][3];inti,j;cout<<"arraya:“<<endl;for(i=0;i<2;i++){for(j=0;j<3;j++) {cout<<a[i][j]); b[i][2-j]=a[i][j];} cout<<endl;}cout<<"arrayb:“<<endl;for(i=0;i<2;i++){for(j=0;j<3;j++) cout<<b[i][j]; cout<<endl;}}关系:

b[i][2-j]=a[i][j]257.4字符数组字符数组的定义在C语言中,没有专门的字符串变量,而是将字符串存入字符数组来处理即用一个一维数组来存放一个字符串,每个元素存放一个字符字符数组是数组的一个特殊情况,但它的定义方法与上述介绍的类似;在引用方法上,与一般数据有差异,有其独特的引用方法26定义的格式charstr[10];

/*含有10个字符的一维字符型数组*/charstree[3][10];/*含有3*10个字符的二维字符型数组*/也可以将其看成3行并且每行各含有10个字符的一维字符数组27字符数组的初始化按元素赋值

chara[3]={‘c’,‘a’,‘r’}使用字符串常量给字符数组赋初值chara[6]={"hello"};chara[6]="hello";chara[]="hello";以字符串常量的形式赋值时,必须保证数组元素个数≥字符数+128例7-13用字符串给字符数组赋初值,然后打印各元素的ASCII编码值用字符串给字符数组赋初值,系统自动加上字符‘\0'(终结符)''为空格字符,ASCII码值为32‘\0'为空字符,ASCII码值为029字符数组的引用和输入/输出对于字符数组,在程序中既可以逐个引用字符串的单个字符(数组元素)也可以一次引用整个字符串(数组)逐个数组元素输入输出:用%c格式符描述scanf(“%c”,&a[i]);printf(“%c”,a[0]);302.整个字符串输入输出:用%s格式符描述如:chara[]=china;scanf(“%s”,a);printf(“%s”,a);注意:用%s输出,无论数组元素有多少个只要遇到’\0’便结束;3132字符串处理函数#include<string.h>gets(字符数组名)功能:从键盘输入一个字符串(以回车结束),放到数组中,并且得到一个函数值,该函数是字符数组的首地址puts(字符数组名/字符串)将数组中的字符串(以’\0‘结束的字符序列)输出到终端上,输完换行

33strcpy(字符数组1,字符串/字符数组2)功能:将参数2的内容拷贝到参数1中注意:字符数组1的长度应大/等于数组2字符串的长度拷贝时连同’\0’一起拷贝不能把字符串或字符数组直接赋值给另一个字符数组

charstr[10];str=“china”;(错误)Str[0]=‘c’;str[1]=‘h’,…(正确)Strcpy(str,“china”);(正确)34strcat(字符数组1,字符串/字符数组2)将字符串/字符数组2,连接到字符串1的后面,并放在字符数组1中35思考以下程序是否正确:(1)charc;

c=‘a’+’b’;(2)charc[10];c=“a”+”b”;36strcmp(字符数组1/字符串1,字符数组2/字符串2)对于字符串的比较、连接、拷贝都必须用函数3738strlen(字符数组名/字符串)功能:测试字符串长度(不含’\0’)strlwr(字符串)功能:将字符串中大写字母转换成小写字母strupr(字符串)功能:将字符串中小写字母转换成大写字母39字符数组应用举例设:字符串用str[1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论