下面的程序段是计算两个正整数(一个除数,一个被除数)的商(忽略余数)的一个尝试。方法是计算从被除数中减去除数,直至余数比除数小的次数。例如,7/3,对应于程序的输出应该是2。

img

A:程序中用到的变量分别存储了什么内容?
B:给上面的算法每一条程序代码加上注释语句;
C: 这个程序段能正确完成上面描述的算法吗?如果有错误,请举例说明在什么情况下会出错。
D:如果有错误,请对程序进行修改以便可以正确的实现上面描述的算法。

下面是详解,望采纳


A:

  • Count存储了减去除数的次数。
  • Remainder存储了余数。
  • Dividend存储了被除数。
  • Divisor存储了除数。
  • Quotient存储了商。

B:

// 初始化减去除数的次数为0
Count=0

// 初始化余数为被除数
Remainder=Dividend

// 重复直至余数小于除数
repeat:
  // 余数减去除数
  Remainder=Remainder-Divisor
  // 减去除数的次数加1
  Count=Count+1
until (Remainder<Divisor)

// 商为减去除数的次数
Quotient=Count

C:这个程序段不能正确完成上面描述的算法。例如,对于被除数为7,除数为3的情况,输出的商应该是2,但是由于程序中没有对余数进行处理,所以输出的商实际上是1。

D:如果要修改程序,使得能够正确实现上面描述的算法,我们可以在程序中加入一条语句来处理余数,例如:

// 初始化减去除数的次数为0
Count=0

// 初始化余数为被除数
Remainder=Dividend

// 重复直至余数小于除数
repeat:
  // 余数减去除数
  Remainder=Remainder-Divisor
  // 减去除数的次数加1
  Count=Count+1
until (Remainder<Divisor)

// 如果余数不为0if (Remainder != 0)
{
// 调整商的值,使其包含余数
Quotient = Quotient + (Remainder / Divisor);
}

// 将调整后的商作为结果返回
return Quotient;