C++程序阅读.ppt_第1页
C++程序阅读.ppt_第2页
C++程序阅读.ppt_第3页
C++程序阅读.ppt_第4页
C++程序阅读.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第2讲 程序阅读技巧,多读、读好程序可以:,提高对语法的记忆、理解和使用 提高对常用算法的理解和使用 提升程序设计和编程能力 提高做题效率,如看程序写结果、程序填空、上机程序改错和程序填空,一、程序的一般阅读方法,1.随时记录变量值的变化情况 对于数组、指针和函数参数最好辅以形象的示意图。 步骤: 从main()开始阅读 每定义一个变量就记录其值及含义 根据程序的执行流程,对变量值的变化随时记录更改 直到main()结束,2.对于程序的执行流程要正确把握 if else嵌套结构 switch结构 循环结构 各种结构的嵌套,(1)if else结构 条件的正确解读:非0为真,0为假 如 x=5和x=5不一样 x!=0和x等价 else和前面最近的未配对的if配对,例.有以下程序 main() int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(“%d,%d,%d,%dn”,a,b,c,d); 程序输出 A)0,1,2,0 B) 0,0,0,3 C)1,1,2,0 D)编译有错,(2) switch结构 根据整形表达式的值进行多分支选择 case只起语句标号的作用,内部语句按顺序执行 case不满足才看default case语句和default语句顺序任意 搭配break真正实现多分支,例. #include main() int s; scanf(“%d“, 运行时,若输入1 2 3 4 5 0,则输出结果是 A)6566456 B)66656 C)66666 D)66666560,(3)循环结构 循环要素:循环入口、循环条件、循环体和循环条件的改变。 break和continue的含义 循环的嵌套,例:若变量已正确定义,有以下程序段 i=0; do printf(“%d,“,i);while(i+); printf(“%dn“,i) 其输出结果是 A)0,0 B)0,1 C)1,1 D)程序进入无限循环,例:以下程序段中的变量已正确定义 for(i=0;i4;i+,j+) for(k=1;k3;k+); printf(“*“); 程序段的输出结果是 A)* B)* C)* D)*,练习 2011年3月一 (20)有以下程序段 int i,n; for(i=0;i8;i+) n=rand()%5; switch (n) case 1: case 3:printf(“%dn“,n); break; case 2: case 4:printf(“%dn“,n); continue; case 0:exit(0); printf(“%dn“,n); 以下关于程序段执行情况的叙述,正确的是 A)for循环语句固定执行8次 B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行,返回操作系统,产生随机数,rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在099之间; 使用rand()函数需添加头文件:#include ,1. rand()函数 功能:是一个可以生成随机数的函数随机数,函数返回的随机数在0RAND_MAX(32767)之间;,2. srand()函数 功能:用来设置随机数的种子,一般与rand()结合使用。否则直接用rand()的话,每次运行程序的产生的随机数都相同。,n=rand()%5; 产生04的随机数,随机函数介绍,二、包含函数的程序阅读,1.函数调用的一般过程 在发生函数调用时,函数中的变量(包括形参)并不占用内存。只有发生函数调用时,才分配内存单元。 将实参的值传递给形参,类型不一致时,按形参类型自动强制转换。 当执行return语句或函数执行完,函数调用返回。 被调函数返回时,形参被撤消,不影响实参的值。,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,int a, b, c ;,/ 例 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,scanf(“%d%d“,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,c = add(a,b) ;,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,int add(int i, int j ),/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,2,4, i + + ; j + + ;,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,i,j,2,4,return ( i + j ); ,/ 例5 值参传递,3 + 5,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,i,j,2,4,return ( i + j ); ,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,i,j,8,2,4,c = add(a,b) ;,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,8,c = add(a,b) ;,/ 例5 值参传递,函数值传递机制,#include int add(int , int ) ; void main() int a, b, c ; scanf(“%d%d“, ,8,输出,c = 8,printf(“c=%dn“,c);,/ 例5 值参传递,函数值传递机制,2. 指针作函数参数的用法 形参指针变量 实参是指针变量或地址 修改形参并不能改变实参 只能通过对形参指针的间接访问修改形参指针指向的对象,实现函数外变量值的修改。 辅以变量示意图来理清变量值的变化。,5,9,5,5,9,COPY,#include swap(int x,int y) int temp; temp=x; x=y; y=temp; void main() int a,b; scanf(“%d,%d“, ,例:函数实现变量值交换,值传递,运行结果:5, 9,swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; main() int a,b; int *pointer_1,*pointer_2; scanf(“%d,%d“, ,5,9,(main),5,9,COPY,5,例:函数实现变量值交换,地址传递,运行结果:9 5,#include void f(int n, int *r) if(n%3=0) *r=n+/3; else if(n%5=0) *r=n+/5; void main() int m=6, p=10; f(m, ,例 程序运行后的输出结果是:( ),*r,函数调用时: m到将值传递给n,n定义为普通变量 p将地址传递给r,r定义为指针变量,函数调用,函数调用结束,2,7,函数调用结束: 传值的m没有改变 传地址的p在函数f中所作的改变保留了下来。*r相当于直接对p操作,3. 递归函数的调用过程 函数的递归调用是嵌套调用的一种特例 递归函数有3个要素 递归形式(算法) 递归条件(缩小问题规模) 递归终止条件(基本情况),函数调用用栈管理 栈是先进后出的数据结构,函数调用时入栈操作: 建立被调用函数的栈空间 保护调用函数运行状态和返回地址 传递参数 控制权交给被调用函数,函数返回时出栈操作: 返回值保存在临时空间 恢复调用函数运行状态 释放栈空间 根据地址返回调用函数,函数嵌套调用,嵌套调用示例,main函数,调用a函数,结束,a函数,调用b函数,b函数,int fac(int n) int f; if(n0) printf(“n0,data error!“); else if(n=0 | | n=1) f=1; else f=fac(n-1)*n; return(f); ,递归形式,递归终止条件 基本情况,修改递归条件,fac(5) 输出fac(5),main,f=fac(4)5,fac函数 n=5,f=fac(3)4,fac函数 n=4,f=fac(1)2,fac函数 n=2,f=fac(2)3,fac函数 n=3,f=1,fac函数 n=1,fac(1)=1,fac(2)=2,fac(3)=6,fac(4)=24,fac(5)=120,120,例 : 2010年3月,例:反序输出正整数数字串 #include void reverse ( int n ) printf(“%d“,n%10) ;/输出最右边一位数字 if(n/10!=0) reverse(n/10);/ 求商,递归 void main () int k ; printf(“Input a integer number( 0 ) : n“); scanf(“%d“, ,练习: 有以下程序 #include fun(int x) if(x/20) fun(x/2); printf(“%d “,x); main() fun(7);printf(“n“); 程序运行后的输出结果是 A)1 3 7 B)7 3 1 C)7 3 D)3 7,三、字符串数组,1.字符数组与字符指针的区别 char str10= “hello”;,c0c1c2c3c4c5c6c7c8c9,char *str= “hello”;,str,char name59=“gain”,“much”,“stronger”, “point”,“bye”;,char *name5=“gain”,“much”,“stronger”, “point”,“bye”;,2.字符串数组的两种实现形式,二维数组存储空间固定 字符指针数组相当于可变列长的二维数组,指针数组元素的作用相当于二维数组的行名 但指针数组中元素是指针变量 二维数组的行名是地址常量,练习: 有以下程序 fun(char p10) int n=0,i; for(i=0;i7;i+) if(pi0=T) n+; return n; main() char str10=“Mon”, “Tue”, “Wed”, “Thu”,”Fri”,”Sat”,”Sun”; printf(“%dn”,fun(str); 程序执行后的输出结果是 A)1 N B) 2 C)3 D) 0,练习: 有以下程序 #include main() void f(char p10, int n ) /* 字符串从小到大排序 */ char t10; int i,j; for(i=0;i0) strcpy(t,pi); strcpy(pi,pj); strcpy(pj,t); main() char p510=“abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”; f(p,5); printf(“%dn”,strlen(p0); 程序运行后的输出结果是 A) 2 B) 4 C) 6 D) 3,练习: 有以下程序 #include void fun(char *p) +p; printf(“%sn“,*p); main() char *a=“Morning“,“Afternoon“,“Evening“,“Night“; fun(a); 程序的运行结果是 A)Afternoon B)fternoon C)Morning D)orning,练习: 有以下程序 #include main() char *a=“abcd“,“ef“,“gh“,“ijk“;int i; for(i=0;i4;i+) printf(“%c“,*ai); 程序运行后的输出结果是 A)aegi B)dfhk

温馨提示

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

评论

0/150

提交评论