2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 边界问题

边界问题

时间:2020-10-08 13:01:22

相关推荐

边界问题

边界计算是这样吗?

现在假想有一个数组有十个元素,那么其下标允许的范围是多少呢?

在C中,其下标是0~9的数

所以我们知道在n个元素的数组中,没有下标为n的元素,其下标为0~(n-1)

边界的困惑

int a[10];for(int i=1; i <= 10; i++)a[i]=0;

这样的验证的结果,细细想想,必然是下标越界了,可是

一切又看起来这么合理

这是优势?

C语言的这种设计,也许会让大家在这里懵上一阵子,可是,

这种设计,恰恰是其最大的优势所在。下面我们慢慢讲解。

在很多的的程序设计错误中,“栏杆错误”是最难察觉的一种,就像上面的Code中的一样,看似那么合理,可是就是有越界这样的致命错误。

听题!

100米的路每2米一根栏杆,问要多少根,“显而易见”100/2=50,

当然他是错误的,实际上是51根。

这样思考的方法,最简单的应该是这样,除了右边的2米,其余每一个2米的左边总有一根栏杆,补上这最右边的一根,刚刚好就是51根

所以,在边界的问题中千万不能凭直觉。

又一个问题

如果一个数x,x>=10,x<=19,那么其中的整数有多少个呢?

很显然19-10=18(不过很遗憾,很接近)

可是这样到底是多少呢?17?18?19?

这样我们继续从头开始思考这个问题了

若是有一个数x>=15,x<=15那么x的值有多少个呢?当然你应该自信的大声呐喊 就是15!只有一个!

所以我们要记得,当上下边界重合时只有一个元素

所以现在我们适当外推,从1,到第n个数

那么实际上就是(n-1+1)个元素了,于是乎,所有的重点就在这个+1的上面了,

那么说了这么多,要是一直问这个问题提心吊胆,那这以后还怎么Code啊。

不对称的美丽

当我们把前面的例子改成这个样子呢,x>=10,x<19,这样上边界就没有在我们的范围内了,

问题就得到了竟然的简化

19-10=9 你可以自信的喊出答案了,

这中并不对称的例子,也是如此美丽的

C中的不对称

在C的数组里,元素的下标是从0开始的,这样的优势就是分明显啦

int array[10];for(int i=0; i<10; i++ ) // 1a[i]=0;for(int i=0; i<=9; i++ ) // 2a[i]=0;

上面两个for都是遍历数组进行了初始化的,现在是不是明白优势所在了?

这样for的上界刚好就是10,就是array的元素个数了啊

所以C这样的设计,大大的减少了我们脑筋急转弯的机会,妙哉!

所以日后大家Coding的时候,一定要使用第一种的结构,多方便啊

结语

路漫漫其修远兮,吾将上下而求索

路漫漫其修远兮,吾将上下而求索

路漫漫其修远兮,吾将上下而求索

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。