计算机二级C++--九一课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机二级C++--九一课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 课件
- 资源描述:
-
1、第九章第九章数数 组组(一一)回顾指针回顾指针 2.int*p,*a,b=10;p=&a;a=&b;&a&bb10pa真题:真题:1.有以下程序:有以下程序:#include main()int n,*p=NULL;*p=&n;printf(“input n:”);scanf(“%d”,&p);printf(“output n:”);printf(“%dn”,p);该程序想通过指针该程序想通过指针p为变量为变量n读入数据并输出,但有多处错误。读入数据并输出,但有多处错误。以下语句正确的是以下语句正确的是;A int n,*p=NULL;B *p=&n;C scanf(“%d”,&p);D pr
2、intf(“%dn”,p);思考:用变量存储一系列数据,如学号?用int i=001,j=002,h=003.w=024?如何简化解决,开辟一系列空间用变量可以连续存放一系列数据或字符为什么要使用数组3-3数组内存内存12065984数组的元素容器中保存的物品日常生活中的容器日常生活中的容器程序中的数组程序中的数组声明一维数组数据类型数据类型 数组名数组名size;类型说明符int、char、float 数组名常量表达式:数组大小int num50;char list 20;double pressure_level6;#define LIMIT 20.int emp_codesLIMIT;i
3、nt a8;1.int 是类型名,只能存放整型是类型名,只能存放整型2.a是数组名是数组名3.数组数组a中有中有8个元素,分别为个元素,分别为a0,a1a7.即即下标从下标从0开开始始4.执行完此语句的结果是:为数组执行完此语句的结果是:为数组a分配分配8个连续的单元,每个连续的单元,每个单元占个单元占4个字节个字节理解:数组理解:数组a中有中有8个变量,变量名称依次为个变量,变量名称依次为a0,a1a7.内存内存a0a1a2a3a4146899.1.3初始化一维数组int a5=1,4,6,8,9;相当于:相当于:a0=1;a1=4.说明:说明:1.int a5=1 合法,没有初始化的变合法
4、,没有初始化的变 量量a1-a4自动赋初值为自动赋初值为02.int a5=1,4,6,8,9,3;不合法不合法即:数组的大小即:数组的大小=元素的个数元素的个数a其他的初始化情况:其他的初始化情况:int arr10=10,9,8,7,6,5,4,3,2,1,0;/错误!越界了错误!越界了 int arr10=9,8,7,5;/正确,后面的正确,后面的6个元素未初始化个元素未初始化 9.1.4 通过赋初值定义数组的大小通过赋初值定义数组的大小int arr=9,8,7;/正确:元素个数为正确:元素个数为 3(思考)(思考)int arr=;/错误,到底是几个元素?错误,到底是几个元素?内存内
5、存为一维数组动态赋值为一维数组动态赋值float price4;printf(“Enter prices of 4 booksn”);for(i=0;i=3;i+)scanf(“%f”,&pricei);price0price1price2price3price12.341002.1017.511.12问题描述:求一组数中的最大值和最小值。数组应用1void main()int num5,max,min,i;printf(请输入5个数:n);for(i=0;i5;i+)scanf(%d,&numi);max=num0;min=num0;for(i=1;i5;i+)if(maxnumi)min=
6、numi;printf(n最大值为:%d,max);printf(n最小值为:%dn,min);读入5个值保存在数组中求最大值和最小值演示学生用书示例3问题描述:输入10个数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。数组应用2#define N 10for(i=0;iN;i+)scanf(%d,&numi);printf(n 请输入要查找的数:);scanf(%d,&search);for(i=0;iN;i+)if(numi=search)break;if(iN)printf(n 在数组的第%d 个位
7、置找到了数字%d!n,i+1,search);else printf(n 没有找到!n);读入10个值保存在数组中在数组中查找,一旦找到,通过break语句跳出循环演示学生用书示例4一维数组和指针一维数组和指针 回顾指针:存放一个变量地址的变量(指回顾指针:存放一个变量地址的变量(指向一个变量)向一个变量)ip例如:例如:int*p,i=4,j;p=&i;j=*p9.2一维数组和指针 C语言中,数组名可以认为是一个存放地址值的指针变量语言中,数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个元素的地址。名,其中的地址值是数组第一个元素的地址。例如:例如:int a2;数组名;
8、数组名a可以认为是一个指针变量名,存可以认为是一个指针变量名,存的是数组的第一个元素的是数组的第一个元素a0的值的值 注意:注意:float a10,*p,x;a=&x;/不合法不合法,声明一个数组的同时,声明一个数组的同时,a中就确定中就确定了了 永远指向永远指向a数组的首地址数组的首地址 a+;不合法不合法 在数组中给指针赋初值:在数组中给指针赋初值:int*p,a2;p=&a0;合法合法 p=a;合法;合法通过指针从终端读入数据;通过指针从终端读入数据;for(p=a,k=0;k10;k+)scanf(“%d”,p),p+;通过数组从终端读入数据通过数组从终端读入数据;for(k=0;k
9、10;k+)scanf(“%d”,&ak)功能相同,都是使指针变量功能相同,都是使指针变量p指向指向a数组的首地址数组的首地址a0a1a2a3a4.p9.2.3通过通过数组的首地址数组的首地址引用数组元素引用数组元素1.int a7;a相当于是指针变量,是数组元素的首地址。相当于是指针变量,是数组元素的首地址。则:则:a值相当于值相当于&a0 a+1相当于相当于&a1 思考:思考:*a,*(a+1)代表什么呢?)代表什么呢?*&a0,*&a1代表什么呢?代表什么呢?故:故:*a和和*&a0即为即为 a0 *(a+1)和)和*&a1即为即为a1 *(a+k)和)和*&ak即为即为ak 9.2.3
10、通过通过指针指针引用数组元素引用数组元素 1.int a7,*p;p=a;p=&a0;则:对于数组元素则:对于数组元素a0,可以用可以用*p引用;引用;a1可以用可以用*(p+1)引用,引用,ak可以用可以用*(p+k)引用引用 int*p,s10,i;p=s;总结:总结:表示数组表示数组s中的第中的第i个元素:个元素:si,*(p+i),*(s+i),*&si,pi 表示数组表示数组s中的第中的第i个元素地址个元素地址:&si,p+i,s+i,注意:注意:虽然数组名虽然数组名s可以看做一个指针变量,但是可以看做一个指针变量,但是s是不可变的,是不可变的,而而p是可变的。即是可变的。即s+,s
11、=p都是不合法的都是不合法的例例 int a=1,2,3,4,5,6,7,8,9,10,*p=a,i;数组元素地址的正确表示:数组元素地址的正确表示:(A)&(a+1)(B)a+(C)&p (D)&pi 数组名是数组名是地址常量地址常量p+,p-()a+,a-()a+1,*(a+2)()例:输出数组中的全部元素 有三种方法:(1)main()int a10;int i;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“n”);for(i=0;i10;i+)printf(“%d”,ai);2)main()int a10;int i;for(i=0;i10;i+)sca
12、nf(“%d”,&ai);printf(“n”);for(i=0;i10;i+)printf(“%d”,*(a+i);3)main()int a10;int*p,i;for(i=0;i10;i+)scanf(“%d”,&ai);printf(“n”);for(p=a;p(a+10);p+)printf(“%d”,*p);9.3函数之间对一维数组和数组元素的引用函数之间对一维数组和数组元素的引用1、数组元素作实参、数组元素作实参 当调用函数时,数组元素可以作为实参传送给形参,和普通当调用函数时,数组元素可以作为实参传送给形参,和普通变量一样,即变量一样,即传值调用传值调用。形参的改变不会影响实参
13、的值。形参的改变不会影响实参的值2、数组名作实参、数组名作实参 数组名也可以作为实参传送,数组名本身是一个地址值,因此数组名也可以作为实参传送,数组名本身是一个地址值,因此是是地址值的传递地址值的传递。形参的改变会影响实参的值。形参的改变会影响实参的值 例题例题9.2编写程序,通过编写程序,通过一个函数一个函数给主函数中定义的数组给主函数中定义的数组输入若干大约或等于输入若干大约或等于0的整数,用负数作为结束标志;调的整数,用负数作为结束标志;调用用另一个函数另一个函数输出该数组中的数据。输出该数组中的数据。分析:分析:main声明一个数组声明一个数组s;调用一个子函数调用一个子函数1给数组赋
14、值;给数组赋值;调用一个子函数调用一个子函数2输出数组的值输出数组的值子函数子函数1 当大于等于当大于等于0时一直输入;时一直输入;子函数子函数2 依次输出数组元素的值依次输出数组元素的值值传递?地址传递?值传递?地址传递?值传递?地址传递?值传递?地址传递?需要有一个变量,来计算需要有一个变量,来计算输入数据的个数,并返回输入数据的个数,并返回#include#define M100void arrout(int*,int)void arrint(int*)main()int sM,k;k=arrin(s);(数组名作为实参)(数组名作为实参)arrout(s,k);int arrin(in
15、t*a)int i=0,x;scanf(“%d”.&x);while(x=0)*(a+i)=x;i+;scanf(%d”.&x);return i;当数组名作为实参时,对应的形参除了是指针外,还可以用另外两种形当数组名作为实参时,对应的形参除了是指针外,还可以用另外两种形式。式。上例中的函数调用上例中的函数调用arrin(s);对应的函数首部可以写成以下三种形式:对应的函数首部可以写成以下三种形式:(1)arrin(int*a)(2)arrin(int a)(3)arrin(int aM)void arrout(int*a,int n)int i;for(i=0;in;i+)printf(”%
展开阅读全文