#include int getdec(int keta, int* ans); void keyflush(int input); /* ----- 滅入ん ----- */ void main() { int input; float org; float ave; /* 中間値 */ float gosa; /* 誤差 */ float top; /* 上端値 */ float bottom; /* 下端値 */ printf("0 以上の整数を入力:", bottom); if (getdec(8, &input) == -1) { printf("数字を入力して下さい\n"); return; } /* @ */ org = (float) input; top = org; bottom = 0; while (1) { /* A */ ave = (top + bottom) / 2.0; /* B */ gosa = org - (ave * ave); /* C */ if (gosa >= 0) { bottom = ave; } else { top = ave; gosa *= -1; } printf("上端値:[%f] 下端値:[%f] 誤差:[%f]\n", top, bottom, gosa); /* D */ if (gosa < org * 0.001) { break; } } printf("\n平方根:[%f]\n", bottom); } /* ----- 関数の定義 ----- */ int getdec(int keta, int* ans) { int input; /* 1 文字入力の値 */ int sign = 2; /* 最初のループ時:2 整数:0 負数:1 */ int i = 0; /* 繰り返しカウンタ ※ 1 文字読み込んだら増やす */ *ans = 0; /* 文字→数値変換の結果を初期化 */ while ((input = getchar()) != '\n') { i++; /* 繰り返しカウンタを増やす */ if (sign == 2) { /* 符号判定 ※最初の 1 回のみ実行される */ if (input == '-') { /* 負数の時 */ sign = 1; /* 負数フラグ On */ input = getchar(); /* '-' を読み飛ばす */ i++; /* 繰り返しカウンタを増やす */ } else { sign = 0; /* 負数フラグ Off */ } } if (i > keta) { /* 繰り返しの判定 */ break; /* 所定回数に達したら抜ける */ } if (input >= '0' && input <= '9') { *ans = (*ans * 10) + (input - '0'); /* 文字数字を 10 進数に変換 */ } else { keyflush(input); return -1; /* 数字以外の入力ならエラー (-1) */ } } if (sign == 2) { /* 改行だけの入力はエラー */ keyflush(input); return -1; } if (sign) { *ans *= -1; /* 負数の時はそんな感じで */ } keyflush(input); return 0; } void keyflush(int input) { while (input != '\n') { /* 入力バッファのクリア簡易版 */ input = getchar(); } }