C语言数组教程.ppt
《C语言数组教程.ppt》由会员分享,可在线阅读,更多相关《C语言数组教程.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、输入理想的程序,输出快乐的人生第8章数组主讲教师:孙运雷计算机与通信工程学院计算机科学系输入理想的程序,输出快乐的人生回顾基本数据类型基本数据类型:int,float/double,char数据的处理数据的处理:根据问题需求,先作几个简单变量的定义,然后对这些变量赋值并作相应的运算即得结果例如:输入10个实数,求其平均值。#include int main()int i;float num,sum=0;printf(input 10 numbers:n);for(i=1;i=10;i+)scanf(%f,&num);sum+=num;printf(average=%.2f n,sum/10.)
2、;return 0;各变量各变量各变量各变量独立独立独立独立存储,之间没有任何关系存储,之间没有任何关系存储,之间没有任何关系存储,之间没有任何关系不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值输入理想的程序,输出快乐的人生问题的提出一个人n门课的成绩怎样存储和处理?一个班n门课的成绩怎样存储和处理?如何从键盘输入100个数然后按相反顺序输出?输入10个数,将高于平均值的数输出?.这些数据的特点:1.具有相同的数据类型2.使用过程中需要保留原始数据为了方便的使用这些数据,C语言提供了一种构造数据类型:数组。一定要理解并用
3、好数组!输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生C语言中的数组数组是具有相同类型的数据的顺序集合数组可以在内存中连续存储多个元素Rate1.53.20.0945.39870123下标下标下标下标标明了元素在数标明了元素在数标明了元素在数标明了元素在数组中的位置组中的位置组中的位置组中的位置 ,从,从,从,从0 0开始开始开始开始数组元素数组元素下标下标Rate0Rate1Rate2Rate3输入理想的程序,输出快乐的人生数组类型输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生定义一维数组datatype arrayNamesize;类型说
4、明符类型说明符int、char、float 数组名数组名常量表达式:常量表达式:数组大小数组大小int num50;char list_of_initials20;double pressure_level6;#define LIMIT 20.int emp_codesLIMIT;数组和变量一样,必须数组和变量一样,必须先定义后使用先定义后使用;数组大小定义好后,将不能改变;数组大小定义好后,将不能改变;数组大小最好用数组大小最好用宏宏来定义,以适应未来可能的变化来定义,以适应未来可能的变化输入理想的程序,输出快乐的人生定义一维数组C89:定义数组时不能使用变量定义数组的大小,即使在此之前变量
5、已经赋值,只能使用整形常量定义数组的大小C99:允许用变量定义数组的大小int array(10);int n=5;float scoren;int n;scanf(%d,&n);int datan;char str;float char10;输入理想的程序,输出快乐的人生一维数组在内存的存放数组下标从0开始数组元素在内存中按顺按顺序连续存放序连续存放数组名代表数组的首地数组名代表数组的首地址址,即score的值与score0的地址值相同内存内存score数组数组高地址高地址低地址低地址12345score0score1score2score3score4数组元素数组元素序号序号intscor
6、e5;score输入理想的程序,输出快乐的人生数组元素的引用数组元素就是变量C语言中,不允许引用数组进行运算,只能引用数组元素基本形式:数组名数组名下标表达式下标表达式;说明:p下标表达式的值必须为整型p下标从0开始,最大下标为数组长度减1p 是下标运算符,引用数组元素时根据数组首地址和下标计算出该元素的实际地址,然后取出该地址的内容如引用score2:1.计算2000+2*4=20082.取出地址2008的内容87907786score0score1score2score32000H2004H2008H200CH例如:inta5;a0=20;a4=2*a0;输入理想的程序,输出快乐的人生下标
7、越界是大忌!inta10;scanf(%d,&a10);/*下标越界*/编译程序不检查是否越界下标越界,将访问数组以外的空间,可能带来严重后果#includeintmain()inta=1,c=2,b5=0,i;printf(%p,%p,%pn,b,&c,&a);for(i=0;i=8;i+)bi=i;printf(%d,bi);printf(nc=%d,a=%d,i=%dn,c,a,i);return0;b0b1b2b3b4 c a ib81234560784044484c5054585c6064686c9运行程序或单步执行观察变量变化情况可以看到,变量c和a的值因数组越界而被悄悄破坏了输入
8、理想的程序,输出快乐的人生一维数组的初始化初始化:在定义数组时给数组元素赋初值形式:数据类型数组名称数组长度=数值列表在定义数组时,对全部数组元素赋初值:例如:inta5=0,1,2,3,4;此时也可省略数组长度例如:inta=0,1,2,3,4;/只写inta;是错误的在定义数组时,对部分数组元素赋初值:例如:inta5=0,1,2;/数组其余元素自动赋0当初值的个数多于数组元素个数时,编译出错例如:inta5=0,1,2,3,4,5;输入理想的程序,输出快乐的人生l只能逐个对数组元素进行操作(字符数组例外)l一般一维数组的处理用一重循环来实现,用循环变量的值对应数组元素的下标动态赋值方法:
9、int a10,i;输入第3个数组元素:scanf(%d,&a2);输入整个数组元素:for(i=0;i10;i+)scanf(%d,&ai);输出方法:输出第1个数组元素:printf(%d,a0);输出整个数组元素:for(i=0;i10;i+)printf(%d,ai);一维数组的动态赋值和输出输入理想的程序,输出快乐的人生一维数组示例【例1】输入10个整数,输出它们的和,并逆序打印这些数#include#define N 10 /数组程序推荐该用法int main()int i,sum=0,dataN;for(i=0;i=0;i-)printf(%d,datai);printf(n);
10、return 0;输入理想的程序,输出快乐的人生一维数组示例【例2】用数组来求Fibonacci数列前20项#include#define N 20int main()int i,fN=1,1;for(i=2;iN;i+)fi=fi-2+fi-1;for(i=0;iN;i+)if(i%4=0)printf(n);printf(%6d,fi);printf(n);return 0;1(n=1)Fn=1(n=2)Fn-2+Fn-1(n3)Fibonacci数列:数列:1,1,2,3,5,8,13,21,34输入理想的程序,输出快乐的人生总结理解:C语言中的数组数组是一组相同类型的数据组成的有限集合
11、数组是可以在内存中连续存储多个元素的结构数组中的数据称为数组元素,数组元素个数称为数组长度数组元素用数组名和元素下标表示,如score0,score1score859377880123score 4 数组名数组名(首地址首地址)下标下标标明了元素在标明了元素在数组中的位置数组中的位置,从,从0开始开始数组元素数组元素下标下标数组大小数组大小输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生二维数组的定义思考为何需要二维数组?int num42;4 X 2=8数据类型数据类型 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2;为了便于理解,二维数组一般理解为几行几
12、列的矩阵数据类型数据类型 数组名数组名行大小行大小列大小列大小;num00num01num10num11num20num21num30num31错误的定义错误的定义:int a3,4,b(3,4);int c ,d(3)(4);输入理想的程序,输出快乐的人生二维数组的存储结构思考该如何存?int a23;a0a1a10a11a12a00a01a02二维数组元素在内存中的二维数组元素在内存中的存放顺序存放顺序:先按行存放,再按列存放先按行存放,再按列存放,即,即先顺序存放第先顺序存放第0行的元素行的元素再存放第再存放第1行的元素,行的元素,a00a01a02a10a11a12输入理想的程序,输出
13、快乐的人生二维数组元素的引用二维数组元素的引用形式:例如:int a34;a00=3;a01=a00+10;a34=5;/*下标越界*/数组名数组名行下标行下标 列下标列下标;输入理想的程序,输出快乐的人生二维数组的初始化按行赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,4,5;按数组元素存放顺序赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,2,3;省略行数(根据初值个数和列声明自动确定行数)例如:intb3=1,2,3,4,5,6,7,8,9,10;intc3=1,2,3;1 2 34 5 61 2 30 0 01 0 04 5 04行行1 2
14、 03 0 0输入理想的程序,输出快乐的人生二维数组的初始化下列二维数组的定义都是错误的:int a,b3,c2;int arr2=1,2,3,4,5,6;int b23=1,2,3,4,5,6,7,8;输入理想的程序,输出快乐的人生二维数组值的输入和输出一般二维数组的处理用二重循环来实现,用循环变量的值控制数组元素的下标int a34,i,j;输入方法:输入方法:输入第输入第i i行第行第j j列元素的值:列元素的值:scanf(“%d”,&aij);scanf(“%d”,&aij);输入整个数组元素:输入整个数组元素:for(i=0;i3;i+)for(i=0;i3;i+)for(j=0;
15、j4;j+)for(j=0;j4;j+)scanf(“%d”,scanf(“%d”,&aij&aij););输出方法:输出方法:输出第输出第i i行第行第j j列列元素的值:元素的值:printf(printf(“%d%d“,aij);,aij);输出整个数组元素:输出整个数组元素:for(i=0;i3;i+)for(i=0;i3;i+)for(j=0;j4;j+)for(j=0;j4;j+)printf(“%d”,printf(“%d”,aijaij););输入理想的程序,输出快乐的人生二维数组的输入和输出为一个为一个3行行4列的二维数组输入列的二维数组输入/输出数据输出数据int main
16、()int a34,i,j;for(i=0;i3;i+)for(j=0;j4;j+)scanf(“%d”,&aij);for(i=0;i3;i+)for(j=0;j4;j+)printf(“%5d”,aij);printf(“n”);return 0;输入理想的程序,输出快乐的人生二维数组示例【例3】将二维数组a转置存到二维数组b中a01b10a12b21设行下标为i,列下标为j,则:bji aij输入理想的程序,输出快乐的人生【例3】将二维数组a转置存到二维数组b中#includeintmain()inta23=1,2,3,4,5,6,b32,i,j;printf(数组a:n);for(i=
17、0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);printf(n);for(i=0;i2;i+)for(j=0;j3;j+)bji=aij;/*转置*/printf(数组b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);return0;输入理想的程序,输出快乐的人生二维数组示例【例4】从键盘上为一个55整型数组赋值,找出其中的最小值和最大值(平均值,上三角),并显示出来分析:设最大值为max,最小值为min.1、令max=a00min=a002、对0=row5,0=col5(显然要用二重循环):
18、如果arowcolmax,则将其存入max中。3、输出min和max。输入理想的程序,输出快乐的人生【例4】55整型数组找最小值和最大值#include int main()int row,col,a55,max,min;printf(请输入5个整数:);for(row=0;row5;row+)for(col=0;col5;col+)scanf(%d,&arowcol);min=a00;max=a00;for(row=0;row5;row+)for(col=0;col5;col+)if(arowcolmax)max=arowcol;printf(min=%d,min);printf(max=%
19、dn,max);return 0;输入数据输入数据找最小值和最大值找最小值和最大值输入理想的程序,输出快乐的人生总结数组是由同一种数据类型的元素系列构成数组元素按顺序在内存中连续存储,并通过使用数组下标(或索引)来访问,首元素的索引值为0数组必须先声明然后才能使用。声明一个数组只是为该数组留出连续内存空间,并不会为其赋任何值一维数组定义:数据类型数组名数组大小二维数组可以看作是一维数组的数组一维数组可用一个循环动态赋值,而二维数组可用二重嵌套循环动态赋值C把数组名解释为该数组第1个元素(a0)的首地址,并且C编译器不检查所引用的数组元素下标是否越界输入理想的程序,输出快乐的人生本章主要内容输入
20、理想的程序,输出快乐的人生函数参数的传递方式根据实参类型实参类型的不同,有两种传递方式值传递地址传递1、值传递方式类型简单变量(数组之前所学的变量类型)方式调用函数时:将实参值值复制一份传给函数的形参调用结束后:原值不变原值不变(变的只是副本)特点实参与形参占用不同的不同的内存单元输入理想的程序,输出快乐的人生【例】输入两个数,编写函数将它们交换#include void swap(int x,int y)int temp;temp=x;x=y;y=temp;int main()int a,b;scanf(%d%d,&a,&b);swap(a,b);printf(n%d,%dn,a,b);.2
21、0002010201420042008200C5变量变量a 变量变量b(main)9 变量变量temp 变量变量y 变量变量x(swap)559 59COPY输入:输入:5959输出:输出:5,95,9形参形参形参形参实参实参实参实参值传递值传递输入理想的程序,输出快乐的人生函数参数的传递方式2、地址传递方式类型数组、指针、结构体方式调用函数时:将实参地址地址复制一份传给函数的形参调用结束后:原值改变原值改变特点形参与实参占用相同的相同的内存单元输入理想的程序,输出快乐的人生对比值传递地址传递类型 简单类型数组、指针、结构体方式调用函数时:将实参值复制一份传给函数的形参调用结束后:原值不变(变
22、的只是副本)调用函数时:将实参地址复制一份传给函数的形参调用结束后:原值改变特点实参与形参占用不同的内存单元形参与实参占用相同的内存单元简记为:传递简单类型是值传递;传递其他类型是地址传递输入理想的程序,输出快乐的人生 简单变量和数组作函数参数的区别输入理想的程序,输出快乐的人生数组作函数参数1、一维数组元素作函数参数【例】求5个整数中的最小数#include#define N 5int main()int aN,i,m;for(i=0;iN;i+)scanf(%d,&ai);m=a0;for(i=1;iN;i+)m=min(m,ai);printf(min=%dn,m);return 0;i
23、nt min(int x,int y)return(xy?x:y);传递的是数组元素的值,值,所以是值值传递方式输入理想的程序,输出快乐的人生数组作函数参数2、一维数组名作函数参数重点定义阶段:形参应定义为数组形式,形参数组的长度可以省略,但是不能省略,否则就不是数组形式如voidfun(intmyArray,intlength)调用阶段:实参为数组名如:fun(myArray);数组名表示数组在内存中的起始地址,传递的是数组名,所以是地址传递方式输入理想的程序,输出快乐的人生例:求学生的平均成绩#includefloataverage(intstu10,intn);intmain()ints
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组 教程
限制150内