【发布时间】:2012-09-19 22:44:26
【问题描述】:
我认识的一位大学新生正在学习计算机科学课程的介绍,他要求我帮助他完成一项家庭作业。我通读了几次,我很尴尬地承认我不知道他们要什么。问题来了:
下面给出的是循环的轮廓。完成程序以读取 x 和 y 值,验证它们(通过继续提示用户直到他们输入正确的值),然后运行以使给定的断言始终为真。在程序中必须为真的四个点处包含循环不变断言。除非在给定的 assert(...) 语句中,否则您不能使用乘法运算符。
assert(x>0 && y>0);
while(...)
{
assert(sum == i*(x+1));
...
...
}
assert(sum == y*(x+1));
我不知道什么是循环不变量,所以我用谷歌搜索并阅读了Wikipedia article。从那我收集到的第一个断言语句告诉我,在循环期间我不应该允许 x 和 y 为负数。老实说,我被困在这一点上。有人可以帮我理解他们在这里的要求吗?
【问题讨论】:
-
我猜我是循环变量? x 和 y 的一次读取必须在循环之前。或者是否有 x 和 y 的起始值?总和有初始值吗?
-
如果任何
asserts 评估为假,您的程序将无法运行。将i作为每次循环执行时都会改变的变量。 -
你可能想参考这个帖子...stackoverflow.com/q/3221577/1410711
-
@ChaosCakeCoder 你知道我所知道的关于这个问题的一切。