程序设计课程辅导(2).ppt_第1页
程序设计课程辅导(2).ppt_第2页
程序设计课程辅导(2).ppt_第3页
程序设计课程辅导(2).ppt_第4页
程序设计课程辅导(2).ppt_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计课程辅导(2),华北电力大学 计算机基础教研室 主讲 张丽静 潘卫华 张锋奇 罗贤缙,数组是C+的一种数据类型(构造类型),是具有一定顺序的一组相同类型变量的集合体,组成数组的变量称为该数组的元素,第二层次_数组的应用,数组的概念,使用原则,先定义,后使用,名字,类型,大小,维,数组,数组的定义,类型说明符 数组名常量;,例如:,int a10;,整型数组,名字为a,十个变量,a0,a1,a9,一维数组的存储结构,a0,a1,.,a9,数组a,数组元素在内存中顺序存放,数组元素的地址是连续的,一维的,一维数组的输入/输出,数组,循环,例1 将十个数据输入到数组中,并按逆序输出。,voi

2、d main( ), int a10,i;,for(i=0;i10;i+),scanf(“%d”,for(i=9;i=0;i- -),printf(“%d”,ai); ,printf(“nResult:”);,printf(“nInput data:”);,使用数组的关键在于控制下标变化,ai,i=09,将数据输入到各个数据元素中,运行,printf(“%5d”,ai); ,#incude,#include,cout“nInput data:”;,cinai;,cout“nResult:”);,cout“ ”ai; ,用a1,a2,a3,a10来存放这10个数,1. 从10个数中找出最大的,放

3、在 a1中;,2. 从9个数中找出最大的,放在a2中;,:,9. 从2个数中找出最大的,放在a9中。,如何找?,a1与a2,a3 ,a10,a2与a3,a4 ,a10,:,a9与a10,I=1,10-1,J= ,10,I+1,第八讲,例2,程序举例,将10个数按大小排序,运行,for (i=1;i=10-1;i+),#include void main( ) int a11, i,j,aa; for(i=1;iai;,for (i=1;i11;i+) coutai “ ”; , for (j=i+1;j=10;j+),if(aiaj),aa=ai;ai=aj; aj=aa;,aiaj,真,fo

4、r j=i+1 to 10,假,aiaj,for i=1 to 10-1,输入要排序的数,输出排好序的数,流程图,第八讲,例 题,程序举例,将10个数按大小排序,数组,排序,程序举例,for (i=1;i=10-1;i+),#include viod main( ) int a11, i,j,aa; for(i=1;iai;,for (i=1;i=10;i+) coutai“ “; , for (j=i+1;j=10;j+),if(aiaj),aa=ai;ai=aj; aj=aa;,例3 将任意n个数按大小排序。,选择法排序, int a50,j,i,n,aa;,for(i=1;i=n;i+)

5、,cinn;,cinai;,for(i=1;i=n-1;i+),for(j=i+1;j=n;j+),if(aiaj),aa=ai;ai=aj;aj=aa; ,for(i=1;i=n;i+),coutai“ “; ,viod main( ),#include,例4. 从n个数中找出最小的数,并与第一个位置上的数 对调, 指出最小的数原来在数列中的位置。,8 3 5 2 1 9 7 10 4 6,分析:变量w记录数组中最小数的位置,n个数分别放在数组a1,a2,an中。,8,1,数组,程序举例,找位置,w=1,8 3 5 2 1 9,8 3 5 2 1 9,w=2,awa2,awa3,w=2,8

6、3 5 2 1 9,awa4,w=4,8 3 5 2 1 9,awa5,w=5,8 3 5 2 1 9,awa6,aw最小,awa1,输出a1,w,J,给数组a 赋值,awaj,真,for j=2 to n,读入n,假,w=1,w=j,aw与a1互换,输 出,运行,void main( ), int a50,j,n,w,aa;,cinn;,cinaj;,cout“min:”a1;,for(j=1;j=n;j+),w=1;,if(w!=1),aa=a1;a1=aw;aw=aa;,for(j=2;i=n;j+),if(awaj),w=j;,找位置,cout“pos:”w; ,数组,程序举例,找位置

7、,给数组a 赋值,awaj,真,for j=2 to n,读入n,假,w=1,w=j,aw与a1互换,输 出,#include,数组,数据移动,程序举例,例5 数组a有五个元素,其值分别为:1、2、3、4、5,移动该数组的数,使其变成2、3、4、5、1。,a0,a1,a2,a3,a4,1,2,3,4,5,m,m=a0,2,a1a0,3,4,5,1,a2a1,a3a2,a4a3,for i=1 to 4,ai-1=ai,a4= m,1,a0m,ma4,void main( ), int a5=1,2,3,4,5;,m=a0;,for (i=1;i=4;i+),ai-1=ai;,a4=m;,int

8、 i,m;,待移动数据的下标,for(i=0;i5;i+),printf(“%5d”,ai);,#incude,数组,查找,程序举例,例6 查找一个数是否在某数列中出现。,顺序查找,将数列放到数组a,待查找的数为x,把x与数组a中的元素从头到尾一 一进行比较,输入n,a,x,leap=0,leap:标记,1:查到,0:没查到,i=0,in,scanf(“%d,%d”,leap=0,i=0;,while(in,else,i+;,if(leap),printf(“yes,%d”,i);,else,printf(“no”); ,for(i=0;in;i+),scanf(“%d”,#incude,数组

9、,程序举例,插入,ai=x,寻找插入点,逐个检测数组元素,for i=0 to 7,xai,真,break,假,插入数据, 向后移动数据, 插入,7,数组a,a0,a1,a2,a3,a4,a5,a6,a7,a8,10,8,5,2,1,0,-1,-7,数组a,插入前,插入后,输入数据,操作步骤,找插入点,插入数据,输出结果,4,i,位置j:,a7,a8,ai=x,10,8,5,1,0,-1,-7,-7,2,位置,0,xa0?,操作,真,插入点是0,1,xa1?,真,插入点是1,i,xai?,是,插入点是i,7,xa7?,真,插入点是7,假,插入点是8,操作结果,2,a6,a7,forj=7to

10、i,-1,aj+1=aj,4,-1,0,1,2,aj,aj+1,例7 在一个降序排列的数列中插入一个数,使新数列保持原序。,void main( ), int a9,i,j,x;,cinx;,for(i=0;i=7;i+),if(xai) break;,for(j=7;j=i;j- -),aj+1=aj;,ai=x;,for(i=0;i=8;i+),cout” “ai;,for(i=0;i8;i+),cinai;,cout“n请输入数组a的值(降序):n”;,cout“n请输入要插入的数:n”;,输入数据,输出数据,数组,程序举例,插入,流程图,#incude,例8 任意输入若干整数,当输入0

11、时结束输入,找出其中能被2或3整除的正数,进行升序排序,输出排序后的结果。,程序举例,综合,分析:找出满足条件的数据,放到数组a中,并记录数据的个数gs。,对数组a按小到大排序。,#include void main() int a50,i,gs=0,j,t,x; cinx; while(x!=0) if(x%3=0|x%2=0) ags=x;gs+; cinx; for(i=0;iaj) t=ai;ai=aj;aj=t; for(i=0;igs;i+) cout ai ; ,例9 任意输入若干整数,当 输入0时结束输入,找出其中 个位数为5的正数,进行升序 排序,输出排序后的结果。,程序举例

12、,综合,#include void main() int a50,i,gs=0,j,t,x; cinx; while(x!=0) if(x%3=0|x%2=0) ags=x;gs+; cinx; for(i=0;iaj) t=ai;ai=aj;aj=t; for(i=0;igs;i+) cout ai ; ,例10 任意输入若干整数,当 输入0时结束输入,找出其中 能被3整除的正数,进行升序 排序,输出排序后的结果。,If(x%5=0),If(x%3=0),例11 求斐波拉契数列中前6项的阶乘之和,即求 1!+ 1!+ 2!+ 3!+ 5!+ 8!,#includeiostream.h voi

13、d main() int i,j,a6,jx,sum; sum=2;a0=1;a1=1; for(i=2;i=5;i+) ai=ai-1+ai-2; jx=1; for(j=1;j=ai;j+) jx=jx*j; sum=sum+jx; coutsum; ,分析:如何求一个数的阶乘; 如何按规律找到数据; 最后是累加。,程序举例,综合,程序由函数构成,库函数,void main( ), int a=1,b=3,c;,c=max(a,b);,printf(“max=%d”,c); , int z;,else z=y;,return(z); ,主函数,自定义函数(子函数),主函数、,库函数、,自定

14、义函数,程序的执行过程,主函数main,c=max(a,b);,结束,子函数max,如何定义,如何调用,if(xy)z=x;,int max(int,int);,从主函数开始执行,return或 ,数据联系,int max(int x,int y),#include”stdio.h”,第二层次_函数的应用,一致:,函数的定义,函数首部,类型 函数名(形参数表),函数值的类型,类型,函数体,变量定义,语句序列 ;,return(表达式);,通过return语句返回值,表达式的类型与定义类型的关系,函数值的类型,值的类型就是表达式的类型,不一致:,值的类型是定义的类型,函数首部,函数体,参数,包含

15、类型说明,有返回值,无确定返回值,(只能返回一个值),(类型为void),(形参),函数的调用,注意,实参和形参,在个数、类型和,顺序上一致。,形参: 定义函数时, 函数名后面括弧中的参数。,实参: 调用函数时, 函数名后 面括弧中的参数。,形参和实参,被调用前不占用存储单元,被调用时分配存储单元,返回时释放存储单元,占用存储单元, 为形参和内部变量分配单元, 参数传递,调用的过程, 执行, 返回,变量释放单元,主调函数和被调函数之间的参数传递,主调函数,被调函数,调用时,实参,形参,数据传递,返回时,数据传递,(结果),(待处理数据),形参的数据结构不同传递的方式也不同,参数传递,形参是简单

16、变量,实参是简单变量,值传递:,实参是常量、表达式,形参是数组,地址传递:,如果形参数组中某元素的值发生变化,则实参数组的相应元素也要发生变化,float tt(float a ),形参数组大小由实参数组决定,实参的值传递给形参,内存中实参单元与形参单元是不同的单元, 因此,在执行一个被调函数时,形参的值如果发生变化,并不会改变主调函数的实参的值,实参是数组元素,单向传递,函数首部的形式,实参必须是数组名,实参数组将起始地址传递给形参数组,使二者共占同一段内存单元,参数传递,形参与实参的结合,数据传递小结,形参类型,要求实参的类型,传递的信息,通过调用函数能否改变实参的值,简单变量,简单变量,

17、数组元素,表达式、常量,变量的值,不能,数组,数组名,数组的起始地址,能,实参是简单变量,void swap(int x,int y),void main( ),例1 写结果, int t;,t=x;,x=y;,y=t; , int a=5,b=10;,printf(“%d,%d”,a,b);,swap(a,b);,printf(“%d,%d”,a,b); ,5,10,5,被调函数,主调函数,5,10,实参,形参及内部变量,10,5,10,5,5,10,#include”stdio.h”,实参是表达式、常量,例2 写结果,main( ), int x=2,y=3,z;,z=try(x,5);,

18、printf(“(2)x=%dy=%dz=%dn”,x,y,z); ,int try(int x,int y), float z;,z=(x+y)/2;,printf(“(1)x=%dy=%dz=%.2fn”,x,y,z);,(1)x=4y=25z=14.50,(2)x=2y=3z=14,2,3,实参,形参 内部变量,5,2,int try(int,int);,x*=x;y*=y;,return z; ,主调函数,被调函数,4,25,14.5,14,14,例3 写结果,main( ),int a5=1,0,8,5,4,i,s1=0,s2=0;,for(i=0;i5;i+),if( zs(ai)

19、 =1) s1+=ai;,zs(int x),else s2+=ai;,printf(“s1=%d,s2=%d”,s1,s2); , if(x%2=1)return(1);,else return(0); ,a0,a1,a2,a3,a4,1,0,8,5,4,s1,s2,x是奇数:,函数值为1,x是偶数:,函数值为0,x,1,临时,1,1,a1 x,2,3,4,s1=6,s2=12,实参是数组元素,主调函数,被调函数,i,参数传递,0,a0 x,1,0,8,a2 x,a3 x,6,a4 x,12,形参是数组,例4 写结果,main( ),float s15=1.0,3.0,2.0,0.0,7.0

20、;,float s23=0.0,11.0,4.0;,printf(“n%f”, ave(s1,5) );,printf(“n%f”, ave(s2,3) ); ,float ave(float ,int);,float ave(float a ,int n),float p=0;,for(i=0;in;i+),p+=ai;,p/=n;,return p; ,int i;,s10,1.0,3.0,2.0,0.0,7.0,s11,s12,s13,s14,0.0,11.0,4.0,s20,s21,s22,s1数组,s2数组,a0,a1,a2,a3,a4,n,5,p,0.0,13.0,2.6,2.60

21、0000,a0,a1,a2,n,3,p,0.0,15.0,5.0,5.000000,t=un- - ;t+=3*un;,n+;,if(t7), un+=t/10;un=t%10; ,else un=t; ,main( ),for(i=1;in;i+)sub(i,a);,for(i=0;i=n;i+)printf(“%3d”,ai); ,int i,n,a10=0;,scanf(“%d%d%d”,0,0,0,0,0,0,0,0,0,0,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,n,3,3,1,n,u0,u1,u2,t,1,1,0,10,1,1,2,0,n,t,u0,u1,u2,

22、2,0,1,3,2,3,3130,形参是数组,例6 写结果。,main( ),int a35,i,j;,for (i=0;i3;i+),for (j=0;j4;j+),scanf(“%d”,t(ai , 5); ,printf(“n”);,void t(int g ,int n), int i;,gn-1+=gi; ,a00,a01,a02,a03,a04,a10,a11,a12,a13,a14,a20,a21,a22,a23,a24,1,4,3,0,g0,g1,g2,g3,g4,8,2,6,0,1,g0,g1,g2,g3,g4,9,0,2,5,1,g0,g1,g2,g3,g4,8,a,a0,

23、a1,a2,a00,a01,a10,a11,a20,a21,for(i=0;i3;i+),for(j=0;j5;j+),printf(“%2d”,aij); ,in-1;i+),1 4 3 0,2 6 0 1,0 2 5 1,14308,26019,02518,gn-1=0;,void t(int ,int);,例3. 设计一个求阶乘的子函数。,int i, a;,a=1;,for(i=1;i=n;i+),a=a*i;,return(a); ,int JC( int n),#include”iostream.h” void main( ),int m;,for(m=1;m=10; m+), j

24、x=JC(m);,coutm“!=”jx;,cout“n”;,float JC(int ),jx;,运行,子函数,程序举例,(1)求1-10阶乘。,(2)求1-10阶乘的和。,int m;float sum=0;,sum=sum+jx;,coutsum“n”;,#includeiostream.h void main() int i,j,a,b,c,jx,sum; sum=2;a=1;b=1; for(i=1;i=4;i+) c=a+b; a=b;b=c; jx=1; for(j=1;j=c;j+) jx=jx*j; sum=sum+jx; coutsum; ,jx=JC(c);,例8 求斐波拉契数列中前6项的阶乘之和,即求 1!+ 1!+ 2!+ 3!+

温馨提示

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

评论

0/150

提交评论