已阅读5页,还剩95页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“编程能力”不是听会的、也不是看会的、而是动手动脑练会的!,高级语言程序设计上半部分习题课,主讲教师:贾彩燕计算机与信息技术学院计算机科学与技术系cyjia,课程内容,第一章程序设计和C语言第二章数据对象与计算第三章变量、函数和控制结构第四章基本程序设计技术第五章C程序结构(函数)第六章数组第七章指针第八章文件和输入输出第九章结构和其它数据机制第十章程序开发技术第十一章标准库,重点,控制结构顺序、选择、循环结构函数定义、声明及调用从问题到程序的编程思想程序的函数分解模块化程序设计基本的程序调试技能静态调试、动态调试黑箱测试、白箱测试,难点,循环递归基本输入、输出语句,程序数据结构算法,程序程序规定了计算机执行的动作和动作的顺序。算法:解决问题的方法和步骤算法的几个特性有穷性确定性无二义可执行性有0个或多个输入有0个或多个输出,从问题到程序的程序设计思想也体现了算法的重要性,要点1:运算符及表达式?,已经学习哪几种运算符及表达式?优先级关系?自增、自减运算符算术运算符关系运算符逻辑运算符位运算符条件运算符赋值运算符逗号运算符,要点2:C语言的基本数据类型,C语言的基本数据类型有哪些?什么是常量?如何定义?什么是变量?如何定义?变量的存贮类型有哪几种?auto,register,static,extern变量从作用域的角度分哪几种?全局变量、局部变量,要点3:条件if语句,条件if语句有几种形式?Ifelse和switch开关语句的差别?,要点4:循环语句,循环语句有几种形式?循环结构的三要素是什么?如何从循环中跳出?,要点5:函数,如何定义函数?函数声明的意义及原则?如何调用函数?参数传递和函数返回值过程中类型不匹配时的转换原则?如何理解值参数?,要点6:基本输入输出语句,getchar()putchar()scanf()printf()数的批量输入输出:基本输入输出循环结构,第二章习题讲解,1.指出下面的字符序列不是合法的标识符:,_abcx+-3x1Xf_1_4Eoof_A$*24x_x_2bg1_Iam,2.手工计算下列表达式的值,1)125+01252)0XAF0XFA3)24*3/5+64)36+-(523)/45)35*012+27/4/7*(12-4),210,-75,20,40,350,3.在下列表达式的计算过程中,在哪些地方将发生类型转换,各是从什么类型转换到什么类型,表达式计算的结果是什么?,1)3*(2L+4.5f)012+442)3*(int)sqrt(34)sin(6)*5+0 x2AF3)cos(2.5f+4)6*27L+15262.4L,第三章习题讲解,2.设a=1,b=2,c=3,则u的值为:u=a?b:c;u=(a=2)?b+a:c+a;3.设a=1,b=2,c=0,则下列表达式的值为:aif(zmax)max=z;returnmax;,10.四边形的边长为a,b,c,d及一对对角之各angel,求四边形的面积。,doubleQuaArea(doublea,doubleb,doublec,doubled,doublee)doubles=(a+b+c+d)/2.;doublearea;area=sqrt(s-a)*(s-b)*(s-c)*(s-d)-a*b*c*d*cos(e)*cos(e);returnarea;,有问题吗?,补充题1:用if语句写程序判断是否为闰年,intRuiNian(intyear)if(year%400=0|year%4=0,补充题2.求分段函数,#includeintmain()doublex,y;printf(pleaseinputxn);scanf(%lf,有问题吗?,补充题3,给一个不多于3位的正整数,要求出它是几位数;分别输出每一位数字按新逆序输出各位数字,例如原数为321,应输出123,算法思想:设a是整数变量;如果a999则输入错误如果a=0并且a=10并且a=100并且a99|n=90)printf(ThegradeisA!n);elseif(n=80)printf(ThegradeisB!n);elseif(n=70)printf(ThegradeisC!n);elseif(n=60)printf(ThegradeisD!n);elseprintf(ThegradeisE!n);return0;,intGradeSwitch(intn)if(n99|n0)n=-1;elsen=n/10;switch(n)case-1:printf(Inputerror!n);break;case9:printf(ThegradeisA!n);break;case8:printf(ThegradeisB!n);break;case7:printf(ThegradeisC!n);break;case6:printf(ThegradeisD!n);break;default:printf(ThegradeisE!n);return0;,14.求100以内正整数的立方和,longCubeSum(intn)longsum=0;inti=1;while(i=n)sum=sum+i*i*i;i+;returnsum;,15.写一个函数,取3个参数m,n,k输出m,m+k,m+2k,直至最后一个不大于n的数,voidPrintNum(intm,intn,intk)while(m=1)exp*=x;n-;returnexp;,22.写一个程序打印1至100之间的被6或7整除的数;修改这个程序使得它之打出被6或7之一整除的数。,intmain()inti=0;while(i=100)if(i%6=0,第四章习题讲解,4.写函数计算1!+2!+k!,longSumFactor(intn)inti=1;longf=1,sum=0;while(i=1e-4)sum=sum+1.0/(n*n);n+;printf(Thenumberoftermsare%d.n,n);returnsqrt(6*sum);,12.求利用公式反正弦函数的近似值,doubleasinh(doublex)inti,n=10,sign=-1;doubleterm,sum;term=x;sum=x;for(i=1;i=n;i+)term=term*x*x*(2*i-1)/(2*i);sum+=sign*term/(2*i+1)*(2*i-1);sign=-sign;returnsum;,14.辗转相减求最大公约数,intgcd(intm,intn)if(mn)returngcd(n,m);elseif(m=n)returnm;elsereturngcd(m-n,n);,intgcd1(intm,intn)intr,t;if(mn)t=m;m=n;n=t;if(n=0)returnm;for(r=m-n;r!=0;r=m-n)m=n;n=r;if(mn)t=m;m=n;n=t;returnn;,16.求水仙花数,voidmethod1(void)inti,j,k;for(i=1;i=9;i+)for(j=0;j=10;j+)for(k=0;k=10;k+)if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%d是水仙花数n,i*100+j*10+k);,voidmethod2(void)inti,m,n,l;for(i=100;i=65,补充题4.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。,第五章习题讲解,作业1.读程序写结果#includeintf1(int),f2(int);voidmain()inti;for(i=2;i5;i+)printf(f1(%d)=%dt,i,f1(i);printf(n);for(i=2;ib?a:b;returnc;voidmain()inta=8;printf(“%d”,max(a,b);,结果:8,10.用牛顿迭代法求方法ax3+bx2+cx+d=0在1附近的一个实根,系数a,b,c,d的值依次为1,2,3,4由主函数输入,求出根后由主函数输出。,牛顿迭代法:设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y=f(x0)+f(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f(x0),称x1为r的一次近似值,过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标x2=x1-f(x1)/f(x1)称x2为r的二次近似值,重复以上过程,得r的近似值序列Xn,其中Xn+1=Xn-f(Xn)/f(Xn),称为r的n+1次近似值。,/牛顿迭代法求方程的根#includedoublef(doublea,doubleb,doublec,doubled,doublex);doublefd(doublea,doubleb,doublec,doubled,doublex);doubleroot(doublea,doubleb,doublec,doubled);voidmain()doublea,b,c,d,x;printf(输入方和的系数a,b,c,dn);scanf(%lf,%lf,%lf,%lf,程序代码,doublef(doublea,doubleb,doublec,doubled,doublex)return(a*x*x*x+b*x*x+c*x+d);doublefd(doublea,doubleb,doublec,doubled,doublex)return(3*a*x*x+2*b*x+3);doubleroot(doublea,doubleb,doublec,doubled)doublex1=1.2,x0;intn=0;don+;x0=x1;x1=x0-f(a,b,c,d,x0)/fd(a,b,c,d,x0);while(n=1000|fabs(x1-x0)1e-6);returnx1;,16.写函数intsetbits(intx,intp,intn,inty)求将x的从左数的第p位开始的n位用y的最右边的n位替换,其它位都不变。,p位p-n位0位x1011011010101101,p位n-1位0位y1011011010101101,0000000000111111,(0n),0000000000101101,yintmain()printf(%xn,42);printf(%xn,56);printf(%xn,setbits(42,5,3,56);return0;intsetbits(intx,intp,intn,inty)x=x,高级语言程序设计之程序调试篇,主讲教师:贾彩燕计算机与信息技术学院计算机科学与技术系cyjia,1.怎么调程序?,辅助我们调试程序的工具称为IDE的调试器debugger,如何进行入调试?,方法1.菜单:BuildStartDebugGo方法2.直接点击工具条上的Go按钮方法3.按热键F5,想让程序停下来,怎么办?,设置断点,断点是最常用的技巧。断点是调试器设置的一个代码位置。当程序运行到断点时,程序中断执行,回到调试器。调试时,只有设置了断点并使程序回到调试器,才能对程序进行在线调试。,设置断点方法,可以通过下述方法设置断点方法1简单方法把光标移动到需要设置断点的代码行上,然后按F9快捷键,或者点工具条上的小手图标。方法2功能更强大的一种方法弹出Breakpoints对话框按快捷键CTRL+B或ALT+F9,或者通过菜单Edit/Breakpoints打开。打开后点击Breakat编辑框的右侧的箭头,选择合适的位置信息。一般情况下,直接选择linexxx就足够了,如果想设置不是当前位置的断点,可以选择Advanced,然后填写函数、行号和可执行文件信息。,本课件中的采用范例及流程说明,跟踪执行从程序开始显示菜单执行第3个功能结束运行的全过程,课堂演示程序,设断点,断点标志,断点标志,主函数里只有两条语句,调用菜单函数后返回。,设置断点对话框,去掉断点,把光标移动到给定断点所在的行,再次按F9就可以取消断点。同前面所述,打开Breakpoints对话框后,也可以按照界面提示去掉断点。,2.设了断点以后,如何走程序?,进入调试:1.点此按钮2.按F53.BuildStartDebugGo,黄色右箭头表示当前就要执行的代码行,当前执行中的上下文(语境,函数),自动给出的当前语境下的变量值、返回值观察窗口,Debug工具栏,自定义的观察窗口,可以定义多组,掌握Debug工具条的主要按钮含义,Stopdebugging停止调试,stepinto单步跟进,如果当前语句有函数调用,则单步进入函数执行,否则单步执行完一条语句。,stepover单步执行完当前语句,若当前语句有函数调用,除非被调用函数中有断点,否则不会跟进函数。,stepout执行完当前语句所在函数的执行,返回该函数的调用处。,Runtocursor执行到当前光标处,,注意观察箭头便于理解记忆,常用进程控制快捷键,点击Stepinto后,进入函数Menu()执行,当前就要执行的代码行,语境切换成Menu(),3.如何了解执行状态?,查看数值,VC支持查看变量、表达式和内存的值。所有这些观察都必须是在断点中断的情况下进行。观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。,watch,VC提供一种被称为Watch的机制来观看变量和表达式的值。在断点状态下,在变量上单击右键,选择QuickWatch,就弹出一个对话框,显示这个变量的值。,watch,单击Debug工具条上的Watch按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。注意:这个表达式不能有副作用,例如+运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。,点击Stepover后,开始执行当前函数代码,自动给出当前语境下变量的值,当前执行的代码行,当前程序运行结果?,什么也没有,为什么?因为没有输出任何内容,再次单击Stepover,执行完第一个printf语句,printf语句返回值被自动给出,表示输出了38个字符,执行结果?,执行第1条printf语句以后的输出结果,点击runtocursor,将光标移动到此行,printf语句返回值被自动给出,表示输出了38个字符,执行到此行之前,刚才那几个变量怎么不见了?因为有点远(上下文),只显示执行位置附近的,想看怎么办?,可以在此处增加你想看的东西。基本方法:直接在此处写上(还有别的办法加)你想看的内容的表达式如:想看SeleFun和SelectTime值,想看SelectTime的地址,怎么办,手工增加SeleFun和SelectTime变量,系统会自动给出它们的值,继续以stepover的方式到此语句,注意观察debug工具栏的几个按钮已经变灰,原因是在执行scanf语句,等待你在运行窗口中录入数据,手工在任务条点击显示运行窗口,输入3,当前上下文的一些东西又自动出现了,这个+号表示还可展开查看,各个变量的值发生了变化,继续单击Stepover,执行到ExecuteFunction函数,然后单击Stepinto进入此函数。,单击Stepinto进入ExecuteFunction函数执行代码。,为什么SeleFun的值发生了变化?,原因:语境发生变化了,ExecuteFunction函数中没有这个变量。,点击此处继续执行,当前执行的代码行,等待用户输入,手工在任务条点击显示运行窗口,输入任意正整数如:53,单击Stepinto进入prime函数执行代码。,点击stepout,退出当前函数prime的执行,返回到原调用处,Callstack调用堆栈,想要知道函数被调用的过程怎么办?调
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 德语高频词汇A级词汇测试及解析含答案
- 企业管理-物流企业资金申请报告模板
- 机械设计与制造测试题及答案宝典
- 建筑工程安全知识题库与答案解析
- 建筑材料与构造考试试题及参考答案详解
- 积极心理学心态自测题及答案全解析
- 建筑工程防汛应急措施知识题库及答案
- 电商运营进阶技能测试答案详解
- 公共安全基础知识测试火灾篇答案详解
- 库房安全操作规范与流程培训试题集
- 2025年湖南中考语文试卷和参考答案
- 2025山东滨州无棣县中政土地产业集团有限公司及权属公司招聘工作人员14人考试笔试参考题库附答案解析
- 2025天津政昕资管公司招聘1人笔试考试参考试题附答案解析
- 2025巴彦淖尔市农垦(集团)有限公司招聘37人考试笔试模拟试题及答案解析
- 基于实践案例的高中生物校本课程开发与实施路径探究
- 志愿者入户服务技巧培训
- 2025浙江嘉兴市体育彩票管理服务中心招聘编外人员4人笔试考试备考题库及答案解析
- 中国人寿校招面试题及答案
- “敦煌诗巾”文创AR包装设计的文化转译策略
- 2025年招教考试化学真题及答案
- 雨课堂在线学堂《现代汉语言语交际》单元考核测试答案
评论
0/150
提交评论