C++ 程序阅读

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第2讲程序阅读技巧多读、读好程序可以:提高对语法的记忆、理解和使用提高对常用算法的理解和使用提升程序设计和编程能力提高做题效率,如看程序写结果、程序填空、上机程序改错和程序填空一、程序的一般阅读方法1.随时记录变量值的变化情况对于数组、指针和函数参数最好辅以形象的示意图。步骤:①从main()开始阅读②每定义一个变量就记录其值及含义③根据程序的执行流程,对变量值的变化随时记录更改④直到main()结束2.对于程序的执行流程要正确把握ifelse嵌套结构switch结构循环结构各种结构的嵌套(1)ifelse结构条件的正确解读:非0为真,0为假如x=5和x==5不一样x!=0和x等价else和前面最近的未配对的if配对例.有以下程序main(){inta=0,b=0,c=0,d=0;if(a=1)b=1;c=2;elsed=3;printf(“%d,%d,%d,%d\n”,a,b,c,d);}程序输出A)0,1,2,0B)0,0,0,3C)1,1,2,0D)编译有错(2)switch结构根据整形表达式的值进行多分支选择case只起语句标号的作用,内部语句按顺序执行case不满足才看defaultcase语句和default语句顺序任意搭配break真正实现多分支例.#includestdio.hmain(){ints;scanf(%d,&s);while(s0){switch(s){case1:printf(%d,s+5);case2:printf(%d,s+4);break;case3:printf(%d,s+3);default:printf(%d,s+1);break;}scanf(%d,&s);}}运行时,若输入123450回车,则输出结果是A)6566456B)66656C)66666D)66666560(3)循环结构循环要素:循环入口、循环条件、循环体和循环条件的改变。break和continue的含义循环的嵌套例:若变量已正确定义,有以下程序段i=0;doprintf(%d,,i);while(i++);printf(%d\n,i)其输出结果是A)0,0B)0,1C)1,1D)程序进入无限循环例:以下程序段中的变量已正确定义for(i=0;i4;i++,j++)for(k=1;k3;k++);printf(*);程序段的输出结果是A)********B)****C)**D)*练习2011年3月一(20)有以下程序段inti,n;for(i=0;i8;i++){n=rand()%5;switch(n){case1:case3:printf(%d\n,n);break;case2:case4:printf(%d\n,n);continue;case0:exit(0);}printf(%d\n,n);}以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行返回操作系统产生随机数rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在0~99之间;使用rand()函数需添加头文件:#includestdlib.h1.rand()函数功能:是一个可以生成随机数的函数随机数函数返回的随机数在0~RAND_MAX(32767)之间;2.srand()函数功能:用来设置随机数的种子,一般与rand()结合使用。否则直接用rand()的话,每次运行程序的产生的随机数都相同。n=rand()%5;产生0~4的随机数随机函数介绍二、包含函数的程序阅读1.函数调用的一般过程在发生函数调用时,函数中的变量(包括形参)并不占用内存。只有发生函数调用时,才分配内存单元。将实参的值传递给形参,类型不一致时,按形参类型自动强制转换。当执行return语句或函数执行完,函数调用返回。被调函数返回时,形参被撤消,不影响实参的值。#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abcinta,b,c;//例值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abc24scanf(%d%d,&a,&b);//例5值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abc24c=add(a,b);//例5值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abcij2424intadd(inti,intj)//例5值参传递函数值传递机制24ij#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abc242435{i++;j++;//例5值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abcij242435objreturn(i+j);}//例5值参传递3+5函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abcij242435obj8return(i+j);}//例5值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abcij2482435c=add(a,b);//例5值参传递obj8函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abc248c=add(a,b);//例5值参传递函数值传递机制#includeiostream.hintadd(int,int);voidmain(){inta,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%d\n,c);}intadd(inti,intj){i++;j++;return(i+j);}abc248输出c=8printf(c=%d\n,c);//例5值参传递函数值传递机制2.指针作函数参数的用法形参指针变量实参是指针变量或地址修改形参并不能改变实参只能通过对形参指针的间接访问修改形参指针指向的对象,实现函数外变量值的修改。辅以变量示意图来理清变量值的变化。…...…...20002010201420042008200C5变量a变量b(main)9变量temp变量y变量x(swap)55959COPY#includestdio.hswap(intx,inty){inttemp;temp=x;x=y;y=temp;}voidmain(){inta,b;scanf(%d,%d,&a,&b);if(ab)swap(a,b);printf(\n%d,%d\n,a,b);}例:函数实现变量值交换值传递运行结果:5,9swap(int*p1,int*p2){intp;p=*p1;*p1=*p2;*p2=p;}main(){inta,b;int*pointer_1,*pointer_2;scanf(%d,%d,&a,&b);pointer_1=&a;pointer_2=&b;if(ab)swap(pointer_1,pointer_2);printf(\n%d,%d\n,a,b);}…...20002010201420042008200C2018201C2020...59ab(main)(swap)p1p2p5920002004COPY5例:函数实现变量值交换地址传递运行结果:95#includestdio.hvoidf(intn,int*r){if(n%3==0)*r=n++/3;elseif(n%5==0)*r=n++/5;}voidmain(){intm=6,p=10;f(m,&p);printf(m=%d\n,m);printf(“p=%d\n,p);}例程序运行后的输出结果是:()6m10p6n&pr*r函数调用时:①m到将值传递给n,n定义为普通变量②p将地址传递给r,r定义为指针变量函数调用函数调用结束27函数调用结束:①传值的m没有改变②传地址的p在函数f中所作的改变保留了下来。*r相当于直接对p操作3.递归函数的调用过程函数的递归调用是嵌套调用的一种特例递归函数有3个要素•递归形式(算法)•递归条件(缩小问题规模)•递归终止条件(基本情况)函数调用用栈管理—栈是先进后出的数据结构函数调用时入栈操作:建立被调用函数的栈空间保护调用函数运行状态和返回地址传递参数控制权交给被调用函数函数返回时出栈操作:返回值保存在临时空间恢复调用函数运行状态释放栈空间根据地址返回调用函数函数嵌套调用嵌套调用示例main函数①调用a函数⑨结束a函数③调用b函数⑦②⑧b函数⑤④⑥intfac(intn){intf;if(n0)printf(n0,dataerror!);elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}递归形式递归终止条件基本情况修改递归条件fac(5)输出fac(5)mainf=fac(4)×5fac函数n=5f=fac(3)×4fac函数n=4f=fac(1)×2fac函数n=2f=fac(2)×3fac函数n=3f=1fac函数n=1fac(1)=1fac(2)=2fac(3)=6fac(4)=24fac(5)=120120例:2010年3月例:反序输出正整数数字串#includestdio.hvoidreverse(intn){printf(%d,n%10);//输出最右边一位数字Öif(n/10!=0)reverse(n/10);//求商

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功