2

sqrt 関数を完全に実行することができましたが、与えられた疑似コードに基づいてこのコードを正しく記述したかどうかを推測しています。

擬似コードは次のとおりです。

x = 1
repeat 10 times:  x = (x + n / x) / 2
return x.

私が書いたコード、

#include <iostream> 
#include <math.h> 
using namespace std; 

double my_sqrt_1(double n) 
{
double x= 1; x<10; ++x;
return (x+n/x)/2; 
} 
4

3 に答える 3

7

いいえ、あなたのコードは疑似コードに従っていません。たとえば、コード内で何も繰り返していません。これを行うには、ループを追加する必要があります。

#include <iostream> 
#include <math.h> 
using namespace std; 

double my_sqrt_1(double n) 
{
  double x = 1;
  for(int i = 0; i < 10; ++i) // repeat 10 times
    x = (x+n/x)/2;
  return x; 
} 

コードを分析しましょう。

double x = 1;
// Ok, x set to 1


x < 10; 
// This is true, as 1 is less than 10, but it is not used anywhere

++x;
// Increment x - now x == 2

return (x + n / x) / 2 
// return value is always (2 + n / 2) / 2

ループがないため、関数は常に最初の「反復」で戻り値で終了します(2 + n / 2) / 2

于 2013-09-17T22:48:27.193 に答える