算法选择与自我调试_第1页
算法选择与自我调试_第2页
算法选择与自我调试_第3页
算法选择与自我调试_第4页
算法选择与自我调试_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、 自主编译时的重要过程相关知识回顾 计算机解题步骤 1.定义问题、分析问题 输入、输出是什么? 有什么限制条件,关键点 2.设计算法 3.实现程序(coding) 4.运行、调试通过 5.完成文档、维护程序相关知识回顾 算法设计基本原则 抽象 抽象出数学模型 枚举 对输入数据,列出不同情况从而采取不同处理方式,一般用条件结构条件结构实现 归纳 总结出规律从而简化算法,一般用循环结构循环结构实现一、算法选择 阅读题目后,算法随着产生,需要捕捉 用数学模型概括算法 比较不同算法的优劣 确定算法(过程) ,开始编程一、算法选择 阅读题目后,算法随着产生,需要捕捉 以第一题为例问题描述给定一个整数,请

2、将该数各个位上数字反转得到一个新数。样例输入 123 样例输出 321样例输入 -380 样例输出 -83比较不同算法优劣 第一种算法:第一想法:倒叙打印(字符数组) 第二种算法:可以考虑用整形变量储存数据 进行比较(着重考虑可行性以及是否已出错): 用整形变量可以节省空间,但处理过程繁琐,并且运用循环,运行时间长 用字符数组虽占用空间较多,但倒叙输出时简单易行,同时解决正负问题确定算法,开始编程对于本题,选择第一种算法,并考虑特例特例scanf(%s,str); l=strlen(str); flag=0; if (str0=-) printf(-); /判断正负 for (i=l-1;i=

3、1;i-) if (stri!=0) flag=1; /判断末尾0,借助变量flag if (flag=1) printf(%c,stri); if (str0!=-) printf(%cn,str0); 二、自我调试 编程时所遇到的错误 编译错误 链接错误运行错误运行错误 1.编译错误 比较容易发现与解决 学会运用编译工具给出的提示,双击对话框中的错误,会出现提示,指向错误所在行,立即修改 2.链接错误 编译器仍会提示 产生链接错误时,编译一般已经通过。问题一般为两大类: 1.数据库调用错误 2.变量未定义3.运行错误 自主编译程序时的重中之重 遇到运行错误,一般分为两种: 1.无结果。如:

4、死循环 2.结果出错。结果出错样例错误,易修改。 特例错误,不易发现,看到我们最不希望看到的wrong answer。特殊数据的寻找 “零”简单而又复杂的数字 越界常见易忽略问题 输出格式思维定式,查不出来的错误将理论应用于实践 牛顿迭代法求方程的根抽象出数学模型及步骤:迭代、比较、计数设计算法:确定使用循环结构开始编程:1。whlie循环 2。计数器的清零与使用t=1;while (fabs(a*z*z*z+b*z*z+c*z+d)1e-7) t+; z=z-(a*z*z*z+b*z*z+c*z+d)/ (3*a*z*z+2*b*z+c);将理论应用于实践 教室排课抽象数学模型及步骤:比较、

5、计数、 判断是否有解设计算法:确定循环结构开始编程:1。for循环 2。计数器的清零与使用 (如何判断是否有解)if (a!=b) & (b!=c) & (c!=d) & (d!=a) & (a!=c) & (a!=d) & (b!=d) if (numa=i) & (numb=j) & (numc=k) & (numd=l) s+; /程序起始初始化为0 printf(%d %d %d %dn,a,b,c,d); 四重循环确定房间号,省去字典序排序的步骤。循环体语句如下: 本题仍需判断是否有解 if (s=0) prin

6、tf(-1n);ps:1、变量s为计数器,初始化为0。 2、用数据储存房间可容纳人数,并对该数组进行初始化,从而,可用下标代表房间。将理论应用于实践 求子串抽象数学模型及步骤:储存、排序设计算法:二维字符数组开始编程:1。定义二维数组,便于以后使用 2。字符数组的使用 (如何交换字符数组)本题我们分步解决,这个过程就会帮助我们找到特例1.取出每一个字符串 t=0; for (i=0;i=l-k;i+) t+; for (j=0;j=k-1;j+) atj=stri+j; /跳出循环后,t既为子串个数2.比较并交换for (i=1;i=t-1;i+) for (j=1;j0) for (p=0;p=k-1;p+) swap=ajp; ajp=aj+1p; aj+1p=swap; /注意交换问题 3.输出(注意避免越界)for (i=1;i=t;i+) if (i!=t) /注意输出格式 for (j=0;j=k-1;j+) printf(%c,aij); printf( ); else for (j=0;j=k-1;j+) printf(%c,aij); 温馨提示 遇到错误,不要心急,在编译程序的过程中,这

温馨提示

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

评论

0/150

提交评论