C-程序阅读课件

上传人:文**** 文档编号:240744989 上传时间:2024-05-04 格式:PPTX 页数:44 大小:311.76KB
返回 下载 相关 举报
C-程序阅读课件_第1页
第1页 / 共44页
C-程序阅读课件_第2页
第2页 / 共44页
C-程序阅读课件_第3页
第3页 / 共44页
点击查看更多>>
资源描述
第第2 2讲讲 程序阅读技巧程序阅读技巧多读、读好程序可以:n提高对语法的记忆、理解和使用n提高对常用算法的理解和使用n提升程序设计和编程能力n提高做题效率,如看程序写结果、程序填空、上机程序改错和程序填空一、程序的一般阅读方法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,%dn”,a,b,c,d);程序输出A)0,1,2,0B)0,0,0,3C)1,1,2,0D)编译有错(2)switch结构根据整形表达式的值进行多分支选择case只起语句标号的作用,内部语句按顺序执行case不满足才看defaultcase语句和default语句顺序任意搭配break真正实现多分支例.#includemain()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(%dn,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(%dn,n);break;case2:case4:printf(%dn,n);continue;case0:exit(0);printf(%dn,n);以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行返回操作系统返回操作系统产生随机数产生随机数rand()%100结果是随机数除以100后所得的余数,即限定随机的范围是在099之间;使用rand()函数需添加头文件:#include1.rand()函数函数功能:是一个可以生成随机数的函数随机数函数返回的随机数在0RAND_MAX(32767)之间;2.srand()函数函数功能:用来设置随机数的种子,一般与rand()结合使用。否则直接用rand()的话,每次运行程序的产生的随机数都相同。n=rand()%5;产生04的随机数随机函数介绍随机函数介绍二、包含函数的程序阅读1.函数调用的一般过程在发生函数调用时,函数中的变量函数中的变量(包括形参)并不占用内存。只有发生函数调用时,只有发生函数调用时,才分配内存单元才分配内存单元。将实参的值传递给形参将实参的值传递给形参,类型不一致时,按形参类型自动强制转换。当执行return语句或函数执行完,函数调用返回。被调函数返回时,形参被撤消,不影响实参返回时,形参被撤消,不影响实参的值的值。#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc int a,b,c;/例例 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc24scanf(%d%d,&a,&b);/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc24 c=add(a,b);/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abcij2424 int add(int i,int j)/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制24ij#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc24243 35 5 i+;j+;/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abcij24243 35 5obj return(i+j);/例例5 5 值参传递值参传递3+5函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abcij24243 35 5obj8 return(i+j);/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abcij248243 35 5 c=add(a,b);/例例5 5 值参传递值参传递obj8函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc248 c=add(a,b);/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制#includeint add(int,int);void main()int a,b,c;scanf(%d%d,&a,&b);c=add(a,b);printf(c=%dn,c);int add(int i,int j)i+;j+;return(i+j);abc248输出c=8 printf(c=%dn,c);/例例5 5 值参传递值参传递函数值传递机制函数值传递机制函数值传递机制函数值传递机制2.指针作函数参数的用法形参指针变量实参是指针变量或地址修改形参并不能改变实参只能通过对形参指针的间接访问修改形参指只能通过对形参指针的间接访问修改形参指针指向的对象,实现函数外变量值的修改针指向的对象,实现函数外变量值的修改。辅以变量示意图来理清变量值的变化。辅以变量示意图来理清变量值的变化。.20002010201420042008200C5变量a 变量b(main)9 变量temp 变量y 变量x(swap)559 59COPY#include swap(int x,int y)int temp;temp=x;x=y;y=temp;void main()int a,b;scanf(%d,%d,&a,&b);if(ab)swap(a,b);printf(n%d,%dn,a,b);例:函数实现变量值交换值传递运行结果:运行结果:5,9swap(int *p1,int *p2)int p;p=*p1;*p1=*p2;*p2=p;main()int a,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,%dn,a,b);.20002010201420042008200C2018201C2020.59a b(main)(swap)p1p2p5920002004COPY5例:函数实现变量值交换地址传递运行结果: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,&p);printf(m=%dn,m);printf(“p=%dn,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月例:反序输出正整数数字串例:反序输出正整数数字串#includevoidreverse(intn)printf(%d,n%10);/输出最右边一位数字if(n/10!=0)reverse(n/10);/求商,递归voidmain()intk;printf(Inputaintegernumber(0):n);scanf(%d,&k);reverse(k);printf(n);练习:练习:有以下程序#includefun(intx)if(x/20)fun(x/2);printf(%d,x);main()fun(7);printf(n);程序运行后的输出结果是A)137B)731C)73D)37三、字符串数组1.字符数组与字符指针的区别charstr10=“hello”;h he el ll lo o00hell0 00000c0c1c2c3c4c5c6c7c8c9char*str=“hello”;str char name59=“gain”,“much”,“stronger”,“point”,“bye”;char*name5=“gain”,“much”,“stronger”,“point”,“bye”;g a i n 0s t r o n g e r 0p o i n t 0m u c h 0name0name1name2name3name4b y e 0g a i n 0s t r o n g e r 0p o i n t 0m u c h 0b y e 02.字符串数组的两种实现形式二维数组存储空间固定字符指针数组相当于可变列长的二维数组指针数组元素的作用相当于二维数组的行名但指针数组中元素是指针变量二维数组的行名是地址常量练习:练习:有以下程序fun(charp10)intn=0,i;for(i=0;i7;i+)if(pi0=T)n+;returnn;main()charstr10=“Mon”,“Tue”,“Wed”,“Thu”,”Fri”,”Sat”,”Sun”;printf(“%dn”,fun(str);程序执行后的输出结果是A)1NB)2C)3D)0练习:练习:有以下程序#includemain()voidf(charp10,intn)/*字符串从小到大排序*/chart10;inti,j;for(i=0;in-1;i+)for(j=i+1;j0)strcpy(t,pi);strcpy(pi,pj);strcpy(pj,t);main()charp510=“abc”,”aabdfg”,”abbd”,”dcdbe”,”cd”;f(p,5);printf(“%dn”,strlen(p0);程序运行后的输出结果是A)2B)4C)6D)3练习:练习:有以下程序#includevoidfun(char*p)+p;printf(%sn,*p);main()char*a=Morning,Afternoon,Evening,Night;fun(a);程序的运行结果是A)AfternoonB)fternoonC)MorningD)orning练习:练习:有以下程序#includemain()char*a=abcd,ef,gh,ijk;inti;for(i=0;i4;i+)printf(%c,*ai);程序运行后的输出结果是A)aegiB)dfhkC)dfhkD)abcdefghijk提问与解答环节QuestionsAndAnswers谢谢聆听学习就是为了达到一定目的而努力去干,是为一个目标去战胜各种困难的过程,这个过程会充满压力、痛苦和挫折LearningIsToAchieveACertainGoalAndWorkHard,IsAProcessToOvercomeVariousDifficultiesForAGoal
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!