下载此beplayapp体育下载

诊断错误及其处理.doc


beplayapp体育下载分类:医学/心理学 | 页数:约21页 举报非法beplayapp体育下载有奖
1 / 21
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该beplayapp体育下载所得收入归上传者、原创者。
  • 3.下载的beplayapp体育下载,不会出现我们的网址水印。
1 / 21 下载此beplayapp体育下载
beplayapp体育下载列表 beplayapp体育下载介绍
一、诊疗错误及其处理
预防程序犯错第一关是编译器。假如碰到约束违规情况或语法错误,编译器最少会生成一个诊疗错误信息。大多数编译器将其诊疗信息分为两类:错误和警告。语法错误很常见,也较易修改。调试程序时首先要更正是语法错误,调试本身是一个艺术,是程序中止时试着去修复一个艺术。
糟糕语法会使编译器混乱,甚至可能达成生成很多错误程度,程序设计者对这种情况不要大惊小怪,应冷静对待,其实很可能仅仅是因为某一个语句引发,比如说遗漏了while循环中一个大括号或语句末尾键入了冒号而非分号等。为此我们应该养成一个****惯,自顶向下修改方法,每次从错误表开头开始,一次修改一、二个错误再编译,或许错误就能降低很多甚至全部语法错误。
模块化程序设计也有利于程序排错。调试一个充满连接和转折、全局变量等程序要比调试一个精心设计模块化程序困难得多。假如程序分成多个模块,各个模块负责程序一个专题功效,一旦识别出问题可能所处模块,就很轻易地经过检验源代码方法来发觉错误,这种策略也称为分治法,因为假如知道了没有问题之处,几乎等同于知道了问题发生地方。
有时我们也能够忽略警告,但这并非是一个良好编程****惯,追踪每个警告原因并认真考虑是否有更稳健方法编写代码能够帮助编程者编写愈加好代码。假如我们只是忽略它,当这些“无害”警告不停累积到一定程度时,可能面临出现混乱危险。
二、差1错误及其处理
在C语言中,一个拥有n个元素数组,不存在下标为n元素,其元素下标许可取值范围为0到n-1。请考察下列一段代码:
int a[10],i; for(i=1; i<=10; i++) a[i]=0;
这段代码本意是要设置数组a中10个元素均为0,却产生了一个出人意料“副作用
”。循环把并不存在a[10]元素设置为0。假如用来编译这段程序编译器根据内存地址递减方法来给变量分配内存,则内存中数组a以后2个字节实际上分配给了整型变量i。此时,原来循环计数器i值为10,循环体内将并不存在a[10]设置为0,实际上却是将计数器i值设置为0,这就陷入了死循环。
这是程序设计中较常见也较难觉察一类错误,被称为“差一错误”(off-by-one error)。“差一错误”也称“栏杆错误”,问题说是:100英尺长围栏每隔10英尺需要一根支撑用栏杆,一共需要多少根呢?假如不假思索,将100除以10得到10,当然这个答案是错误,正确答案应该是11。是否存在部分编程技巧,能够降低这类错误发生可能性呢?“不对称边界”法给程序设计带来便利很显著。在“不对称边界”法中,能够要求数组元素第一个“入界点”(对C语言而言,0就是数组下标第一个“入界点”)和第一个“出界点”(对上述定义数组而言,第一个出界点就是10,它不在数组下标范围之内)。在这种方法下,“出界点”值即是数组长度。
三、“悬挂”else错误及其处理
这个问题并非C语言所独有,也已经为人熟知,但即使是有经验C程序员,也常常在此失误。假如想实现当x 分别是大于0、等于0和小于0时y值分别取得1、0和-1。考虑下面程序片段:
y=0;
if(x>=0)
  if(x>0) y=1;
else y=-1;
然而,这段代码实际上所做和编程者愿望相去甚远。原因在于C语言中有这么规则,else总是和同一对括号内最近未匹配if结合。假如我们根据上面这段程序实际上被实施逻辑来调整代码缩进,大致是这么:
y=0;
if(x>=0)
 if(x>0) y=1;
else y=-1;
也就是说,并非是当x<0时y=-1,而是当x=0时也使y=-1。
处理这一问题我们能够用“封装”措施,将上述程序改为:
y=0;
if(x>=0)
  {if(x>0) y=1;}
else y=-1;
现在,else和第一个if结合,即使它离第二个if更近也是如此,因为此时第二个if已经被括号“封闭”起来了。
四、整数溢出及其处理
C语言为编程者提供了三种不一样长度整数:short int、int和long int,但不管是哪种类型表示整数总有一定范围,越出该范围时称为整数溢出。比如现有算法要求以下:求满足条件1+2+3+…+n≤32767最大整数n,请考察以下程序段:
int n=1,sum=0;
while(sum<=32767) {sum+=n; n++;}
printf(“n=%d\n”,n-1);
乍看该程序时无错误,但实际上,上列程序中while循环是一个无限循环,原因在于int型数表示范围为-32768到+32767,当累加和sum超出32767时,便向高位进位,而对int型数而言,最高位表示符号,故sum超出32767后便得到一个负数,while条件当然满足,从而形成无限循环。此时,最好处理

诊断错误及其处理 来自beplayapp体育下载www.apt-nc.com转载请标明出处.

相关beplayapp体育下载 更多>>
非法内容举报中心
beplayapp体育下载信息
  • 页数21
  • 收藏数0收藏
  • 顶次数0
  • 上传人梅花书斋
  • 文件大小45 KB
  • 时间2021-12-03